Example #1
0
    def Effacer_familles(self):
        """ Effacer les familles """
        # Sélection des individus
        liste_individus = self.SelectionIndividus(
            intro=_(u"Cochez les individus à effacer :"))
        if liste_individus == False:
            return False

        # Demande de confirmation
        dlg = wx.MessageDialog(
            None,
            _(u"Confirmez-vous l'effacement de %d fiches familles et de %d fiches individuelles ?\n\nAttention, cette action est irréversible !"
              ) % (len(self.liste_familles), len(liste_individus)),
            _(u"Confirmation"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION)
        reponse = dlg.ShowModal()
        dlg.Destroy()
        if reponse != wx.ID_YES:
            return False

        # Attente
        dlgAttente = wx.BusyInfo(
            _(u"Veuillez patienter durant l'effacement..."), None)

        # Récupère les comptes_payeurs
        req = """SELECT IDfamille, IDcompte_payeur
        FROM comptes_payeurs
        WHERE IDfamille IN %s;""" % GestionDB.ConvertConditionChaine(
            self.liste_familles)
        self.DB.ExecuterReq(req)
        listeDonnees = self.DB.ResultatReq()
        liste_comptes_payeurs = []
        for IDfamille, IDcompte_payeur in listeDonnees:
            liste_comptes_payeurs.append(IDcompte_payeur)

        # Familles
        liste_valeurs = [
            ("IDcaisse", None),
            ("num_allocataire", None),
            ("allocataire", None),
            ("internet_actif", 0),
            ("memo", None),
            ("prelevement_activation", None),
            ("prelevement_etab", None),
            ("prelevement_guichet", None),
            ("prelevement_numero", None),
            ("prelevement_cle", None),
            ("prelevement_banque", None),
            ("prelevement_individu", None),
            ("prelevement_nom", None),
            ("prelevement_rue", None),
            ("prelevement_cp", None),
            ("prelevement_ville", None),
            ("prelevement_cle_iban", None),
            ("prelevement_iban", None),
            ("prelevement_bic", None),
            ("prelevement_reference_mandat", None),
            ("prelevement_date_mandat", None),
            ("prelevement_memo", None),
            ("email_factures", None),
            ("email_recus", None),
            ("email_depots", None),
            ("titulaire_helios", None),
            ("code_comptable", None),
            ("idtiers_helios", None),
            ("natidtiers_helios", None),
            ("reftiers_helios", None),
            ("cattiers_helios", None),
            ("natjur_helios", None),
            ("autorisation_cafpro", None),
            ("autre_adresse_facturation", None),
            ("etat", "efface"),
        ]
        self.Modifier(listeID=self.liste_familles,
                      nom_table="familles",
                      champ_condition="IDfamille",
                      liste_valeurs=liste_valeurs)

        # Historique
        self.Supprimer(listeID=self.liste_familles,
                       nom_table="historique",
                       champ_condition="IDfamille")

        # Liens
        self.Supprimer(listeID=self.liste_familles,
                       nom_table="liens",
                       champ_condition="IDfamille")

        # Messages
        self.Supprimer(listeID=self.liste_familles,
                       nom_table="messages",
                       champ_condition="IDfamille")

        # Payeurs
        liste_valeurs = [
            ("nom", _(u"Payeur effacé")),
        ]
        self.Modifier(listeID=liste_comptes_payeurs,
                      nom_table="payeurs",
                      champ_condition="IDcompte_payeur",
                      liste_valeurs=liste_valeurs)

        # Pièces
        self.Supprimer(listeID=self.liste_familles,
                       nom_table="pieces",
                       champ_condition="IDfamille")

        # Questionnaires
        self.Supprimer(listeID=self.liste_familles,
                       nom_table="questionnaire_reponses",
                       champ_condition="IDfamille")

        # Quotients
        self.Supprimer(listeID=self.liste_familles,
                       nom_table="quotients",
                       champ_condition="IDfamille")

        # Rappels
        self.Supprimer(listeID=liste_comptes_payeurs,
                       nom_table="rappels",
                       champ_condition="IDcompte_payeur")

        # Rattachements
        #self.Supprimer(listeID=self.liste_familles, nom_table="rattachements", champ_condition="IDfamille")

        # Recus
        self.Supprimer(listeID=self.liste_familles,
                       nom_table="recus",
                       champ_condition="IDfamille")

        # Individus
        self.Effacer_individus(liste_individus=liste_individus)

        # Détruit dlgAttente
        del dlgAttente

        # Fin de procédure
        dlg = wx.MessageDialog(None, _(u"L'effacement a été effectué !"),
                               _(u"Information"), wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()
        return True
Example #2
0
    def SelectionIndividus(self, intro=""):
        # Récupère les individus
        req = """SELECT IDindividu, nom, prenom
        FROM individus;"""
        self.DB.ExecuterReq(req)
        listeDonnees = self.DB.ResultatReq()
        dict_individus = {}
        for IDindividu, nom, prenom in listeDonnees:
            if prenom == None:
                prenom = ""
            nom_complet = u"%s %s" % (nom, prenom)
            dict_individus[IDindividu] = {
                "nom_complet": nom_complet,
                "nom": nom,
                "prenom": prenom
            }

        # Récupère les individus rattachés
        req = """SELECT IDrattachement, IDindividu, IDfamille, IDcategorie
        FROM rattachements;"""
        self.DB.ExecuterReq(req)
        listeDonnees = self.DB.ResultatReq()
        dict_rattachements_familles = {}
        dict_rattachements_individus = {}

        liste_individus_concernes = []
        for IDrattachement, IDindividu, IDfamille, IDcategorie in listeDonnees:

            if dict_rattachements_familles.has_key(IDfamille) == False:
                dict_rattachements_familles[IDfamille] = []
            dict_rattachements_familles[IDfamille].append(
                (IDindividu, IDcategorie))

            if dict_rattachements_individus.has_key(IDindividu) == False:
                dict_rattachements_individus[IDindividu] = []
            dict_rattachements_individus[IDindividu].append(
                (IDfamille, IDcategorie))

            if (IDfamille in self.liste_familles
                    or IDindividu in self.liste_individus
                ) and IDindividu not in liste_individus_concernes:
                liste_individus_concernes.append(IDindividu)

        # Recherche les prestations futures
        req = """SELECT IDindividu, IDfamille, COUNT(IDprestation)
        FROM prestations
        WHERE date>='%s' AND IDindividu IN %s
        GROUP BY IDindividu, IDfamille;""" % (
            datetime.date.today(),
            GestionDB.ConvertConditionChaine(liste_individus_concernes))
        self.DB.ExecuterReq(req)
        listePrestations = self.DB.ResultatReq()
        dictPrestations = {}
        for IDindividu, IDfamille, nbrePrestations in listePrestations:
            if nbrePrestations > 0:
                dictPrestations[(IDindividu, IDfamille)] = nbrePrestations

        # Variables
        liste_familles_temp = []
        liste_individus_temp = []

        # Version FAMILLES
        if self.liste_familles != []:

            # Sélection des individus
            for IDfamille in self.liste_familles:
                nomTitulaires = self.dict_titulaires[IDfamille][
                    "titulairesSansCivilite"]
                liste_rattaches = []
                if dict_rattachements_familles.has_key(IDfamille):
                    for IDindividu, IDcategorie in dict_rattachements_familles[
                            IDfamille]:
                        nom_complet = dict_individus[IDindividu]["nom_complet"]
                        nom_categorie = GetNomCategorie(
                            IDcategorie).capitalize()
                        infos = []

                        # Recherche si l'individu est rattaché à d'autres familles non inclues
                        if dict_rattachements_individus.has_key(IDindividu):
                            for IDfamilleTemp, IDcategorieTemp in dict_rattachements_individus[
                                    IDindividu]:
                                if IDfamilleTemp not in self.liste_familles:
                                    infos.append(
                                        _(u"Rattaché également à la famille de %s en tant que %s"
                                          ) %
                                        (self.dict_titulaires[IDfamilleTemp]
                                         ["titulairesSansCivilite"],
                                         GetNomCategorie(IDcategorieTemp)))

                        if dictPrestations.has_key((IDindividu, IDfamille)):
                            infos.append(
                                _(u"Des prestations futures sont déjà enregistrées"
                                  ))

                        liste_rattaches.append({
                            "IDcategorie": IDcategorie,
                            "nom_complet": nom_complet,
                            "IDindividu": IDindividu,
                            "nom_categorie": nom_categorie,
                            "infos": infos
                        })
                        liste_rattaches = sorted(
                            liste_rattaches,
                            key=operator.itemgetter("IDcategorie"))
                liste_rattaches.sort()
                liste_familles_temp.append({
                    "nomTitulaires": nomTitulaires,
                    "IDfamille": IDfamille,
                    "liste_rattaches": liste_rattaches
                })
            liste_familles_temp = sorted(
                liste_familles_temp, key=operator.itemgetter("nomTitulaires"))
            liste_familles_temp.sort()

        # Version INDIVIDUS
        if self.liste_individus != []:

            # Sélection des individus
            for IDindividu in self.liste_individus:
                nom_complet = dict_individus[IDindividu]["nom_complet"]
                liste_rattaches = []

                if dict_rattachements_individus.has_key(IDindividu):
                    for IDfamille, IDcategorie in dict_rattachements_individus[
                            IDindividu]:
                        nomTitulaires = self.dict_titulaires[IDfamille][
                            "titulairesSansCivilite"]
                        nom_categorie = GetNomCategorie(
                            IDcategorie).capitalize()
                        infos = []

                        if dictPrestations.has_key((IDindividu, IDfamille)):
                            infos.append(
                                _(u"Des prestations futures sont déjà enregistrées"
                                  ))

                        liste_rattaches.append({
                            "IDcategorie": IDcategorie,
                            "nomTitulaires": nomTitulaires,
                            "IDfamille": IDfamille,
                            "nom_categorie": nom_categorie,
                            "infos": infos
                        })
                        liste_rattaches = sorted(
                            liste_rattaches,
                            key=operator.itemgetter("IDcategorie"))
                liste_rattaches.sort()
                liste_individus_temp.append({
                    "nom_complet": nom_complet,
                    "IDindividu": IDindividu,
                    "liste_rattaches": liste_rattaches
                })
            liste_individus_temp = sorted(
                liste_individus_temp, key=operator.itemgetter("nom_complet"))
            liste_individus_temp.sort()

        # Affiche dlg de sélection
        dlg = DLG_Selection(None,
                            intro=intro,
                            liste_familles=liste_familles_temp,
                            liste_individus=liste_individus_temp)
        listeIndividusCoches = False
        if dlg.ShowModal() == wx.ID_OK:
            listeIndividusCoches = dlg.GetCoches()
        dlg.Destroy()
        return listeIndividusCoches
Example #3
0
 def Supprimer(self, listeID=[], nom_table="", champ_condition=""):
     self.DB.ExecuterReq("DELETE FROM %s WHERE %s IN %s" %
                         (nom_table, champ_condition,
                          GestionDB.ConvertConditionChaine(listeID)))
     self.DB.Commit()
Example #4
0
    def MAJ(self, forcerActualisation=False):
        # Recherche des données
        condition = ""
        listeFiltreGroupesActivites = None

        DB = GestionDB.DB()

        # Recherche des paramètres
        parametres = UTILS_Config.GetParametre("nbre_inscrits_parametre_activites", defaut=None)
        if parametres != None :
            code, liste = parametres.split("###")
            if liste != "" :
                listeID = []
                for ID in liste.split(";") :
                    listeID.append(int(ID))
                if code == "liste_groupes_activites" :
                    listeFiltreGroupesActivites = listeID
                    req = """SELECT IDtype_groupe_activite, IDactivite
                    FROM groupes_activites
                    WHERE IDtype_groupe_activite IN %s
                    ;""" % GestionDB.ConvertConditionChaine(listeID)
                    DB.ExecuterReq(req)
                    listeDonnees = DB.ResultatReq()
                    listeActivites = []
                    for IDtype_groupe_activite, IDactivite in listeDonnees :
                        listeActivites.append(IDactivite)
                    condition = "WHERE activites.IDactivite IN %s" % GestionDB.ConvertConditionChaine(listeActivites)

                if code == "liste_activites" :
                    condition = "WHERE activites.IDactivite IN %s" % GestionDB.ConvertConditionChaine(listeID)

        # Tri
        tri = UTILS_Config.GetParametre("nbre_inscrits_parametre_tri", 3)
        if tri == 0 :
            tri = "activites.nom"
        elif tri == 1 :
            tri = "activites.date_debut"
        elif tri == 2 :
            tri = "activites.date_fin"
        elif tri == 3 :
            tri = "activites.abrege"
        else :
            tri = "activites.nom"
        
        # Sens
        sens = UTILS_Config.GetParametre("nbre_inscrits_parametre_sens", 1)
        if sens == 0 :
            sens = ""
        else :
            sens = "DESC"
        
        # Seuil d'alerte
        self.seuil_alerte = UTILS_Config.GetParametre("nbre_inscrits_parametre_alerte", 5)

        # Regroupement par groupe d'activités
        self.regroupement_groupe_activites = UTILS_Config.GetParametre("nbre_inscrits_parametre_regroup", 0)

        # Récupération des groupes
        condition_partis = ""
        if UTILS_Config.GetParametre("nbre_inscrits_parametre_partis", 1) == 1 :
            if condition == "" :
                condition_partis = "WHERE (inscriptions.date_desinscription IS NULL OR inscriptions.date_desinscription>='%s'" % datetime.date.today()
            else :
                condition_partis = "AND (inscriptions.date_desinscription IS NULL OR inscriptions.date_desinscription>='%s'" % datetime.date.today()

        req = """SELECT groupes.IDgroupe, groupes.IDactivite, groupes.nom, groupes.abrege, groupes.nbre_inscrits_max,
        COUNT(inscriptions.IDinscription) as nbre_inscriptions
        FROM groupes
        LEFT JOIN activites ON activites.IDactivite = groupes.IDactivite
        LEFT JOIN inscriptions ON inscriptions.IDgroupe = groupes.IDgroupe
        %s %s
        GROUP BY groupes.IDgroupe
        ORDER BY groupes.ordre
        ;""" % (condition, condition_partis)
        DB.ExecuterReq(req)
        listeGroupes = DB.ResultatReq()

        dictGroupes = {}
        for IDgroupe, IDactivite, nom, abrege, nbre_inscrits_max, nbre_inscrits in listeGroupes :
            if nbre_inscrits == None : nbre_inscrits = 0
            if nom == None : nom = _(u"Sans nom !")
            if abrege == None : abrege = ""

            if nbre_inscrits_max != None :
                nbre_places_libres = nbre_inscrits_max - nbre_inscrits
            else :
                nbre_places_libres = None

            if dictGroupes.has_key(IDactivite) == False :
                dictGroupes[IDactivite] = []
            dictGroupes[IDactivite].append({"IDgroupe" : IDgroupe, "nom" : nom, "abrege" : abrege, "nbre_inscrits_max" : nbre_inscrits_max, "nbre_inscrits" : nbre_inscrits, "nbre_places_libres" : nbre_places_libres, "IDactivite" : IDactivite})

        # Récupération des activités
        activite_ouverte = UTILS_Config.GetParametre("nbre_inscrits_parametre_ouvert", 1)
        if activite_ouverte == 1 :
            if condition == "" :
                condition = "WHERE activites.date_fin>='%s'" % str(datetime.date.today())
            else :
                condition += " AND activites.date_fin>='%s'" % str(datetime.date.today())

        req = """SELECT activites.IDactivite, activites.nom, activites.abrege, activites.nbre_inscrits_max
        FROM activites
        %s
        GROUP BY activites.IDactivite
        ORDER BY %s %s
        ;""" % (condition, tri, sens)
        DB.ExecuterReq(req)
        listeActivites = DB.ResultatReq()

        listeActivitesTemp = []
        listeIDactivite = []
        for IDactivite, nom, abrege, nbre_inscrits_max in listeActivites :
            if nom == None : nom = _(u"Sans nom !")
            if abrege == None : abrege = ""

            liste_groupes = []
            if dictGroupes.has_key(IDactivite) :
                liste_groupes = dictGroupes[IDactivite]
            nbre_inscrits = 0
            liste_infos = [nom,]
            for dictGroupe in liste_groupes :
                nbre_inscrits += dictGroupe["nbre_inscrits"]
                liste_infos.append(dictGroupe["nom"])

            if nbre_inscrits_max != None :
                nbre_places_libres = nbre_inscrits_max - nbre_inscrits
            else :
                nbre_places_libres = None

            listeActivitesTemp.append({"IDactivite" : IDactivite, "nom" : nom, "abrege" : abrege, "nbre_inscrits_max" : nbre_inscrits_max, "nbre_inscrits" : nbre_inscrits, "nbre_places_libres" : nbre_places_libres, "liste_groupes" : liste_groupes, "infos" : " ".join(liste_infos)})
            listeIDactivite.append(IDactivite)

        # Pour éviter l'actualisation de l'affichage si aucune modification des données
        if self.listeActivites != listeActivitesTemp or forcerActualisation == True :
            self.listeActivites = listeActivitesTemp
        else :
            DB.Close()
            return

        # Récupération des groupes d'activités
        if self.regroupement_groupe_activites == 1 :

            req = """SELECT groupes_activites.IDtype_groupe_activite, nom, IDactivite
            FROM groupes_activites
            LEFT JOIN types_groupes_activites ON types_groupes_activites.IDtype_groupe_activite = groupes_activites.IDtype_groupe_activite
            WHERE IDactivite IN %s
            ;""" % GestionDB.ConvertConditionChaine(listeIDactivite)
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            dictGroupeParActivite = {}
            dictGroupesActivites = {}
            for IDtype_groupe_activite, nom, IDactivite in listeDonnees :

                if not dictGroupeParActivite.has_key(IDactivite) :
                    dictGroupeParActivite[IDactivite] = []
                dictGroupeParActivite[IDactivite].append(IDtype_groupe_activite)

                if not dictGroupesActivites.has_key(IDtype_groupe_activite) :
                    dictGroupesActivites[IDtype_groupe_activite] = nom

            liste_groupes_activites = []
            for IDtype_groupe_activite, nom in dictGroupesActivites.iteritems() :
                if listeFiltreGroupesActivites == None or IDtype_groupe_activite in listeFiltreGroupesActivites :
                    liste_groupes_activites.append((nom.upper(), IDtype_groupe_activite))
            liste_groupes_activites.sort()

        else :
            liste_groupes_activites = [(None, None),]

        DB.Close()

        # MAJ du contrôle
        self.DeleteChildren(self.root)

        # Préparation pour impression
        self.dictImpression["contenu"] = []
        self.dictImpression["coloration"] = []


        for nom, IDtype_groupe_activite in liste_groupes_activites :
            if nom == None :
                niveau_parent = self.root
            else :
                niveau_regroup = self.AppendItem(self.root, nom)
                self.SetItemBackgroundColour(niveau_regroup, "#DDDDDD")
                self.dictImpression["contenu"].append([nom,])
                self.dictImpression["coloration"].append((len(self.dictImpression["contenu"])-1, "regroup"))
                niveau_parent = niveau_regroup

            for dictActivite in self.listeActivites :

                if self.filtre == None or (self.filtre.lower() in dictActivite["infos"].lower()) :

                    IDactivite = dictActivite["IDactivite"]
                    if self.regroupement_groupe_activites == 0 or (self.regroupement_groupe_activites == 1 and dictGroupeParActivite.has_key(IDactivite) and IDtype_groupe_activite in dictGroupeParActivite[IDactivite]) :

                        # Ligne Activité
                        label = u" " + dictActivite["nom"]
                        niveau_activite = self.AppendItem(niveau_parent, label)
                        font = self.GetFont()
                        font.SetWeight(wx.BOLD)
                        self.SetItemFont(niveau_activite, font)
                        self.SetPyData(niveau_activite, dictActivite)

                        # Abrégé
                        self.SetItemText(niveau_activite, dictActivite["abrege"], 1)

                        # Valeurs
                        nbre_inscrits = dictActivite["nbre_inscrits"]
                        if nbre_inscrits == None :
                            texte_inscrits = ""
                        else :
                            texte_inscrits = str(nbre_inscrits)
                        self.SetItemText(niveau_activite, texte_inscrits, 2)

                        nbre_inscrits_max = dictActivite["nbre_inscrits_max"]
                        if nbre_inscrits_max == None :
                            texte_inscrits_max = ""
                        else :
                            texte_inscrits_max = str(nbre_inscrits_max)
                        self.SetItemText(niveau_activite, texte_inscrits_max, 3)

                        nbre_places_libres = dictActivite["nbre_places_libres"]
                        if nbre_places_libres == None :
                            texte_places_libres = ""
                        else :
                            texte_places_libres = str(nbre_places_libres)
                        self.SetItemText(niveau_activite, texte_places_libres, 4)

                        # Couleur de la ligne
                        couleur_fond = self.GetCouleurLigne(nbre_places_libres)
                        if couleur_fond != None :
                            self.SetItemBackgroundColour(niveau_activite, couleur_fond)

                        # Mémorisation ligne activité pour impression
                        self.dictImpression["contenu"].append([label, dictActivite["abrege"], texte_inscrits, texte_inscrits_max, texte_places_libres])
                        self.dictImpression["coloration"].append((len(self.dictImpression["contenu"])-1, "activite"))

                        # Ligne Groupe
                        for dictGroupe in dictActivite["liste_groupes"] :

                            label = u" " + dictGroupe["nom"]
                            niveau_groupe = self.AppendItem(niveau_activite, label)
                            self.SetPyData(niveau_groupe, dictGroupe)

                            # Abrégé
                            self.SetItemText(niveau_groupe, dictGroupe["abrege"], 1)

                            nbre_inscrits = dictGroupe["nbre_inscrits"]
                            if nbre_inscrits == None :
                                texte_inscrits = ""
                            else :
                                texte_inscrits = str(nbre_inscrits)
                            self.SetItemText(niveau_groupe, texte_inscrits, 2)

                            nbre_inscrits_max = dictGroupe["nbre_inscrits_max"]
                            if nbre_inscrits_max == None :
                                texte_inscrits_max = ""
                            else :
                                texte_inscrits_max = str(nbre_inscrits_max)
                            self.SetItemText(niveau_groupe, texte_inscrits_max, 3)

                            nbre_places_libres = dictGroupe["nbre_places_libres"]
                            if nbre_places_libres == None :
                                texte_places_libres = ""
                            else :
                                texte_places_libres = str(nbre_places_libres)
                            self.SetItemText(niveau_groupe, texte_places_libres, 4)

                            # Couleur de la ligne
                            couleur_fond = self.GetCouleurLigne(nbre_places_libres)
                            if couleur_fond != None :
                                self.SetItemBackgroundColour(niveau_groupe, couleur_fond)

                            # Mémorisation ligne activité pour impression
                            self.dictImpression["contenu"].append([u"     %s" % label, dictGroupe["abrege"], texte_inscrits, texte_inscrits_max, texte_places_libres])


        self.ExpandAllChildren(self.root)
Example #5
0
    def GetTracks(self):
        """ Récupération des données """
        # Récupération des données dans la base
        listeChamps = ("individus.IDindividu", "IDcivilite", "nom", "prenom",
                       "num_secu", "IDnationalite", "date_naiss",
                       "IDpays_naiss", "cp_naiss", "ville_naiss",
                       "adresse_auto", "rue_resid", "cp_resid", "ville_resid",
                       "IDcategorie_travail", "profession", "employeur",
                       "travail_tel", "travail_fax", "travail_mail",
                       "tel_domicile", "tel_mobile", "tel_fax", "mail", "etat")

        conditions = "etat IS NULL"
        if "archives" in self.dictParametres and self.dictParametres[
                "archives"] == True:
            conditions += " OR etat='archive'"
        if "effaces" in self.dictParametres and self.dictParametres[
                "effaces"] == True:
            conditions += " OR etat='efface'"

        db = GestionDB.DB()
        req = """SELECT %s FROM individus WHERE %s;""" % (
            ",".join(listeChamps), conditions)
        db.ExecuterReq(req)
        listeDonnees = db.ResultatReq()
        db.Close()

        # Récupération du dictionnaire des civilités
        dictCivilites = Civilites.GetDictCivilites()

        # Création du dictionnaire des données
        dictIndividus = {}
        for valeurs in listeDonnees:
            IDindividu = valeurs[0]
            dictTemp = {}
            # Infos de la table Individus
            for index in range(0, len(listeChamps)):
                nomChamp = listeChamps[index]
                dictTemp[nomChamp] = valeurs[index]
            # Infos sur la civilité
            if dictTemp["IDcivilite"] != None and dictTemp["IDcivilite"] != "":
                dictTemp["genre"] = dictCivilites[
                    dictTemp["IDcivilite"]]["sexe"]
                dictTemp["categorieCivilite"] = dictCivilites[
                    dictTemp["IDcivilite"]]["categorie"]
                dictTemp["civiliteLong"] = dictCivilites[
                    dictTemp["IDcivilite"]]["civiliteLong"]
                dictTemp["civiliteAbrege"] = dictCivilites[
                    dictTemp["IDcivilite"]]["civiliteAbrege"]
                dictTemp["nomImage"] = dictCivilites[
                    dictTemp["IDcivilite"]]["nomImage"]
            else:
                dictTemp["genre"] = ""
                dictTemp["categorieCivilite"] = ""
                dictTemp["civiliteLong"] = ""
                dictTemp["civiliteAbrege"] = ""
                dictTemp["nomImage"] = None

            if dictTemp["date_naiss"] == None:
                dictTemp["age"] = None
            else:
                try:
                    datenaissDD = UTILS_Dates.DateEngEnDateDD(
                        dictTemp["date_naiss"])
                    datedujour = datetime.date.today()
                    age = (datedujour.year - datenaissDD.year) - int(
                        (datedujour.month, datedujour.day) <
                        (datenaissDD.month, datenaissDD.day))
                    dictTemp["age"] = age
                    dictTemp["date_naiss"] = datenaissDD
                except:
                    dictTemp["age"] = None

            dictIndividus[IDindividu] = dictTemp

        # Vérifie si le dictIndividus est différent du précédent pour empêcher l'actualisation de la liste
        if dictIndividus == self.dictIndividus and self.forceActualisation == False:
            return None
        else:
            self.dictIndividus = dictIndividus

        filtre = None

        # Si filtre activités
        if len(self.dictParametres["activites"]) > 0:
            conditionActivites = GestionDB.ConvertConditionChaine(
                self.dictParametres["activites"])
            db = GestionDB.DB()
            req = """SELECT individus.IDindividu, nom
            FROM individus
            LEFT JOIN inscriptions ON inscriptions.IDindividu = individus.IDindividu
            WHERE inscriptions.statut='ok' AND inscriptions.IDactivite IN %s
            ;""" % conditionActivites
            db.ExecuterReq(req)
            listeDonnees = db.ResultatReq()
            db.Close()
            filtre = []
            for ID, nom in listeDonnees:
                filtre.append(ID)

        # Si filtre Groupes d'activités
        if len(self.dictParametres["groupes_activites"]) > 0:
            conditionGroupesActivites = GestionDB.ConvertConditionChaine(
                self.dictParametres["groupes_activites"])
            db = GestionDB.DB()
            req = """SELECT individus.IDindividu, nom
            FROM individus
            LEFT JOIN inscriptions ON inscriptions.IDindividu = individus.IDindividu
            LEFT JOIN groupes_activites ON groupes_activites.IDactivite = inscriptions.IDactivite
            WHERE inscriptions.statut='ok' AND groupes_activites.IDtype_groupe_activite IN %s
            ;""" % conditionGroupesActivites
            db.ExecuterReq(req)
            listeDonnees = db.ResultatReq()
            db.Close()
            filtre = []
            for ID, nom in listeDonnees:
                filtre.append(ID)

        # Création des Tracks
        listeListeView = []
        self.dictTracks = {}
        for IDindividu, dictTemp in dictIndividus.items():
            if filtre == None or IDindividu in filtre:
                track = Track(dictTemp, dictIndividus)
                listeListeView.append(track)
                self.dictTracks[IDindividu] = track

        return listeListeView
Example #6
0
    def MAJ(self, forcerActualisation=False):
        condition = ""

        DB = GestionDB.DB()

        # Recherche des paramètres
        parametres = UTILS_Config.GetParametre(
            "nbre_inscrits_parametre_activites", defaut=None)
        if parametres != None:
            code, liste = parametres.split("###")
            if liste != "":
                listeID = []
                for ID in liste.split(";"):
                    listeID.append(int(ID))
                if code == "liste_groupes_activites":
                    req = """SELECT IDtype_groupe_activite, IDactivite
                    FROM groupes_activites
                    WHERE IDtype_groupe_activite IN %s
                    ;""" % GestionDB.ConvertConditionChaine(listeID)
                    DB.ExecuterReq(req)
                    listeDonnees = DB.ResultatReq()
                    listeActivites = []
                    for IDtype_groupe_activite, IDactivite in listeDonnees:
                        listeActivites.append(IDactivite)
                    condition = "AND activites.IDactivite IN %s" % GestionDB.ConvertConditionChaine(
                        listeActivites)

                if code == "liste_activites":
                    condition = "AND activites.IDactivite IN %s" % GestionDB.ConvertConditionChaine(
                        listeID)

        # Tri
        tri = UTILS_Config.GetParametre("nbre_inscrits_parametre_tri", 3)
        if tri == 0:
            tri = "activites.nom"
        elif tri == 1:
            tri = "activites.date_debut"
        elif tri == 2:
            tri = "activites.date_fin"
        else:
            tri = "activites.nom"

        # Sens
        sens = UTILS_Config.GetParametre("nbre_inscrits_parametre_sens", 1)
        if sens == 0:
            sens = ""
        else:
            sens = "DESC"

        # Seuil d'alerte
        self.seuil_alerte = UTILS_Config.GetParametre(
            "nbre_inscrits_parametre_alerte", 5)

        # Récupération des groupes
        req = """SELECT groupes.IDgroupe, groupes.IDactivite, groupes.nom, groupes.nbre_inscrits_max,
        COUNT(inscriptions.IDinscription) as nbre_inscriptions
        FROM groupes
        LEFT JOIN activites ON activites.IDactivite = groupes.IDactivite
        LEFT JOIN inscriptions ON inscriptions.IDgroupe = groupes.IDgroupe
        WHERE inscriptions.statut='ok' %s
        GROUP BY groupes.IDgroupe
        ORDER BY groupes.ordre
        ;""" % condition
        DB.ExecuterReq(req)
        listeGroupes = DB.ResultatReq()

        dictGroupes = {}
        for IDgroupe, IDactivite, nom, nbre_inscrits_max, nbre_inscrits in listeGroupes:
            if nbre_inscrits_max == None: nbre_inscrits_max = 0
            if nbre_inscrits == None: nbre_inscrits = 0
            if nom == None: nom = _(u"Sans nom !")

            if (IDactivite in dictGroupes) == False:
                dictGroupes[IDactivite] = []
            dictGroupes[IDactivite].append({
                "IDgroupe": IDgroupe,
                "nom": nom,
                "nbre_inscrits_max": nbre_inscrits_max,
                "nbre_inscrits": nbre_inscrits,
                "IDactivite": IDactivite
            })

        # Récupération des activités
        activite_ouverte = UTILS_Config.GetParametre(
            "nbre_inscrits_parametre_ouvert", 1)
        if activite_ouverte == 1:
            if condition == "":
                condition = "WHERE activites.date_fin>='%s'" % str(
                    datetime.date.today())
            else:
                condition += " AND activites.date_fin>='%s'" % str(
                    datetime.date.today())

        req = """SELECT activites.IDactivite, activites.nom, activites.nbre_inscrits_max
        FROM activites
        %s
        GROUP BY activites.IDactivite
        ;""" % condition
        DB.ExecuterReq(req)
        listeActivites = DB.ResultatReq()

        DB.Close()

        listeActivitesTemp = []
        for IDactivite, nom, nbre_inscrits_max in listeActivites:
            if nbre_inscrits_max == None: nbre_inscrits_max = 0
            if nom == None: nom = _(u"Sans nom !")

            liste_groupes = []
            if IDactivite in dictGroupes:
                liste_groupes = dictGroupes[IDactivite]
            nbre_inscrits = 0
            liste_infos = [
                nom,
            ]
            for dictGroupe in liste_groupes:
                nbre_inscrits += dictGroupe["nbre_inscrits"]
                liste_infos.append(dictGroupe["nom"])

            listeActivitesTemp.append({
                "IDactivite": IDactivite,
                "nom": nom,
                "nbre_inscrits_max": nbre_inscrits_max,
                "nbre_inscrits": nbre_inscrits,
                "liste_groupes": liste_groupes,
                "infos": " ".join(liste_infos)
            })

        # Pour éviter l'actualisation de l'affichage si aucune modification des données
        if self.listeActivites != listeActivitesTemp or forcerActualisation == True:
            self.listeActivites = listeActivitesTemp
        else:
            return

        # MAJ du contrôle
        self.Freeze()
        self.DeleteAllItems()

        self.dictRenderers = {}
        index = 0
        for dictActivite in self.listeActivites:

            if self.filtre == None or (self.filtre.lower()
                                       in dictActivite["infos"].lower()):

                couleur_fond = UTILS_Interface.GetValeur(
                    "couleur_tres_claire", wx.Colour(214, 250, 199))

                # Colonne Activité
                label = u" " + dictActivite["nom"]
                self.InsertStringItem(index, label)
                self.SetItemPyData(index, dictActivite)
                self.SetItemBackgroundColour(index, couleur_fond)

                item = self.GetItem(index, 0)
                font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
                font.SetWeight(wx.BOLD)
                item.SetFont(font)
                self.SetItem(item)

                # Colonne Gauge
                renderer = Renderer_gauge(self)
                renderer.SetValeurs(
                    mode="activite",
                    couleur_fond=couleur_fond,
                    nbre_inscrits=dictActivite["nbre_inscrits"],
                    nbre_inscrits_max=dictActivite["nbre_inscrits_max"])
                self.dictRenderers[index] = renderer
                self.SetItemCustomRenderer(index, 1, renderer)

                index += 1

                for dictGroupe in dictActivite["liste_groupes"]:

                    label = u" " + dictGroupe["nom"]
                    self.InsertStringItem(index, label)
                    self.SetItemPyData(index, dictGroupe)

                    # Colonne Gauge
                    renderer = Renderer_gauge(self)
                    renderer.SetValeurs(
                        mode="groupe",
                        nbre_inscrits=dictGroupe["nbre_inscrits"],
                        nbre_inscrits_max=dictGroupe["nbre_inscrits_max"])
                    self.dictRenderers[index] = renderer
                    self.SetItemCustomRenderer(index, 1, renderer)

                    index += 1

        # Ajuste la taille des colonnes
        self.SetColumnWidth(0, wx.LIST_AUTOSIZE)
        self.SetColumnWidth(1, ULC.ULC_AUTOSIZE_FILL)

        # Actualiser l'affichage pour éviter bug de positionnement
        try:
            self.DoLayout()
        except:
            pass

        self.Thaw()