Example #1
0
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
Example #2
0
 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
Example #3
0
 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
Example #4
0
    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
Example #5
0
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
Example #6
0
    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
Example #7
0
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})
Example #8
0
 def set_scenario(self, scenario=None):
     if scenario is None:
         self.scenario = Scenario()
     else:
         self.scenario = scenario
Example #9
0
 def __init__(self):
     super(Compo, self).__init__()
     self.scenario = Scenario()
Example #10
0
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)
        })
Example #11
0
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
Example #12
0
    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()
Example #13
0
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})
Example #14
0
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})
Example #15
0
#                            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()
Example #16
0
 def __init__(self):
     super(Compo, self).__init__()
     self.scenario = Scenario()
Example #17
0
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)})
Example #18
0
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
Example #19
0
 def set_scenario(self):
     self.scenario = Scenario()