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) },])
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()
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()
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"], },])
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()
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()
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"], }, ])
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()
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()
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, },])
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()
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, }, ])
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()
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()
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()
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()
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)
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)
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
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()
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)
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
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()
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
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
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), }, ])
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)