예제 #1
0
 def Sauvegarde(self):
     """ Sauvegarde """
     # Récupération des données
     IDcategorie = self.ctrl_categorie.GetID()
     texte = self.ctrl_texte.GetValue()
     if self.ctrl_priorite.GetSelection() == 1 :
         priorite = "HAUTE"
     else:
         priorite = "NORMALE"
     afficher_accueil = int(self.ctrl_afficher_accueil.GetValue())
     afficher_liste = int(self.ctrl_afficher_liste.GetValue())
     afficher_factures = int(self.ctrl_afficher_factures.GetValue())
     rappel = int(self.ctrl_rappel.GetValue())
     date_parution = self.ctrl_parution.GetDate() 
     
     if self.mode == "famille" and self.nom == None : self.nom = self.GetNomFamille() 
     if self.mode == "individu" and self.nom == None : self.nom = self.GetNomIndividu() 
     
     IDutilisateur = UTILS_Identification.GetIDutilisateur()
     
     # Sauvegarde
     DB = GestionDB.DB()
     listeDonnees = [    
             ("type", "INSTANTANE"),
             ("IDcategorie", IDcategorie),
             ("date_saisie", self.date_saisie),
             ("IDutilisateur", IDutilisateur),
             ("date_parution", date_parution),
             ("priorite", priorite),
             ("afficher_accueil", afficher_accueil),
             ("afficher_liste", afficher_liste),
             ("rappel", rappel),
             ("IDfamille", self.IDfamille),
             ("IDindividu", self.IDindividu),
             ("nom", self.nom),
             ("texte", texte),
             ("afficher_facture", afficher_factures),
         ]
     if self.IDmessage == None :
         nouveauMessage = True
         self.IDmessage = DB.ReqInsert("messages", listeDonnees)
     else:
         nouveauMessage = False
         DB.ReqMAJ("messages", listeDonnees, "IDmessage", self.IDmessage)
     DB.Close()
     
     # Mémorise l'action dans l'historique
     if nouveauMessage == True :
         type = _(u"Saisie")
         IDcategorie = 24
     else:
         type = _(u"Modification")
         IDcategorie = 25
     if len(texte) > 450 : texte = texte[450:] + u"..."
     UTILS_Historique.InsertActions([{
         "IDindividu" : self.IDindividu,
         "IDfamille" : self.IDfamille,
         "IDcategorie" : IDcategorie, 
         "action" : _(u"%s du message ID%d : '%s'") % (type, self.IDmessage, texte)
         },])
예제 #2
0
파일: OL_Pieces.py 프로젝트: Toka69/Noethys
    def Supprimer(self, event):
        if self.IDfamille != None and UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("familles_pieces", "supprimer") == False : return
        if self.IDindividu != None and UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("individus_pieces", "supprimer") == False : return

        if len(self.Selection()) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune pièce à supprimer dans la liste !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
        IDpiece = self.Selection()[0].IDpiece
        nomPiece = self.Selection()[0].nom
        IDindividu = self.Selection()[0].IDindividu
        IDfamille = self.Selection()[0].IDfamille
        dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment supprimer cette pièce ?"), _(u"Suppression"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_INFORMATION)
        if dlg.ShowModal() == wx.ID_YES :
            # Suppression de la pièce
            DB = GestionDB.DB()
            DB.ReqDEL("pieces", "IDpiece", IDpiece)
            DB.Close() 
            # Suppression des documents scannés rattachés
            DB = GestionDB.DB(suffixe="DOCUMENTS")
            DB.ReqDEL("documents", "IDpiece", IDpiece)
            DB.Close()
            # Mémorise l'action dans l'historique
            UTILS_Historique.InsertActions([{
                "IDindividu" : IDindividu,
                "IDfamille" : IDfamille,
                "IDcategorie" : 17, 
                "action" : _(u"Suppression de la pièce ID%d '%s'") % (IDpiece, nomPiece),
                },])
                
            # Actualisation de l'affichage
            self.MAJ()
            self.MAJctrlPiecesObligatoires() 
        dlg.Destroy()
예제 #3
0
    def Supprimer(self, event):
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("individus_scolarite", "supprimer") == False : return

        if len(self.Selection()) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune étape de scolarité à supprimer dans la liste"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
        
        IDscolarite = self.Selection()[0].IDscolarite
        date_debut = self.Selection()[0].dateDebutDD
        date_fin = self.Selection()[0].dateFinDD
        nomEcole = self.Selection()[0].nomEcole
        nomClasse = self.Selection()[0].nomClasse
        nomNiveau = self.Selection()[0].nomNiveau
        
        dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment supprimer cette étape de scolarité ?\n\nPériode : Du %s au %s\nEcole : %s\nClasse : %s\nNiveau : %s") % (DateEngFr(str(date_debut)), DateEngFr(str(date_fin)), nomEcole, nomClasse, nomNiveau), _(u"Suppression"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_EXCLAMATION)
        if dlg.ShowModal() == wx.ID_YES :
            DB = GestionDB.DB()
            DB.ReqDEL("scolarite", "IDscolarite", IDscolarite)
            DB.Close() 
            
            # Mémorise l'action dans l'historique
            UTILS_Historique.InsertActions([{
                "IDindividu" : self.IDindividu,
                "IDfamille" : None,
                "IDcategorie" : 32, 
                "action" : _(u"Inscription scolaire du %s au %s. Ecole : '%s'. Classe : '%s'. Niveau : '%s'") % (DateEngFr(str(date_debut)), DateEngFr(str(date_fin)), nomEcole, nomClasse, nomNiveau)
                },])
                
            # Actualise l'affichage
            self.MAJ()
        dlg.Destroy()
예제 #4
0
 def Sauvegarder(self, demander=True):
     """ Sauvegarder la trace du reçu """
     if len(self.dictSave) == 0 : 
         return
     
     # Demande la confirmation de sauvegarde
     if demander == True :
         dlg = wx.MessageDialog(self, _(u"Souhaitez-vous mémoriser le reçu édité ?\n\n(Cliquez NON si c'était juste un test sinon cliquez OUI)"), _(u"Sauvegarde"), wx.YES_NO|wx.YES_DEFAULT|wx.CANCEL|wx.ICON_QUESTION)
         reponse = dlg.ShowModal() 
         dlg.Destroy()
         if reponse != wx.ID_YES :
             return
     
     # Sauvegarde de l'attestation
     DB = GestionDB.DB()
     listeDonnees = [ 
         ("numero", self.dictSave["numero"] ), 
         ("IDfamille", self.dictSave["IDfamille"] ), 
         ("date_edition", self.dictSave["date_edition"] ), 
         ("IDutilisateur", self.dictSave["IDutilisateur"] ), 
         ("IDreglement", self.dictSave["IDreglement"] ), 
         ]
     IDrecu = DB.ReqInsert("recus", listeDonnees)        
     DB.Close()
     
     # Mémorisation de l'action dans l'historique
     UTILS_Historique.InsertActions([{
             "IDfamille" : self.IDfamille,
             "IDcategorie" : 28, 
             "action" : _(u"Edition d'un reçu pour le règlement ID%d") % self.dictSave["IDreglement"],
             },])
예제 #5
0
    def Supprimer(self, event=None):
        if len(self.Selection()) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune inscription à supprimer dans la liste !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
        IDscolarite = self.Selection()[0].IDscolarite
        IDindividu = self.Selection()[0].IDindividu
        nom = self.Selection()[0].nom
        prenom = self.Selection()[0].prenom
        date_debut = self.Selection()[0].dateDebutDD
        date_fin = self.Selection()[0].dateFinDD
        nomEcole = self.Selection()[0].nomEcole
        nomClasse = self.Selection()[0].nomClasse
        abregeNiveau = self.Selection()[0].abregeNiveau
        
        # Confirmation de suppression
        dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment supprimer l'inscription scolaire de %s %s dans cette classe ?") % (prenom, nom), _(u"Suppression"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_EXCLAMATION)
        if dlg.ShowModal() == wx.ID_YES :
            DB = GestionDB.DB()
            DB.ReqDEL("scolarite", "IDscolarite", IDscolarite)
            DB.Close() 

            # Mémorise l'action dans l'historique
            UTILS_Historique.InsertActions([{
                "IDindividu" : IDindividu,
                "IDfamille" : None,
                "IDcategorie" : 32, 
                "action" : _(u"Inscription scolaire du %s au %s. Ecole : '%s'. Classe : '%s'. Niveau : '%s'") % (DateEngFr(str(date_debut)), DateEngFr(str(date_fin)), nomEcole, nomClasse, abregeNiveau)
                },])

            self.MAJ(IDclasse=self.IDclasse)
        dlg.Destroy()
예제 #6
0
 def Supprimer(self, event):
     if MODE in ("accueil", "liste") and UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("outils_messages", "supprimer") == False : return
     if MODE == "famille" and UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("familles_messages", "supprimer") == False : return
     if MODE == "individu" and UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("individus_messages", "supprimer") == False : return
     if len(self.Selection()) == 0 :
         dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucun message à supprimer dans la liste !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
         dlg.ShowModal()
         dlg.Destroy()
         return
     IDmessage = self.Selection()[0].IDmessage
     IDfamille = self.Selection()[0].IDfamille
     IDindividu = self.Selection()[0].IDindividu
     texte = self.Selection()[0].texte
     
     dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment supprimer ce message ?"), _(u"Suppression"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_INFORMATION)
     if dlg.ShowModal() == wx.ID_YES :
         DB = GestionDB.DB()
         DB.ReqDEL("messages", "IDmessage", IDmessage)
         DB.Close() 
         
         # Mémorise l'action dans l'historique
         if len(texte) > 450 : texte = texte[450:] + u"..."
         UTILS_Historique.InsertActions([{
             "IDindividu" : IDindividu,
             "IDfamille" : IDfamille,
             "IDcategorie" : 26, 
             "action" : _(u"Suppression du message ID%d : '%s'") % (IDmessage, texte)
         },])
         
         # Actualisation de l'affichage
         self.MAJ()
     dlg.Destroy()
예제 #7
0
 def RattacherIndividu(self, IDfamille=None, IDcategorie=None, titulaire=0):
     # Saisie dans la base
     DB = GestionDB.DB()
     listeDonnees = [
         ("IDindividu", self.IDindividu),
         ("IDfamille", IDfamille),
         ("IDcategorie", IDcategorie),
         ("titulaire", titulaire),
     ]
     IDrattachement = DB.ReqInsert("rattachements", listeDonnees)
     DB.Close()
     # Mémorise l'action dans l'historique
     if IDcategorie == 1: labelCategorie = _(u"représentant")
     if IDcategorie == 2: labelCategorie = _(u"enfant")
     if IDcategorie == 3: labelCategorie = _(u"contact")
     UTILS_Historique.InsertActions([
         {
             "IDindividu":
             self.IDindividu,
             "IDfamille":
             IDfamille,
             "IDcategorie":
             13,
             "action":
             _(u"Rattachement de l'individu ID%d à la famille ID%d en tant que %s"
               ) % (self.IDindividu, IDfamille, labelCategorie),
         },
     ])
     return True
    def Sauvegarder(self, demander=True):
        """ Sauvegarder la trace du reçu """
        if len(self.dictSave) == 0:
            return

        # Demande la confirmation de sauvegarde
        if demander == True:
            dlg = wx.MessageDialog(
                self,
                _(u"Souhaitez-vous mémoriser dans l'historique le document édité ?\n\n(Cliquez NON si c'était juste un test sinon cliquez OUI)"
                  ), _(u"Sauvegarde"),
                wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
            reponse = dlg.ShowModal()
            dlg.Destroy()
            if reponse != wx.ID_YES:
                return

        # Mémorisation de l'action dans l'historique
        UTILS_Historique.InsertActions([
            {
                "IDfamille":
                self.IDfamille,
                "IDindividu":
                self.IDindividu,
                "IDcategorie":
                34,
                "action":
                _(u"Edition d'une confirmation d'inscription pour l'activité '%s'"
                  ) % self.dictSave["activite"],
            },
        ])
예제 #9
0
 def Ajouter(self, event):
     if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("individus_scolarite", "creer") == False : return
     
     # Recherches des dernières dates saisies
     DB = GestionDB.DB()
     req = """SELECT date_debut, date_fin
     FROM scolarite 
     ORDER BY IDscolarite DESC LIMIT 1;"""
     DB.ExecuterReq(req)
     listeDonnees = DB.ResultatReq()
     DB.Close()
     if len(listeDonnees) > 0 :
         date_debut = DateEngEnDateDD(listeDonnees[0][0])
         date_fin = DateEngEnDateDD(listeDonnees[0][1])
     else:
         date_debut = None
         date_fin = None
         
     # Ouverture de la DLG de saisie
     from Dlg import DLG_Saisie_scolarite
     dlg = DLG_Saisie_scolarite.Dialog(self, IDscolarite=None, donneesScolarite=self.donnees)
     dlg.SetDateDebut(date_debut)
     dlg.SetDateFin(date_fin)
     if dlg.ShowModal() == wx.ID_OK:
         date_debut = dlg.GetDateDebut()
         date_fin = dlg.GetDateFin()
         IDecole = dlg.GetEcole()
         IDclasse = dlg.GetClasse()
         IDniveau = dlg.GetNiveau()
         nomEcole = dlg.GetNomEcole()
         nomClasse = dlg.GetNomClasse()
         nomNiveau = dlg.GetNomNiveau()
         
         # Sauvegarde
         DB = GestionDB.DB()
         listeDonnees = [
             ("IDindividu", self.IDindividu ),
             ("date_debut", date_debut ),
             ("date_fin", date_fin ),
             ("IDecole", IDecole),
             ("IDclasse", IDclasse),
             ("IDniveau", IDniveau),
             ]
         IDscolarite = DB.ReqInsert("scolarite", listeDonnees)
         DB.Close()
         
         # Mémorise l'action dans l'historique
         UTILS_Historique.InsertActions([{
             "IDindividu" : self.IDindividu,
             "IDfamille" : None,
             "IDcategorie" : 30, 
             "action" : _(u"Inscription scolaire du %s au %s. Ecole : '%s'. Classe : '%s'. Niveau : '%s'") % (DateEngFr(str(date_debut)), DateEngFr(str(date_fin)), nomEcole, nomClasse, nomNiveau)
             },])
         
         # Actualise l'affichage
         self.MAJ(IDscolarite)
     dlg.Destroy()
예제 #10
0
    def Modifier(self, event):
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("individus_scolarite", "modifier") == False : return
        if len(self.Selection()) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune étape de scolarité à modifier dans la liste"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
        
        IDscolarite = self.Selection()[0].IDscolarite
        date_debut = self.Selection()[0].dateDebutDD
        date_fin = self.Selection()[0].dateFinDD
        IDecole = self.Selection()[0].IDecole
        IDclasse = self.Selection()[0].IDclasse
        IDniveau = self.Selection()[0].IDniveau
        
        from Dlg import DLG_Saisie_scolarite
        dlg = DLG_Saisie_scolarite.Dialog(self, IDscolarite=IDscolarite, donneesScolarite=self.donnees)
        dlg.SetTitle(_(u"Modification d'une étape de la scolarité"))
        dlg.SetDateDebut(date_debut)
        dlg.SetDateFin(date_fin)
        dlg.SetEcole(IDecole)
        dlg.SetClasse(IDclasse)
        dlg.SetNiveau(IDniveau)
        if dlg.ShowModal() == wx.ID_OK:
            date_debut = dlg.GetDateDebut()
            date_fin = dlg.GetDateFin()
            IDecole = dlg.GetEcole()
            IDclasse = dlg.GetClasse()
            IDniveau = dlg.GetNiveau()
            nomEcole = dlg.GetNomEcole()
            nomClasse = dlg.GetNomClasse()
            nomNiveau = dlg.GetNomNiveau()

            # Sauvegarde
            DB = GestionDB.DB()
            listeDonnees = [
                ("date_debut", date_debut ),
                ("date_fin", date_fin ),
                ("IDecole", IDecole),
                ("IDclasse", IDclasse),
                ("IDniveau", IDniveau),
                ]
            DB.ReqMAJ("scolarite", listeDonnees, "IDscolarite", IDscolarite)
            DB.Close()
            
            # Mémorise l'action dans l'historique
            UTILS_Historique.InsertActions([{
                "IDindividu" : self.IDindividu,
                "IDfamille" : None,
                "IDcategorie" : 31, 
                "action" : _(u"Inscription scolaire du %s au %s. Ecole : '%s'. Classe : '%s'. Niveau : '%s'") % (DateEngFr(str(date_debut)), DateEngFr(str(date_fin)), nomEcole, nomClasse, nomNiveau)
                },])

            # Actualise l'affichage
            self.MAJ(IDscolarite)
        dlg.Destroy()
예제 #11
0
 def CreateIDfamille(self):
     """ Crée la fiche famille dans la base de données afin d'obtenir un IDfamille et un IDcompte_payeur """
     DB = GestionDB.DB()
     self.IDfamille = CreateIDfamille(DB)
     DB.Close()
     # Mémorise l'action dans l'historique
     UTILS_Historique.InsertActions([{
             "IDfamille" : self.IDfamille,
             "IDcategorie" : 4, 
             "action" : _(u"Création de la famille ID%d") % self.IDfamille,
             },])
예제 #12
0
 def MemorisationHistorique(self, adresse="", sujet=""):
     DB = GestionDB.DB()
     req = """SELECT individus.IDindividu, rattachements.IDfamille
     FROM individus
     LEFT JOIN rattachements ON rattachements.IDindividu = individus.IDindividu
     WHERE (mail='%s' OR travail_mail='%s'); """ % (adresse, adresse)
     DB.ExecuterReq(req)
     listeDonnees = DB.ResultatReq()
     for IDindividu, IDfamille in listeDonnees :
         UTILS_Historique.InsertActions([{
             "IDindividu" : IDindividu,
             "IDfamille" : IDfamille,
             "IDcategorie" : 33, 
             "action" : _(u"Envoi de l'Email '%s'") % sujet,
             },])
     DB.Close()
예제 #13
0
 def CreateIDindividu(self):
     """ Crée la fiche individu dans la base de données afin d'obtenir un IDindividu """
     DB = GestionDB.DB()
     date_creation = str(datetime.date.today())
     listeDonnees = [
         ("date_creation", date_creation),
         ("nom", self.dictInfosNouveau["nom"]),
         ("prenom", self.dictInfosNouveau["prenom"]),
     ]
     self.IDindividu = DB.ReqInsert("individus", listeDonnees)
     DB.Close()
     # Mémorise l'action dans l'historique
     UTILS_Historique.InsertActions([
         {
             "IDindividu": self.IDindividu,
             "IDcategorie": 11,
             "action": _(u"Création de l'individu ID%d") % self.IDindividu,
         },
     ])
예제 #14
0
    def Supprimer(self, event):
        if len(self.Selection()) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune consommation à supprimer dans la liste !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
        track = self.Selection()[0]

        # Vérifie l'état
        if track.etat in ("present", "absenti", "absentj"):
            dlg = wx.MessageDialog(self, _(u"Cette consommation ne peut pas être supprimée car elle a déjà été pointée !"), _(u"Suppression impossible"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Vérifie que le règlement n'est pas dans une période de gestion
        gestion = UTILS_Gestion.Gestion(None)
        if gestion.Verification("consommations", track.date) == False: return False

        # Demande confirmation si prestation associée
        if track.IDprestation:
            dlg = wx.MessageDialog(self, _(u"Attention, cette consommation est associée à la prestation ID%d %s. Cette prestation ne sera pas supprimée automatiquement. Souhaitez-vous tout de même continuer ?") % (track.IDprestation, track.label_prestation), _(u"Avertissement"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_EXCLAMATION)
            if dlg.ShowModal() != wx.ID_YES:
                return False

        # Demande de confirmation de suppression
        dlg = wx.MessageDialog(self, _(u"Confirmez-vous la suppression de cette consommation ?"), _(u"Suppression"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_INFORMATION)
        if dlg.ShowModal() == wx.ID_YES :
            DB = GestionDB.DB()
            DB.ReqDEL("consommations", "IDconso", track.IDconso)
            DB.Close()
            # Mémorise l'action dans l'historique
            UTILS_Historique.InsertActions([{
                "IDfamille": track.IDfamille,
                "IDcategorie": 10,
                "action": _(u"Suppression de la consommation ID%d : %s le %s pour %s %s") % (track.IDconso, track.nom_unite, track.date, track.nom, track.prenom),
                },])

            # MAJ de l'affichage
            self.MAJ()
        dlg.Destroy()
예제 #15
0
    def Inscrire(self, IDactivite=None, nomActivite="", IDgroupe=None, nomGroupe="", IDcategorie_tarif=None, nomCategorie=""):
        """ Lance la procédure d'inscription """
        tracks = self.GetCheckedObjects() 
        if len(tracks) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous devez cocher au moins un individu dans la liste !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment inscrire %d individus à l'activité '%s' ?") % (len(tracks), nomActivite), _(u"Confirmation"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_INFORMATION)
        reponse = dlg.ShowModal()
        dlg.Destroy() 
        if reponse  != wx.ID_YES :
            return
        
        dlgprogress = wx.ProgressDialog(_(u"Veuillez patienter"), _(u"Lancement de la procédure..."), maximum=len(tracks), parent=None, style= wx.PD_SMOOTH | wx.PD_ESTIMATED_TIME | wx.PD_REMAINING_TIME | wx.PD_CAN_ABORT | wx.PD_AUTO_HIDE | wx.PD_APP_MODAL)
        
        listeAnomalies = []
        listeValidees = []
        index = 0
        for track in tracks :            
            # Recherche du nom de l'individu
            if track.prenom == None :
                nomIndividu = track.nom
            else :
                nomIndividu = u"%s %s" % (track.nom, track.prenom)
            
            keepGoing, skip = dlgprogress.Update(index, _(u"[%d/%d] Inscription de %s...") % (index, len(tracks), nomIndividu))
            
            # Vérifie si individu déjà inscrit
            if track.inscrit == "oui" :
                listeAnomalies.append(_(u"%s (Famille de %s) : Individu déjà inscrit") % (nomIndividu, track.nomTitulaires))
                index += 1
                
            else :
                # Sauvegarde
                DB = GestionDB.DB()
                listeDonnees = [
                    ("IDindividu", track.IDindividu ),
                    ("IDfamille", track.IDfamille ),
                    ("IDactivite", IDactivite ),
                    ("IDgroupe", IDgroupe),
                    ("IDcategorie_tarif", IDcategorie_tarif),
                    ("IDcompte_payeur", track.IDcompte_payeur),
                    ("date_inscription", str(datetime.date.today()) ),
                    ("parti", 0),
                    ]
                IDinscription = DB.ReqInsert("inscriptions", listeDonnees)
                DB.Close()
                
                # Mémorise l'action dans l'historique
                UTILS_Historique.InsertActions([{
                    "IDindividu" : track.IDindividu,
                    "IDfamille" : track.IDfamille,
                    "IDcategorie" : 18, 
                    "action" : _(u"Inscription à l'activité '%s' sur le groupe '%s' avec la tarification '%s'") % (nomActivite, nomGroupe, nomCategorie)
                    },])
                
                # Saisie de forfaits auto
                f = DLG_Appliquer_forfait.Forfaits(IDfamille=track.IDfamille, listeActivites=[IDactivite,], listeIndividus=[track.IDindividu,], saisieManuelle=False, saisieAuto=True)
                f.Applique_forfait(selectionIDcategorie_tarif=IDcategorie_tarif, inscription=True, selectionIDactivite=IDactivite) 
                            
                # Actualise l'affichage
                self.dictInscriptions[(track.IDindividu, track.IDfamille, IDactivite)] = {"IDinscription" : IDinscription, "IDgroupe" : IDgroupe, "IDcategorie_tarif" : IDcategorie_tarif} 
                track.inscrit = "oui"
                self.RefreshObject(track)
                
                # Attente
                listeValidees.append(track)
                time.sleep(0.2)
                index += 1
            
            # Stoppe la procédure
            if keepGoing == False :
                break
            
        # Fermeture dlgprogress
        dlgprogress.Destroy()
        
        # Messages de fin
        if len(listeAnomalies) > 0 :
            message1 = _(u"%d inscriptions ont été créées avec succès mais les %d anomalies suivantes ont été trouvées :") % (len(listeValidees), len(listeAnomalies))
            message2 = u"\n".join(listeAnomalies)
            dlg = dialogs.MultiMessageDialog(self, message1, caption = _(u"Inscription"), msg2=message2, style = wx.ICON_EXCLAMATION | wx.YES|wx.YES_DEFAULT, btnLabels={wx.ID_YES : _(u"Ok")})
            reponse = dlg.ShowModal() 
            dlg.Destroy() 
        else :
            dlg = wx.MessageDialog(self, _(u"%d inscriptions ont été créées avec succès !") % len(listeValidees), _(u"Fin"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
예제 #16
0
    def Sauvegarder(self):
        """ Sauvegarde des attestations """
        # Demande la confirmation de sauvegarde
        dlg = wx.MessageDialog(
            self,
            _(u"Souhaitez-vous mémoriser les attestations ?\n\n(Cliquez NON si c'était juste un test sinon cliquez OUI)"
              ), _(u"Sauvegarde"),
            wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        reponse = dlg.ShowModal()
        dlg.Destroy()
        if reponse != wx.ID_YES:
            return

        dlgAttente = wx.BusyInfo(_(u"Sauvegarde des attestations en cours..."),
                                 None)
        if 'phoenix' not in wx.PlatformInfo:
            wx.Yield()

        DB = GestionDB.DB()

        try:
            for IDcompte_payeur, dictCompte in self.donnees.items():
                if dictCompte["select"] == True:
                    numero = dictCompte["num_attestation"]
                    IDfamille = dictCompte["IDfamille"]
                    listePrestations = dictCompte["listePrestations"]
                    total = dictCompte["total"]
                    regle = dictCompte["ventilation"]
                    solde = total - regle

                    # Liste des activités
                    texteActivites = ""
                    for IDactivite in self.listeActivites:
                        texteActivites += "%d;" % IDactivite
                    if len(self.listeActivites) > 0:
                        texteActivites = texteActivites[:-1]
                    # Liste des individus
                    texteIndividus = ""
                    for IDindividu in list(dictCompte["individus"].keys()):
                        texteIndividus += "%d;" % IDindividu
                    if len(list(dictCompte["individus"].keys())) > 0:
                        texteIndividus = texteIndividus[:-1]

                    IDutilisateur = UTILS_Identification.GetIDutilisateur()

                    # Sauvegarde de la facture
                    listeDonnees = [
                        ("numero", numero),
                        ("IDfamille", IDfamille),
                        ("date_edition", str(datetime.date.today())),
                        ("activites", texteActivites),
                        ("individus", texteIndividus),
                        ("IDutilisateur", IDutilisateur),
                        ("date_debut", str(self.date_debut)),
                        ("date_fin", str(self.date_fin)),
                        ("total", float(total)),
                        ("regle", float(regle)),
                        ("solde", float(solde)),
                    ]

                    IDattestation = DB.ReqInsert("attestations", listeDonnees)

                    # Mémorisation de l'action dans l'historique
                    UTILS_Historique.InsertActions([
                        {
                            "IDfamille":
                            IDfamille,
                            "IDcategorie":
                            27,
                            "action":
                            _(u"Edition d'une attestation de présence pour la période du %s au %s pour un total de %.02f ¤ et un solde de %.02f ¤"
                              ) %
                            (DateEngFr(str(self.date_debut)),
                             DateEngFr(str(self.date_fin)), total, solde),
                        },
                    ])

            DB.Close()
            del dlgAttente

        except Exception as err:
            DB.Close()
            del dlgAttente
            traceback.print_exc(file=sys.stdout)
            dlg = wx.MessageDialog(
                self,
                _(u"Désolé, le problème suivant a été rencontré dans la sauvegarde des attestations : \n\n%s"
                  ) % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        # Mémorisation des paramètres
        self.ctrl_parametres.MemoriserParametres()
예제 #17
0
    def Supprimer(self, event):
        if len(self.Selection()) == 0 and len(self.GetTracksCoches()) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune cotisation à supprimer dans la liste !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        if len(self.GetTracksCoches()) > 0 :
            # Suppression multiple
            listeSelections = self.GetTracksCoches()
            dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment supprimer les %d cotisations cochées ?") % len(listeSelections), _(u"Suppression"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_INFORMATION)
            reponse = dlg.ShowModal() 
            dlg.Destroy()
            if reponse != wx.ID_YES :
                return
        
        else :
            # Suppression unique
            listeSelections = self.Selection()        
            dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment supprimer la cotisation n°%s ?") % listeSelections[0].numero, _(u"Suppression"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_INFORMATION)
            reponse = dlg.ShowModal() 
            dlg.Destroy()
            if reponse != wx.ID_YES :
                return
        
        # Vérifie les droits utilisateur
        for track in listeSelections :
            if track.IDfamille != None and UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("familles_cotisations", "supprimer") == False : return
            if track.IDindividu != None and UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("individus_cotisations", "supprimer") == False : return

        # Recherche si prestation déjà présente sur facture
        listeID = []
        for track in listeSelections :
            listeID.append(track.IDcotisation) 
        if len(listeID) == 0 : conditionIDcotisation = "()"
        if len(listeID) == 1 : conditionIDcotisation = "(%d)" % listeID[0]
        else : conditionIDcotisation = str(tuple(listeID))
        
        DB = GestionDB.DB()
        req = """SELECT IDcotisation, MIN(IDfacture)
        FROM prestations
        LEFT JOIN cotisations ON cotisations.IDprestation = prestations.IDprestation
        WHERE IDcotisation IN %s
        GROUP BY cotisations.IDcotisation;""" % conditionIDcotisation
        DB.ExecuterReq(req)
        listeFactures = DB.ResultatReq()
        DB.Close() 
        if len(listeFactures) > 0 :
            nbreCotisations = 0
            for IDcotisation, IDfacture in listeFactures :
                if IDfacture != None :
                    nbreCotisations += 1
            if nbreCotisations > 0 :
                if nbreCotisations == 1 :
                    message = _(u"Cette cotisation apparaît déjà sur une facture. Il est donc impossible de la supprimer.")
                else :
                    message = _(u"%d de ces cotisations apparaissent déjà sur une ou plusieurs factures. Il est donc impossible d'effectuer la suppression.") % len(listeFactures)
                dlg = wx.MessageDialog(self, message, _(u"Suppression impossible"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                return
        
        # Suppression
        DB = GestionDB.DB()
        for track in listeSelections :
            DB.ReqDEL("cotisations", "IDcotisation", track.IDcotisation)
            if track.IDprestation != None :
                DB.ReqDEL("prestations", "IDprestation", track.IDprestation)
            
            # Mémorise l'action dans l'historique
            UTILS_Historique.InsertActions([{
                "IDindividu" : track.IDindividu,
                "IDfamille" : track.IDfamille,
                "IDcategorie" : 23, 
                "action" : _(u"Suppression de la cotisation ID%d '%s' pour la période du %s au %s") % (track.IDcotisation, track.nomCotisation, UTILS_Dates.DateEngFr(str(track.date_debut)), UTILS_Dates.DateEngFr(str(track.date_fin))),
                },])
                
            # Actualisation de l'affichage
            self.MAJ()
            
        DB.Close() 
        dlg.Destroy()
예제 #18
0
    def OnBoutonOk(self, event):
        """ Bouton Ok """
        # Vérification des données saisies
        selection = self.GetSelectionPiece()
        if selection == None:
            dlg = wx.MessageDialog(
                self, _(u"Vous n'avez sélectionné aucun type de pièce !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        # Validation de la date de début
        if self.ctrl_date_debut.FonctionValiderDate(
        ) == False or self.ctrl_date_debut.GetDate() == None:
            dlg = wx.MessageDialog(
                self, _(u"Vous devez saisir une date de début valide !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_debut.SetFocus()
            return False

        if self.radio_date_fin_1.GetValue() == True:
            if self.ctrl_date_fin.FonctionValiderDate(
            ) == False or self.ctrl_date_fin.GetDate() == None:
                dlg = wx.MessageDialog(
                    self, _(u"Vous devez saisir une date de fin valide !"),
                    _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_date_fin.SetFocus()
                return False

        # Vérifie que la date de fin est supérieure à la date de début
        if self.radio_date_fin_1.GetValue() == True:
            if self.ctrl_date_debut.GetDate() > self.ctrl_date_fin.GetDate():
                dlg = wx.MessageDialog(
                    self,
                    _(u"Attention, la date de début est supérieure à la date de fin !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_date_fin.SetFocus()
                return False

        # Sauvegarde
        IDtype_piece = selection["IDtype_piece"]
        IDindividu = selection["IDindividu"]
        IDfamille = selection["IDfamille"]
        date_debut = str(self.ctrl_date_debut.GetDate())
        if self.radio_date_fin_1.GetValue() == True:
            date_fin = str(self.ctrl_date_fin.GetDate())
        else:
            date_fin = "2999-01-01"

        DB = GestionDB.DB()
        listeDonnees = [
            ("IDtype_piece", IDtype_piece),
            ("IDindividu", IDindividu),
            ("IDfamille", IDfamille),
            ("date_debut", date_debut),
            ("date_fin", date_fin),
        ]
        if self.IDpiece == None:
            nouvellePiece = True
            self.IDpiece = DB.ReqInsert("pieces", listeDonnees)
        else:
            nouvellePiece = False
            DB.ReqMAJ("pieces", listeDonnees, "IDpiece", self.IDpiece)
        DB.Close()

        # Mémorise l'action dans l'historique
        if nouvellePiece == True:
            type = _(u"Saisie")
            IDcategorie = 15
        else:
            type = _(u"Modification")
            IDcategorie = 16
        if IDindividu != None and IDfamille != None:
            texteDetail = _(u"pour l'individu ID%d et la famille ID%d") % (
                IDindividu, IDfamille)
        elif IDindividu == None and IDfamille != None:
            texteDetail = _(u"pour la famille ID%d") % IDfamille
        elif IDindividu != None and IDfamille == None:
            texteDetail = _(u"pour l'individu ID%d") % IDindividu
        else:
            texteDetail = u""
        nomPiece = selection["nomPiece"]
        UTILS_Historique.InsertActions([
            {
                "IDindividu":
                IDindividu,
                "IDfamille":
                self.IDfamille,
                "IDcategorie":
                IDcategorie,
                "action":
                _(u"%s de la pièce ID%d '%s' %s") %
                (type, self.IDpiece, nomPiece, texteDetail),
            },
        ])

        # Sauvegarde des pages scannées
        self.ctrl_pages.Sauvegarde(self.IDpiece)

        # Fermeture
        self.EndModal(wx.ID_OK)
    def OnBoutonOk(self, event):
        date_debut = self.ctrl_date_debut.GetDate()
        date_fin = self.ctrl_date_fin.GetDate()
        IDniveau = self.ctrl_niveau.GetNiveau()
        listeIndividus = self.ctrl_individus.GetCoches()

        # Vérification de la saisie
        if date_debut == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement saisir une date de début de période !"
                  ), _(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 période !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_fin.SetFocus()
            return

        if IDniveau == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement sélectionner un niveau scolaire !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_niveau.SetFocus()
            return

        if len(listeIndividus) == 0:
            dlg = wx.MessageDialog(
                self, _(u"Vous n'avez sélectionné aucun individu !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Demande de confirmation d'enregistrement
        dlg = wx.MessageDialog(
            self,
            _(u"Confirmez-vous l'inscription de %d individus ?") %
            len(listeIndividus), _(u"Confirmation"),
            wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
        if dlg.ShowModal() != wx.ID_YES:
            dlg.Destroy()
            return
        dlg.Destroy()

        # Fenêtre d'attente
        dlgAttente = wx.BusyInfo(
            _(u"Veuillez patienter durant la procédure d'inscription..."),
            None)
        if 'phoenix' not in wx.PlatformInfo:
            wx.Yield()

        # Récupère infos pour historique
        DB = GestionDB.DB()
        req = """SELECT ecoles.nom, classes.nom, classes.date_debut, classes.date_fin
        FROM classes 
        LEFT JOIN ecoles ON ecoles.IDecole = classes.IDecole
        WHERE classes.IDclasse=%d
        ;""" % self.IDclasse
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        DB.Close()

        nomEcole = listeDonnees[0][0]
        nomClasse = listeDonnees[0][1]
        date_debut_classe = listeDonnees[0][2]
        date_fin_classe = listeDonnees[0][3]
        nomClasse = _(u"%s (Du %s au %s)") % (nomClasse,
                                              DateEngFr(date_debut_classe),
                                              DateEngFr(date_fin_classe))
        nomNiveau = self.ctrl_niveau.GetStringSelection()

        # Init Sauvegarde
        listeProblemes = []
        nbreValides = 0
        DB = GestionDB.DB()
        for IDindividu in listeIndividus:

            # Vérifie que l'individu n'est pas déjà inscrit dans une classe sur cette période
            donneesScolarite = self.parent.GetScolariteIndividu(IDindividu)
            valide = True
            for track in donneesScolarite:
                if date_debut <= track.dateFinDD and date_fin >= track.dateDebutDD:
                    date_debut_temp = DateEngFr(track.date_debut)
                    date_fin_temp = DateEngFr(track.date_fin)
                    nomEcole_temp = track.nomEcole
                    nomClasse_temp = track.nomClasse
                    nomIndividu_temp = u"%s %s" % (track.prenom, track.nom)
                    listeProblemes.append(
                        _(u"- %s (déjà dans la classe de %s du %s au %s)\n")
                        % (nomIndividu_temp, nomClasse_temp, date_debut_temp,
                           date_fin_temp))
                    valide = False
                    break

            if valide == True:
                nbreValides += 1

                # Sauvegarde
                listeDonnees = [
                    ("IDindividu", IDindividu),
                    ("date_debut", date_debut),
                    ("date_fin", date_fin),
                    ("IDecole", self.IDecole),
                    ("IDclasse", self.IDclasse),
                    ("IDniveau", IDniveau),
                ]
                IDscolarite = DB.ReqInsert("scolarite", listeDonnees)

                # Mémorisation dans l'historique
                UTILS_Historique.InsertActions([
                    {
                        "IDindividu":
                        IDindividu,
                        "IDfamille":
                        None,
                        "IDcategorie":
                        30,
                        "action":
                        _(u"Inscription scolaire du %s au %s. Ecole : '%s'. Classe : '%s'. Niveau : '%s'"
                          ) %
                        (DateEngFr(str(date_debut)), DateEngFr(
                            str(date_fin)), nomEcole, nomClasse, nomNiveau)
                    },
                ])

        DB.Close()

        del dlgAttente

        # Informations
        if len(listeProblemes) > 0:
            message = _(
                u"%d inscriptions ont été enregistrées sauf pour les individus suivants :\n\n%s"
            ) % (nbreValides, "".join(listeProblemes))
        else:
            message = _(
                u"%d inscriptions ont été enregistrées avec succès."
            ) % nbreValides
        dlg = wx.MessageDialog(self, message, _(u"Information"),
                               wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()

        # Fermeture
        self.EndModal(wx.ID_OK)
예제 #20
0
    def SauvegardeReglements(self, date=None, IDcompte=None, IDmode=None):
        """ A effectuer après la sauvegarde des prélèvements """
        DB = GestionDB.DB()

        # Recherche des payeurs
        req = """SELECT IDpayeur, IDcompte_payeur, nom
        FROM payeurs;"""
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        dictPayeurs = {}
        for IDpayeur, IDcompte_payeur, nom in listeDonnees:
            if dictPayeurs.has_key(IDcompte_payeur) == False:
                dictPayeurs[IDcompte_payeur] = []
            dictPayeurs[IDcompte_payeur].append({
                "nom": nom,
                "IDpayeur": IDpayeur
            })

        # Récupération des prestations à ventiler pour chaque facture
        listeIDfactures = []
        for track in self.GetObjects():
            if track.IDfacture != None:
                listeIDfactures.append(track.IDfacture)

        if len(listeIDfactures) == 0: conditionFactures = "()"
        elif len(listeIDfactures) == 1:
            conditionFactures = "(%d)" % listeIDfactures[0]
        else:
            conditionFactures = str(tuple(listeIDfactures))

        req = """SELECT 
        prestations.IDprestation, prestations.IDcompte_payeur, prestations.montant, 
        prestations.IDfacture, SUM(ventilation.montant) AS montant_ventilation
        FROM prestations
        LEFT JOIN ventilation ON prestations.IDprestation = ventilation.IDprestation
        WHERE prestations.IDfacture IN %s
        GROUP BY prestations.IDprestation
        ;""" % conditionFactures
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()

        dictFactures = {}
        for IDprestation, IDcompte_payeur, montant, IDfacture, ventilation in listeDonnees:
            if ventilation == None:
                ventilation = 0.0
            montant = decimal.Decimal(montant)
            ventilation = decimal.Decimal(ventilation)
            aventiler = montant - ventilation
            if aventiler > decimal.Decimal(0.0):
                if dictFactures.has_key(IDfacture) == False:
                    dictFactures[IDfacture] = []
                dictFactures[IDfacture].append({
                    "IDprestation": IDprestation,
                    "IDcompte_payeur": IDcompte_payeur,
                    "montant": montant,
                    "ventilation": ventilation,
                    "aventiler": aventiler
                })

        # Sauvegarde des règlements + ventilation
        listeSuppressionReglements = []
        listeHistoriqueAjouts = []
        for track in self.GetObjects():

            # Ajouts et modifications
            if track.reglement == True:

                # Recherche du payeur
                IDpayeur = None
                if dictPayeurs.has_key(track.IDcompte_payeur):
                    for dictPayeur in dictPayeurs[track.IDcompte_payeur]:
                        if dictPayeur["nom"] == track.titulaire:
                            IDpayeur = dictPayeur["IDpayeur"]

                # Si pas de payeur correspond au titulaire du compte trouvé :
                if IDpayeur == None:
                    IDpayeur = DB.ReqInsert(
                        "payeurs", [("IDcompte_payeur", track.IDcompte_payeur),
                                    ("nom", track.titulaire)])

                # Création des données à sauvegarder
                listeDonnees = [
                    ("IDcompte_payeur", track.IDcompte_payeur),
                    ("date", date),
                    ("IDmode", IDmode),
                    ("IDemetteur", None),
                    ("numero_piece", None),
                    ("montant", track.montant),
                    ("IDpayeur", IDpayeur),
                    ("observations", None),
                    ("numero_quittancier", None),
                    ("IDcompte", IDcompte),
                    ("date_differe", None),
                    ("encaissement_attente", 0),
                    ("date_saisie", datetime.date.today()),
                    ("IDutilisateur", UTILS_Identification.GetIDutilisateur()),
                    ("IDprelevement", track.IDprelevement),
                ]

                # Ajout
                if track.IDreglement == None:
                    track.IDreglement = DB.ReqInsert("reglements",
                                                     listeDonnees)
                    listeHistoriqueAjouts.append(
                        self.MemoriseReglementHistorique(
                            mode="saisie",
                            IDfamille=track.IDfamille,
                            IDreglement=track.IDreglement,
                            montant=track.montant))

                # Modification
                else:
                    DB.ReqMAJ("reglements", listeDonnees, "IDreglement",
                              track.IDreglement)
                    #listeHistoriqueAjouts.append(self.MemoriseReglementHistorique(mode="modification", IDfamille=track.IDfamille, IDreglement=track.IDreglement, montant=track.montant))
                track.dateReglement = date

                # ----------- Sauvegarde de la ventilation ---------
                if dictFactures.has_key(track.IDfacture):
                    for dictFacture in dictFactures[track.IDfacture]:
                        listeDonnees = [
                            ("IDreglement", track.IDreglement),
                            ("IDcompte_payeur", track.IDcompte_payeur),
                            ("IDprestation", dictFacture["IDprestation"]),
                            ("montant", float(dictFacture["aventiler"])),
                        ]
                        IDventilation = DB.ReqInsert("ventilation",
                                                     listeDonnees)

            # Suppression de règlements et ventilation
            else:

                if track.IDreglement != None:
                    DB.ReqDEL("reglements", "IDreglement", track.IDreglement)
                    DB.ReqDEL("ventilation", "IDreglement", track.IDreglement)
                    listeHistoriqueAjouts.append(
                        self.MemoriseReglementHistorique(
                            mode="suppression",
                            IDfamille=track.IDfamille,
                            IDreglement=track.IDreglement,
                            montant=track.montant))

            # MAJ du track
            self.RefreshObject(track)

            # Sauvegarde dans historique

        DB.Close()

        # Sauvegarde dans historique
        UTILS_Historique.InsertActions(listeHistoriqueAjouts)
예제 #21
0
    def Detacher(self):
        """ Processus de détachement d'une fiche individuelle """
        DB = GestionDB.DB()

        # Vérifie si des pièces n'existent pas
        req = """
        SELECT IDpiece, IDtype_piece
        FROM pieces
        WHERE IDindividu=%d and IDfamille=%d
        """ % (self.IDindividu, self.IDfamille)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous ne pouvez pas détacher cette fiche car %d pièce(s) existent déjà pour cet individu sur cette fiche famille !"
                  ) % len(listeDonnees), _(u"Détachement impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return False

        # Vérifie si des cotisations n'existent pas
        req = """
        SELECT IDcotisation, IDfamille
        FROM cotisations
        WHERE IDindividu=%d and IDfamille=%d
        """ % (self.IDindividu, self.IDfamille)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous ne pouvez pas détacher cette fiche car %d cotisation(s) individuelle(s) existe(nt) déjà pour cet individu sur cette fiche famille !"
                  ) % len(listeDonnees), _(u"Détachement impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return False

        # Vérifie si des inscriptions n'existent pas
        req = """
        SELECT IDinscription, IDactivite
        FROM inscriptions
        WHERE IDindividu=%d and IDfamille=%d
        """ % (self.IDindividu, self.IDfamille)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous ne pouvez pas détacher cette fiche car cet individu est déjà inscrit à %d activité(s) sur cette fiche famille !"
                  ) % len(listeDonnees), _(u"Détachement impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return False

        # Vérifie si des consommations n'existent pas
        req = """
        SELECT IDconso, IDactivite
        FROM consommations
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = consommations.IDcompte_payeur
        WHERE consommations.IDindividu=%d and IDfamille=%d
        """ % (self.IDindividu, self.IDfamille)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous ne pouvez pas détacher cette fiche car %d consommation(s) ont déjà été enregistrée(s) pour cet individu sur cette fiche famille !"
                  ) % len(listeDonnees), _(u"Détachement impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return False

        # Vérifie si des prestations n'existent pas
        req = """
        SELECT IDprestation, label
        FROM prestations
        WHERE IDindividu=%d and IDfamille=%d
        """ % (self.IDindividu, self.IDfamille)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous ne pouvez pas détacher cette fiche car %d prestations(s) ont déjà été enregistrée(s) pour cet individu sur cette fiche famille !"
                  ) % len(listeDonnees), _(u"Détachement impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return False

        # Vérifie si des messages n'existent pas
        req = """
        SELECT IDmessage, type
        FROM messages
        WHERE IDindividu=%d and IDfamille=%d
        """ % (self.IDindividu, self.IDfamille)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous ne pouvez pas détacher cette fiche car %d message(s) ont déjà été enregistré(s) pour cet individu sur cette fiche famille !"
                  ) % len(listeDonnees), _(u"Détachement impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return False

        # Compte le nbre d'individus présents dans la fiche
        req = """
        SELECT IDrattachement, IDindividu
        FROM rattachements
        WHERE IDindividu<>%d AND IDfamille=%d
        """ % (self.IDindividu, self.IDfamille)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        nbreAutresIndividus = len(listeDonnees)

        # Vérifie qu'il ne s'agit pas du dernier titulaire
        req = """
        SELECT IDrattachement, IDindividu
        FROM rattachements
        WHERE IDcategorie=1 AND titulaire=1 AND IDindividu<>%d AND IDfamille=%d
        """ % (self.IDindividu, self.IDfamille)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) == 0:
            dernierTitulaire = True
        else:
            dernierTitulaire = False
        if dernierTitulaire == True:
            if nbreAutresIndividus > 0:
                # S'il s'agit du dernier titulaire mais qu'il y a d'autres membres dans la fiche famille
                dlg = wx.MessageDialog(
                    self,
                    _(u"Il s'agit du dernier titulaire du dossier, vous ne pouvez donc pas le détacher !\n\n(Si vous souhaitez supprimer la fiche famille, commencez pas détacher ou supprimer tous les autres membres de cette fiche)"
                      ), _(u"Détachement impossible"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                DB.Close()
                return False
            else:
                # S'il s'agit du dernier membre de la famille
                dlg = wx.MessageDialog(
                    self,
                    _(u"Il s'agit du dernier membre de cette famille.\n\nSouhaitez-vous détacher la fiche individuelle et supprimer la fiche famille ?"
                      ), _(u"Confirmation"), wx.YES_NO | wx.NO_DEFAULT
                    | wx.CANCEL | wx.ICON_EXCLAMATION)
                reponse = dlg.ShowModal()
                dlg.Destroy()
                if reponse != wx.ID_YES:
                    dlg = wx.MessageDialog(
                        self,
                        _(u"Vous ne pouvez pas détacher le dernier membre d'une famille sans supprimer la fiche famille !"
                          ), _(u"Détachement impossible"),
                        wx.OK | wx.ICON_ERROR)
                    dlg.ShowModal()
                    dlg.Destroy()
                    return False

                # Vérifie qu'il est possible de supprimer la fiche famille
                req = """SELECT IDaide, nom FROM aides WHERE IDfamille=%d""" % self.IDfamille
                DB.ExecuterReq(req)
                listeDonnees = DB.ResultatReq()
                if len(listeDonnees) > 0:
                    dlg = wx.MessageDialog(
                        self,
                        _(u"Vous ne pouvez pas supprimer la fiche famille car il y a déjà %d aide(s) journalière(s) enregistrée(s) dans cette fiche."
                          ) % len(listeDonnees), _(u"Détachement impossible"),
                        wx.OK | wx.ICON_ERROR)
                    dlg.ShowModal()
                    dlg.Destroy()
                    return False

                req = """SELECT IDcotisation, IDfamille FROM cotisations WHERE IDfamille=%d""" % self.IDfamille
                DB.ExecuterReq(req)
                listeDonnees = DB.ResultatReq()
                if len(listeDonnees) > 0:
                    dlg = wx.MessageDialog(
                        self,
                        _(u"Vous ne pouvez pas supprimer la fiche famille car il y a déjà %d cotisation(s) enregistrée(s) dans cette fiche."
                          ) % len(listeDonnees), _(u"Détachement impossible"),
                        wx.OK | wx.ICON_ERROR)
                    dlg.ShowModal()
                    dlg.Destroy()
                    return False

                req = """SELECT IDreglement, date FROM reglements 
                LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = reglements.IDcompte_payeur
                WHERE IDfamille=%d""" % self.IDfamille
                DB.ExecuterReq(req)
                listeDonnees = DB.ResultatReq()
                if len(listeDonnees) > 0:
                    dlg = wx.MessageDialog(
                        self,
                        _(u"Vous ne pouvez pas supprimer la fiche famille car il y a déjà %d règlement(s) enregistré(s) dans cette fiche."
                          ) % len(listeDonnees), _(u"Détachement impossible"),
                        wx.OK | wx.ICON_ERROR)
                    dlg.ShowModal()
                    dlg.Destroy()
                    return False

                # Détachement de la fiche individu
                req = "DELETE FROM rattachements WHERE IDfamille=%d AND IDindividu=%d;" % (
                    self.IDfamille, self.IDindividu)
                DB.ExecuterReq(req)

                DB.Commit()
                DB.Close()

                # Fermeture de la fiche famille
                return "famille"

        else:
            # Suppression du rattachement de l'individu
            dlg = wx.MessageDialog(
                self, _(u"Etes-vous sûr de vouloir détacher cette fiche ?"),
                _(u"Confirmation"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
            reponse = dlg.ShowModal()
            dlg.Destroy()
            if reponse != wx.ID_YES:
                return False
            req = "DELETE FROM rattachements WHERE IDfamille=%d AND IDindividu=%d;" % (
                self.IDfamille, self.IDindividu)
            DB.ExecuterReq(req)
            DB.Commit()
            DB.Close()

            # Mémorise l'action dans l'historique
            UTILS_Historique.InsertActions([
                {
                    "IDfamille":
                    self.IDfamille,
                    "IDindividu":
                    self.IDindividu,
                    "IDcategorie":
                    14,
                    "action":
                    _(u"Détachement de la fiche individuelle ID%d de la famille ID %d"
                      ) % (self.IDindividu, self.IDfamille),
                },
            ])

            return True
    def Sauvegarde(self):
        # Récupération des tracks
        liste_tracks = self.ctrl_listview.GetTracksCoches()

        # Récupération des paramètres
        IDtype_cotisation = self.ctrl_parametres.ctrl_type.GetID()
        IDunite_cotisation = self.ctrl_parametres.ctrl_unite.GetID()
        date_saisie = self.ctrl_parametres.date_saisie
        IDutilisateur = self.ctrl_parametres.IDutilisateur
        date_debut = self.ctrl_parametres.ctrl_date_debut.GetDate()
        date_fin = self.ctrl_parametres.ctrl_date_fin.GetDate()
        activites = self.ctrl_parametres.ctrl_activites.GetDonnees(
            format="texte")
        observations = self.ctrl_parametres.ctrl_observations.GetValue()

        # Création de la carte
        if self.ctrl_parametres.ctrl_creation.GetValue() == True:
            numero_manuel = self.ctrl_parametres.radio_numero_manuel.GetValue()
            date_creation_carte = self.ctrl_parametres.ctrl_date_creation.GetDate(
            )
            numero = self.ctrl_parametres.ctrl_numero.GetValue()
        else:
            numero_manuel = False
            date_creation_carte = None
            numero = None

        # Confirmation
        dlg = wx.MessageDialog(
            self,
            _(u"Confirmez-vous la génération de %d cotisations ?") %
            len(liste_tracks), _(u"Confirmation"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        reponse = dlg.ShowModal()
        dlg.Destroy()
        if reponse != wx.ID_YES:
            return False

        # Sauvegarde
        DB = GestionDB.DB()

        dlgprogress = wx.ProgressDialog(_(u"Génération des cotisations"),
                                        _(u"Veuillez patienter..."),
                                        maximum=len(liste_tracks),
                                        parent=None,
                                        style=wx.PD_SMOOTH | wx.PD_AUTO_HIDE
                                        | wx.PD_APP_MODAL)
        index = 1
        for track in liste_tracks:

            dlgprogress.Update(
                index,
                _(u"Génération de la cotisation %d sur %d") %
                (index, len(liste_tracks)))

            if numero_manuel == True:
                numero = track.numero

            listeDonnees = [
                ("IDfamille", track.IDfamille),
                ("IDindividu", track.IDindividu),
                ("IDtype_cotisation", IDtype_cotisation),
                ("IDunite_cotisation", IDunite_cotisation),
                ("date_saisie", date_saisie),
                ("IDutilisateur", IDutilisateur),
                ("date_creation_carte", date_creation_carte),
                ("numero", numero),
                ("date_debut", date_debut),
                ("date_fin", date_fin),
                ("observations", observations),
                ("activites", activites),
            ]
            IDcotisation = DB.ReqInsert("cotisations", listeDonnees)

            # Sauvegarde de la prestation
            facturer = self.ctrl_parametres.ctrl_facturer.GetValue()
            date_facturation = self.ctrl_parametres.ctrl_date_prestation.GetDate(
            )
            montant = self.ctrl_parametres.ctrl_montant.GetMontant()
            label_prestation = self.ctrl_parametres.ctrl_label.GetValue()

            if facturer == True:

                # Création d'une prestation
                listeDonnees = [
                    ("IDcompte_payeur", track.IDcompte_payeur),
                    ("date", date_facturation),
                    ("categorie", "cotisation"),
                    ("label", label_prestation),
                    ("montant_initial", montant),
                    ("montant", montant),
                    ("IDfamille", track.IDfamille),
                    ("IDindividu", track.IDindividu),
                ]
                listeDonnees.append(
                    ("date_valeur", str(datetime.date.today())))
                IDprestation = DB.ReqInsert("prestations", listeDonnees)

                # Insertion du IDprestation dans la cotisation
                DB.ReqMAJ("cotisations", [
                    ("IDprestation", IDprestation),
                ], "IDcotisation", IDcotisation)

            # Mémorise l'action dans l'historique
            date_debut_periode = UTILS_Dates.DateEngFr(str(date_debut))
            date_fin_periode = UTILS_Dates.DateEngFr(str(date_fin))
            UTILS_Historique.InsertActions([
                {
                    "IDindividu":
                    track.IDindividu,
                    "IDfamille":
                    track.IDfamille,
                    "IDcategorie":
                    21,
                    "action":
                    _(u"Saisie de la cotisation ID%d '%s' pour la période du %s au %s"
                      ) % (IDcotisation, label_prestation, date_debut_periode,
                           date_fin_periode),
                },
            ])

            # Génération du prochain numéro de cotisation
            if numero != None:
                numero = UTILS_Texte.Incrementer(numero)

            index += 1

        DB.Close()
        dlgprogress.Destroy()

        # Succès
        dlg = wx.MessageDialog(
            self,
            _(u"Les %d cotisations ont été générées avec succès.") %
            len(liste_tracks), _(u"Fin"), wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()

        return True
예제 #23
0
    def Supprimer(self, event):
        if self.IDcompte_payeur != None and UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel(
                "familles_reglements", "supprimer") == False:
            return

        if len(self.Selection()) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez sélectionné aucun règlement à supprimer dans la liste"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
        track = self.Selection()[0]
        IDreglement = self.Selection()[0].IDreglement
        IDdepot = self.Selection()[0].IDdepot

        # Si appartient à un dépot : annulation
        if IDdepot != None:
            dlg = wx.MessageDialog(
                self,
                _(u"Ce règlement est déjà attribué à un dépôt. Vous ne pouvez donc pas le supprimer !"
                  ), _(u"Règlement déposé"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Avertissement si appartient à un prélèvement
        if self.Selection()[0].IDprelevement != None:
            dlg = wx.MessageDialog(
                self,
                _(u"Ce règlement est rattaché à un prélèvement automatique.\n\nSouhaitez-vous vraiment le supprimer ?"
                  ), _(u"Avertissement"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION)
            reponse = dlg.ShowModal()
            dlg.Destroy()
            if reponse != wx.ID_YES:
                return

        # Vérifie que le règlement n'est pas dans une période de gestion
        gestion = UTILS_Gestion.Gestion(None)
        if gestion.Verification("reglements", track.date) == False:
            return False

        # Recherche si frais de gestion existant pour ce règlement
        DB = GestionDB.DB()
        req = """SELECT IDprestation, montant_initial, label
        FROM prestations
        WHERE reglement_frais=%d;
        """ % IDreglement
        DB.ExecuterReq(req)
        listeFrais = DB.ResultatReq()
        DB.Close()
        if len(listeFrais) > 0:
            IDprestationFrais, montantFrais, labelFrais = listeFrais[0]
            dlg = wx.MessageDialog(
                self,
                _(u"Une prestation d'un montant de %.2f %s pour frais de gestion est associée à ce règlement. Cette prestation sera automatiquement supprimée en même temps que le règlement.\n\nConfirmez-vous tout de même la suppression de ce règlement ?"
                  ) % (montantFrais, SYMBOLE), _(u"Avertissement"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION)
            if dlg.ShowModal() != wx.ID_YES:
                return
        else:
            IDprestationFrais = None

        # Demande de confirmation de suppression
        dlg = wx.MessageDialog(
            self, _(u"Confirmez-vous la suppression de ce règlement ?"),
            _(u"Suppression"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        if dlg.ShowModal() == wx.ID_YES:
            DB = GestionDB.DB()
            DB.ReqDEL("reglements", "IDreglement", IDreglement)
            DB.ReqDEL("ventilation", "IDreglement", IDreglement)
            # Mémorise l'action dans l'historique
            req = """SELECT IDfamille
            FROM comptes_payeurs
            WHERE IDcompte_payeur=%d
            """ % self.Selection()[0].compte_payeur
            DB.ExecuterReq(req)
            IDfamille = DB.ResultatReq()[0][0]

            montant = u"%.2f ¤" % self.Selection()[0].montant
            texteMode = self.Selection()[0].nom_mode
            textePayeur = self.Selection()[0].nom_payeur
            UTILS_Historique.InsertActions([
                {
                    "IDfamille":
                    IDfamille,
                    "IDcategorie":
                    8,
                    "action":
                    _(u"Suppression du règlement ID%d : %s en %s payé par %s"
                      ) % (IDreglement, montant, texteMode, textePayeur),
                },
            ])

            # Suppression des frais de gestion
            if IDprestationFrais != None:
                DB.ReqDEL("prestations", "IDprestation", IDprestationFrais)
                DB.ReqDEL("ventilation", "IDprestation", IDprestationFrais)

            DB.Close()

            # MAJ de l'affichage
            self.MAJ()
        dlg.Destroy()
예제 #24
0
    def OnBoutonOk(self, event):
        # Vérification des données saisies
        IDactivite = self.GetIDactivite()
        if IDactivite == None :
            dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement sélectionner une activité !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        IDgroupe = self.ctrl_groupes.GetID()
        if IDgroupe == None :
            dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement sélectionner un groupe !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        IDcategorie_tarif = self.ctrl_categories.GetID()
        if IDcategorie_tarif == None :
            dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement sélectionner une catégorie de tarifs !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Verrouillage utilisateurs
        if self.mode == "saisie" :
            action = "creer"
        else :
            action = "modifier"
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("individus_inscriptions", action, IDactivite=IDactivite) == False :
            return

        # Vérification du nombre d'inscrits max de l'activité
        if self.mode == "saisie" and self.dictActivite["nbre_places_disponibles"] != None :
            if self.dictActivite["nbre_places_disponibles"] <= 0 :
                dlg = wx.MessageDialog(None, _(u"Le nombre maximal d'inscrits autorisé pour cette activité (%d places max) a été atteint !\n\nSouhaitez-vous tout de même inscrire cet individu ?") % self.dictActivite["nbre_inscrits_max"], _(u"Nbre d'inscrit maximal atteint"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_EXCLAMATION)
                reponse = dlg.ShowModal()
                dlg.Destroy()
                if reponse != wx.ID_YES :
                    return

        # Vérification du nombre d'inscrits max du groupe
        if IDgroupe != self.IDgroupe :
            for dictGroupe in self.dictActivite["groupes"] :
                if dictGroupe["IDgroupe"] == IDgroupe and dictGroupe["nbre_places_disponibles"] != None :
                    if dictGroupe["nbre_places_disponibles"] <= 0 :
                        dlg = wx.MessageDialog(None, _(u"Le nombre maximal d'inscrits autorisé sur ce groupe (%d places max) a été atteint !\n\nSouhaitez-vous tout de même inscrire cet individu ?") % dictGroupe["nbre_inscrits_max"], _(u"Nbre d'inscrit maximal atteint"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_EXCLAMATION)
                        reponse = dlg.ShowModal()
                        dlg.Destroy()
                        if reponse != wx.ID_YES :
                            return

        # Récupération autres variables
        IDfamille = self.ctrl_famille.GetID()
        nomActivite = self.ctrl_activite.GetNomActivite()
        nomGroupe = self.ctrl_groupes.GetStringSelection()
        nomCategorie = self.ctrl_categories.GetStringSelection()
        IDcompte_payeur = self.GetCompteFamille(IDfamille)
        parti = self.ctrl_parti.GetValue()

        DB = GestionDB.DB()

        # Vérifie que l'individu n'est pas déjà inscrit à cette activite
        if self.mode == "saisie" :
            req = """SELECT IDinscription, IDindividu, IDfamille
            FROM inscriptions
            WHERE IDindividu=%d AND IDfamille=%d AND IDactivite=%d;""" % (self.IDindividu, IDfamille, IDactivite)
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            if len(listeDonnees) > 0 :
                DB.Close()
                dlg = wx.MessageDialog(self, _(u"Cet individu est déjà inscrit à l'activité '%s' !") % nomActivite, _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                return

        # Sauvegarde
        listeDonnees = [
            ("IDindividu", self.IDindividu),
            ("IDfamille", IDfamille),
            ("IDactivite", IDactivite),
            ("IDgroupe", IDgroupe),
            ("IDcategorie_tarif", IDcategorie_tarif),
            ("IDcompte_payeur", IDcompte_payeur),
            ("parti", parti),
            ]
        if self.mode == "saisie" :
            listeDonnees.append(("date_inscription", str(datetime.date.today())))
            self.IDinscription = DB.ReqInsert("inscriptions", listeDonnees)
        else :
            DB.ReqMAJ("inscriptions", listeDonnees, "IDinscription", self.IDinscription)
        DB.Close()

        # Mémorise l'action dans l'historique
        if self.mode == "saisie" :
            IDcategorie_historique = 18
            texte_historique = _(u"Inscription à l'activité '%s' sur le groupe '%s' avec la tarification '%s'") % (nomActivite, nomGroupe, nomCategorie)
        else :
            IDcategorie_historique = 20
            texte_historique = _(u"Modification de l'inscription à l'activité '%s' sur le groupe '%s' avec la tarification '%s'") % (nomActivite, nomGroupe, nomCategorie)

        UTILS_Historique.InsertActions([{
            "IDindividu" : self.IDindividu,
            "IDfamille" : IDfamille,
            "IDcategorie" : IDcategorie_historique,
            "action" : texte_historique,
            },])

        # Saisie de forfaits auto
        f = DLG_Appliquer_forfait.Forfaits(IDfamille=IDfamille, listeActivites=[IDactivite,], listeIndividus=[self.IDindividu,], saisieManuelle=False, saisieAuto=True)
        f.Applique_forfait(selectionIDcategorie_tarif=IDcategorie_tarif, inscription=True, selectionIDactivite=IDactivite)

        # Fermeture de la fenêtre
        self.EndModal(wx.ID_OK)
예제 #25
0
    def Sauvegarde(self):
        # Récupération des tracks
        liste_tracks = self.ctrl_listview.GetTracksCoches()

        # Récupération des paramètres
        IDtype_cotisation = self.ctrl_parametres.ctrl_type.GetID()
        IDunite_cotisation = self.ctrl_parametres.ctrl_unite.GetID()
        date_saisie = self.ctrl_parametres.date_saisie
        IDutilisateur = self.ctrl_parametres.IDutilisateur
        date_debut = self.ctrl_parametres.ctrl_date_debut.GetDate()
        date_fin = self.ctrl_parametres.ctrl_date_fin.GetDate()
        activites = self.ctrl_parametres.ctrl_activites.GetDonnees(
            format="texte")
        observations = self.ctrl_parametres.ctrl_observations.GetValue()
        type_cotisation = self.ctrl_parametres.ctrl_type.GetDetailDonnees(
        )["type"]

        # Vérifie que les cotisations n'existent pas déj�
        liste_IDindividu = [
            track.IDindividu for track in liste_tracks
            if track.IDindividu != None
        ]
        if len(liste_IDindividu) == 1:
            condition_individus = "AND cotisations.IDindividu == %d" % liste_IDindividu[
                0]
        elif len(liste_IDindividu) > 1:
            condition_individus = "AND cotisations.IDindividu IN %s" % str(
                tuple(liste_IDindividu))
        else:
            condition_individus = ""

        liste_IDfamille = [
            track.IDfamille for track in liste_tracks
            if track.IDfamille != None
        ]
        if len(liste_IDfamille) == 1:
            condition_familles = "AND cotisations.IDfamille == %d" % liste_IDfamille[
                0]
        elif len(liste_IDfamille) > 1:
            condition_familles = "AND cotisations.IDfamille IN %s" % str(
                tuple(liste_IDfamille))
        else:
            condition_familles = ""

        DB = GestionDB.DB()
        req = """SELECT IDcotisation, IDfamille, cotisations.IDindividu, numero, individus.prenom, individus.nom
        FROM cotisations 
        LEFT JOIN individus ON individus.IDindividu = cotisations.IDindividu 
        WHERE IDtype_cotisation=%d AND IDunite_cotisation=%d
        %s %s;""" % (IDtype_cotisation, IDunite_cotisation,
                     condition_individus, condition_familles)
        DB.ExecuterReq(req)
        listeCotisationsExistantes = DB.ResultatReq()
        DB.Close()
        if len(listeCotisationsExistantes) > 0:
            dictTitulaires = UTILS_Titulaires.GetTitulaires()
            liste_details = []
            for IDcotisation, IDfamille, IDindividu, numero, prenom_individu, nom_individu in listeCotisationsExistantes:
                # Si cotisation familiale
                if IDfamille != None and IDfamille in dictTitulaires:
                    nom_famille = dictTitulaires[IDfamille][
                        "titulairesSansCivilite"]
                    liste_details.append(
                        _(u"Famille de %s : Cotisation n°%s") %
                        (nom_famille, numero))
                # Si cotisation individuelle
                if IDindividu != None:
                    if prenom_individu == None: prenom_individu = ""
                    liste_details.append(
                        _(u"%s %s : Cotisation n°%s") %
                        (nom_individu, prenom_individu, numero))
            # Demande si on continue ou non
            intro = _(
                u"Les cotisations suivantes existent déjà avec le même type et la même unité de cotisation :"
            )
            conclusion = _(
                u"Souhaitez-vous quand même les générer une nouvelle fois ?"
            )
            detail = "\n".join(liste_details)
            dlg = DLG_Messagebox.Dialog(
                self,
                titre=_(u"Avertissement"),
                introduction=intro,
                detail=detail,
                conclusion=conclusion,
                icone=wx.ICON_EXCLAMATION,
                boutons=[_(u"Oui"), _(u"Non"),
                         _(u"Annuler")])
            reponse = dlg.ShowModal()
            dlg.Destroy()
            if reponse in (1, 2):
                return False

        # Création de la carte
        if self.ctrl_parametres.ctrl_creation.GetValue() == True:
            numero_manuel = self.ctrl_parametres.radio_numero_manuel.GetValue()
            date_creation_carte = self.ctrl_parametres.ctrl_date_creation.GetDate(
            )
            numero = self.ctrl_parametres.ctrl_numero.GetValue()
        else:
            numero_manuel = False
            date_creation_carte = None
            numero = None

        # Confirmation
        dlg = wx.MessageDialog(
            self,
            _(u"Confirmez-vous la génération de %d cotisations ?") %
            len(liste_tracks), _(u"Confirmation"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        reponse = dlg.ShowModal()
        dlg.Destroy()
        if reponse != wx.ID_YES:
            return False

        # Sauvegarde
        DB = GestionDB.DB()

        dlgprogress = wx.ProgressDialog(_(u"Génération des cotisations"),
                                        _(u"Veuillez patienter..."),
                                        maximum=len(liste_tracks),
                                        parent=None,
                                        style=wx.PD_SMOOTH | wx.PD_AUTO_HIDE
                                        | wx.PD_APP_MODAL)
        index = 1
        for track in liste_tracks:

            dlgprogress.Update(
                index,
                _(u"Génération de la cotisation %d sur %d") %
                (index, len(liste_tracks)))

            if numero_manuel == True:
                numero = track.numero

            if type_cotisation == "famille":
                IDfamille = track.IDfamille
            else:
                IDfamille = None

            listeDonnees = [
                ("IDfamille", IDfamille),
                ("IDindividu", track.IDindividu),
                ("IDtype_cotisation", IDtype_cotisation),
                ("IDunite_cotisation", IDunite_cotisation),
                ("date_saisie", date_saisie),
                ("IDutilisateur", IDutilisateur),
                ("date_creation_carte", date_creation_carte),
                ("numero", numero),
                ("date_debut", date_debut),
                ("date_fin", date_fin),
                ("observations", observations),
                ("activites", activites),
            ]
            IDcotisation = DB.ReqInsert("cotisations", listeDonnees)

            # Sauvegarde de la prestation
            facturer = self.ctrl_parametres.ctrl_facturer.GetValue()
            date_facturation = self.ctrl_parametres.ctrl_date_prestation.GetDate(
            )
            montant = self.ctrl_parametres.ctrl_montant.GetMontant()
            label_prestation = self.ctrl_parametres.ctrl_label.GetValue()

            if facturer == True:

                # Création d'une prestation
                listeDonnees = [
                    ("IDcompte_payeur", track.IDcompte_payeur),
                    ("date", date_facturation),
                    ("categorie", "cotisation"),
                    ("label", label_prestation),
                    ("montant_initial", montant),
                    ("montant", montant),
                    ("IDfamille", track.IDfamille),
                    ("IDindividu", track.IDindividu),
                ]
                listeDonnees.append(
                    ("date_valeur", str(datetime.date.today())))
                IDprestation = DB.ReqInsert("prestations", listeDonnees)

                # Insertion du IDprestation dans la cotisation
                DB.ReqMAJ("cotisations", [
                    ("IDprestation", IDprestation),
                ], "IDcotisation", IDcotisation)

            # Mémorise l'action dans l'historique
            date_debut_periode = UTILS_Dates.DateEngFr(str(date_debut))
            date_fin_periode = UTILS_Dates.DateEngFr(str(date_fin))
            UTILS_Historique.InsertActions([
                {
                    "IDindividu":
                    track.IDindividu,
                    "IDfamille":
                    track.IDfamille,
                    "IDcategorie":
                    21,
                    "action":
                    _(u"Saisie de la cotisation ID%d '%s' pour la période du %s au %s"
                      ) % (IDcotisation, label_prestation, date_debut_periode,
                           date_fin_periode),
                },
            ])

            # Génération du prochain numéro de cotisation
            if numero != None:
                numero = UTILS_Texte.Incrementer(numero)

            index += 1

        DB.Close()
        dlgprogress.Destroy()

        # Succès
        dlg = wx.MessageDialog(
            self,
            _(u"Les %d cotisations ont été générées avec succès.") %
            len(liste_tracks), _(u"Fin"), wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()

        # MAJ
        self.ctrl_listview.MAJ()

        return True
예제 #26
0
    def Supprimer(self, event):
        if len(self.Selection()) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez sélectionné aucune inscription à supprimer dans la liste"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        IDinscription = self.Selection()[0].IDinscription
        IDfamille = self.Selection()[0].IDfamille
        IDindividu = self.Selection()[0].IDindividu
        nomActivite = self.Selection()[0].nom_activite
        IDactivite = self.Selection()[0].IDactivite

        # Verrouillage utilisateurs
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel(
                "individus_inscriptions", "supprimer",
                IDactivite=IDactivite) == False:
            return

        DB = GestionDB.DB()

        # Recherche si des consommations existent
        req = """SELECT IDconso, forfait
        FROM consommations
        WHERE IDinscription=%d AND (forfait IS NULL OR forfait=1);""" % IDinscription
        DB.ExecuterReq(req)
        listeConso = DB.ResultatReq()
        if len(listeConso) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Il existe déjà %d consommations enregistrées sur cette inscription. \n\nIl est donc impossible de la supprimer !"
                  ) % len(listeConso), _(u"Annulation impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return

        # Recherche si des prestations existent
        req = """SELECT IDprestation, prestations.forfait
        FROM prestations
        WHERE IDactivite=%d AND IDindividu=%d
        ;""" % (IDactivite, IDindividu)
        DB.ExecuterReq(req)
        listePrestations = DB.ResultatReq()
        listePrestationsForfait = []
        listePrestationsNormales = []
        for IDprestation, forfait in listePrestations:
            if forfait == 2:
                if IDprestation not in listePrestationsForfait:
                    listePrestationsForfait.append(IDprestation)
            else:
                if IDprestation not in listePrestationsNormales:
                    listePrestationsNormales.append(IDprestation)
        if len(listePrestations) - len(listePrestationsForfait) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Il existe déjà %d prestations enregistrées sur cette inscription. \n\nIl est donc impossible de la supprimer !"
                  ) % len(listePrestations), _(u"Annulation impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return

        DB.Close()

        # Demande de confirmation
        if len(listePrestationsForfait) == 0: texteForfait = u""
        elif len(listePrestationsForfait) == 1:
            texteForfait = _(
                u"\n\n(La prestation associée sera également supprimée)")
        else:
            texteForfait = _(
                u"\n\n(Les %d prestations associées seront également supprimées)"
            ) % len(listePrestationsForfait)
        dlg = wx.MessageDialog(
            self,
            _(u"Souhaitez-vous vraiment supprimer cette inscription ?%s") %
            texteForfait, _(u"Suppression"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        if dlg.ShowModal() == wx.ID_YES:
            IDinscription = self.Selection()[0].IDinscription
            DB = GestionDB.DB()
            DB.ReqDEL("inscriptions", "IDinscription", IDinscription)
            # Suppression des forfaits associés déjà saisis
            for IDprestation in listePrestationsForfait:
                DB.ReqDEL("prestations", "IDprestation", IDprestation)
                DB.ReqDEL("consommations", "IDprestation", IDprestation)
                DB.ReqDEL("deductions", "IDprestation", IDprestation)
                DB.ReqDEL("ventilation", "IDprestation", IDprestation)
            DB.Close()

            # Mémorise l'action dans l'historique
            UTILS_Historique.InsertActions([
                {
                    "IDindividu":
                    self.IDindividu,
                    "IDfamille":
                    IDfamille,
                    "IDcategorie":
                    19,
                    "action":
                    _(u"Suppression de l'inscription à l'activité '%s'") %
                    nomActivite
                },
            ])

            # Actualise l'affichage
            self.MAJ()
        dlg.Destroy()
예제 #27
0
    def Sauvegarde(self):
        # Récupération des données à sauvegarder
        IDactivite = self.GetIDactivite()
        IDgroupe = self.ctrl_groupes.GetID()
        IDcategorie_tarif = self.ctrl_categories.GetID()
        nomGroupe = self.ctrl_groupes.GetStringSelection()
        nomCategorie = self.ctrl_categories.GetStringSelection()
        IDfamille = self.GetGrandParent().ctrl_famille.GetID()
        IDcompte_payeur = self.GetCompteFamille(IDfamille)
        nomActivite = self.ctrl_activite.GetNomActivite()
        if self.ctrl_check_depart.IsChecked():
            date_desinscription = str(self.ctrl_date_depart.GetDate())
        else:
            date_desinscription = None
        statut = self.parent.parent.ctrl_statut.GetID()

        # Sauvegarde
        DB = GestionDB.DB()
        listeDonnees = [
            ("IDindividu", self.parent.IDindividu),
            ("IDfamille", IDfamille),
            ("IDactivite", IDactivite),
            ("IDgroupe", IDgroupe),
            ("IDcategorie_tarif", IDcategorie_tarif),
            ("IDcompte_payeur", IDcompte_payeur),
            ("date_desinscription", date_desinscription),
            ("statut", statut),
        ]
        if self.parent.mode == "saisie":
            listeDonnees.append(
                ("date_inscription", str(datetime.date.today())))
            self.IDinscription = DB.ReqInsert("inscriptions", listeDonnees)
        else:
            DB.ReqMAJ("inscriptions", listeDonnees, "IDinscription",
                      self.IDinscription)

        # Création d'une prestation négative pour la famille correspondant au remboursement
        if self.dict_remboursement != None:
            listeDonnees = [
                ("IDcompte_payeur", IDcompte_payeur),
                ("date", str(datetime.date.today())),
                ("label", self.dict_remboursement["motif"]),
                ("montant_initial", -self.dict_remboursement["montant"]),
                ("montant", -self.dict_remboursement["montant"]),
                ("IDactivite", IDactivite),
                ("IDcategorie_tarif", IDcategorie_tarif),
                ("IDfamille", IDfamille),
                ("IDindividu", self.parent.IDindividu),
                ("categorie", "autre"),
                ("date_valeur", str(datetime.date.today())),
            ]
            DB.ReqInsert("prestations", listeDonnees)

        # Si une action consommation est nécessaire, on l'exécute
        if self.action_consommation != None:
            self.action_consommation(DB, date_desinscription)

        DB.Commit()
        DB.Close()

        # Mémorise l'action dans l'historique
        if self.parent.mode == "saisie":
            IDcategorie_historique = 18
            texte_historique = _(
                u"Inscription à l'activité '%s' sur le groupe '%s' avec la tarification '%s'"
            ) % (nomActivite, nomGroupe, nomCategorie)
        else:
            IDcategorie_historique = 20
            texte_historique = _(
                u"Modification de l'inscription à l'activité '%s' sur le groupe '%s' avec la tarification '%s'"
            ) % (nomActivite, nomGroupe, nomCategorie)

        UTILS_Historique.InsertActions([
            {
                "IDindividu": self.parent.IDindividu,
                "IDfamille": IDfamille,
                "IDcategorie": IDcategorie_historique,
                "action": texte_historique,
            },
        ])

        # Saisie de forfaits auto
        #if self.parent.mode == "saisie" :
        if statut == "ok" and self.ancien_statut != "ok":
            f = DLG_Appliquer_forfait.Forfaits(IDfamille=IDfamille,
                                               listeActivites=[
                                                   IDactivite,
                                               ],
                                               listeIndividus=[
                                                   self.parent.IDindividu,
                                               ],
                                               saisieManuelle=False,
                                               saisieAuto=True)
            resultat = f.Applique_forfait(
                selectionIDcategorie_tarif=IDcategorie_tarif,
                inscription=True,
                selectionIDactivite=IDactivite)
            if resultat == False:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Cet individu a bien été inscrit mais le forfait associé n'a pas été créé !"
                      ), _(u"Information"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()

        return self.IDinscription
예제 #28
0
def Supprimer_location(parent, IDlocation=None):
    gestion = UTILS_Gestion.Gestion(None)

    def GetLocations(condition=""):
        DB = GestionDB.DB()
        # Récupère les infos sur cette location
        req = """SELECT IDlocation, IDfamille, date_debut, date_fin, serie, produits.nom, produits_categories.nom
        FROM locations 
        LEFT JOIN produits ON produits.IDproduit = locations.IDproduit
        LEFT JOIN produits_categories ON produits_categories.IDcategorie = produits.IDcategorie
        WHERE %s;""" % condition
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        DB.Close()

        liste_resultats = []
        for IDlocation, IDfamille, date_debut, date_fin, serie, nom_produit, nom_categorie in listeDonnees:
            if isinstance(date_debut, str) or isinstance(date_debut, six.text_type):
                date_debut = datetime.datetime.strptime(date_debut, "%Y-%m-%d %H:%M:%S")
            if date_fin == None:
                date_fin = datetime.datetime(2999, 1, 1)
            if isinstance(date_fin, str) or isinstance(date_fin, six.text_type):
                date_fin = datetime.datetime.strptime(date_fin, "%Y-%m-%d %H:%M:%S")
            periode = _(u"%s - %s") % (date_debut.strftime("%d/%m/%Y %H:%M:%S"), date_fin.strftime("%d/%m/%Y %H:%M:%S") if (date_fin and date_fin.year != 2999) else _(u"Illimitée"))
            label_produit = u"%s (%s)" % (nom_produit, nom_categorie)
            liste_resultats.append({"IDlocation": IDlocation, "IDfamille": IDfamille, "date_debut": date_debut, "date_fin": date_fin, "periode": periode, "label_produit": label_produit, "serie": serie, "prestations": []})
        return liste_resultats

    # Importe de la location cliquée
    liste_locations = GetLocations(condition="IDlocation=%d" % IDlocation)

    # Vérifie si la location est dans une série
    if liste_locations[0]["serie"]:
        num_serie = liste_locations[0]["serie"]
        liste_locations_serie = GetLocations(condition="serie='%s'" % num_serie)

        dlg = DLG_Supprimer_occurences(None, nbre_occurences=len(liste_locations_serie))
        if dlg.ShowModal() == wx.ID_OK:
            dict_donnees = dlg.GetDonnees()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return

        if dict_donnees["mode"] == "toutes":
            liste_locations = liste_locations_serie
        if dict_donnees["mode"] == "periode":
            liste_locations = []
            for dict_location in liste_locations_serie:
                if dict_location["date_debut"] <= dict_donnees["date_fin"] and dict_location["date_fin"] >= dict_donnees["date_debut"]:
                    liste_locations.append(dict_location)

    # Vérifie si les prestations de cette location sont déjà facturées
    liste_anomalies = []
    liste_valides = []

    DB = GestionDB.DB()
    index = 0
    for dict_location in liste_locations:
        valide = True

        req = """SELECT
        IDprestation, date, IDfacture
        FROM prestations 
        WHERE categorie="location" and IDdonnee=%d;""" % dict_location["IDlocation"]
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        listeIDprestations = []
        listePrestations = []
        nbrePrestationsFacturees = 0
        for IDprestation, date, IDfacture in listeDonnees:
            date = UTILS_Dates.DateEngEnDateDD(date)
            listePrestations.append({"IDprestation" : IDprestation, "date" : date, "IDfacture" : IDfacture})
            listeIDprestations.append(IDprestation)

            # Vérifie la période de gestion
            if gestion.Verification("prestations", date) == False:
                liste_anomalies.append(u"Location du %s : Impossible à supprimer car une prestation associée est comprise dans une période de gestion verrouillée")
                valide = False

            if IDfacture != None :
                nbrePrestationsFacturees += 1

        liste_locations[index]["prestations"] = listeIDprestations

        if nbrePrestationsFacturees > 0:
            liste_anomalies.append(u"Location du %s : Impossible à supprimer car %d prestations y sont déjà associées" % (dict_location["periode"], nbrePrestationsFacturees))
            valide = False

        if valide:
            liste_valides.append(dict_location)
        index += 1

    DB.Close()

    # Annonce les anomalies trouvées
    if len(liste_anomalies) > 0:
        introduction = _(u"%d anomalies ont été détectées :") % len(liste_anomalies)
        if len(liste_valides) > 0:
            conclusion = _(u"Souhaitez-vous continuer avec les %d autres locations ?") % len(liste_valides)
            dlg = DLG_Messagebox.Dialog(None, titre=_(u"Anomalies"), introduction=introduction, detail=u"\n".join(liste_anomalies), conclusion=conclusion, icone=wx.ICON_EXCLAMATION, boutons=[_(u"Oui"), _(u"Non"), _(u"Annuler")])
            reponse = dlg.ShowModal()
            dlg.Destroy()
            if reponse in (1, 2):
                return False
        else:
            dlg = DLG_Messagebox.Dialog(None, titre=_(u"Anomalies"), introduction=introduction, detail=u"\n".join(liste_anomalies), icone=wx.ICON_EXCLAMATION, boutons=[_(u"Fermer")])
            reponse = dlg.ShowModal()
            dlg.Destroy()
            return False

    # Suppression
    if len(liste_valides) == 1:
        dlg = wx.MessageDialog(parent, _(u"Souhaitez-vous vraiment supprimer la location ?"), _(u"Confirmation de suppression"), wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        reponse = dlg.ShowModal()
        dlg.Destroy()
    else:
        introduction = _(u"Confirmez-vous la suppression des %d locations suivantes :") % len(liste_valides)
        liste_locations_temp = [dict_location["periode"] for dict_location in liste_valides]
        dlg = DLG_Messagebox.Dialog(None, titre=_(u"Confirmation de suppression"), introduction=introduction, detail=u"\n".join(liste_locations_temp), icone=wx.ICON_EXCLAMATION, boutons=[_(u"Oui"), _(u"Non"), _(u"Annuler")])
        reponse = dlg.ShowModal()
        dlg.Destroy()

    if reponse not in (0, wx.ID_YES):
        return False

    DB = GestionDB.DB()
    for dict_location in liste_valides:
        # Suppression
        DB.ReqDEL("locations", "IDlocation", dict_location["IDlocation"])
        DB.ExecuterReq("DELETE FROM questionnaire_reponses WHERE type='location' AND IDdonnee=%d;" % dict_location["IDlocation"])
        DB.ReqMAJ("locations_demandes", [("statut", "attente"), ], "IDlocation", dict_location["IDlocation"])
        DB.ReqMAJ("locations_demandes", [("IDlocation", None), ], "IDlocation", dict_location["IDlocation"])
        DB.ExecuterReq("DELETE FROM prestations WHERE categorie='location' AND IDdonnee=%d;" % dict_location["IDlocation"])
        for IDprestation in dict_location["prestations"]:
            DB.ReqDEL("ventilation", "IDprestation", IDprestation)
        # Historique
        texte_historique = _(u"Suppression de la location ID%d : %s %s") % (dict_location["IDlocation"], dict_location["label_produit"], dict_location["periode"])
        UTILS_Historique.InsertActions([{"IDfamille": dict_location["IDfamille"], "IDcategorie": 39, "action": texte_historique, "IDdonnee": dict_location["IDlocation"]}], DB=DB)
    DB.Close()

    return True
예제 #29
0
    def Sauvegarde(self):
        """ Sauvegarde """

        # Récupération des données
        donneesType = self.ctrl_type.GetDetailDonnees()
        if donneesType["type"] == "famille":
            # Si c'est une cotisation famille
            IDfamille = self.ctrl_beneficiaire.GetID()
            IDindividu = None
        else:
            # Si c'est une cotisation individuelle
            IDfamille = None
            IDindividu = self.ctrl_beneficiaire.GetID()
        IDtype_cotisation = self.ctrl_type.GetID()
        IDunite_cotisation = self.ctrl_unite.GetID()
        date_saisie = self.date_saisie
        IDutilisateur = self.IDutilisateur
        date_debut = self.ctrl_date_debut.GetDate()
        date_fin = self.ctrl_date_fin.GetDate()
        activites = self.ctrl_activites.GetDonnees(format="texte")
        observations = self.ctrl_observations.GetValue()

        # Création de la carte
        if self.ctrl_creation.GetValue() == True:
            date_creation_carte = self.ctrl_date_creation.GetDate()
            numero = self.ctrl_numero.GetValue()
        else:
            date_creation_carte = None
            numero = None

        # Sauvegarde
        DB = GestionDB.DB()
        listeDonnees = [
            ("IDfamille", IDfamille),
            ("IDindividu", IDindividu),
            ("IDtype_cotisation", IDtype_cotisation),
            ("IDunite_cotisation", IDunite_cotisation),
            ("date_saisie", date_saisie),
            ("IDutilisateur", IDutilisateur),
            ("date_creation_carte", date_creation_carte),
            ("numero", numero),
            ("date_debut", date_debut),
            ("date_fin", date_fin),
            ("observations", observations),
            ("activites", activites),
        ]
        if self.IDcotisation == None:
            nouvelleCotisation = True
            self.IDcotisation = DB.ReqInsert("cotisations", listeDonnees)
        else:
            nouvelleCotisation = False
            DB.ReqMAJ("cotisations", listeDonnees, "IDcotisation",
                      self.IDcotisation)

        # Sauvegarde de la prestation
        facturer = self.ctrl_facturer.GetValue()
        date_facturation = self.ctrl_date_prestation.GetDate()
        montant = self.ctrl_montant.GetMontant()
        label_prestation = self.ctrl_label.GetValue()
        IDcompte_payeur = self.ctrl_payeur.GetIDcompte_payeur()
        IDfamille_payeur = self.ctrl_payeur.GetIDfamille()
        IDprestation = self.IDprestation

        if facturer == True:

            # Création d'une prestation
            listeDonnees = [
                ("IDcompte_payeur", IDcompte_payeur),
                ("date", date_facturation),
                ("categorie", "cotisation"),
                ("label", label_prestation),
                ("montant_initial", montant),
                ("montant", montant),
                ("IDfamille", IDfamille_payeur),
                ("IDindividu", IDindividu),
            ]
            if IDprestation == None:
                IDprestation = DB.ReqInsert("prestations", listeDonnees)
            else:
                DB.ReqMAJ("prestations", listeDonnees, "IDprestation",
                          IDprestation)

                # Recherche si cette prestation a déjà été ventilée sur un règlement
                req = """SELECT IDventilation, ventilation.montant
                FROM ventilation
                LEFT JOIN reglements ON reglements.IDreglement = ventilation.IDreglement
                WHERE IDprestation=%d
                ORDER BY reglements.date;""" % IDprestation
                DB.ExecuterReq(req)
                listeVentilations = DB.ResultatReq()
                montantVentilation = 0.0
                for IDventilation, montantTmp in listeVentilations:
                    montantVentilation += montantTmp
                if montantVentilation > montant:
                    # Si le montant total ventilé est supérieur au montant de la prestation :
                    montantVentilationTmp = 0.0
                    for IDventilation, montantTmp in listeVentilations:
                        montantVentilationTmp += montantTmp
                        if montantVentilationTmp > montant:
                            nouveauMontant = montantTmp - (
                                montantVentilationTmp - montant)
                            if nouveauMontant > 0.0:
                                DB.ReqMAJ("ventilation", [
                                    ("montant", nouveauMontant),
                                ], "IDventilation", IDventilation)
                                montantVentilationTmp = (
                                    montantVentilationTmp -
                                    montantTmp) + nouveauMontant
                            else:
                                DB.ReqDEL("ventilation", "IDventilation",
                                          IDventilation)

        else:

            # Suppression d'une prestation précédemment créée
            if IDprestation != None:
                DB.ReqDEL("prestations", "IDprestation", IDprestation)
                DB.ReqDEL("ventilation", "IDprestation", IDprestation)
                IDprestation = None

        # Insertion du IDprestation dans la cotisation
        DB.ReqMAJ("cotisations", [
            ("IDprestation", IDprestation),
        ], "IDcotisation", self.IDcotisation)

        DB.Close()

        # Mémorise l'action dans l'historique
        date_debut_periode = DateEngFr(str(date_debut))
        date_fin_periode = DateEngFr(str(date_fin))
        if nouvelleCotisation == True:
            type = "Saisie"
            IDcategorie = 21
        else:
            type = "Modification"
            IDcategorie = 22
        UTILS_Historique.InsertActions([
            {
                "IDindividu":
                IDindividu,
                "IDfamille":
                IDfamille,
                "IDcategorie":
                IDcategorie,
                "action":
                _(u"%s de la cotisation ID%d '%s' pour la période du %s au %s"
                  ) % (type, self.IDcotisation, label_prestation,
                       date_debut_periode, date_fin_periode),
            },
        ])
예제 #30
0
    def OnBoutonTraiter(self, event=None):
        self.parent.EcritLog(_(u"Application de la demande de locations"),
                             self.ctrl_log)

        resultats = {
            "ajouter": {
                True: 0,
                False: 0
            },
            "modifier": {
                True: 0,
                False: 0
            },
            "supprimer": {
                True: 0,
                False: 0
            }
        }

        DB = GestionDB.DB()
        for track in self.ctrl_locations.donnees:
            listeDonnees = [
                ("IDfamille", self.track.IDfamille),
                ("IDproduit", track.IDproduit),
                ("date_debut", track.date_debut),
                ("date_fin", track.date_fin),
                ("quantite", track.quantite),
                ("partage", track.partage),
            ]

            if track.resultat != "ok":
                if track.etat == "ajouter":
                    if track.action_possible == True:
                        listeDonnees.append(
                            ("date_saisie", datetime.date.today()))
                        listeDonnees.append(
                            ("IDlocation_portail", track.IDlocation))
                        IDlocation = DB.ReqInsert("locations", listeDonnees)
                        resultat = _(u"Ajout de la location %s du %s") % (
                            track.nom_produit, track.date_debut_txt)
                        DB.ReqMAJ("portail_reservations_locations",
                                  [("resultat", "ok")], "IDreservation",
                                  track.IDreservation)
                        UTILS_Historique.InsertActions(
                            [{
                                "IDfamille": self.track.IDfamille,
                                "IDcategorie": 37,
                                "action": resultat,
                            }],
                            DB=DB)
                    else:
                        resultat = _(u"%s du %s : %s") % (track.nom_produit,
                                                          track.date_debut_txt,
                                                          track.statut)
                    self.parent.EcritLog(resultat, self.ctrl_log)

                if track.etat == "modifier":
                    if track.action_possible == True:
                        if "-" in track.IDlocation:
                            DB.ReqMAJ("locations",
                                      listeDonnees,
                                      "IDlocation_portail",
                                      track.IDlocation,
                                      IDestChaine=True)
                        else:
                            DB.ReqMAJ("locations", listeDonnees, "IDlocation",
                                      int(track.IDlocation))
                        resultat = _(u"Modification de la location %s du %s"
                                     ) % (track.nom_produit,
                                          track.date_debut_txt)
                        DB.ReqMAJ("portail_reservations_locations",
                                  [("resultat", "ok")], "IDreservation",
                                  track.IDreservation)
                        UTILS_Historique.InsertActions(
                            [{
                                "IDfamille": self.track.IDfamille,
                                "IDcategorie": 38,
                                "action": resultat,
                            }],
                            DB=DB)
                    else:
                        resultat = _(u"%s du %s : %s") % (track.nom_produit,
                                                          track.date_debut_txt,
                                                          track.statut)
                    self.parent.EcritLog(resultat, self.ctrl_log)

                if track.etat == "supprimer":
                    if track.action_possible == True:
                        if "-" in track.IDlocation:
                            DB.ReqDEL("locations",
                                      "IDlocation_portail",
                                      track.IDlocation,
                                      IDestChaine=True)
                        else:
                            DB.ReqDEL("locations", "IDlocation",
                                      int(track.IDlocation))
                        resultat = _(u"Suppression de la location %s du %s"
                                     ) % (track.nom_produit,
                                          track.date_debut_txt)
                        DB.ReqMAJ("portail_reservations_locations",
                                  [("resultat", "ok")], "IDreservation",
                                  track.IDreservation)
                        UTILS_Historique.InsertActions(
                            [{
                                "IDfamille": self.track.IDfamille,
                                "IDcategorie": 39,
                                "action": resultat,
                            }],
                            DB=DB)
                    else:
                        resultat = _(u"%s du %s : %s") % (track.nom_produit,
                                                          track.date_debut_txt,
                                                          track.statut)
                    self.parent.EcritLog(resultat, self.ctrl_log)

                # Mémorisation pour réponse
                resultats[track.etat][track.action_possible] += 1

        DB.Close()

        # Formatage de la réponse
        liste_resultats = []
        for etat, valeurs in resultats.items():
            for succes, quantite in valeurs.items():
                if quantite:
                    if succes == True:
                        txt_validation = u"validé"
                    else:
                        txt_validation = u"refusé"
                    if quantite == 1:
                        pluriel = ""
                    else:
                        pluriel = "s"

                    if etat == "ajouter":
                        liste_resultats.append(
                            u"%d ajout%s %s%s" %
                            (quantite, pluriel, txt_validation, pluriel))
                    if etat == "modifier":
                        liste_resultats.append(
                            u"%d modification%s %se%s" %
                            (quantite, pluriel, txt_validation, pluriel))
                    if etat == "supprimer":
                        liste_resultats.append(
                            u"%d suppression%s %se%s" %
                            (quantite, pluriel, txt_validation, pluriel))

        if liste_resultats:
            self.reponse = UTILS_Texte.ConvertListeToPhrase(
                liste_resultats) + "."
            self.parent.EcritLog(
                _(u"Réponse : %s") % self.reponse, self.ctrl_log)

            # MAJ de la liste des actions
            self.ctrl_locations.MAJ(track_demande=self.track)