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

        dictResultats = GetComparatifNombre(DB, dictParametres)
        if dictResultats == None or len(dictResultats) == 0:
            return figure

        listeLabels = dictResultats["labels"]
        listeValeurs = dictResultats["valeurs"]
        indexPeriodeReference = dictResultats["indexPeriodeReference"]

        # Création du graph
        ind = arange(len(listeLabels)) + self.decalage_x
        width = 0.5
        for x in range(len(listeLabels)):
            if x == indexPeriodeReference:
                couleur = MODELES.ConvertitCouleur2(MODELES.COULEUR_VERT_POMME)
            else:
                couleur = MODELES.ConvertitCouleur2(MODELES.COULEUR_BLEU_CIEL)
            barre = ax.bar(ind[x], listeValeurs[x], width, color=couleur)

        # Axe horizontal
        ind = arange(len(listeLabels))
        ax.set_xticks(ind + width)
        ax.set_xticklabels(listeLabels)
        labelsx = ax.get_xticklabels()
        labelsy = ax.get_yticklabels()
        matplotlib.pyplot.setp(labelsx,
                               rotation=45,
                               fontsize=9,
                               horizontalalignment='right')

        # Axe vertical
        ax.set_ylabel("Nbre de familles", fontsize=8)

        labels = ax.get_yticklabels()
        matplotlib.pyplot.setp(labels, rotation=0, fontsize=9)

        # Titre
        title = ax.set_title(
            _(u"Comparatif du nombre de familles"),
            weight="bold",
            horizontalalignment='center')  #, position=(0.5, 0.97))
        matplotlib.pyplot.setp(title, rotation=0, fontsize=9)

        figure.subplots_adjust(left=None,
                               bottom=0.4,
                               right=None,
                               wspace=None,
                               hspace=None)

        # Affiche les grilles
        ax.grid(True, linestyle=":")

        return figure
    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()
Exemple #8
0
    def __init__(self, parent):
        wx.Dialog.__init__(self, parent, -1, name="DLG_Stats", style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX)
        self.parent = parent
        self.couleurFond = wx.SystemSettings.GetColour(30)

        self.dictParametres = {}

####Liste d'objets ici
        self.listeObjets = [

            {"nom" : _(u"Individus"), "code" : "individus", "image" : None, "ctrl_notebook" : None, "visible" : True, "pages" : [
            
                    {"nom" : _(u"Nombre"), "code" : "individus_nombre", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            INDIVIDUS.Texte_nombre_individus(),
                            INDIVIDUS.Tableau_nombre_individus(),
                            INDIVIDUS.Graphe_nombre_individus(),
                            ]},

                    {"nom" : _(u"Ancienneté"), "code" : "individus_anciennete", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            INDIVIDUS.Tableau_nouveaux_individus(),
                            INDIVIDUS.Graphe_nouveaux_individus(),
                            INDIVIDUS.Graphe_arrivee_individus(),
                            ]},

                    {"nom" : _(u"Genre"), "code" : "individus_genre", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            INDIVIDUS.Tableau_repartition_genre(),
                            INDIVIDUS.Graphe_repartition_genre(),
                            ]},

                    {"nom" : _(u"Âge"), "code" : "individus_age", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            INDIVIDUS.Tableau_repartition_ages(),
                            INDIVIDUS.Graphe_repartition_ages(),
                            INDIVIDUS.Tableau_repartition_annees_naiss(),
                            INDIVIDUS.Graphe_repartition_annees_naiss(),
                            ]},

                    {"nom" : _(u"Coordonnées"), "code" : "individus_coordonnees", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            INDIVIDUS.Tableau_repartition_villes(),
                            INDIVIDUS.Graphe_repartition_villes(),
                            ]},

                    {"nom" : _(u"Scolarité"), "code" : "individus_scolarite", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            INDIVIDUS.Tableau_repartition_ecoles(),
                            INDIVIDUS.Graphe_repartition_ecoles(),
                            INDIVIDUS.Tableau_repartition_niveaux_scolaires(),
                            INDIVIDUS.Graphe_repartition_niveaux_scolaires(),
                            ]},

                    {"nom" : _(u"Profession"), "code" : "individus_profession", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            INDIVIDUS.Tableau_activites_professionnelles(),
                            INDIVIDUS.Graphe_activites_professionnelles(),
                            ]},

                    ]},

            {"nom" : _(u"Familles"), "code" : "familles", "image" : None, "ctrl_notebook" : None, "visible" : True, "pages" : [

                    {"nom" : _(u"Nombre"), "code" : "familles_nombre", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            FAMILLES.Texte_nombre_familles(),
                            FAMILLES.Tableau_nombre_familles(),
                            FAMILLES.Graphe_nombre_familles(),
                            ]},

                    {"nom" : _(u"Caisse"), "code" : "familles_caisse", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            FAMILLES.Tableau_repartition_caisses(),
                            FAMILLES.Graphe_repartition_caisses(),
                            ]},

                    {"nom" : _(u"Composition"), "code" : "familles_composition", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            FAMILLES.Tableau_nombre_membres(),
                            FAMILLES.Graphe_nombre_membres(),
                            ]},

                    {"nom" : _(u"Quotient familial"), "code" : "familles_qf", "image" : None, "ctrl_html" : None, "visible" : True, "objets" : [
                            FAMILLES.Tableau_qf_tarifs(),
                            FAMILLES.Graphe_qf_tarifs(),
                            FAMILLES.Tableau_qf_defaut(),
                            FAMILLES.Graphe_qf_defaut(),
                            ]},

                    ]},

            ]


        # Bandeau
        intro = _(u"Vous pouvez ici consulter des statistiques complètes sur les activités et la période de votre choix. Ces informations sont présentées sous forme de rubrique, de pages et d'items que vous pouvez choisir d'afficher ou non. Vous pouvez ensuite imprimer ces informations sous forme de rapport hierarchisé. Cliquez sur les graphes pour accéder aux outils spécifiques.")
        titre = _(u"Statistiques")
        self.SetTitle(titre)
        self.ctrl_bandeau = CTRL_Bandeau.Bandeau(self, titre=titre, texte=intro, hauteurHtml=30, nomImage="Images/32x32/Barres.png")
        
        # Labelbook
        self.box_informations_staticbox = wx.StaticBox(self, -1, _(u"Informations"))
        self.ctrl_labelbook = LB.LabelBook(self, -1, agwStyle=LB.INB_DRAW_SHADOW | LB.INB_LEFT)

        self.baseHTML = MODELES.HTML(liste_objets=self.listeObjets) 
        self.InitLabelbook() 
        self.ctrl_labelbook.SetSelection(0) 

        # Paramètres
        self.box_parametres_staticbox = wx.StaticBox(self, -1, _(u"Paramètres"))
        self.ctrl_parametres = CTRL_Parametres(self)
        self.ctrl_parametres.MAJ() 
        self.hyper_parametres = Hyperlien(self, label=_(u"Modifier les paramètres"), infobulle=_(u"Modifier les paramètres"), URL="parametres")

        # impression
        self.box_impression_staticbox = wx.StaticBox(self, -1, _(u"Impression"))
        self.ctrl_impression = CTRL_Stats_objets.CTRL_Objets(self, liste_objets=self.listeObjets)
        self.ctrl_impression.MAJ() 
        
        self.hyper_selectionner = Hyperlien(self, label=_(u"Tout sélectionner"), infobulle=_(u"Tout sélectionner"), URL="selectionner")
        self.label_separation = wx.StaticText(self, -1, u"|")
        self.hyper_deselectionner = Hyperlien(self, label=_(u"Tout dé-sélectionner"), infobulle=_(u"Tout dé-sélectionner"), URL="deselectionner")
        
        self.bouton_imprimer = CTRL_Bouton_image.CTRL(self, texte=_(u"Imprimer"), cheminImage="Images/32x32/Imprimante.png")
        
        # Boutons
        self.bouton_aide = CTRL_Bouton_image.CTRL(self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_fermer = CTRL_Bouton_image.CTRL(self, texte=_(u"Fermer"), cheminImage="Images/32x32/Fermer.png")

        self.__set_properties()
        self.__do_layout()
        
        # Binds
        self.Bind(LB.EVT_IMAGENOTEBOOK_PAGE_CHANGED, self.OnChangeLabelbook, self.ctrl_labelbook)
        
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonImprimer, self.bouton_imprimer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonFermer, self.bouton_fermer)
    def MAJ(self, figure=None, DB=None, dictParametres={}):
        self.dictParametres = dictParametres
        # Création du graph
        ax = figure.add_subplot(111)

        dictTranches = GetDictQuotients(DB,
                                        dictParametres)["dictTranchesDefaut"]

        listeValeurs = []
        listeLabels = []

        # Tri des tranches par ordre croissant
        listeTranches = list(dictTranches.keys())
        # listeTranches.sort()
        listeTranches = TrierQF(listeTranches)

        # Création du tableau des valeurs
        index = 1
        for tranche in listeTranches:
            valeur = dictTranches[tranche]
            if tranche == "autre":
                label = None
            elif tranche == "pasqf":
                label = None
            else:
                label = u"%d - %d" % tranche
            if label != None and valeur != 0:
                #if index % 2 == 0 : label = ""
                # Mémorisation des valeurs
                listeValeurs.append(valeur)
                listeLabels.append(label)
                index += 1

        # Création du graph
        ind = arange(len(listeLabels)) + self.decalage_x
        width = 0.5
        barres = ax.bar(ind,
                        listeValeurs,
                        width,
                        color=MODELES.ConvertitCouleur2(
                            MODELES.COULEUR_VERT_POMME))

        # Axe horizontal
        ax.set_xlabel(_(u"Tranches"), fontsize=8)
        ind = arange(len(listeLabels))
        ax.set_xticks(ind + width)
        ax.set_xticklabels(listeLabels)
        labelsx = ax.get_xticklabels()
        labelsy = ax.get_yticklabels()
        matplotlib.pyplot.setp(labelsx,
                               rotation=45,
                               fontsize=8,
                               horizontalalignment='right')

        # Axe vertical
        ax.set_ylabel("Nbre de familles", fontsize=8)
        labels = ax.get_yticklabels()
        matplotlib.pyplot.setp(labels, rotation=0, fontsize=9)

        # Titre
        title = ax.set_title(
            self.nom, weight="bold",
            horizontalalignment='center')  #, position=(0.5, 0.97))
        matplotlib.pyplot.setp(title, rotation=0, fontsize=9)

        figure.subplots_adjust(left=None,
                               bottom=0.28,
                               right=None,
                               wspace=None,
                               hspace=None)

        # Affiche les grilles
        ax.grid(True, linestyle=":")

        return figure
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"]
if __name__ == '__main__':
    """ TEST d'un objet """
    app = wx.App(0)
    #wx.InitAllImageHandlers()
    annee = 2014
    dictParametres = {
        "mode": "inscrits",
        "periode": {
            "type": "annee",
            "annee": annee,
            "date_debut": datetime.date(annee, 1, 1),
            "date_fin": datetime.date(annee, 12, 31)
        },
        "listeActivites": [1, 2, 3, 4, 5],
        "dictActivites": {
            1: _(u"Centre de Loisirs"),
            2: _(u"Action 10-14 ans"),
            3: _(u"Camp 4-6 ans"),
            4: _(u"Camp 6-9 ans"),
            5: _(u"Camp 10-14 ans"),
            6: _(u"Art floral"),
            7: _(u"Yoga")
        },
    }
    frame_1 = MODELES.FrameTest(objet=Tableau_nombre_familles(),
                                dictParametres=dictParametres)
    app.SetTopWindow(frame_1)
    frame_1.Show()
    app.MainLoop()
Exemple #13
0
            "annee": annee,
            "date_debut": datetime.date(annee, 1, 1),
            "date_fin": datetime.date(annee, 12, 31)
        },
        "listeActivites": [1, 2, 3, 4, 5],
        "dictActivites": {
            1: _(u"Centre de Loisirs"),
            2: _(u"Action 10-14 ans"),
            3: _(u"Camp 4-6 ans"),
            4: _(u"Camp 6-9 ans"),
            5: _(u"Camp 10-14 ans"),
            6: _(u"Art floral"),
            7: _(u"Yoga")
        },
    }
    frame_1 = MODELES.FrameTest(objet=Graphe_qf_defaut(),
                                dictParametres=dictParametres)
    app.SetTopWindow(frame_1)
    frame_1.Show()
    app.MainLoop()

##    listeActivites = (1,)
##    conditionsActivites = "(1)"
##
##
##    DB = GestionDB.DB()
##
##
##    if True : #dictParametres["mode"] == "presents" :
##        date_debut = datetime.date(2014, 7, 7)
##        date_fin = datetime.date(2014, 7, 7)
##        req = """SELECT familles.IDfamille, IDquotient, date_debut, date_fin, quotient