Exemple #1
0
    def On_outils_saisie_forfait(self, event):
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel(
                "consommations_conso", "creer") == False:
            return
        listeActivites = self.panel_grille.listeSelectionActivites
        listeIndividus = self.panel_grille.listeSelectionIndividus

        if len(self.panel_grille.grille.listeHistorique) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Des modifications ont été effectuées dans la grille.\n\nVous devez d'abord les sauvegarder avant de saisir un forfait !"
                  ), _(u"Sauvegarde des modifications"),
                wx.YES_NO | wx.YES_DEFAULT | wx.ICON_EXCLAMATION)
            reponse = dlg.ShowModal()
            dlg.Destroy()
            if reponse != wx.ID_YES:
                return

            # Sauvegarde des données
            self.panel_grille.grille.Sauvegarde()
            self.panel_grille.grille.InitDonnees()
            self.panel_grille.MAJ_grille()

        from Dlg import DLG_Appliquer_forfait
        dlg = DLG_Appliquer_forfait.Dialog(self,
                                           IDfamille=self.IDfamille,
                                           listeActivites=listeActivites,
                                           listeIndividus=listeIndividus)
        dlg.ShowModal()
        dlg.Destroy()
        self.panel_grille.MAJ_grille()
Exemple #2
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()
Exemple #3
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)
Exemple #4
0
    def OnBoutonForfait(self, event):
        """ Saisir un forfait daté """
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel(
                "consommations_conso", "creer") == False:
            return

        # Recherche si l'individu est rattaché à d'autres familles
        listeNoms = []
        listeFamille = []
        # Vérifie que l'individu est rattaché comme REPRESENTANT ou ENFANT à une famille
        if self.dictFamillesRattachees != None:
            valide = False
            for IDfamille, dictFamille in self.dictFamillesRattachees.items():
                if dictFamille["IDcategorie"] in (1, 2):
                    valide = True
            if valide == False:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Pour être inscrit à une activité, un individu doit obligatoirement être rattaché comme représentant ou enfant à une fiche famille !"
                      ), _(u"Inscription impossible"),
                    wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return

        if len(self.dictFamillesRattachees) == 1:
            IDfamille = list(self.dictFamillesRattachees.keys())[0]
            listeFamille.append(IDfamille)
            listeNoms.append(
                self.dictFamillesRattachees[IDfamille]["nomsTitulaires"])
        else:
            # Si rattachée à plusieurs familles
            for IDfamille, dictFamille in self.dictFamillesRattachees.items():
                IDcategorie = dictFamille["IDcategorie"]
                if IDcategorie in (1, 2):
                    listeFamille.append(IDfamille)
                    listeNoms.append(dictFamille["nomsTitulaires"])

            if len(listeFamille) == 1:
                IDfamille = listeFamille[0]
            else:
                # On demande à quelle famille rattacher cette inscription
                dlg = wx.SingleChoiceDialog(
                    self,
                    _(u"Cet individu est rattaché à %d familles.\nA quelle famille souhaitez-vous rattacher cette inscription ?"
                      ) % len(listeNoms), _(u"Rattachements multiples"),
                    listeNoms, wx.CHOICEDLG_STYLE)
                if dlg.ShowModal() == wx.ID_OK:
                    indexSelection = dlg.GetSelection()
                    IDfamille = listeFamille[indexSelection]
                    dlg.Destroy()
                else:
                    dlg.Destroy()
                    return

        # Récupère la liste des activités sur lesquelle l'individu est inscrit
        listeActivites = self.ctrl_inscriptions.GetListeActivites()

        # Affiche la fenêtre de saisie d'un forfait daté
        from Dlg import DLG_Appliquer_forfait
        dlg = DLG_Appliquer_forfait.Dialog(self,
                                           IDfamille=IDfamille,
                                           listeActivites=listeActivites,
                                           listeIndividus=[
                                               self.IDindividu,
                                           ])
        if dlg.ShowModal() == wx.ID_OK:
            pass
        dlg.Destroy()
Exemple #5
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