def MAJ(self, figure=None, DB=None, dictParametres={}):
        self.dictParametres = dictParametres
        # Création du graph
        ax = figure.add_subplot(111)

        # Recherche des paramètres
        date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres)
        conditionsActivites = MODELES.GetConditionActivites(dictParametres)
        dictResultats = GetDictMembres(DB, dictParametres)

        if dictParametres["mode"] == "presents":
            self.nom = _(u"Nombre de membres présents")
        else:
            self.nom = _(u"Nombre de membres inscrits")

        listeValeurs = []
        listeLabels = []
        listeCouleurs = []

        listeResultats = []
        nbreTotalFamilles = 0
        for nbreMembres, nbreFamilles in dictResultats.items():
            listeResultats.append((nbreMembres, nbreFamilles))
            nbreTotalFamilles += nbreFamilles
        listeResultats.sort()

        index = 1
        for nbreMembres, nbreFamilles in listeResultats:
            listeValeurs.append(nbreFamilles)
            if nbreMembres == 1:
                label = _(u"1 membre")
            else:
                label = _(u"%d membres") % nbreMembres
            listeLabels.append(label)

            couleur = 1.0 * nbreFamilles / nbreTotalFamilles
            couleur = matplotlib.cm.hsv(index * 0.1)
            listeCouleurs.append(couleur)

            index += 1

        cam = ax.pie(listeValeurs,
                     labels=listeLabels,
                     colors=listeCouleurs,
                     autopct='%1.1f%%',
                     shadow=False)
        title = ax.set_title(
            self.nom, weight="bold",
            horizontalalignment='center')  #, position=(0.5, 0.97))
        matplotlib.pyplot.setp(title, rotation=0, fontsize=9)
        ax.set_aspect(1)
        labels, labelsPourcent = cam[1], cam[2]
        matplotlib.pyplot.setp(labels, rotation=0, fontsize=9)
        matplotlib.pyplot.setp(labelsPourcent, rotation=0, fontsize=9)

        return figure
def GetDictCaisses(DB, dictParametres):
    # Vérifie si les données n'existent pas déj�
    global DICT_CAISSES
    if DICT_CAISSES["dictParametres"] == dictParametres:
        return DICT_CAISSES["dictResultats"]

    # Recherche des paramètres
    date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres)
    conditionsActivites = MODELES.GetConditionActivites(dictParametres)

    req = """SELECT IDcaisse, nom FROM caisses;"""
    DB.ExecuterReq(req)
    listeCaisses = DB.ResultatReq()
    dictCaisses = {}
    for IDcaisse, nom in listeCaisses:
        dictCaisses[IDcaisse] = nom

    if dictParametres["mode"] == "presents":
        req = """SELECT IDcaisse, COUNT(familles.IDfamille)
        FROM familles
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = familles.IDfamille
        LEFT JOIN consommations ON consommations.IDcompte_payeur = comptes_payeurs.IDcompte_payeur
        WHERE date>='%s' AND date<='%s' 
        AND consommations.etat IN ('reservation', 'present')
        AND IDactivite IN %s
        GROUP BY IDcaisse, familles.IDfamille
        ;""" % (date_debut, date_fin, conditionsActivites)
    else:
        req = """SELECT IDcaisse, COUNT(familles.IDfamille)
        FROM familles
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = familles.IDfamille
        LEFT JOIN inscriptions ON inscriptions.IDcompte_payeur = comptes_payeurs.IDcompte_payeur
        WHERE inscriptions.statut='ok' AND IDactivite IN %s
        GROUP BY IDcaisse, familles.IDfamille
        ;""" % conditionsActivites

    DB.ExecuterReq(req)
    listeDonnees = DB.ResultatReq()
    if len(listeDonnees) == 0:
        return {}

    dictResultats = {}
    for IDcaisse, IDfamille in listeDonnees:
        if (IDcaisse in dictResultats) == False:
            if IDcaisse in dictCaisses:
                nom = dictCaisses[IDcaisse]
            else:
                nom = _(u"Caisse inconnue")
            dictResultats[IDcaisse] = {"nom": nom, "nbreFamilles": 0}
        dictResultats[IDcaisse]["nbreFamilles"] += 1

    # Mémorisation des résultats
    DICT_CAISSES["dictParametres"] = dictParametres
    DICT_CAISSES["dictResultats"] = dictResultats
    return dictResultats
def GetDictMembres(DB, dictParametres):
    # Vérifie si les données n'existent pas déj�
    global DICT_MEMBRES
    if DICT_MEMBRES["dictParametres"] == dictParametres:
        return DICT_MEMBRES["dictResultats"]

    # Recherche des paramètres
    date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres)
    conditionsActivites = MODELES.GetConditionActivites(dictParametres)

    # Recherche du nombre d'individus présents
    if dictParametres["mode"] == "presents":
        req = """SELECT IDfamille, consommations.IDindividu
        FROM consommations 
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = consommations.IDcompte_payeur
        WHERE date>='%s' AND date<='%s' 
        AND consommations.etat IN ('reservation', 'present')
        AND IDactivite IN %s
        GROUP BY IDfamille, consommations.IDindividu
        ;""" % (date_debut, date_fin, conditionsActivites)
    else:
        req = """SELECT comptes_payeurs.IDfamille, inscriptions.IDindividu
        FROM inscriptions 
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = inscriptions.IDcompte_payeur
        WHERE inscriptions.statut='ok' AND IDactivite IN %s
        GROUP BY comptes_payeurs.IDfamille, inscriptions.IDindividu
        ;""" % conditionsActivites

    DB.ExecuterReq(req)
    listeDonnees = DB.ResultatReq()
    if len(listeDonnees) == 0:
        return {}

    dictFamilles = {}
    for IDfamille, IDindividu in listeDonnees:
        if (IDfamille in dictFamilles) == False:
            dictFamilles[IDfamille] = 0
        dictFamilles[IDfamille] += 1

    dictResultats = {}
    for IDfamille, nbreMembres in dictFamilles.items():
        if (nbreMembres in dictResultats) == False:
            dictResultats[nbreMembres] = 0
        dictResultats[nbreMembres] += 1

    # Mémorisation des résultats
    DICT_MEMBRES["dictParametres"] = dictParametres
    DICT_MEMBRES["dictResultats"] = dictResultats
    return dictResultats
    def MAJ(self, DB=None, dictParametres={}):
        self.dictParametres = dictParametres
        self.colonnes = []
        self.lignes = []
        self.totaux = []

        # Recherche des paramètres
        date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres)
        conditionsActivites = MODELES.GetConditionActivites(dictParametres)

        # Recherche du nombre d'individus présents
        if dictParametres["mode"] == "presents":
            req = """SELECT IDactivite, COUNT(IDfamille)
            FROM consommations 
            LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = consommations.IDcompte_payeur
            WHERE date>='%s' AND date<='%s' 
            AND consommations.etat IN ('reservation', 'present')
            AND IDactivite IN %s
            GROUP BY IDactivite, IDfamille
            ;""" % (date_debut, date_fin, conditionsActivites)
        else:
            req = """SELECT IDactivite, COUNT(comptes_payeurs.IDfamille)
            FROM inscriptions 
            LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = inscriptions.IDcompte_payeur
            WHERE inscriptions.statut='ok' AND IDactivite IN %s
            GROUP BY IDactivite, comptes_payeurs.IDfamille
            ;""" % conditionsActivites

        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) == 0:
            return

        dictActiTemp = {}
        for IDactivite, nbreConso in listeDonnees:
            if (IDactivite in dictActiTemp) == False:
                dictActiTemp[IDactivite] = 0
            dictActiTemp[IDactivite] += 1

        # Création du tableau
        self.largeur = "400"
        self.colonnes = [(_(u"Activité"), "250"),
                         (_(u"Nombre de familles"), "150")]
        self.lignes = []
        for IDactivite, listeFamilles in dictActiTemp.items():
            nomActivite = dictParametres["dictActivites"][IDactivite]
            self.lignes.append((nomActivite, listeFamilles))
    def MAJ(self, DB=None, dictParametres={}):
        self.dictParametres = dictParametres

        date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres)
        conditionsActivites = MODELES.GetConditionActivites(dictParametres)

        # Recherche du nombre d'individus présents
        if dictParametres["mode"] == "presents":
            req = """SELECT COUNT(IDfamille)
            FROM consommations 
            LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = consommations.IDcompte_payeur
            WHERE date>='%s' AND date<='%s' 
            AND consommations.etat IN ('reservation', 'present')
            AND IDactivite IN %s
            GROUP BY comptes_payeurs.IDfamille
            ;""" % (date_debut, date_fin, conditionsActivites)
        else:
            req = """SELECT COUNT(comptes_payeurs.IDfamille)
            FROM inscriptions 
            LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = inscriptions.IDcompte_payeur
            WHERE inscriptions.statut='ok' AND IDactivite IN %s
            GROUP BY comptes_payeurs.IDfamille
            ;""" % conditionsActivites

        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()

        if dictParametres["mode"] == "presents":
            mot = _(u"présent")
        else:
            mot = _(u"inscrit")

        if len(listeDonnees) == 0 or listeDonnees[0][0] == 0:
            self.texte = _(u"Aucune famille dont les membres sont %ss.") % mot
        else:
            self.texte = _(u"%d familles dont les membres sont %ss.") % (
                len(listeDonnees), mot)
    def MAJ(self, DB=None, dictParametres={}):
        self.dictParametres = dictParametres
        self.colonnes = []
        self.lignes = []
        self.totaux = []

        # Recherche des paramètres
        date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres)
        conditionsActivites = MODELES.GetConditionActivites(dictParametres)
        dictResultats = GetDictMembres(DB, dictParametres)

        if dictParametres["mode"] == "presents":
            self.nom = _(u"Nombre de membres présents")
        else:
            self.nom = _(u"Nombre de membres inscrits")

        # Création du tableau
        self.largeur = "400"
        self.colonnes = [(_(u"Nombre de membres"), "250"),
                         (_(u"Nombre de familles"), "150")]
        self.lignes = []
        for nbreMembres, nbreFamilles in dictResultats.items():
            self.lignes.append((nbreMembres, nbreFamilles))
        self.lignes.sort()
def GetComparatifNombre(DB, dictParametres):
    dictResultats = {}

    # Vérifie si les données n'existent pas déj�
    global DICT_COMPARATIF_NOMBRE
    if DICT_COMPARATIF_NOMBRE["dictParametres"] == dictParametres:
        return DICT_COMPARATIF_NOMBRE["listeResultats"]

    if dictParametres["mode"] == "inscrits":
        return dictResultats

    # Recherche des paramètres
    date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres)
    conditionsActivites = MODELES.GetConditionActivites(dictParametres)

    # Recherche des périodes de comparaison
    req = """SELECT MIN(date), MAX(date) 
    FROM consommations 
    WHERE consommations.etat IN ('reservation', 'present')
    AND IDactivite IN %s
    ;""" % conditionsActivites
    DB.ExecuterReq(req)
    listeDonnees = DB.ResultatReq()
    try:
        if listeDonnees[0][0] == None or listeDonnees[0][1] == None:
            return dictResultats
        date_min = MODELES.DateEngEnDateDD(listeDonnees[0][0])
        date_max = MODELES.DateEngEnDateDD(listeDonnees[0][1])
    except:
        return dictResultats
    listePeriodes = MODELES.GetPeriodesComparatives(DB, dictParametres,
                                                    date_min, date_max)

    listeLabels = []
    listeValeurs = []
    indexPeriodeReference = 0
    index = 0
    for dictPeriode in listePeriodes:
        req = """SELECT COUNT(IDfamille)
        FROM consommations 
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = consommations.IDcompte_payeur
        WHERE date>='%s' AND date<='%s' 
        AND consommations.etat IN ('reservation', 'present')
        AND IDactivite IN %s
        GROUP BY comptes_payeurs.IDfamille
        ;""" % (dictPeriode["date_debut"], dictPeriode["date_fin"],
                conditionsActivites)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        nbreFamilles = len(listeDonnees)
        listeLabels.append(dictPeriode["label"])
        listeValeurs.append(nbreFamilles)
        if dictPeriode["date_debut"] == dictParametres["periode"][
                "date_debut"] and dictPeriode["date_fin"] == dictParametres[
                    "periode"]["date_fin"]:
            indexPeriodeReference = index
        index += 1

    dictResultats = {
        "labels": listeLabels,
        "valeurs": listeValeurs,
        "indexPeriodeReference": indexPeriodeReference
    }
    return dictResultats
def GetDictQuotients(DB, dictParametres):
    # Vérifie si les données n'existent pas déj�
    global DICT_QUOTIENTS
    if DICT_QUOTIENTS["dictParametres"] == dictParametres:
        return DICT_QUOTIENTS["dictResultats"]

    # Recherche des paramètres
    conditionsActivites = MODELES.GetConditionActivites(dictParametres)

    if True:  #dictParametres["mode"] == "presents" :
        date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres)
        req = """SELECT familles.IDfamille, IDquotient, date_debut, date_fin, quotient
        FROM familles
        LEFT JOIN quotients ON quotients.IDfamille = familles.IDfamille
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = familles.IDfamille
        LEFT JOIN consommations ON consommations.IDcompte_payeur = comptes_payeurs.IDcompte_payeur
        WHERE date>='%s' AND date<='%s' 
        AND consommations.etat IN ('reservation', 'present')
        AND IDactivite IN %s
        GROUP BY familles.IDfamille, IDquotient
        ;""" % (date_debut, date_fin, conditionsActivites)
    else:
        date_debut = MODELES.GetDateExtremeActivites(
            DB,
            listeActivites=dictParametres["listeActivites"],
            typeDate="date_debut",
            mode="min")
        date_fin = MODELES.GetDateExtremeActivites(
            DB,
            listeActivites=dictParametres["listeActivites"],
            typeDate="date_fin",
            mode="max")
        req = """SELECT familles.IDfamille, IDquotient, date_debut, date_fin, quotient
        FROM familles
        LEFT JOIN quotients ON quotients.IDfamille = familles.IDfamille
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = familles.IDfamille
        LEFT JOIN inscriptions ON inscriptions.IDcompte_payeur = comptes_payeurs.IDcompte_payeur
        WHERE inscriptions.statut='ok' AND IDactivite IN %s
        GROUP BY familles.IDfamille, IDquotient
        ;""" % conditionsActivites

    DB.ExecuterReq(req)
    listeDonnees = DB.ResultatReq()
    dictQuotients = {}
    for IDfamille, IDquotient, date_debut_qf, date_fin_qf, quotient in listeDonnees:
        if IDquotient == None or (date_debut_qf <= str(date_fin)
                                  and date_fin_qf >= str(date_debut)):
            dictQuotients[IDfamille] = quotient
        else:
            dictQuotients[IDfamille] = None

    # Recherche des tranches de QF existantes
    req = """SELECT IDligne, qf_min, qf_max
    FROM tarifs_lignes
    WHERE IDactivite IN %s
    AND qf_min IS NOT NULL AND qf_max IS NOT NULL
    ;""" % conditionsActivites
    DB.ExecuterReq(req)
    listeDonnees = DB.ResultatReq()
    dictTranchesTarifs = {"pasqf": 0, "autre": 0}
    for IDligne, qf_min, qf_max in listeDonnees:
        tranche = (qf_min, qf_max)
        if (tranche in dictTranchesTarifs) == False:
            dictTranchesTarifs[tranche] = 0

    # Création des tranches de 100
    dictTranchesDefaut = {"pasqf": 0, "autre": 0}
    for x in range(0, 3000, 100):
        tranche = (x + 1, x + 100)
        if x == 0: tranche = (0, 100)
        dictTranchesDefaut[tranche] = 0
    dictTranchesDefaut[(3001, 99999)] = 0

    # Répartition des QF par tranche
    for IDfamille, quotient in dictQuotients.items():
        for dictTranches in (dictTranchesDefaut, dictTranchesTarifs):
            if quotient == None:
                dictTranches["pasqf"] += 1
            else:
                found = False
                for tranche in list(dictTranches.keys()):
                    if tranche not in (
                            "pasqf", "autre"
                    ) and quotient >= tranche[0] and quotient <= tranche[1]:
                        dictTranches[tranche] += 1
                        found = True
                if found == False:
                    dictTranches["autre"] += 1

    # Mémorisation des résultats
    DICT_QUOTIENTS["dictParametres"] = dictParametres
    DICT_QUOTIENTS["dictResultats"] = {
        "dictTranchesTarifs": dictTranchesTarifs,
        "dictTranchesDefaut": dictTranchesDefaut
    }
    return DICT_QUOTIENTS["dictResultats"]