예제 #1
0
    def __init__(self, parent, IDaide=None, IDfamille=None):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent
        self.IDaide = IDaide
        self.IDfamille = IDfamille

        self.listeInitialeBeneficiaires = []
        self.listeInitialeMontants = []
        self.listeInitialeCombi = []
        self.listeInitialeUnites = []

        # Nom
        self.label_nom = wx.StaticText(self, -1, _(u"Nom de l'aide :"))
        self.ctrl_nom = wx.TextCtrl(self, -1, u"")

        # Généralités
        self.staticbox_generalites_staticbox = wx.StaticBox(
            self, -1, _(u"Caractéristiques"))

        # Activité
        self.label_activite = wx.StaticText(self, -1,
                                            _(u"Activité associée :"))
        self.ctrl_activite = CTRL_Activite(self, IDfamille=self.IDfamille)

        # Caisse
        self.label_caisse = wx.StaticText(self, -1, _(u"Caisse associée :"))
        self.ctrl_caisse = CTRL_Caisse(self, IDfamille=self.IDfamille)

        # Période
        self.label_periode = wx.StaticText(self, -1,
                                           _(u"Période de validité :"))
        self.ctrl_date_debut = CTRL_Saisie_date.Date2(self)
        self.label_date_fin = wx.StaticText(self, -1, _(u"au"))
        self.ctrl_date_fin = CTRL_Saisie_date.Date2(self)

        # Jours
        self.label_scolaires = wx.StaticText(self, -1, _(u"Jours scolaires :"))
        self.ctrl_scolaires = CTRL_Jours(self, "scolaires")
        self.label_vacances = wx.StaticText(self, -1,
                                            _(u"Jours de vacances :"))
        self.ctrl_vacances = CTRL_Jours(self, "vacances")
        self.ctrl_scolaires.SetJoursStr("0;1;2;3;4;5;6")
        self.ctrl_vacances.SetJoursStr("0;1;2;3;4;5;6")

        # Plafonds
        self.label_plafonds = wx.StaticText(self, -1, _(u"Plafonds :"))
        self.checkbox_plafond_montant = wx.CheckBox(self, -1, _(u"Montant :"))
        self.ctrl_plafond_montant = CTRL_Saisie_euros.CTRL(self, size=(65, -1))
        self.checkbox_plafond_quantite = wx.CheckBox(self, -1,
                                                     _(u"Quantité :"))
        self.ctrl_plafond_quantite = wx.SpinCtrl(self,
                                                 -1,
                                                 u"",
                                                 min=0,
                                                 max=1000,
                                                 size=(60, -1))

        # Bénéficiaires
        self.staticbox_beneficiaires_staticbox = wx.StaticBox(
            self, -1, _(u"Bénéficiaires"))
        self.ctrl_beneficiaires = CTRL_Beneficiaires(self,
                                                     IDfamille=self.IDfamille,
                                                     IDactivite=None)
        self.ctrl_beneficiaires.SetMinSize((50, 80))

        # Montants
        self.staticbox_montants_staticbox = wx.StaticBox(
            self, -1, _(u"Montants"))
        self.ctrl_montants = OL_Aides_montants.ListView(
            self,
            id=-1,
            name="OL_montants",
            style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_SINGLE_SEL
            | wx.LC_HRULES | wx.LC_VRULES)
        self.ctrl_montants.SetMinSize((50, 100))
        self.bouton_ajouter = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Ajouter.png"),
                      wx.BITMAP_TYPE_ANY))
        self.bouton_modifier = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Modifier.png"),
                      wx.BITMAP_TYPE_ANY))
        self.bouton_supprimer = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Supprimer.png"),
                      wx.BITMAP_TYPE_ANY))

        # Boutons
        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_importer = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Importer un modèle"),
            cheminImage="Images/32x32/Fleche_bas.png")
        self.bouton_ok = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Ok"), cheminImage="Images/32x32/Valider.png")
        self.bouton_annuler = CTRL_Bouton_image.CTRL(
            self,
            id=wx.ID_CANCEL,
            texte=_(u"Annuler"),
            cheminImage="Images/32x32/Annuler.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_CHECKBOX, self.OnCheckbox_plafond_montant,
                  self.checkbox_plafond_montant)
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckbox_plafond_quantite,
                  self.checkbox_plafond_quantite)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAjouter, self.bouton_ajouter)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonModifier, self.bouton_modifier)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonSupprimer, self.bouton_supprimer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonImporter, self.bouton_importer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok)
        self.Bind(wx.EVT_CHOICE, self.OnChoixActivite, self.ctrl_activite)

        # Importation
        if self.IDaide != None:
            if self.IDfamille == None:
                self.SetTitle(_(u"Modification d'un modèle d'aide"))
            else:
                self.SetTitle(_(u"Modification d'une aide"))
            self.Importation()
        else:
            if self.IDfamille == None:
                self.SetTitle(_(u"Saisie d'un modèle d'aide"))
            else:
                self.SetTitle(_(u"Saisie d'une aide"))
            self.ctrl_montants.MAJ()

        # Init contrôles
        self.OnCheckbox_plafond_montant(None)
        self.OnCheckbox_plafond_quantite(None)

        if self.IDfamille == None:
            self.staticbox_beneficiaires_staticbox.Show(False)
            self.ctrl_beneficiaires.Show(False)
            self.bouton_importer.Show(False)
예제 #2
0
class Dialog(wx.Dialog):
    def __init__(self, parent, IDaide=None, IDfamille=None):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent
        self.IDaide = IDaide
        self.IDfamille = IDfamille

        self.listeInitialeBeneficiaires = []
        self.listeInitialeMontants = []
        self.listeInitialeCombi = []
        self.listeInitialeUnites = []

        # Nom
        self.label_nom = wx.StaticText(self, -1, _(u"Nom de l'aide :"))
        self.ctrl_nom = wx.TextCtrl(self, -1, u"")

        # Généralités
        self.staticbox_generalites_staticbox = wx.StaticBox(
            self, -1, _(u"Caractéristiques"))

        # Activité
        self.label_activite = wx.StaticText(self, -1,
                                            _(u"Activité associée :"))
        self.ctrl_activite = CTRL_Activite(self, IDfamille=self.IDfamille)

        # Caisse
        self.label_caisse = wx.StaticText(self, -1, _(u"Caisse associée :"))
        self.ctrl_caisse = CTRL_Caisse(self, IDfamille=self.IDfamille)

        # Période
        self.label_periode = wx.StaticText(self, -1,
                                           _(u"Période de validité :"))
        self.ctrl_date_debut = CTRL_Saisie_date.Date2(self)
        self.label_date_fin = wx.StaticText(self, -1, _(u"au"))
        self.ctrl_date_fin = CTRL_Saisie_date.Date2(self)

        # Jours
        self.label_scolaires = wx.StaticText(self, -1, _(u"Jours scolaires :"))
        self.ctrl_scolaires = CTRL_Jours(self, "scolaires")
        self.label_vacances = wx.StaticText(self, -1,
                                            _(u"Jours de vacances :"))
        self.ctrl_vacances = CTRL_Jours(self, "vacances")
        self.ctrl_scolaires.SetJoursStr("0;1;2;3;4;5;6")
        self.ctrl_vacances.SetJoursStr("0;1;2;3;4;5;6")

        # Plafonds
        self.label_plafonds = wx.StaticText(self, -1, _(u"Plafonds :"))
        self.checkbox_plafond_montant = wx.CheckBox(self, -1, _(u"Montant :"))
        self.ctrl_plafond_montant = CTRL_Saisie_euros.CTRL(self, size=(65, -1))
        self.checkbox_plafond_quantite = wx.CheckBox(self, -1,
                                                     _(u"Quantité :"))
        self.ctrl_plafond_quantite = wx.SpinCtrl(self,
                                                 -1,
                                                 u"",
                                                 min=0,
                                                 max=1000,
                                                 size=(60, -1))

        # Bénéficiaires
        self.staticbox_beneficiaires_staticbox = wx.StaticBox(
            self, -1, _(u"Bénéficiaires"))
        self.ctrl_beneficiaires = CTRL_Beneficiaires(self,
                                                     IDfamille=self.IDfamille,
                                                     IDactivite=None)
        self.ctrl_beneficiaires.SetMinSize((50, 80))

        # Montants
        self.staticbox_montants_staticbox = wx.StaticBox(
            self, -1, _(u"Montants"))
        self.ctrl_montants = OL_Aides_montants.ListView(
            self,
            id=-1,
            name="OL_montants",
            style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_SINGLE_SEL
            | wx.LC_HRULES | wx.LC_VRULES)
        self.ctrl_montants.SetMinSize((50, 100))
        self.bouton_ajouter = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Ajouter.png"),
                      wx.BITMAP_TYPE_ANY))
        self.bouton_modifier = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Modifier.png"),
                      wx.BITMAP_TYPE_ANY))
        self.bouton_supprimer = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Supprimer.png"),
                      wx.BITMAP_TYPE_ANY))

        # Boutons
        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_importer = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Importer un modèle"),
            cheminImage="Images/32x32/Fleche_bas.png")
        self.bouton_ok = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Ok"), cheminImage="Images/32x32/Valider.png")
        self.bouton_annuler = CTRL_Bouton_image.CTRL(
            self,
            id=wx.ID_CANCEL,
            texte=_(u"Annuler"),
            cheminImage="Images/32x32/Annuler.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_CHECKBOX, self.OnCheckbox_plafond_montant,
                  self.checkbox_plafond_montant)
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckbox_plafond_quantite,
                  self.checkbox_plafond_quantite)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAjouter, self.bouton_ajouter)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonModifier, self.bouton_modifier)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonSupprimer, self.bouton_supprimer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonImporter, self.bouton_importer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok)
        self.Bind(wx.EVT_CHOICE, self.OnChoixActivite, self.ctrl_activite)

        # Importation
        if self.IDaide != None:
            if self.IDfamille == None:
                self.SetTitle(_(u"Modification d'un modèle d'aide"))
            else:
                self.SetTitle(_(u"Modification d'une aide"))
            self.Importation()
        else:
            if self.IDfamille == None:
                self.SetTitle(_(u"Saisie d'un modèle d'aide"))
            else:
                self.SetTitle(_(u"Saisie d'une aide"))
            self.ctrl_montants.MAJ()

        # Init contrôles
        self.OnCheckbox_plafond_montant(None)
        self.OnCheckbox_plafond_quantite(None)

        if self.IDfamille == None:
            self.staticbox_beneficiaires_staticbox.Show(False)
            self.ctrl_beneficiaires.Show(False)
            self.bouton_importer.Show(False)

    def __set_properties(self):
        self.ctrl_nom.SetToolTip(
            wx.ToolTip(
                _(u"Saisissez ici le nom de l'aide (Exemple : 'Bons vacances CAF 2017')"
                  )))
        self.ctrl_activite.SetToolTip(
            wx.ToolTip(_(u"Sélectionnez ici l'activité")))
        self.ctrl_caisse.SetToolTip(
            wx.ToolTip(_(u"Sélectionnez ici une caisse")))
        self.ctrl_date_debut.SetToolTip(
            wx.ToolTip(_(u"Saisissez ici la date de début de validité")))
        self.ctrl_date_fin.SetToolTip(
            wx.ToolTip(_(u"Saisissez ici la date de fin de validité")))
        self.ctrl_beneficiaires.SetToolTip(
            wx.ToolTip(_(u"Cochez ici les bénéficiaires de l'aide")))
        self.checkbox_plafond_montant.SetToolTip(
            wx.ToolTip(_(u"Cliquez ici pour appliquer un montant maximal")))
        self.ctrl_plafond_montant.SetToolTip(
            wx.ToolTip(_(u"Saisissez ici le montant maximal")))
        self.checkbox_plafond_quantite.SetToolTip(
            wx.ToolTip(
                _(u"Cliquez ici pour appliquer un nombre de dates maximal")))
        self.ctrl_plafond_quantite.SetToolTip(
            wx.ToolTip(_(u"Cliquez ici le nombre maximal de dates")))
        self.bouton_ajouter.SetToolTip(
            wx.ToolTip(_(u"Cliquez ici pour ajouter un montant")))
        self.bouton_modifier.SetToolTip(
            wx.ToolTip(
                _(u"Cliquez ici pour modifier le montant sélectionné dans la liste"
                  )))
        self.bouton_supprimer.SetToolTip(
            wx.ToolTip(
                _(u"Cliquez ici pour supprimer le montant sélectionné dans la liste"
                  )))
        self.bouton_aide.SetToolTip(
            wx.ToolTip(_(u"Cliquez ici pour obtenir de l'aide")))
        self.bouton_importer.SetToolTip(
            wx.ToolTip(
                _(u"Cliquez ici pour importer un modèle d'aide prédéfini")))
        self.bouton_ok.SetToolTip(wx.ToolTip(_(u"Cliquez ici pour valider")))
        self.bouton_annuler.SetToolTip(
            wx.ToolTip(_(u"Cliquez ici pour annuler et fermer")))

    def __do_layout(self):
        grid_sizer_base = wx.FlexGridSizer(rows=5, cols=1, vgap=10, hgap=10)

        # Généralites
        staticbox_generalites = wx.StaticBoxSizer(
            self.staticbox_generalites_staticbox, wx.VERTICAL)
        grid_sizer_generalites = wx.FlexGridSizer(rows=7,
                                                  cols=2,
                                                  vgap=10,
                                                  hgap=10)

        # Nom de l'aide
        grid_sizer_generalites.Add(self.label_nom, 0,
                                   wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL,
                                   0)
        grid_sizer_generalites.Add(self.ctrl_nom, 1, wx.EXPAND, 0)

        # Activité
        grid_sizer_generalites.Add(self.label_activite, 0,
                                   wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL,
                                   0)
        grid_sizer_generalites.Add(self.ctrl_activite, 1, wx.EXPAND, 0)

        # Caisse
        grid_sizer_generalites.Add(self.label_caisse, 0,
                                   wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL,
                                   0)
        grid_sizer_generalites.Add(self.ctrl_caisse, 1, wx.EXPAND, 0)

        # Période
        grid_sizer_generalites.Add(self.label_periode, 0,
                                   wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL,
                                   0)
        grid_sizer_periode = wx.FlexGridSizer(rows=1, cols=4, vgap=5, hgap=5)
        grid_sizer_periode.Add(self.ctrl_date_debut, 0, 0, 0)
        grid_sizer_periode.Add(self.label_date_fin, 0,
                               wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_periode.Add(self.ctrl_date_fin, 0, 0, 0)
        grid_sizer_generalites.Add(grid_sizer_periode, 1, wx.ALL | wx.EXPAND,
                                   0)

        # Jours
        grid_sizer_generalites.Add(self.label_scolaires, 0,
                                   wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL,
                                   0)
        grid_sizer_generalites.Add(self.ctrl_scolaires, 0, 0, 0)
        grid_sizer_generalites.Add(self.label_vacances, 0,
                                   wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL,
                                   0)
        grid_sizer_generalites.Add(self.ctrl_vacances, 0, 0, 0)

        # Plafonds
        grid_sizer_generalites.Add(self.label_plafonds, 0,
                                   wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL,
                                   0)
        grid_sizer_plafonds = wx.FlexGridSizer(rows=1, cols=5, vgap=0, hgap=0)
        grid_sizer_plafonds.Add(self.checkbox_plafond_montant, 0,
                                wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_plafonds.Add(self.ctrl_plafond_montant, 0, 0, 0)
        grid_sizer_plafonds.Add((20, 20), 0, 0, 0)
        grid_sizer_plafonds.Add(self.checkbox_plafond_quantite, 0,
                                wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_plafonds.Add(self.ctrl_plafond_quantite, 0, 0, 0)
        grid_sizer_generalites.Add(grid_sizer_plafonds, 0, 0, 0)

        grid_sizer_generalites.AddGrowableCol(1)
        staticbox_generalites.Add(grid_sizer_generalites, 1,
                                  wx.ALL | wx.EXPAND, 5)
        grid_sizer_base.Add(staticbox_generalites, 1,
                            wx.LEFT | wx.RIGHT | wx.TOP | wx.EXPAND, 10)

        # Bénéficiaires
        staticbox_beneficiaires = wx.StaticBoxSizer(
            self.staticbox_beneficiaires_staticbox, wx.VERTICAL)
        staticbox_beneficiaires.Add(self.ctrl_beneficiaires, 0,
                                    wx.ALL | wx.EXPAND, 5)
        grid_sizer_base.Add(staticbox_beneficiaires, 1,
                            wx.LEFT | wx.RIGHT | wx.EXPAND, 10)

        # Montants
        staticbox_montants = wx.StaticBoxSizer(
            self.staticbox_montants_staticbox, wx.VERTICAL)
        grid_sizer_montants = wx.FlexGridSizer(rows=1, cols=2, vgap=5, hgap=5)
        grid_sizer_boutons_montants = wx.FlexGridSizer(rows=3,
                                                       cols=1,
                                                       vgap=5,
                                                       hgap=5)
        grid_sizer_montants.Add(self.ctrl_montants, 1, wx.EXPAND, 0)
        grid_sizer_boutons_montants.Add(self.bouton_ajouter, 0, 0, 0)
        grid_sizer_boutons_montants.Add(self.bouton_modifier, 0, 0, 0)
        grid_sizer_boutons_montants.Add(self.bouton_supprimer, 0, 0, 0)
        grid_sizer_montants.Add(grid_sizer_boutons_montants, 1, wx.EXPAND, 0)
        grid_sizer_montants.AddGrowableRow(0)
        grid_sizer_montants.AddGrowableCol(0)
        staticbox_montants.Add(grid_sizer_montants, 1, wx.ALL | wx.EXPAND, 5)
        grid_sizer_base.Add(staticbox_montants, 1,
                            wx.LEFT | wx.RIGHT | wx.EXPAND, 10)

        # Boutons
        grid_sizer_boutons = wx.FlexGridSizer(rows=1, cols=5, vgap=10, hgap=10)
        grid_sizer_boutons.Add(self.bouton_aide, 0, 0, 0)
        grid_sizer_boutons.Add(self.bouton_importer, 0, 0, 0)
        grid_sizer_boutons.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer_boutons.Add(self.bouton_ok, 0, 0, 0)
        grid_sizer_boutons.Add(self.bouton_annuler, 0, 0, 0)
        grid_sizer_boutons.AddGrowableCol(2)
        grid_sizer_base.Add(grid_sizer_boutons, 1,
                            wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, 10)

        self.SetSizer(grid_sizer_base)
        grid_sizer_base.Fit(self)
        grid_sizer_base.AddGrowableRow(2)
        grid_sizer_base.AddGrowableCol(0)
        self.Layout()
        self.SetMinSize(self.GetSize())
        self.CenterOnScreen()

    def OnChoixActivite(self, event):
        IDactivite = self.ctrl_activite.GetID()
        if self.IDfamille != None:
            self.ctrl_beneficiaires.SetIDactivite(IDactivite)
        self.ctrl_montants.SetIDactivite(IDactivite)

    def OnCheckbox_plafond_montant(self, event):
        if self.checkbox_plafond_montant.GetValue() == True:
            self.ctrl_plafond_montant.Enable(True)
        else:
            self.ctrl_plafond_montant.Enable(False)

    def OnCheckbox_plafond_quantite(self, event):
        if self.checkbox_plafond_quantite.GetValue() == True:
            self.ctrl_plafond_quantite.Enable(True)
        else:
            self.ctrl_plafond_quantite.Enable(False)

    def OnBoutonAjouter(self, event):
        self.ctrl_montants.Ajouter(None)

    def OnBoutonModifier(self, event):
        self.ctrl_montants.Modifier(None)

    def OnBoutonSupprimer(self, event):
        self.ctrl_montants.Supprimer(None)

    def OnBoutonAide(self, event):
        from Utils import UTILS_Aide
        UTILS_Aide.Aide("Caisse")

    def OnBoutonImporter(self, event):
        """ Importer un modèle d'aide """
        import DLG_Choix_modele_aide
        dlg = DLG_Choix_modele_aide.Dialog(self)
        if dlg.ShowModal() == wx.ID_OK:
            self.IDaide = dlg.GetIDaide()
            self.Importation(modele=True)
            self.IDaide = None
        dlg.Destroy()

    def Importation(self, modele=False):
        # Importation des données sur l'aide
        DB = GestionDB.DB()
        req = """SELECT IDaide, IDfamille, IDactivite, nom, date_debut, date_fin, IDcaisse, montant_max, nbre_dates_max, jours_scolaires, jours_vacances
        FROM aides
        WHERE IDaide=%d
        ;""" % self.IDaide
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) == 0:
            DB.Close()
            return None
        IDaide, IDfamille, IDactivite, nom, date_debut, date_fin, IDcaisse, plafond_montant, nbre_plafond_quantite, jours_scolaires, jours_vacances = listeDonnees[
            0]

        # Activité
        self.ctrl_activite.SetID(IDactivite)
        if self.IDfamille != None:
            self.ctrl_beneficiaires.SetIDactivite(IDactivite)
        self.ctrl_montants.SetIDactivite(IDactivite)

        # Caisse
        self.ctrl_caisse.SetID(IDcaisse)

        # Nom
        self.ctrl_nom.SetValue(nom)

        # Dates de validité
        self.ctrl_date_debut.SetDate(date_debut)
        self.ctrl_date_fin.SetDate(date_fin)

        # Jours
        self.ctrl_scolaires.SetJoursStr(jours_scolaires)
        self.ctrl_vacances.SetJoursStr(jours_vacances)

        # Plafonds
        if plafond_montant != None:
            self.ctrl_plafond_montant.SetMontant(plafond_montant)
            self.checkbox_plafond_montant.SetValue(True)
        if nbre_plafond_quantite != None:
            self.ctrl_plafond_quantite.SetValue(nbre_plafond_quantite)
            self.checkbox_plafond_quantite.SetValue(True)

        # Bénéficiaires
        listeIDindividus = []
        if self.IDfamille != None:
            req = """SELECT IDaide_beneficiaire, IDindividu
            FROM aides_beneficiaires
            WHERE IDaide=%d;""" % self.IDaide
            DB.ExecuterReq(req)
            listeBeneficiaires = DB.ResultatReq()
            for IDaide_beneficiaire, IDindividu in listeBeneficiaires:
                listeIDindividus.append(IDindividu)
            self.ctrl_beneficiaires.SetIDcoches(listeIDindividus)
        self.listeInitialeBeneficiaires = list(listeIDindividus)

        # Combinaisons
        req = """SELECT 
        aides_combi_unites.IDaide_combi_unite, aides_combi_unites.IDaide_combi, aides_combi_unites.IDunite,
        aides_combinaisons.IDaide_montant
        FROM aides_combi_unites
        LEFT JOIN aides_combinaisons ON aides_combinaisons.IDaide_combi = aides_combi_unites.IDaide_combi
        LEFT JOIN aides_montants ON aides_montants.IDaide_montant = aides_combinaisons.IDaide_montant
        WHERE aides_montants.IDaide=%d;""" % self.IDaide
        DB.ExecuterReq(req)
        listeUnites = DB.ResultatReq()
        dictCombinaisons = {}
        for IDaide_combi_unite, IDaide_combi, IDunite, IDaide_montant in listeUnites:
            dictUnite = {
                "IDaide_combi_unite": IDaide_combi_unite,
                "IDunite": IDunite
            }
            if dictCombinaisons.has_key(IDaide_montant) == False:
                dictCombinaisons[IDaide_montant] = {}
            if dictCombinaisons[IDaide_montant].has_key(IDaide_combi) == False:
                dictCombinaisons[IDaide_montant][IDaide_combi] = {
                    "IDaide_combi": IDaide_combi,
                    "listeUnites": []
                }
            if dictUnite not in dictCombinaisons[IDaide_montant][IDaide_combi][
                    "listeUnites"]:
                dictCombinaisons[IDaide_montant][IDaide_combi][
                    "listeUnites"].append(dictUnite)

            if IDaide_combi not in self.listeInitialeCombi:
                self.listeInitialeCombi.append(IDaide_combi)
            if IDaide_combi_unite not in self.listeInitialeUnites:
                self.listeInitialeUnites.append(IDaide_combi_unite)

        # Montants
        req = """SELECT IDaide_montant, montant
        FROM aides_montants
        WHERE IDaide=%d;""" % self.IDaide
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        listeMontants = []
        for IDaide_montant, montant in listeDonnees:
            listeCombinaisons = []
            if dictCombinaisons.has_key(IDaide_montant):
                for IDaide_combi, dictCombi in dictCombinaisons[
                        IDaide_montant].iteritems():
                    listeCombinaisons.append(dictCombi)
            dictMontant = {
                "IDaide_montant": IDaide_montant,
                "montant": montant,
                "combinaisons": listeCombinaisons
            }
            listeMontants.append(dictMontant)
        self.listeInitialeMontants = list(listeMontants)

        # Si on vient d'importer un modèle, on supprime les ID de chaque champ
        if modele == True:

            self.listeInitialeMontants = []
            self.listeInitialeCombi = []
            self.listeInitialeUnites = []
            for dictMontant in listeMontants:
                dictMontant["IDaide_montant"] = None
                for dictCombi in dictMontant["combinaisons"]:
                    dictCombi["IDaide_combi"] = None
                    for dictUnite in dictCombi["listeUnites"]:
                        dictUnite["IDaide_combi_unite"] = None

        # Envoie les montants au listCtrl
        self.ctrl_montants.SetListeMontants(listeMontants)

        DB.Close()

    def GetIDaide(self):
        return self.IDaide

    def OnBoutonOk(self, event):
        # Récupération des données

        # Nom
        nom = self.ctrl_nom.GetValue()
        if nom == u"":
            dlg = wx.MessageDialog(
                self, _(u"Vous devez obligatoirement saisir un nom !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_nom.SetFocus()
            return

        # Activité
        IDactivite = self.ctrl_activite.GetID()
        if IDactivite == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement sélectionner une activité !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_activite.SetFocus()
            return

        # Caisse
        IDcaisse = self.ctrl_caisse.GetID()
        ##        if IDcaisse == None :
        ##            dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement saisir une caisse !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
        ##            dlg.ShowModal()
        ##            dlg.Destroy()
        ##            self.ctrl_caisse.SetFocus()
        ##            return

        # Dates de validité
        date_debut = self.ctrl_date_debut.GetDate()
        date_fin = self.ctrl_date_fin.GetDate()
        if date_debut == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement saisir une date de début de validité !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_debut.SetFocus()
            return
        if date_fin == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement saisir une date de fin de validité !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_fin.SetFocus()
            return
        if date_fin < date_debut:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous avez saisi une date de début supérieure à la date de fin !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Jours
        jours_scolaires = self.ctrl_scolaires.GetJoursStr()
        jours_vacances = self.ctrl_vacances.GetJoursStr()

        # Plafonds
        if self.checkbox_plafond_montant.GetValue() == True:
            plafond_montant = self.ctrl_plafond_montant.GetMontant()
            if plafond_montant == None or plafond_montant == 0.0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir un montant plafond !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return
        else:
            plafond_montant = None
        if self.checkbox_plafond_quantite.GetValue() == True:
            nbre_plafond_quantite = int(self.ctrl_plafond_quantite.GetValue())
            if nbre_plafond_quantite == 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir un de nombre de dates maximal !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return
        else:
            nbre_plafond_quantite = None

##        if nbre_plafond_quantite != None :
##            self.ctrl_plafond_quantite.SetValue(str(nbre_plafond_quantite))
##            self.checkbox_plafond_quantite.SetValue(True)

# Bénéficiaires
        listeBeneficiaires = self.ctrl_beneficiaires.GetIDcoches()
        if self.IDfamille != None:
            if len(listeBeneficiaires) == 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous sélectionner au moins un bénéficiaire dans la liste !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return

        # Montants
        listeMontants = self.ctrl_montants.GetListeMontants()
        if len(listeMontants) == 0:
            dlg = wx.MessageDialog(self,
                                   _(u"Vous n'avez saisi aucun montant !"),
                                   _(u"Erreur de saisie"),
                                   wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Sauvegarde de l'aide
        DB = GestionDB.DB()
        listeDonnees = [
            ("IDfamille", self.IDfamille),
            ("IDactivite", IDactivite),
            ("nom", nom),
            ("date_debut", date_debut),
            ("date_fin", date_fin),
            ("IDcaisse", IDcaisse),
            ("montant_max", plafond_montant),
            ("nbre_dates_max", nbre_plafond_quantite),
            ("jours_scolaires", jours_scolaires),
            ("jours_vacances", jours_vacances),
        ]

        if self.IDaide == None:
            self.IDaide = DB.ReqInsert("aides", listeDonnees)
        else:
            DB.ReqMAJ("aides", listeDonnees, "IDaide", self.IDaide)

        # Sauvegarde des utilisateurs
        for IDindividu in listeBeneficiaires:
            if IDindividu not in self.listeInitialeBeneficiaires:
                listeDonnees = [
                    ("IDaide", self.IDaide),
                    ("IDindividu", IDindividu),
                ]
                DB.ReqInsert("aides_beneficiaires", listeDonnees)
        for IDindividu in self.listeInitialeBeneficiaires:
            if IDindividu not in listeBeneficiaires:
                req = """DELETE FROM aides_beneficiaires 
                WHERE IDaide=%d AND IDindividu=%d;""" % (self.IDaide,
                                                         IDindividu)
                DB.ExecuterReq(req)
                DB.Commit()

        # Sauvegarde des montants


##    DONNEES_TEST = {
##    "IDaide_montant" : None,
##    "montant" : 20.0,
##    "combinaisons" : [
##            { "IDaide_combi" : None, "listeUnites" :
##                [
##                {"IDaide_combi_unite" : None, "IDunite" : 35}, # Après-midi
##                {"IDaide_combi_unite" : None, "IDunite" : 33}, # Repas
##                ],
##            },
##            { "IDaide_combi" : None, "listeUnites" :
##                [
##                {"IDaide_combi_unite" : None, "IDunite" : 34}, # Matinée
##                {"IDaide_combi_unite" : None, "IDunite" : 33}, # Repas
##                ],
##            },
##        ],
##    }

        listeIDmontant = []
        listeIDcombi = []
        listeIDunites = []

        for dictMontant in listeMontants:
            IDaide_montant = dictMontant["IDaide_montant"]
            montant = dictMontant["montant"]
            listeCombinaisons = dictMontant["combinaisons"]

            # Sauvegarde des nouveau montants
            if IDaide_montant == None:
                listeDonnees = [
                    ("IDaide", self.IDaide),
                    ("montant", montant),
                ]
                IDaide_montant = DB.ReqInsert("aides_montants", listeDonnees)
            else:
                # Enregistrement d'un montant modifié
                for dictMontantInitial in self.listeInitialeMontants:
                    if dictMontantInitial["IDaide_montant"] == IDaide_montant:
                        if dictMontantInitial["montant"] != montant:
                            DB.ReqMAJ("aides_montants", [
                                ("montant", montant),
                            ], "IDaide_montant", IDaide_montant)
                listeIDmontant.append(IDaide_montant)

            # Sauvegarde des unités de combi
            for dictCombi in listeCombinaisons:
                IDaide_combi = dictCombi["IDaide_combi"]
                listeUnites = dictCombi["listeUnites"]

                # Nouvelles combinaisons
                if IDaide_combi == None:
                    listeDonnees = [
                        ("IDaide_montant", IDaide_montant),
                        ("IDaide", self.IDaide),
                    ]
                    IDaide_combi = DB.ReqInsert("aides_combinaisons",
                                                listeDonnees)
                else:
                    listeIDcombi.append(IDaide_combi)

                # Nouvelles unités
                for dictUnite in listeUnites:
                    IDaide_combi_unite = dictUnite["IDaide_combi_unite"]
                    IDunite = dictUnite["IDunite"]

                    # Nouvelles combinaisons
                    if IDaide_combi_unite == None:
                        listeDonnees = [
                            ("IDunite", IDunite),
                            ("IDaide_combi", IDaide_combi),
                            ("IDaide", self.IDaide),
                        ]
                        IDaide_combi_unite = DB.ReqInsert(
                            "aides_combi_unites", listeDonnees)
                    else:
                        listeIDunites.append(IDaide_combi_unite)

        # Suppression des montants supprimés
        for dictMontantInitial in self.listeInitialeMontants:
            if dictMontantInitial[
                    "IDaide_montant"] not in listeIDmontant and dictMontantInitial[
                        "IDaide_montant"] != None:
                DB.ReqDEL("aides_montants", "IDaide_montant",
                          dictMontantInitial["IDaide_montant"])

        # Suppression des combinaisons supprimées :
        for IDaide_combi in self.listeInitialeCombi:
            if IDaide_combi not in listeIDcombi and IDaide_combi != None:
                DB.ReqDEL("aides_combinaisons", "IDaide_combi", IDaide_combi)

        # Suppression des unités de combi supprimées
        for IDaide_combi_unite in self.listeInitialeUnites:
            if IDaide_combi_unite not in listeIDunites and IDaide_combi_unite != None:
                DB.ReqDEL("aides_combi_unites", "IDaide_combi_unite",
                          IDaide_combi_unite)

        DB.Close()

        # Fermeture de la fenêtre
        self.EndModal(wx.ID_OK)