def menage(request): scenario = request.session.get('scenario', default=None) if scenario == None: print 'scenario is None' scenario = Scenario() if request.method == 'POST': if 'reset' in request.POST: del request.session['scenario'] scenario = Scenario() formset = scenario2formset(scenario) request.session['scenario'] = scenario else: ScenarioFormSet = formset_factory(IndividualForm, formset=BaseScenarioFormSet, extra=0) formset = ScenarioFormSet(request.POST) # for form in formset.cleaned_data: # print form if formset.is_valid(): scenario = formset2scenario(formset) if 'add' in request.POST: scenario.addIndiv(scenario.nbIndiv(), datetime(1975, 1, 1).date(), 'vous', 'chef') if 'remove' in request.POST: scenario.rmvIndiv(scenario.nbIndiv() - 1) # print scenario formset = scenario2formset(scenario) request.session['scenario'] = scenario if 'submit' in request.POST: scenario.genNbEnf() ok = True ok = build_simu(scenario) print 'is it ok ? :', ok #return (request, 'simulation/menage.html', {'formset' : formset}) else: formset = scenario2formset(scenario) request.session['scenario'] = scenario return render(request, 'simulation/menage.html', {'formset': formset})
def formset2scenario(formset): scenario = Scenario() for form in formset.cleaned_data: noi, birth, quifoy, quifam = form['noi'] - 1, form['birth'], form[ 'quifoy'], form['quifam'] scenario.addIndiv(noi, birth, quifoy, quifam) return scenario
def get_scenario(self): scenario = Scenario() for form in self.cleaned_data: noi, birth = form['noi'] - 1, form['birth'] idfoy, quifoy, idfam, quifam = form['idfoy'] - 1, form[ 'quifoy'], form['idfam'] - 1, form['quifam'] scenario.indiv.update({ noi: { 'birth': birth, 'inv': 0, 'alt': 0, 'activite': 0, 'quifoy': quifoy, 'quifam': quifam, 'noidec': idfoy, 'noichef': idfam, 'noipref': 0, 'statmarit': 2 } }) scenario._assignPerson(noi, quifoy=quifoy, foyer=idfoy, quifam=quifam, famille=idfam) scenario.updateMen() return scenario
def get_scenario(self): scenario = Scenario() for form in self.cleaned_data: noi, birth = form['noi'] - 1, form['birth'] idfoy, quifoy, idfam, quifam = form['idfoy'] - 1, form[ 'quifoy'], form['idfam'] - 1, form['quifam'] scenario.addIndiv(noi, birth, quifoy, quifam) scenario._assignPerson(noi, quifoy=quifoy, foyer=idfoy, quifam=quifam, famille=idfam) return scenario
def extract_foy_indiv(scenario=None, idfoy=None): ''' Build a dict of individuals present on the declar ''' # TODO write warnings/exceptions if scenario == None: scenario = Scenario() if idfoy == None: idfoy = 0 indiv = scenario.indiv cleaned_indiv = dict() for person in indiv: if indiv[person]['noidec'] == idfoy: cleaned_indiv[person] = indiv[person] return cleaned_indiv
def set_scenario(self, scenario=None): if scenario is None: self.scenario = Scenario() else: self.scenario = scenario
def __init__(self): super(Compo, self).__init__() self.scenario = Scenario()
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.dirty = False self.isLoaded = False self.calibration_enabled = False self.aggregate_enabled = False self.setObjectName("MainWindow") self.resize(800, 600) self.setWindowTitle("OpenFisca") app_icon = get_icon('OpenFisca22.png') self.setWindowIcon(app_icon) self.setLocale(QLocale(QLocale.French, QLocale.France)) self.setDockOptions(QMainWindow.AllowNestedDocks | QMainWindow.AllowTabbedDocks | QMainWindow.AnimatedDocks) self.centralwidget = QWidget(self) self.gridLayout = QGridLayout(self.centralwidget) self.setCentralWidget(self.centralwidget) self.centralwidget.hide() self.statusbar = QStatusBar(self) self.statusbar.setObjectName("statusbar") self.setStatusBar(self.statusbar) # Showing splash screen pixmap = QPixmap(':/images/splash.png', 'png') self.splash = QSplashScreen(pixmap) font = self.splash.font() font.setPixelSize(10) self.splash.setFont(font) self.splash.show() self.splash.showMessage( "Initialisation...", Qt.AlignBottom | Qt.AlignCenter | Qt.AlignAbsolute, QColor(Qt.black)) # if CONF.get('main', 'current_version', '') != __version__: # CONF.set('main', 'current_version', __version__) # Execute here the actions to be performed only once after # each update (there is nothing there for now, but it could # be useful some day... self.scenario = Scenario() # Preferences self.general_prefs = [SimConfigPage, PathConfigPage, CalConfigPage] self.oldXAXIS = 'sal' self.reforme = False self.apply_settings() # Dockwidgets creation self.splash.showMessage( "Creating widgets...", Qt.AlignBottom | Qt.AlignCenter | Qt.AlignAbsolute, QColor(Qt.black)) self.create_dockwidgets() self.populate_mainwidow() ################################################################# ## Menu initialization ################################################################# self.splash.showMessage( "Creating menubar...", Qt.AlignBottom | Qt.AlignCenter | Qt.AlignAbsolute, QColor(Qt.black)) # Menu Fichier self.file_menu = self.menuBar().addMenu("Fichier") action_export_png = create_action(self, 'Exporter le graphique', icon='document-save png.png', triggered=self._graph.save_figure) action_export_csv = create_action(self, 'Exporter la table', icon='document-save csv.png', triggered=self._table.saveCsv) action_pref = create_action(self, u'Préférences', QKeySequence.Preferences, icon='preferences-desktop.png', triggered=self.edit_preferences) action_quit = create_action(self, 'Quitter', QKeySequence.Quit, icon='process-stop.png', triggered=SLOT('close()')) file_actions = [ action_export_png, action_export_csv, None, action_pref, None, action_quit ] add_actions(self.file_menu, file_actions) # Menu Edit self.edit_menu = self.menuBar().addMenu(u"Édition") action_copy = create_action(self, 'Copier', QKeySequence.Copy, triggered=self.global_callback, data='copy') edit_actions = [None, action_copy] add_actions(self.edit_menu, edit_actions) # Menu Simulation self.simulation_menu = self.menuBar().addMenu(u"Simulation") self.action_refresh_bareme = create_action( self, u'Calculer barèmes', shortcut='F9', icon='calculator_green.png', triggered=self.refresh_bareme) self.action_refresh_aggregate = create_action( self, u'Calculer aggrégats', shortcut='F10', icon='calculator_blue.png', triggered=self.refresh_aggregate) self.action_calibrate = create_action(self, u'Caler les poids', shortcut='CTRL+K', icon='scale22.png', triggered=self.calibrate) action_bareme = create_action(self, u'Barème', icon='bareme22.png', toggled=self.modeBareme) action_cas_type = create_action(self, u'Cas type', icon='castype22.png', toggled=self.modeCasType) action_mode_reforme = create_action( self, u'Réforme', icon='comparison22.png', toggled=self.modeReforme, tip= u"Différence entre la situation simulée et la situation actuelle") mode_group = QActionGroup(self) mode_group.addAction(action_bareme) mode_group.addAction(action_cas_type) self.mode = 'bareme' action_bareme.trigger() simulation_actions = [ self.action_refresh_bareme, self.action_refresh_aggregate, None, self.action_calibrate, None, action_bareme, action_cas_type, None, action_mode_reforme ] add_actions(self.simulation_menu, simulation_actions) # Menu Help help_menu = self.menuBar().addMenu("&Aide") action_about = create_action(self, u"&About OpenFisca", triggered=self.helpAbout) action_help = create_action(self, "&Aide", QKeySequence.HelpContents, triggered=self.helpHelp) help_actions = [action_about, action_help] add_actions(help_menu, help_actions) # Display Menu view_menu = self.createPopupMenu() view_menu.setTitle("&Affichage") self.menuBar().insertMenu(help_menu.menuAction(), view_menu) # Toolbar self.main_toolbar = self.create_toolbar(u"Barre d'outil", 'main_toolbar') toolbar_actions = [ action_export_png, action_export_csv, None, self.action_refresh_bareme, self.action_refresh_aggregate, None, self.action_calibrate, None, action_bareme, action_cas_type, None, action_mode_reforme ] add_actions(self.main_toolbar, toolbar_actions) self.connect(self._menage, SIGNAL('changed()'), self.changed_bareme) self.connect(self._parametres, SIGNAL('changed()'), self.changed_param) self.connect(self._aggregate_output, SIGNAL('calculated()'), self.calculated) self.connect(self, SIGNAL('weights_changed()'), self.refresh_aggregate) self.connect(self, SIGNAL('bareme_only()'), self.switch_bareme_only) # Window settings self.splash.showMessage( "Restoring settings...", Qt.AlignBottom | Qt.AlignCenter | Qt.AlignAbsolute, QColor(Qt.black)) settings = QSettings() size = settings.value('MainWindow/Size', QVariant(QSize(800, 600))).toSize() self.resize(size) position = settings.value('MainWindow/Position', QVariant(QPoint(0, 0))).toPoint() self.move(position) self.restoreState(settings.value("MainWindow/State").toByteArray()) self.splash.showMessage( "Loading survey data...", Qt.AlignBottom | Qt.AlignCenter | Qt.AlignAbsolute, QColor(Qt.black)) self.enable_aggregate(True) self.refresh_bareme() self.isLoaded = True self.splash.hide()
def set_scenario(self): self.scenario = Scenario()
# options= options, # admin_opts=admin_opts, # app_label='mahdi', # module='mahdi.no_models' # ) # # class TempForm(ModelForm): # class Meta: # model = self.model # # print self.create_fields_dict() # form = TempForm(data=self.create_fields_dict()) # print 'is valid :' , form.is_valid() # form.save() scenario = Scenario() simu = Simu(scenario=scenario) simu.build() cht = simu.waterfall_chart() print cht from mahdi.utils import MyNode from mahdi.models import Node #x = MyNode() #x.init_from_OutNode(simu.data_courant) #x.remove_null_children() #print x.code, x.vals, x.is_null #print x #d = x.create_fields_dict()
def graphBR(request): #data = request.session['data'] scenario = Scenario() nmen = 11 simu = Simu(scenario=scenario, nmen=nmen) simu.build() data = simu.data_courant if True: # if self.mode == 'bareme': data['salsuperbrut'].setHidden() data['salbrut'].setHidden() data['chobrut'].setHidden() data['rstbrut'].setHidden() codes = [] data.setLeavesVisible() def set_visible_level(node, level): if level == 0: node.visible = True else: node.visible = False for child in node.children: set_visible_level(child, level - 1) set_visible_level(data, 5) Barem.objects.all().delete() def create_BaremForm(node): ''' Creates waterfall node Forms ''' for child in node.children: create_BaremForm(child) index = 0 if (node.code != 'root') and node.visible: for val in node.vals: index += 1 # r,g,b = node.color form = BaremForm(data={ 'code': node.code, 'val': val, 'desc': node.desc, 'x': index }) form.save() codes.append(node.code) create_BaremForm(data) print codes # openfisca_data = DataPool( # series= # [{'options': { # 'source': Barem.objects.all(), # 'categories': ['x']}, # 'terms': [ # 'val', # 'code', # 'desc','x']} # ]) # cht = Chart( # datasource = openfisca_data, # series_options = # [{'options':{ # 'type': 'area', # 'stacking': 'normal', # }, # # 'terms':{ # 'x': [ {'val': {}, # } # ] # }}], # chart_options = # {'title' : { # 'text': 'Openfisca'}, # 'xAxis' : {'categories': codes} # } # ) def sortx(x): y = x[0][0] print y return int(round(float(y) * 1e6)) openfisca_data = PivotDataPool(series=[{ 'options': { 'source': Barem.objects.all(), 'categories': ['x'], 'legend_by': 'code' }, 'terms': { 'val': Sum('val') }, }], sortf_mapf_mts=(sortx, lambda x: x, True)) #Step 2: Create the Chart object print openfisca_data.series cht = PivotChart(datasource=openfisca_data, series_options=[{ 'options': { 'type': 'area', 'stacking': 'normal', }, 'terms': [ { 'val': {} }, ] }], chart_options={ 'title': { 'text': 'Openfisca' }, 'xAxis': { 'categories': codes } }) #Step 3: Send the chart object to the template. return render_to_response('mahdi/chartit_graph.html', {'chart': cht})
def graph(request): ## TODO use low as in http://stackoverflow.com/questions/7969300/highcharts-column-chart ## http://fiddle.jshell.net/delfino4747/M8npu/10/ #data = request.session['data'] scenario = Scenario() simu = Simu(scenario=scenario, nmen=1) simu.build() data = simu.data_courant codes = [] data.setLeavesVisible() Node.objects.all().delete() def create_waterfall_NodeForm(node, prv): ''' Creates waterfall node Forms ''' if node.code == 'nivvie': return prev = prv + 0 val = node.vals[0] bot = prev for child in node.children: create_waterfall_NodeForm(child, prev) prev += child.vals[0] if (val != 0) and (node.visible) and (node.code != 'root'): # r,g,b = node.color print node.code form = NodeForm(data={ 'code': node.code, 'val': val, 'desc': node.desc, 'low': bot }) form.save() codes.append(node.code) prv = 0 create_waterfall_NodeForm(data, prv) print codes openfisca_data = DataPool(series=[{ 'options': { 'source': Node.objects.all() }, 'terms': ['low', 'val', 'code', 'desc'] }]) #Step 2: Create the Chart object cht = Chart( datasource=openfisca_data, series_options=[{ 'options': { 'type': 'column', 'allowPointSelect': 'true' }, 'terms': { 'code': ['low', 'val'] } # {}} , # {'start': {'showInLegend': False, # 'color' : 'transparent', # 'shadow' : False, # 'borderColor' : 'transparent', # 'borderWidth' : 0, # #'visible' : False, # }} }], chart_options={ 'title': { 'text': 'Openfisca' }, }) #Step 3: Send the chart object to the template. return render_to_response('mahdi/chartit_graph.html', {'chart': cht})