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"]