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.addIndiv(noi, birth, quifoy, quifam) scenario._assignPerson(noi, quifoy = quifoy, foyer = idfoy, quifam = quifam, famille = idfam) 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.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 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 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 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 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()
class Compo(object): def __init__(self): super(Compo, self).__init__() self.scenario = Scenario() def nbRow(self): return self.scenario.nbIndiv() def addPerson(self): noi = self.nbRow() print noi if noi == 1: self.scenario.addIndiv(noi, birth=date(1975, 1, 1), quifoy='conj', quifam='part') else: self.scenario.addIndiv(noi, birth=date(2000, 1, 1), quifoy='pac', quifam='enf') print 'scenario at the end of addPerson' print self.scenario def rmvPerson(self, noi=None): pass def gen_formset(self): scenario = self.scenario print 'scenario at the beginning of gen_formset' print scenario scenario_var_list = [ 'noi', 'birth', 'idfoy', 'quifoy', 'idfam', 'quifam' ] convert = dict(idfoy="noidec", idfam="noichef") zero_start = ["idfoy", "idfam", "noi"] initial = [] for noi, indiv in scenario.indiv.iteritems(): new_form = {} for var in scenario_var_list: if var == "noi": new_form[var] = noi elif var in convert.keys(): new_form[var] = indiv[convert[var]] else: new_form[var] = indiv[var] if var in zero_start: new_form[var] += 1 print 'new_form for noi: ' + str(noi) print new_form initial.append(new_form) ScenarioFormSet = formset_factory(IndividualForm, formset=BaseScenarioFormSet, extra=0) formset = ScenarioFormSet(initial=initial) print formset.is_valid() if True: #formset.is_valid(): for form in formset.forms: print form.is_valid() if form.is_valid(): print form.cleaned_data return formset def set_logement(self, values): ''' Sets logement values in scenario ''' loyer = values['loyer'] so = values['so'] #zone_apl = values['zone_apl'] code_postal = values['code_postal'] self.scenario.menage[0].update({ 'loyer': int(loyer), 'so': int(so), #'zone_apl': int(zone_apl), 'code_postal': int(code_postal) })
class Compo(object): def __init__(self): super(Compo, self).__init__() self.scenario = Scenario() def nbRow(self): return self.scenario.nbIndiv() def addPerson(self): noi = self.nbRow() if noi == 1: self.scenario.addIndiv(noi, birth=date(1975, 1, 1), quifoy='conj', quifam='part') else: self.scenario.addIndiv(noi, birth=date(2000, 1, 1), quifoy='pac', quifam='enf') def rmvPerson(self, noi=None): pass def gen_formset(self): scenario = self.scenario print self.scenario scenario_var_list = [ 'noi', 'birth', 'idfoy', 'quifoy', 'idfam', 'quifam', 'statmarit', 'activite' ] convert = dict(idfoy="noidec", idfam="noichef") zero_start = ["idfoy", "idfam", "noi"] ScenarioFormSet = formset_factory(IndividualForm, formset=BaseScenarioFormSet) data = { 'form-TOTAL_FORMS': scenario.nbIndiv(), 'form-INITIAL_FORMS': scenario.nbIndiv(), 'form-MAX_NUM_FORMS': u'', } for noi, indiv in scenario.indiv.iteritems(): for var in scenario_var_list: if var == "noi": data['form-' + str(noi) + '-' + str(var)] = noi elif var == "quifoy" and indiv[var][:3] == "pac": data['form-' + str(noi) + '-' + str(var)] = "pac" elif var == "quifam" and indiv[var][:3] == "enf": data['form-' + str(noi) + '-' + str(var)] = "enf" elif var in convert.keys(): data['form-' + str(noi) + '-' + str(var)] = indiv[convert[var]] else: data['form-' + str(noi) + '-' + str(var)] = indiv[var] if var in zero_start: data['form-' + str(noi) + '-' + str(var)] += 1 formset = ScenarioFormSet(data=data) return formset def create_declar1(self, idfoy=None): ''' Creates a Declar1Form from compo.scenario data ''' if idfoy is None: idfoy = 0 data = dict(statmarit=2) for indiv in self.scenario.indiv.itervalues(): if indiv['noidec'] == idfoy: if indiv['quifoy'][:3] == 'pac': data['pac'] = indiv['birth'] else: data[indiv['quifoy']] = indiv['birth'] if indiv['quifoy'] == 'vous': data['statmarit'] = int(1) form = Declar1Form(data) for name, field in form.fields.iteritems(): if name in data.keys(): field.required = True else: field.required = False return form def create_declar3(self, idfoy=None, description=None): ''' Creates a Declar3Form from compo.scenario data ''' if idfoy is None: idfoy = 0 if description is None: print 'a description should be provided' # TODO convert this to exception declar = self.scenario.declar[idfoy] cleaned_indiv = extract_foy_indiv(self.scenario, idfoy=idfoy) data = declar def indiv2foy(varname, quifoy): ''' Yields the field of the foy corresponding to the varname ''' convert = foy2of_dict() value = None for field in convert.keys(): if field2quifoy(field) == quifoy: if convert[field] == varname: value = field return value for person in cleaned_indiv.itervalues(): for varname, value in person.iteritems(): quifoy = person['quifoy'] field = indiv2foy(varname, quifoy) data[field] = value form = Declar3Form(data=declar, description=description) return form def create_declar(self, formClass, idfoy=None): ''' Creates a Declar?Forms from compo.scenario data Works for Declar2Form, Declar4Form, Declar5Form ''' if idfoy is None: idfoy = 0 declar = self.scenario.declar[idfoy] form = formClass(data=declar) return form def set_logement(self, values): ''' Sets logement values in scenario ''' code_postal = values['code_postal'] commune, zone_apl = get_zone(code_postal) loyer = values['loyer'] so = values['so'] self.scenario.menage[0].update({ 'loyer': int(loyer), 'so': int(so), 'zone_apl': int(zone_apl), 'code_postal': int(code_postal) }) return commune, code_postal def get_declar1(self, data=None, idfoy=None): ''' Sets declar1 values in compo.scenario from a Delcar1Form ''' if idfoy is None: idfoy = 0 statmarit = data['statmarit'] print self.scenario.indiv for indiv in self.scenario.indiv.itervalues(): if indiv['noidec'] == idfoy: if indiv['quifoy'] in ['vous', 'conj']: indiv['statmarit'] = statmarit # indiv['birth'] = data[indiv['quifoy']] # else: # indiv['birth'] = def get_declar(self, form=None, idfoy=0): ''' Gets declar values in compo.scenario from DeclarForms Works for Declar2Form, Declar4Form, Declar5Form ''' declar = self.scenario.declar[idfoy] data = form.cleaned_data for field, value in data.iteritems(): declar[field] = value def get_declar3(self, form=None, idfoy=0): ''' Gets declar values in compo.scenario from Declar3Form ''' declar = self.scenario.declar[idfoy] # Build a dict of individulas present on the declar cleaned_indiv = extract_foy_indiv(self.scenario, idfoy=idfoy) convert = foy2of_dict() data = form.cleaned_data for field, value in data.iteritems(): if field in convert.keys(): quifoy = field2quifoy(field) varname = convert[field] for person in cleaned_indiv.itervalues(): if person['quifoy'] == quifoy: person[varname] = value else: declar[field] = value
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 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})
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})
# 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()
class Compo(object): def __init__(self): super(Compo, self).__init__() self.scenario = Scenario() def nbRow(self): return self.scenario.nbIndiv() def addPerson(self): noi = self.nbRow() print noi if noi == 1: self.scenario.addIndiv(noi, birth = date(1975,1,1), quifoy = 'conj', quifam = 'part') else: self.scenario.addIndiv(noi, birth = date(2000,1,1), quifoy = 'pac' , quifam = 'enf') print 'scenario at the end of addPerson' print self.scenario def rmvPerson(self, noi = None): pass def gen_formset(self): scenario = self.scenario print 'scenario at the beginning of gen_formset' print scenario scenario_var_list = ['noi', 'birth', 'idfoy', 'quifoy', 'idfam', 'quifam'] convert = dict(idfoy = "noidec", idfam ="noichef") zero_start = [ "idfoy", "idfam", "noi"] initial = [] for noi, indiv in scenario.indiv.iteritems(): new_form = {} for var in scenario_var_list: if var == "noi": new_form[var] = noi elif var in convert.keys(): new_form[var] = indiv[convert[var]] else: new_form[var] = indiv[var] if var in zero_start: new_form[var] += 1 print 'new_form for noi: ' + str(noi) print new_form initial.append(new_form) ScenarioFormSet = formset_factory(IndividualForm, formset = BaseScenarioFormSet, extra=0) formset = ScenarioFormSet(initial=initial) print formset.is_valid() if True: #formset.is_valid(): for form in formset.forms: print form.is_valid() if form.is_valid(): print form.cleaned_data return formset def set_logement(self, values): ''' Sets logement values in scenario ''' loyer = values['loyer'] so = values['so'] #zone_apl = values['zone_apl'] code_postal = values['code_postal'] self.scenario.menage[0].update({'loyer': int(loyer), 'so': int(so), #'zone_apl': int(zone_apl), 'code_postal': int(code_postal)})
class Compo(object): def __init__(self): super(Compo, self).__init__() self.scenario = Scenario() def nbRow(self): return self.scenario.nbIndiv() def addPerson(self): noi = self.nbRow() if noi == 1: self.scenario.addIndiv(noi, birth = date(1975,1,1), quifoy = 'conj', quifam = 'part') else: self.scenario.addIndiv(noi, birth = date(2000,1,1), quifoy = 'pac' , quifam = 'enf') def rmvPerson(self, noi = None): pass def gen_formset(self): scenario = self.scenario print self.scenario scenario_var_list = ['noi', 'birth', 'idfoy', 'quifoy', 'idfam', 'quifam', 'statmarit', 'activite'] convert = dict(idfoy = "noidec", idfam ="noichef") zero_start = [ "idfoy", "idfam", "noi"] ScenarioFormSet = formset_factory(IndividualForm, formset = BaseScenarioFormSet) data = {'form-TOTAL_FORMS': scenario.nbIndiv(), 'form-INITIAL_FORMS': scenario.nbIndiv(), 'form-MAX_NUM_FORMS': u'',} for noi, indiv in scenario.indiv.iteritems(): for var in scenario_var_list: if var == "noi": data['form-' + str(noi)+'-' + str(var)] = noi elif var == "quifoy" and indiv[var][:3] == "pac": data['form-' + str(noi)+'-' + str(var)] = "pac" elif var == "quifam" and indiv[var][:3] == "enf": data['form-' + str(noi)+'-' + str(var)] = "enf" elif var in convert.keys(): data['form-' + str(noi)+'-' + str(var)] = indiv[convert[var]] else: data['form-' + str(noi)+'-' + str(var)] = indiv[var] if var in zero_start: data['form-' + str(noi)+'-' + str(var)] += 1 formset = ScenarioFormSet(data=data) return formset def create_declar1(self, idfoy = None): ''' Creates a Declar1Form from compo.scenario data ''' if idfoy is None: idfoy = 0 data = dict(statmarit=2) for indiv in self.scenario.indiv.itervalues(): if indiv['noidec'] == idfoy: if indiv['quifoy'][:3] == 'pac': data['pac'] = indiv['birth'] else: data[indiv['quifoy']] = indiv['birth'] if indiv['quifoy'] == 'vous': data['statmarit'] = int(1) form = Declar1Form(data) for name, field in form.fields.iteritems(): if name in data.keys(): field.required = True else: field.required = False return form def create_declar3(self, idfoy = None, description=None): ''' Creates a Declar3Form from compo.scenario data ''' if idfoy is None: idfoy = 0 if description is None: print 'a description should be provided' # TODO convert this to exception declar = self.scenario.declar[idfoy] cleaned_indiv = extract_foy_indiv(self.scenario, idfoy=idfoy) data = declar def indiv2foy(varname, quifoy): ''' Yields the field of the foy corresponding to the varname ''' convert = foy2of_dict() value = None for field in convert.keys(): if field2quifoy(field) == quifoy: if convert[field] == varname: value = field return value for person in cleaned_indiv.itervalues(): for varname, value in person.iteritems(): quifoy = person['quifoy'] field = indiv2foy(varname, quifoy) data[field] = value form = Declar3Form(data=declar, description=description) return form def create_declar(self, formClass, idfoy = None): ''' Creates a Declar?Forms from compo.scenario data Works for Declar2Form, Declar4Form, Declar5Form ''' if idfoy is None: idfoy = 0 declar = self.scenario.declar[idfoy] form = formClass(data=declar) return form def set_logement(self, values): ''' Sets logement values in scenario ''' code_postal = values['code_postal'] commune, zone_apl = get_zone(code_postal) loyer = values['loyer'] so = values['so'] self.scenario.menage[0].update({'loyer': int(loyer), 'so': int(so), 'zone_apl': int(zone_apl), 'code_postal': int(code_postal)}) return commune, code_postal def get_declar1(self, data = None, idfoy = None): ''' Sets declar1 values in compo.scenario from a Delcar1Form ''' if idfoy is None: idfoy = 0 statmarit = data['statmarit'] print self.scenario.indiv for indiv in self.scenario.indiv.itervalues(): if indiv['noidec'] == idfoy: if indiv['quifoy'] in ['vous', 'conj']: indiv['statmarit'] = statmarit # indiv['birth'] = data[indiv['quifoy']] # else: # indiv['birth'] = def get_declar(self, form = None, idfoy = 0): ''' Gets declar values in compo.scenario from DeclarForms Works for Declar2Form, Declar4Form, Declar5Form ''' declar = self.scenario.declar[idfoy] data = form.cleaned_data for field, value in data.iteritems(): declar[field] = value def get_declar3(self, form = None, idfoy = 0): ''' Gets declar values in compo.scenario from Declar3Form ''' declar = self.scenario.declar[idfoy] # Build a dict of individulas present on the declar cleaned_indiv = extract_foy_indiv(self.scenario, idfoy= idfoy) convert = foy2of_dict() data = form.cleaned_data for field, value in data.iteritems(): if field in convert.keys(): quifoy = field2quifoy(field) varname = convert[field] for person in cleaned_indiv.itervalues(): if person['quifoy'] == quifoy: person[varname] = value else: declar[field] = value
def set_scenario(self): self.scenario = Scenario()