Пример #1
0
class Page(wx.Panel):
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.TAB_TRAVERSAL
        wx.Panel.__init__(self, *args, **kwds)

        self.dictTypes = {}

        self.sizer_dates_staticbox = wx.StaticBox(self, -1, "Dates du contrat")
        self.sizer_caract_staticbox = wx.StaticBox(
            self, -1, _(u"Caractéristiques générales"))
        self.sizer_essai_staticbox = wx.StaticBox(self, -1,
                                                  _(u"Période d'essai"))
        self.label_titre = wx.StaticText(
            self, -1, _(u"2. Caractéristiques générales du contrat"))
        self.label_intro = wx.StaticText(
            self, -1,
            _(u"Saisissez les caractéristiques générales du contrat :"))

        self.label_type = wx.StaticText(self, -1, "Type de contrat :")
        self.choice_type = wx.Choice(self, -1, choices=[])
        self.Importation_Type()
        self.bouton_type = wx.Button(self, -1, "...", style=wx.BU_EXACTFIT)

        self.label_class = wx.StaticText(self, -1, "Classification :")
        self.choice_class = wx.Choice(self, -1, choices=[])
        self.Importation_classifications()
        self.bouton_class = wx.Button(self, -1, "...", style=wx.BU_EXACTFIT)

        self.label_valpoint = wx.StaticText(self, -1, "Valeur du point :")
        self.choice_valpoint = wx.Choice(self, -1, choices=[])
        self.Importation_valPoint()
        self.bouton_valpoint = wx.Button(self, -1, "...", style=wx.BU_EXACTFIT)

        self.label_date_debut = wx.StaticText(self, -1, "       A partir du :")
        self.datepicker_date_debut = DatePickerCtrl(self,
                                                    -1,
                                                    style=DP_DROPDOWN)
        self.label_date_fin = wx.StaticText(self, -1, "Jusqu'au :")
        self.datepicker_date_fin = DatePickerCtrl(self, -1, style=DP_DROPDOWN)
        self.datepicker_date_debut.Enable(False)
        self.datepicker_date_fin.Enable(False)

        self.check_rupture = wx.CheckBox(
            self, -1, _(u" Rupture anticipée du contrat au :"))
        self.datepicker_rupture = DatePickerCtrl(self, -1, style=DP_DROPDOWN)
        self.datepicker_rupture.Enable(False)

        self.label_essai = wx.StaticText(self, -1, _(u"    Nbre de jours :"))
        self.periode_essai = wx.SpinCtrl(self, -1, "", size=(60, -1))
        self.periode_essai.SetRange(0, 99)
        self.periode_essai.SetValue(0)
        self.aide_essai = wx.StaticText(
            self, -1, _(u"  (1 jour par semaine travaillée)"))
        self.aide_essai.SetForegroundColour('Grey')

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonClassifications,
                  self.bouton_class)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonValPoint, self.bouton_valpoint)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonType, self.bouton_type)
        self.Bind(wx.EVT_CHOICE, self.OnChoiceType, self.choice_type)
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckRupture, self.check_rupture)

        self.Affichage_dateFin()
        # Importation des données
        if self.GetGrandParent().dictContrats["IDcontrat"] != 0:
            self.Importation()

    def __set_properties(self):
        self.label_titre.SetFont(
            wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, ""))
        self.bouton_type.SetMinSize((20, 20))
        self.bouton_type.SetToolTip(
            wx.ToolTip(
                _(u"Cliquez ici pour ajouter, modifier ou supprimer des types de contrat"
                  )))
        self.bouton_class.SetMinSize((20, 20))
        self.bouton_class.SetToolTip(
            wx.ToolTip(
                _(u"Cliquez ici pour ajouter, modifier ou supprimer des classifications"
                  )))
        self.bouton_valpoint.SetMinSize((20, 20))
        self.bouton_valpoint.SetToolTip(
            wx.ToolTip(
                _(u"Cliquez ici pour ajouter, modifier ou supprimer des valeurs de points"
                  )))
        self.check_rupture.SetToolTip(
            wx.ToolTip(
                _(u"Cliquez ici pour saisir une date de fin de contrat si l'employeur ou le salarié ont mis fin prématurément au contrat."
                  )))

    def __do_layout(self):
        grid_sizer_base = wx.FlexGridSizer(rows=5, cols=1, vgap=10, hgap=10)
        sizer_dates = wx.StaticBoxSizer(self.sizer_dates_staticbox,
                                        wx.VERTICAL)
        grid_sizer_dates = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=10)
        grid_sizer_rupture = wx.FlexGridSizer(rows=1, cols=3, vgap=5, hgap=5)

        sizer_caract = wx.StaticBoxSizer(self.sizer_caract_staticbox,
                                         wx.VERTICAL)
        grid_sizer_caract = wx.FlexGridSizer(rows=3, cols=3, vgap=5, hgap=5)
        grid_sizer_base.Add(self.label_titre, 0, 0, 0)
        grid_sizer_base.Add(self.label_intro, 0, wx.LEFT, 20)
        grid_sizer_caract.Add(self.label_type, 0,
                              wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_caract.Add(self.choice_type, 0, wx.EXPAND, 0)
        grid_sizer_caract.Add(self.bouton_type, 0, 0, 0)
        grid_sizer_caract.Add(self.label_class, 0,
                              wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_caract.Add(self.choice_class, 0, wx.EXPAND, 0)
        grid_sizer_caract.Add(self.bouton_class, 0, 0, 0)
        grid_sizer_caract.Add(self.label_valpoint, 0,
                              wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_caract.Add(self.choice_valpoint, 0, wx.EXPAND, 0)
        grid_sizer_caract.Add(self.bouton_valpoint, 0, 0, 0)
        grid_sizer_caract.AddGrowableCol(1)
        sizer_caract.Add(grid_sizer_caract, 1, wx.ALL | wx.EXPAND, 5)
        grid_sizer_base.Add(sizer_caract, 1, wx.LEFT | wx.EXPAND, 20)

        grid_sizer_dates.Add(self.label_date_debut, 0,
                             wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_dates.Add(self.datepicker_date_debut, 0, 0, 0)
        grid_sizer_dates.Add(self.label_date_fin, 0, wx.ALIGN_CENTER_VERTICAL,
                             0)
        grid_sizer_dates.Add(self.datepicker_date_fin, 0, 0, 0)
        sizer_dates.Add(grid_sizer_dates, 1, wx.ALL | wx.EXPAND, 5)

        grid_sizer_rupture.Add((90, 10), 1, wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_rupture.Add(self.check_rupture, 0, wx.ALIGN_CENTER_VERTICAL,
                               0)
        grid_sizer_rupture.Add(self.datepicker_rupture, 0,
                               wx.ALIGN_CENTER_VERTICAL, 0)
        sizer_dates.Add(grid_sizer_rupture, 1, wx.EXPAND, 0)

        grid_sizer_base.Add(sizer_dates, 1, wx.LEFT | wx.EXPAND, 20)

        sizer_essai = wx.StaticBoxSizer(self.sizer_essai_staticbox,
                                        wx.VERTICAL)
        grid_sizer_essai = wx.FlexGridSizer(rows=1, cols=3, vgap=5, hgap=5)
        grid_sizer_essai.Add(self.label_essai, 0,
                             wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_essai.Add(self.periode_essai, 0, wx.ALIGN_CENTER_VERTICAL,
                             0)
        grid_sizer_essai.Add(self.aide_essai, 0, wx.ALIGN_CENTER_VERTICAL, 0)
        sizer_essai.Add(grid_sizer_essai, 1, wx.ALL | wx.EXPAND, 5)
        grid_sizer_base.Add(sizer_essai, 1, wx.LEFT | wx.EXPAND, 20)

        self.SetSizer(grid_sizer_base)
        grid_sizer_base.Fit(self)
        grid_sizer_base.AddGrowableCol(0)

    def Importation(self):
        """ Remplit les controles avec les données importées si c'est une modification """
        dictContrats = self.GetGrandParent().dictContrats

        # Controles Choice
        type = dictContrats["IDtype"]
        self.SelectChoice(self.choice_type, data=type)
        classification = dictContrats["IDclassification"]
        self.SelectChoice(self.choice_class, data=classification)
        valeur_point = dictContrats["valeur_point"]
        self.SelectChoice(self.choice_valpoint, data=valeur_point)

        # Radio et Date de Rupture
        if dictContrats["date_rupture"] != "":
            self.check_rupture.SetValue(True)
            self.datepicker_rupture.Enable(True)
            self.SetDatePicker(self.datepicker_rupture,
                               dictContrats["date_rupture"])
        else:
            self.check_rupture.SetValue(False)
            self.datepicker_rupture.Enable(False)

        # Dates de début et de fin
        date_debut = dictContrats["date_debut"]
        date_fin = dictContrats["date_fin"]
        if date_debut != "":
            self.SetDatePicker(self.datepicker_date_debut,
                               dictContrats["date_debut"])
        if date_fin != "" and date_fin != "2999-01-01":
            self.SetDatePicker(self.datepicker_date_fin,
                               dictContrats["date_fin"])
        self.datepicker_date_debut.Enable(True)
        self.datepicker_date_fin.Enable(True)

        if self.dictTypes[type] == "non":
            self.label_date_fin.Show(True)
            self.datepicker_date_fin.Show(True)
        else:
            self.label_date_fin.Show(False)
            self.datepicker_date_fin.Show(False)

        # Période d'essai
        essai = dictContrats["essai"]
        self.periode_essai.SetValue(essai)

    def CalcEssai(self):
        """ Calcule la durée de la période d'essai en fonction des dates du contrat """
        essai = 0

        # Si CDI
        if self.dictTypes[self.choice_type.GetClientData(
                self.choice_type.GetSelection())] == "oui":
            self.periode_essai.SetValue(30)
            return

        # Si CDD

        # Calcul de la durée du contrat
        date_tmp = self.datepicker_date_debut.GetValue()
        date_debut = datetime.date(date_tmp.GetYear(),
                                   date_tmp.GetMonth() + 1, date_tmp.GetDay())
        date_tmp = self.datepicker_date_fin.GetValue()
        date_fin = datetime.date(date_tmp.GetYear(),
                                 date_tmp.GetMonth() + 1, date_tmp.GetDay())

        if date_debut > date_fin:
            self.periode_essai.SetValue(0)
            return

        nbreJours = (date_fin - date_debut).days
        nbreSemaines = nbreJours // 7

        print(nbreJours, nbreSemaines)

        self.periode_essai.SetValue(essai)

    def SetDatePicker(self, controle, date):
        """ Met une date dans un datePicker donné """
        annee = int(date[:4])
        mois = int(date[5:7]) - 1
        jour = int(date[8:10])
        date = wx.DateTime()
        date.Set(jour, mois, annee)
        controle.SetValue(date)

    def OnCheckRupture(self, event):
        if self.check_rupture.GetValue() == True:
            self.datepicker_rupture.Enable(True)
        else:
            self.datepicker_rupture.Enable(False)

    def OnChoiceType(self, event):
        self.datepicker_date_debut.Enable(True)
        self.datepicker_date_fin.Enable(True)
        self.Affichage_dateFin()
        self.CalcEssai()

    def Affichage_dateFin(self):
        """ Faire apparaitre ou disparaitre le controle DateFin en fonction du type de contrat choisi """
        selection = self.choice_type.GetSelection()
        if selection != -1:
            IDselection = self.choice_type.GetClientData(selection)
        else:
            return
        if self.dictTypes[IDselection] == "non":
            self.label_date_fin.Show(True)
            self.datepicker_date_fin.Show(True)
        else:
            self.label_date_fin.Show(False)
            self.datepicker_date_fin.Show(False)

    def OnBoutonClassifications(self, event):
        dlg = DLG_Config_classifications.Dialog(self)
        dlg.ShowModal()
        dlg.Destroy()
        self.MAJ_choice_Class()

    def OnBoutonValPoint(self, event):
        dlg = DLG_Config_val_point.Dialog(self)
        dlg.ShowModal()
        dlg.Destroy()
        self.MAJ_choice_ValPoint()

    def OnBoutonType(self, event):
        dlg = DLG_Config_types_contrats.Dialog(self)
        dlg.ShowModal()
        dlg.Destroy()
        self.MAJ_choice_Type()

    def MAJ_choice_Class(self):
        self.Importation_classifications()

    def Importation_classifications(self):
        controle = self.choice_class
        selection = controle.GetSelection()
        IDselection = None
        if selection != -1: IDselection = controle.GetClientData(selection)
        # Récupération des données
        DB = GestionDB.DB()
        req = """SELECT * FROM contrats_class """
        DB.ExecuterReq(req)
        liste = DB.ResultatReq()
        DB.Close()
        # Placement de la liste dans le Choice
        controle.Clear()
        x = 0
        for key, valeur in liste:
            controle.Append(valeur, key)
            if IDselection == key: controle.SetSelection(x)
            x += 1

    def MAJ_choice_ValPoint(self):
        self.Importation_valPoint()

    def Importation_valPoint(self):
        controle = self.choice_valpoint
        selection = controle.GetSelection()
        IDselection = None
        if selection != -1: IDselection = controle.GetClientData(selection)
        # Récupération des données
        DB = GestionDB.DB()
        req = """SELECT * FROM valeurs_point ORDER BY date_debut """
        DB.ExecuterReq(req)
        liste = DB.ResultatReq()
        DB.Close()

        # Recherche de la valeur actuelle
        dateJour = str(datetime.date.today())
        valeurActuelle = None
        for ID, valeur, dateDebut in liste:
            if dateJour >= dateDebut:
                valeurActuelle = ID

        # Placement de la liste dans le Choice
        controle.Clear()
        x = 0
        for ID, valeur, dateDebut in liste:
            txt = str(valeur) + _(u" ¤  (à partir du "
                                  ) + FonctionsPerso.DateEngFr(dateDebut) + ")"
            controle.Append(txt, ID)
            # Sélection de l'ancienne valeur sélectionnée
            if IDselection == ID: controle.SetSelection(x)
            # Sélection de la valeur actuelle si rien n'a été sélectionnée
            if IDselection == None and valeurActuelle == ID:
                controle.SetSelection(x)
            x += 1

        self.listeValPoint = liste

    def MAJ_choice_Type(self):
        self.Importation_Type()

    def Importation_Type(self):
        controle = self.choice_type
        selection = controle.GetSelection()
        IDselection = None
        if selection != -1: IDselection = controle.GetClientData(selection)
        # Récupération des données
        DB = GestionDB.DB()
        req = """SELECT * FROM contrats_types """
        DB.ExecuterReq(req)
        liste = DB.ResultatReq()
        DB.Close()
        # Placement de la liste dans le Choice
        controle.Clear()
        self.dictTypes = {}
        x = 0
        for key, nom, nom_abrege, duree_indeterminee in liste:
            self.dictTypes[key] = duree_indeterminee
            controle.Append(nom, key)
            if IDselection == key: controle.SetSelection(x)
            x += 1

        if selection != -1: self.Affichage_dateFin()

    def GetDatePickerValue(self, controle):
        date_tmp = controle.GetValue()
        return str(
            datetime.date(date_tmp.GetYear(),
                          date_tmp.GetMonth() + 1, date_tmp.GetDay()))

    def GetChoiceData(self, controle):
        selection = controle.GetSelection()
        if selection != -1:
            IDselection = controle.GetClientData(selection)
        else:
            IDselection = None
        return IDselection

    def SelectChoice(self, controle, data):
        nbreItems = controle.GetCount()
        index = 0
        for item in range(nbreItems):
            if controle.GetClientData(index) == data:
                controle.SetSelection(index)
                return
            index += 1

    def Validation(self):

        # Récupération des valeurs saisies
        type = self.GetChoiceData(self.choice_type)
        classification = self.GetChoiceData(self.choice_class)
        valPoint = self.GetChoiceData(self.choice_valpoint)
        date_debut = self.GetDatePickerValue(self.datepicker_date_debut)
        date_fin = self.GetDatePickerValue(self.datepicker_date_fin)
        rupture = self.check_rupture.GetValue()
        date_rupture = self.GetDatePickerValue(self.datepicker_rupture)
        essai = self.periode_essai.GetValue()

        # Vérifie que des valeurs ont été saisies
        if type == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner un type de contrat dans la liste proposée."
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.choice_type.SetFocus()
            return False

        if classification == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner une classification dans la liste proposée."
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.choice_class.SetFocus()
            return False

        if valPoint == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner une valeur de point dans la liste proposée."
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.choice_valpoint.SetFocus()
            return False

        # Vérifie que la date de fin est supérieure à la date de début de contrat
        if date_debut > date_fin and self.datepicker_date_fin.IsShown():
            dlg = wx.MessageDialog(
                self,
                _(u"La date de fin de contrat que vous avez saisie est inférieure à la date de début !"
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.datepicker_date_fin.SetFocus()
            return False

        # Vérifie que la date de rupture est supérieure à la date de début de contrat
        if date_debut > date_rupture and rupture == True:
            dlg = wx.MessageDialog(
                self,
                _(u"La date de rupture de contrat que vous avez saisie est inférieure à la date de début !"
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.datepicker_date_fin.SetFocus()
            return False

        # Vérifie que la date de rupture est supérieure à la date de début de contrat et inférieure à la date de fin si contrat à durée déterminée :
        if self.datepicker_date_fin.IsShown(
        ) and date_rupture >= date_fin and rupture == True:
            dlg = wx.MessageDialog(
                self,
                _(u"La date de rupture de contrat que vous avez saisie est égale ou supérieure à la date de fin de contrat !"
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.datepicker_date_fin.SetFocus()
            return False

        # Vérifie que la valeur du point correspondant bien à la date de début de contrat
        valeurNecessaire = None
        for ID, valeur, dateValeur in self.listeValPoint:
            if date_debut >= dateValeur:
                valeurNecessaire = ID

        if valeurNecessaire == None:
            dlg = wx.MessageDialog(
                self,
                _(u"La valeur du point n'est pas correcte. Il n'existe pas dans la liste proposée de valeur correspondante à la date de début de contrat. \n\nVous devez donc créer une nouvelle valeur. \n\nSouhaitez-vous le faire maintenant ?"
                  ), "Erreur", wx.ICON_QUESTION | wx.YES_NO | wx.NO_DEFAULT)
            if dlg.ShowModal() == wx.ID_NO:
                dlg.Destroy()
                return False
            else:
                dlg.Destroy()
                self.OnBoutonValPoint(None)
                return False

        if valeurNecessaire != valPoint:
            dlg = wx.MessageDialog(
                self,
                _(u"La valeur du point ne correspond pas à la date de début du contrat. Vous devez sélectionner une autre valeur de points dans la liste proposée.\n\nVoulez-vous que je le fasse à votre place ?"
                  ), "Erreur", wx.ICON_QUESTION | wx.YES_NO | wx.NO_DEFAULT)
            if dlg.ShowModal() == wx.ID_NO:
                dlg.Destroy()
                return False
            else:
                dlg.Destroy()
                # Sélection automatique de la bonne valeur de point
                for index in range(self.choice_valpoint.GetCount()):
                    if self.choice_valpoint.GetClientData(
                            index) == valeurNecessaire:
                        self.choice_valpoint.SetSelection(index)
                        return False

        # Période d'essai
        if essai == "":
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez saisir un nombre de jours pour période d'essai."
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        if essai == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez pas défini de période d'essai. \n\nSouhaitez-vous quand même continuer ? \n(Sinon cliquez 'non' ou 'annuler')"
                  ), "Erreur de saisie",
                wx.ICON_QUESTION | wx.YES_NO | wx.CANCEL | wx.NO_DEFAULT)
            if dlg.ShowModal() == wx.ID_YES:
                dlg.Destroy()
            else:
                dlg.Destroy()
                return False

        # Mémorisation des données
        dictContrats = self.GetGrandParent().dictContrats
        dictContrats["IDtype"] = type
        dictContrats["IDclassification"] = classification
        dictContrats["valeur_point"] = valPoint
        dictContrats["date_debut"] = date_debut
        if self.datepicker_date_fin.IsShown():
            dictContrats["date_fin"] = date_fin
        else:
            dictContrats["date_fin"] = "2999-01-01"
        if rupture == True:
            dictContrats["date_rupture"] = date_rupture
        else:
            dictContrats["date_rupture"] = ""
        dictContrats["essai"] = essai

        return True
Пример #2
0
class Dialog(wx.Dialog):
    def __init__(self, parent, title="", IDperiode=0):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent
        self.panel_base = wx.Panel(self, -1)

        self.sizer_periode_staticbox = wx.StaticBox(self.panel_base, -1,
                                                    _(u"Nom de la période"))
        choices = [
            _(u"Février"),
            _(u"Pâques"),
            _(u"Eté"),
            _(u"Toussaint"),
            _(u"Noël")
        ]
        self.label_nom = wx.StaticText(self.panel_base, -1, _(u"Nom :"))
        self.choice_nom = wx.Choice(self.panel_base,
                                    -1,
                                    choices=choices,
                                    size=(100, -1))
        self.label_annee = wx.StaticText(self.panel_base, -1, _(u"Année :"))
        self.text_annee = wx.TextCtrl(self.panel_base,
                                      -1,
                                      "",
                                      style=wx.TE_CENTRE,
                                      size=(50, -1))

        self.sizer_dates_staticbox = wx.StaticBox(self.panel_base, -1,
                                                  _(u"Dates de la période"))
        self.label_dateDebut = wx.StaticText(self.panel_base, -1, u"Du")
        self.datepicker_dateDebut = DatePickerCtrl(self.panel_base,
                                                   -1,
                                                   style=DP_DROPDOWN)
        self.label_dateFin = wx.StaticText(self.panel_base, -1, _(u"au"))
        self.datepicker_dateFin = DatePickerCtrl(self.panel_base,
                                                 -1,
                                                 style=DP_DROPDOWN)

        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self.panel_base,
            texte=_(u"Aide"),
            cheminImage=Chemins.GetStaticPath("Images/32x32/Aide.png"))
        self.bouton_ok = CTRL_Bouton_image.CTRL(
            self.panel_base,
            texte=_(u"Ok"),
            cheminImage=Chemins.GetStaticPath("Images/32x32/Valider.png"))
        self.bouton_annuler = CTRL_Bouton_image.CTRL(
            self.panel_base,
            texte=_(u"Annuler"),
            cheminImage=Chemins.GetStaticPath("Images/32x32/Annuler.png"))

        self.IDperiode = IDperiode
        if IDperiode != 0:
            self.Importation()

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAnnuler, self.bouton_annuler)

    def __set_properties(self):
        self.SetTitle(_(u"Gestion des périodes de vacances"))
        if 'phoenix' in wx.PlatformInfo:
            _icon = wx.Icon()
        else:
            _icon = wx.EmptyIcon()
        _icon.CopyFromBitmap(
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Logo.png"),
                      wx.BITMAP_TYPE_ANY))
        self.SetIcon(_icon)
        self.choice_nom.SetToolTip(
            wx.ToolTip(_(u"Choisissez ici le nom de la période")))
        self.text_annee.SetToolTip(
            wx.ToolTip(
                _(u"Saisissez ici l'année de la période. Ex. : '2008'")))
        self.datepicker_dateDebut.SetToolTip(
            wx.ToolTip(_(u"Saisissez ici la date de début de la période")))
        self.datepicker_dateFin.SetToolTip(
            wx.ToolTip(_(u"Saisissez ici la date de fin de la période")))
        self.bouton_aide.SetToolTip(
            wx.ToolTip(_(u"Cliquez ici pour obtenir de l'aide")))
        self.bouton_aide.SetSize(self.bouton_aide.GetBestSize())
        self.bouton_ok.SetToolTip(wx.ToolTip(_(u"Cliquez ici pour valider")))
        self.bouton_ok.SetSize(self.bouton_ok.GetBestSize())
        self.bouton_annuler.SetToolTip(
            wx.ToolTip(_(u"Cliquez ici pour annuler la saisie")))
        self.bouton_annuler.SetSize(self.bouton_annuler.GetBestSize())

    def __do_layout(self):
        sizer_base = wx.BoxSizer(wx.VERTICAL)
        grid_sizer_base = wx.FlexGridSizer(rows=3, cols=1, vgap=10, hgap=10)
        grid_sizer_boutons = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=10)

        sizer_contenu_1 = wx.StaticBoxSizer(self.sizer_periode_staticbox,
                                            wx.VERTICAL)
        grid_sizer_contenu_1 = wx.FlexGridSizer(rows=1,
                                                cols=6,
                                                vgap=10,
                                                hgap=10)
        grid_sizer_contenu_1.Add(self.label_nom, 0,
                                 wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_contenu_1.Add(self.choice_nom, 0, 0, 0)
        grid_sizer_contenu_1.Add(self.label_annee, 0,
                                 wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_contenu_1.Add(self.text_annee, 0, 0, 0)
        sizer_contenu_1.Add(grid_sizer_contenu_1, 1, wx.ALL | wx.EXPAND, 10)

        sizer_contenu_2 = wx.StaticBoxSizer(self.sizer_dates_staticbox,
                                            wx.VERTICAL)
        grid_sizer_contenu_2 = wx.FlexGridSizer(rows=1,
                                                cols=6,
                                                vgap=10,
                                                hgap=10)
        grid_sizer_contenu_2.Add(self.label_dateDebut, 0,
                                 wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_contenu_2.Add(self.datepicker_dateDebut, 0, 0, 0)
        grid_sizer_contenu_2.Add(self.label_dateFin, 0,
                                 wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_contenu_2.Add(self.datepicker_dateFin, 0, 0, 0)
        sizer_contenu_2.Add(grid_sizer_contenu_2, 1, wx.ALL | wx.EXPAND, 10)

        grid_sizer_base.Add(sizer_contenu_1, 1,
                            wx.TOP | wx.LEFT | wx.RIGHT | wx.EXPAND, 10)
        grid_sizer_base.Add(sizer_contenu_2, 1,
                            wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.EXPAND, 10)

        grid_sizer_boutons.Add(self.bouton_aide, 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(1)
        grid_sizer_base.Add(grid_sizer_boutons, 1,
                            wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, 10)
        self.panel_base.SetSizer(grid_sizer_base)
        sizer_base.Add(self.panel_base, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_base)
        sizer_base.Fit(self)
        self.Layout()
        self.CenterOnScreen()

    def Importation(self):
        DB = GestionDB.DB()
        req = "SELECT * FROM periodes_vacances WHERE IDperiode=%d" % self.IDperiode
        DB.ExecuterReq(req)
        donnees = DB.ResultatReq()[0]
        DB.Close()
        if len(donnees) == 0: return
        # Place la valeur dans le controle nom période
        self.SelectChoice(self.choice_nom, donnees[1])
        # Place la valeur dans le controle annee
        self.text_annee.SetValue(str(donnees[2]))
        # Place la date de début dans le cdatePicker
        jour = int(donnees[3][8:10])
        mois = int(donnees[3][5:7]) - 1
        annee = int(donnees[3][:4])
        date = wx.DateTime()
        date.Set(jour, mois, annee)
        self.datepicker_dateDebut.SetValue(date)
        # Place la date de fin dans le cdatePicker
        jour = int(donnees[4][8:10])
        mois = int(donnees[4][5:7]) - 1
        annee = int(donnees[4][:4])
        date = wx.DateTime()
        date.Set(jour, mois, annee)
        self.datepicker_dateFin.SetValue(date)

    def SelectChoice(self, controle, data):
        nbreItems = controle.GetCount()
        index = 0
        for item in range(nbreItems):
            if controle.GetString(index) == data:
                controle.SetSelection(index)
                return
            index += 1

    def GetChoiceValue(self, controle):
        selection = controle.GetSelection()
        if selection != -1:
            IDselection = controle.GetString(selection)
        else:
            IDselection = None
        return IDselection

    def Sauvegarde(self):
        """ Sauvegarde des données dans la base de données """

        # Récupération ds valeurs saisies
        varNom = self.GetChoiceValue(self.choice_nom)
        varAnnee = self.text_annee.GetValue()
        varDateDebut = self.datepicker_dateDebut.GetValue()
        varTxtDateDebut = str(
            datetime.date(varDateDebut.GetYear(),
                          varDateDebut.GetMonth() + 1, varDateDebut.GetDay()))
        varDateFin = self.datepicker_dateFin.GetValue()
        varTxtDateFin = str(
            datetime.date(varDateFin.GetYear(),
                          varDateFin.GetMonth() + 1, varDateFin.GetDay()))

        DB = GestionDB.DB()
        # Création de la liste des données
        listeDonnees = [
            ("nom", varNom),
            ("annee", varAnnee),
            ("date_debut", varTxtDateDebut),
            ("date_fin", varTxtDateFin),
        ]
        if self.IDperiode == 0:
            # Enregistrement d'une nouvelle valeur
            newID = DB.ReqInsert("periodes_vacances", listeDonnees)
            ID = newID
        else:
            # Modification des valeurs
            DB.ReqMAJ("periodes_vacances", listeDonnees, "IDperiode",
                      self.IDperiode)
            ID = self.IDperiode
        DB.Commit()
        DB.Close()
        return ID

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

    def OnBoutonAnnuler(self, event):
        self.EndModal(wx.ID_CANCEL)

    def OnBoutonOk(self, event):
        """ Validation des données saisies """

        # Vérifie que des valeurs ont été saisies
        valeur = self.GetChoiceValue(self.choice_nom)
        if valeur == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner un nom de période dans la liste proposée !"
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.choice_nom.SetFocus()
            return

        valeur = self.text_annee.GetValue()
        if valeur == "":
            dlg = wx.MessageDialog(self,
                                   _(u"Vous devez saisir une année valide."),
                                   "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.text_annee.SetFocus()
            return
        # Vérifie que la valeur est bien constituée de chiffres uniquement
        incoherences = ""
        for lettre in valeur:
            if lettre not in "0123456789.":
                incoherences += "'" + lettre + "', "
        if len(incoherences) != 0:
            dlg = wx.MessageDialog(
                self, _(u"L'année que vous avez saisie n'est pas correcte."),
                "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.text_annee.SetFocus()
            return
        valeur = int(valeur)
        if valeur < 1000 or valeur > 3000:
            dlg = wx.MessageDialog(
                self, _(u"L'année que vous avez saisie n'est pas correcte."),
                "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.text_annee.SetFocus()
            return

        date_debut = self.datepicker_dateDebut.GetValue(
        )  # self.GetDatePickerValue(self.datepicker_date_debut)
        date_fin = self.datepicker_dateFin.GetValue(
        )  # self.GetDatePickerValue(self.datepicker_date_fin)
        # Vérifie que la date de fin est supérieure à la date de début de contrat
        if date_debut > date_fin:
            dlg = wx.MessageDialog(
                self,
                _(u"La date de fin de vacances doit être supérieure à la date de début !"
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.datepicker_dateFin.SetFocus()
            return

        # Sauvegarde
        self.Sauvegarde()
        # MAJ du listCtrl des valeurs de points
        if FonctionsPerso.FrameOuverte("panel_config_periodes_vacs") != None:
            self.GetParent().MAJ_ListCtrl()

        # Fermeture
        self.EndModal(wx.ID_OK)