def __init__(self): """ Récupération de toutes les données de base """ DB = GestionDB.DB() # Récupération des infos sur l'organisme req = """SELECT nom, rue, cp, ville, tel, fax, mail, site, num_agrement, num_siret, code_ape FROM organisateur WHERE IDorganisateur=1;""" DB.ExecuterReq(req) listeDonnees = DB.ResultatReq() self.dictOrganisme = {} for nom, rue, cp, ville, tel, fax, mail, site, num_agrement, num_siret, code_ape in listeDonnees: self.dictOrganisme["nom"] = nom self.dictOrganisme["rue"] = rue self.dictOrganisme["cp"] = cp if ville != None: ville = ville.capitalize() self.dictOrganisme["ville"] = ville self.dictOrganisme["tel"] = tel self.dictOrganisme["fax"] = fax self.dictOrganisme["mail"] = mail self.dictOrganisme["site"] = site self.dictOrganisme["num_agrement"] = num_agrement self.dictOrganisme["num_siret"] = num_siret self.dictOrganisme["code_ape"] = code_ape DB.Close() # Get noms Titulaires et individus self.dictTitulaires = UTILS_Titulaires.GetTitulaires() self.dictIndividus = UTILS_Titulaires.GetIndividus() # Récupération des infos de base individus et familles self.infosIndividus = UTILS_Infos_individus.Informations() # Récupération des questionnaires self.Questionnaires_familles = UTILS_Questionnaires.ChampsEtReponses( type="famille") self.Questionnaires_locations = UTILS_Questionnaires.ChampsEtReponses( type="location") self.Questionnaires_produits = UTILS_Questionnaires.ChampsEtReponses( type="produit")
def GetListePiecesManquantes(dateReference=None, listeActivites=None, presents=None, concernes=False): if dateReference == None: dateReference = datetime.date.today() # Récupération des données dictItems = {} # Conditions Activites if listeActivites == None or listeActivites == []: conditionActivites = "" else: if len(listeActivites) == 1: conditionActivites = " AND consommations.IDactivite=%d" % listeActivites[ 0] else: conditionActivites = " AND consommations.IDactivite IN %s" % str( tuple(listeActivites)) # Conditions Présents ## if presents == None : ## conditionPresents = "" ## jonctionPresents = "" ## else: ## conditionPresents = " AND (consommations.date>='%s' AND consommations.date<='%s')" % (str(presents[0]), str(presents[1])) ## jonctionPresents = "LEFT JOIN consommations ON consommations.IDindividu = individus.IDindividu" DB = GestionDB.DB() # Récupération des pièces à fournir ## # Ancienne Version moins rapide : ## req = """ ## SELECT ## inscriptions.IDfamille, pieces_activites.IDtype_piece, types_pieces.nom, types_pieces.public, types_pieces.valide_rattachement, individus.prenom, individus.IDindividu ## FROM pieces_activites ## LEFT JOIN types_pieces ON types_pieces.IDtype_piece = pieces_activites.IDtype_piece ## LEFT JOIN inscriptions ON inscriptions.IDactivite = pieces_activites.IDactivite ## LEFT JOIN individus ON individus.IDindividu = inscriptions.IDindividu ## %s ## WHERE inscriptions.parti=0 %s %s ## GROUP BY inscriptions.IDfamille, pieces_activites.IDtype_piece, individus.IDindividu ## ;""" % (jonctionPresents, conditionActivites, conditionPresents) ## DB.ExecuterReq(req) ## listePiecesObligatoires = DB.ResultatReq() # Récupération des individus présents listePresents = [] if presents != None: req = """ SELECT IDindividu, IDinscription FROM consommations WHERE date>='%s' AND date<='%s' %s GROUP BY IDindividu ;""" % (str(presents[0]), str(presents[1]), conditionActivites) DB.ExecuterReq(req) listeIndividusPresents = DB.ResultatReq() for IDindividu, IDinscription in listeIndividusPresents: listePresents.append(IDindividu) req = """ SELECT inscriptions.IDfamille, pieces_activites.IDtype_piece, types_pieces.nom, types_pieces.public, types_pieces.valide_rattachement, individus.prenom, individus.IDindividu FROM pieces_activites LEFT JOIN types_pieces ON types_pieces.IDtype_piece = pieces_activites.IDtype_piece LEFT JOIN inscriptions ON inscriptions.IDactivite = pieces_activites.IDactivite LEFT JOIN individus ON individus.IDindividu = inscriptions.IDindividu LEFT JOIN activites ON activites.IDactivite = inscriptions.IDactivite WHERE (inscriptions.date_desinscription IS NULL OR inscriptions.date_desinscription>='%s') %s AND activites.date_fin>='%s' GROUP BY inscriptions.IDfamille, pieces_activites.IDtype_piece, individus.IDindividu ;""" % (dateReference, conditionActivites.replace("consommations", "inscriptions"), dateReference) DB.ExecuterReq(req) listePiecesObligatoires = DB.ResultatReq() # Recherche des pièces déjà fournies req = """ SELECT IDpiece, pieces.IDtype_piece, IDindividu, IDfamille, date_debut, date_fin, public FROM pieces LEFT JOIN types_pieces ON types_pieces.IDtype_piece = pieces.IDtype_piece WHERE date_debut <= '%s' AND date_fin >= '%s' ORDER BY date_fin """ % (str(dateReference), str(dateReference)) DB.ExecuterReq(req) listePiecesFournies = DB.ResultatReq() DB.Close() dictPiecesFournies = {} for IDpiece, IDtype_piece, IDindividu, IDfamille, date_debut, date_fin, publicPiece in listePiecesFournies: # Pour les pièces familiales : if publicPiece == "famille": IDindividu = None date_debut = DateEngEnDateDD(date_debut) date_fin = DateEngEnDateDD(date_fin) dictPiecesFournies[(IDfamille, IDtype_piece, IDindividu)] = (date_debut, date_fin) # Comparaison de la liste des pièces à fournir et la liste des pièces fournies dictDonnees = {} for IDfamille, IDtype_piece, nomPiece, publicPiece, rattachementPiece, prenom, IDindividu in listePiecesObligatoires: if presents == None or (presents != None and IDindividu in listePresents): # Pour les pièces familiales : if publicPiece == "famille": IDindividu = None # Pour les pièces qui sont indépendantes de la famille if rattachementPiece == 1: IDfamilleTemp = None else: IDfamilleTemp = IDfamille # Préparation du label if publicPiece == "famille" or IDindividu == None: label = nomPiece else: label = _(u"%s de %s") % (nomPiece, prenom) if dictPiecesFournies.has_key( (IDfamilleTemp, IDtype_piece, IDindividu)): date_debut, date_fin = dictPiecesFournies[(IDfamilleTemp, IDtype_piece, IDindividu)] nbreJoursRestants = (date_fin - datetime.date.today()).days if nbreJoursRestants > 15: valide = "ok" else: valide = "attention" else: valide = "pasok" dictDonnees[(IDfamille, IDtype_piece, IDindividu)] = (IDfamille, IDtype_piece, nomPiece, publicPiece, prenom, IDindividu, valide, label) # Répartition par famille dictPieces = {} nbreFamilles = 0 for key, valeurs in dictDonnees.iteritems(): IDfamille = valeurs[0] if dictPieces.has_key(IDfamille) == False: dictPieces[IDfamille] = [] if IDfamille != None: nbreFamilles += 1 dictPieces[IDfamille].append(valeurs) dictPieces[IDfamille].sort() # Formatage des données dictFinal = {} titulaires = UTILS_Titulaires.GetTitulaires() for IDfamille, dictTemp in dictPieces.iteritems(): if IDfamille != None and titulaires.has_key(IDfamille): nomTitulaires = titulaires[IDfamille]["titulairesSansCivilite"] else: nomTitulaires = _(u"Aucun titulaire") listePieces = [] listeDetailPieces = [] for piece in dictTemp: if piece[6] != "ok": listePieces.append(piece[7]) listeDetailPieces.append(piece) textePieces = ", ".join(listePieces) if concernes == False or (concernes == True and len(listePieces) > 0): dictFinal[IDfamille] = { "titulaires": nomTitulaires, "pieces": textePieces, "nbre": len(listePieces), "liste": listeDetailPieces } return dictFinal
def Run(self, afficherDlgAttente=False): dictParametres = self.GetParametres() # Ouverture dlg d'attente if afficherDlgAttente == True: dlgAttente = wx.BusyInfo( _(u"Génération du fichier de données..."), None) try: # Génération du nom de fichier self.nomFichier = UTILS_Fichiers.GetRepTemp( fichier=u"data_%s" % dictParametres["IDfichier"]) # Vérifie si le fichier existe déj� nomFichierTemp = self.nomFichier + ".dat" if os.path.isfile(nomFichierTemp): os.remove(nomFichierTemp) # Création des tables dbdest = GestionDB.DB(suffixe=None, nomFichier=nomFichierTemp, modeCreation=True) dbdest.CreationTables(dicoDB=self.dictTables) # Enregistrement des paramètres listeParametres = [ ("IDfichier", dictParametres["IDfichier"]), ("horodatage", dictParametres["horodatage"]), ("type", "donnees"), ] self.Enregistrer(dbdest, nomTable="parametres", listeChamps=["nom", "valeur"], listeDonnees=listeParametres) # Données du dictIndividus import UTILS_Infos_individus infos = UTILS_Infos_individus.Informations() dictValeurs = infos.GetDictValeurs(mode="individu", formatChamp=False) listeDonnees = [] for ID, dictTemp in dictValeurs.iteritems(): for champ, valeur in dictTemp.iteritems(): if type(valeur) in (str, unicode) and valeur not in ("", None): listeDonnees.append((ID, champ, valeur)) self.Enregistrer(dbdest, nomTable="informations", listeChamps=["IDindividu", "champ", "valeur"], listeDonnees=listeDonnees) # Données individus db = GestionDB.DB(suffixe="PHOTOS") req = """SELECT IDindividu, photo FROM photos;""" db.ExecuterReq(req) listePhotos = db.ResultatReq() db.Close() dictPhotos = {} for IDindividu, photo in listePhotos: dictPhotos[IDindividu] = photo db = GestionDB.DB() req = """SELECT IDindividu, IDcivilite, nom, prenom FROM individus;""" db.ExecuterReq(req) listeIndividus = db.ResultatReq() db.Close() listeDonnees = [] for IDindividu, IDcivilite, nom, prenom in listeIndividus: if dictPhotos.has_key(IDindividu): photo = sqlite3.Binary(dictPhotos[IDindividu]) else: photo = None listeDonnees.append( (IDindividu, IDcivilite, nom, prenom, photo)) self.Enregistrer(dbdest, nomTable="individus", listeChamps=[ "IDindividu", "IDcivilite", "nom", "prenom", "photo" ], listeDonnees=listeDonnees) # Données Titulaires de dossier dictTitulaires = UTILS_Titulaires.GetTitulaires() listeDonnees = [] for IDfamille, dictTemp in dictTitulaires.iteritems(): nom = dictTitulaires[IDfamille]["titulairesSansCivilite"] listeDonnees.append((IDfamille, nom)) self.Enregistrer(dbdest, nomTable="titulaires", listeChamps=["IDfamille", "nom"], listeDonnees=listeDonnees) # Données organisateur db = GestionDB.DB() req = """SELECT IDorganisateur, nom, logo FROM organisateur;""" db.ExecuterReq(req) listeTemp = db.ResultatReq() db.Close() listeDonnees = [] for IDorganisateur, nom, logo in listeTemp: if logo != None: logo = sqlite3.Binary(logo) listeDonnees.append((IDorganisateur, nom, logo)) self.Enregistrer(dbdest, nomTable="organisateur", listeChamps=["IDorganisateur", "nom", "logo"], listeDonnees=listeDonnees) # Tables à copier en intégralité listeTables = [ "vacances", "jours_feries", "activites", "groupes", "unites", "unites_groupes", "unites_incompat", "unites_remplissage", "unites_remplissage_unites", "ouvertures", "remplissage", "inscriptions", "consommations", "memo_journee", "comptes_payeurs", "familles", "utilisateurs", "nomade_archivage", ] self.CopieTables(dbdest, listeTables) # Cloture de la base dbdest.connexion.commit() dbdest.Close() # Compression fichierZip = zipfile.ZipFile(self.nomFichier + EXTENSION_DECRYPTE, "w", compression=zipfile.ZIP_DEFLATED) fichierZip.write(self.nomFichier + ".dat", "database.dat") fichierZip.close() os.remove(self.nomFichier + ".dat") # Cryptage cryptage_actif = UTILS_Config.GetParametre( "synchro_cryptage_activer", defaut=False) cryptage_mdp = base64.b64decode( UTILS_Config.GetParametre("synchro_cryptage_mdp", defaut="")) if cryptage_actif == True and cryptage_mdp != "": UTILS_Cryptage_fichier.CrypterFichier( self.nomFichier + EXTENSION_DECRYPTE, self.nomFichier + EXTENSION_CRYPTE, cryptage_mdp) os.remove(self.nomFichier + EXTENSION_DECRYPTE) nomFichierFinal = self.nomFichier + EXTENSION_CRYPTE else: nomFichierFinal = self.nomFichier + EXTENSION_DECRYPTE except Exception, err: if afficherDlgAttente == True: dlgAttente.Destroy() del dlgAttente dlg = wx.MessageDialog( None, _(u"Désolé, l'erreur suivante a été rencontrée : ") + str(err), "Erreur ", wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return None
def GetAdresseFamille(IDfamille=None, choixMultiple=True, muet=False, nomTitulaires=None): """ Récupère l'adresse email de la famille """ # Récupération du nom de la famille if nomTitulaires == None: dictTitulaires = UTILS_Titulaires.GetTitulaires([ IDfamille, ]) nomTitulaires = dictTitulaires[IDfamille]["titulairesSansCivilite"] # Récupération des adresses mails de chaque membre de la famille DB = GestionDB.DB() req = """ SELECT rattachements.IDindividu, IDcategorie, individus.nom, individus.prenom, individus.mail, individus.travail_mail FROM rattachements LEFT JOIN individus ON individus.IDindividu = rattachements.IDindividu WHERE IDcategorie IN (1, 2) AND IDfamille=%d ;""" % IDfamille DB.ExecuterReq(req) listeDonnees = DB.ResultatReq() DB.Close() listeAdresses = [] for IDindividu, IDcategorie, nom, prenom, mailPerso, mailTravail in listeDonnees: if mailPerso != None and mailPerso != "": listeAdresses.append( (_(u"%s (Adresse perso de %s)") % (mailPerso, prenom), mailPerso)) if mailTravail != None and mailTravail != "": listeAdresses.append( (_(u"%s (Adresse pro de %s)") % (mailTravail, prenom), mailTravail)) if len(listeAdresses) == 0: if muet == False: dlg = wx.MessageDialog( None, _(u"Aucun membre de la famille de %s ne dispose d'adresse mail !" ) % nomTitulaires, "Erreur", wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return [] elif len(listeAdresses) == 1: listeMails = [ listeAdresses[0][1], ] else: listeLabels = [] listeMails = [] for label, adresse in listeAdresses: listeLabels.append(label) if choixMultiple == True: dlg = wx.MultiChoiceDialog( None, _(u"%d adresses internet sont disponibles pour la famille de %s.\nSélectionnez celles que vous souhaitez utiliser puis cliquez sur le bouton 'Ok' :" ) % (len(listeAdresses), nomTitulaires), _(u"Choix d'adresses Emails"), listeLabels) else: dlg = wx.SingleChoiceDialog( None, _(u"%d adresses internet sont disponibles pour la famille de %s.\nSélectionnez celle que vous souhaitez utiliser puis cliquez sur le bouton 'Ok' :" ) % (len(listeAdresses), nomTitulaires), _(u"Choix d'une adresse Email"), listeLabels) dlg.SetSize((450, -1)) dlg.CenterOnScreen() if dlg.ShowModal() == wx.ID_OK: if choixMultiple == True: selections = dlg.GetSelections() else: selections = [ dlg.GetSelection(), ] dlg.Destroy() if len(selections) == 0: dlg = wx.MessageDialog( None, _(u"Vous n'avez sélectionné aucune adresse mail !"), "Erreur", wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return [] for index in selections: listeMails.append(listeAdresses[index][1]) else: dlg.Destroy() return [] if choixMultiple == True: return listeMails else: return listeMails[0]
# Création des tables models.Base.metadata.drop_all(engine) models.Base.metadata.create_all(engine) # Création d'une session Session = models.sessionmaker(bind=engine) session = Session() # Ouverture de la base Noethys DB = GestionDB.DB() self.log.EcritLog(_(u"Récupération des données à exporter...")) self.Pulse_gauge() # Création des users dictTitulaires = UTILS_Titulaires.GetTitulaires() req = """SELECT IDfamille, internet_actif, internet_identifiant, internet_mdp FROM familles;""" DB.ExecuterReq(req) listeDonnees = DB.ResultatReq() for IDfamille, internet_actif, internet_identifiant, internet_mdp in listeDonnees: if internet_actif == 1: nomsTitulaires = dictTitulaires[IDfamille][ "titulairesSansCivilite"] # Cryptage du mot de passe internet_mdp = SHA256.new(internet_mdp).hexdigest() m = models.User(IDuser=None, identifiant=internet_identifiant,
def GetListeCotisationsManquantes(dateReference=None, listeActivites=None, presents=None, concernes=False): if dateReference == None : dateReference = datetime.date.today() # Récupération des données dictItems = {} # Conditions Activites if listeActivites == None or listeActivites == [] : conditionActivites = "" else: if len(listeActivites) == 1 : conditionActivites = " AND inscriptions.IDactivite=%d" % listeActivites[0] else: conditionActivites = " AND inscriptions.IDactivite IN %s" % str(tuple(listeActivites)) # Conditions Présents if presents == None : conditionPresents = "" jonctionPresents = "" else: conditionPresents = " AND (consommations.date>='%s' AND consommations.date<='%s')" % (str(presents[0]), str(presents[1])) jonctionPresents = "LEFT JOIN consommations ON consommations.IDindividu = individus.IDindividu" # Récupération des cotisations à fournir pour la famille ou l'individu DB = GestionDB.DB() req = """ SELECT inscriptions.IDfamille, cotisations_activites.IDactivite, cotisations_activites.IDtype_cotisation, types_cotisations.nom, types_cotisations.type, individus.prenom, individus.IDindividu FROM cotisations_activites LEFT JOIN types_cotisations ON types_cotisations.IDtype_cotisation = cotisations_activites.IDtype_cotisation LEFT JOIN inscriptions ON inscriptions.IDactivite = cotisations_activites.IDactivite LEFT JOIN individus ON individus.IDindividu = inscriptions.IDindividu %s WHERE inscriptions.parti=0 %s %s GROUP BY inscriptions.IDfamille, cotisations_activites.IDtype_cotisation, individus.IDindividu; """ % (jonctionPresents, conditionActivites, conditionPresents) DB.ExecuterReq(req) listeCotisationsObligatoires = DB.ResultatReq() dictCotisationObligatoires = {} for IDfamille, IDactivite, IDtype_cotisation, nomCotisation, typeCotisation, prenom, IDindividu in listeCotisationsObligatoires : if dictCotisationObligatoires.has_key(IDfamille) == False : dictCotisationObligatoires[IDfamille] = {} if dictCotisationObligatoires[IDfamille].has_key(IDactivite) == False : dictCotisationObligatoires[IDfamille][IDactivite] = [] dictCotisationObligatoires[IDfamille][IDactivite].append((IDfamille, IDtype_cotisation, nomCotisation, typeCotisation, prenom, IDindividu)) # Recherche des cotisations déjà fournies req = """ SELECT IDcotisation, cotisations.IDtype_cotisation, IDindividu, IDfamille, date_debut, date_fin, type FROM cotisations LEFT JOIN types_cotisations ON types_cotisations.IDtype_cotisation = cotisations.IDtype_cotisation WHERE date_debut <= '%s' AND date_fin >= '%s' ORDER BY date_fin """ % (str(dateReference), str(dateReference)) DB.ExecuterReq(req) listeCotisationsFournies = DB.ResultatReq() DB.Close() dictCotisationsFournies = {} for IDcotisation, IDtype_cotisation, IDindividu, IDfamille, date_debut, date_fin, typeCotisation in listeCotisationsFournies : # Pour les cotisations familiales : if typeCotisation == "famille" : IDindividu = None date_debut = DateEngEnDateDD(date_debut) date_fin = DateEngEnDateDD(date_fin) dictCotisationsFournies[ (IDfamille, IDtype_cotisation, IDindividu) ] = (date_debut, date_fin) # Comparaison de la liste des cotisations à fournir et la liste des cotisations fournies dictDonnees = {} for IDfamille, dictCotisationsFamille in dictCotisationObligatoires.iteritems() : for IDactivite, listeCotisationsActivite in dictCotisationsFamille.iteritems() : activiteValide = False listeTemp = [] for IDfamille, IDtype_cotisation, nomCotisation, typeCotisation, prenom, IDindividu in listeCotisationsActivite : ## # Pour les cotisations familiales : ## if typeCotisation == "famille" : ## IDindividu = None ## else: ## # Pour les cotisations qui sont indépendantes de la famille ## IDfamilleTemp = None # Préparation du label if typeCotisation == "famille" or IDindividu == None : label = nomCotisation else: label = _(u"%s de %s") % (nomCotisation, prenom) if dictCotisationsFournies.has_key((None, IDtype_cotisation, IDindividu)) or dictCotisationsFournies.has_key((IDfamille, IDtype_cotisation, None)) : if dictCotisationsFournies.has_key((None, IDtype_cotisation, IDindividu)) : date_debut, date_fin = dictCotisationsFournies[(None, IDtype_cotisation, IDindividu)] if dictCotisationsFournies.has_key((IDfamille, IDtype_cotisation, None)) : date_debut, date_fin = dictCotisationsFournies[(IDfamille, IDtype_cotisation, None)] nbreJoursRestants = (date_fin - datetime.date.today()).days if nbreJoursRestants > 15 : valide = "ok" else: valide = "attention" else: valide = "pasok" if valide == "ok" : activiteValide = True listeTemp.append((IDfamille, IDtype_cotisation, nomCotisation, typeCotisation, prenom, IDindividu, valide, label)) # Mémorisation for IDfamille, IDtype_cotisation, nomCotisation, typeCotisation, prenom, IDindividu, valide, label in listeTemp : if activiteValide == True : valide = "ok" dictDonnees[(IDfamille, IDtype_cotisation, IDindividu)] = (IDfamille, IDtype_cotisation, nomCotisation, typeCotisation, prenom, IDindividu, valide, label) ## if IDfamille == 57 or IDindividu == 107 : ## print (IDfamille, IDtype_cotisation, nomCotisation, typeCotisation, prenom, IDindividu, valide, label) # Comparaison de la liste des cotisations à fournir et la liste des cotisations fournies ## dictDonnees = {} ## for IDfamille, IDactivite, IDtype_cotisation, nomCotisation, typeCotisation, prenom, IDindividu, nbreConso in listeCotisationsObligatoires : ## ## # Pour les cotisations familiales : ## if typeCotisation == "famille" : ## IDindividu = None ## else: ## # Pour les cotisations qui sont indépendantes de la famille ## IDfamille = None ## ## # Préparation du label ## if typeCotisation == "famille" or IDindividu == None : ## label = nomCotisation ## else: ## label = _(u"%s de %s") % (nomCotisation, prenom) ## ## if dictCotisationsFournies.has_key( (IDfamille, IDtype_cotisation, IDindividu) ) : ## date_debut, date_fin = dictCotisationsFournies[(IDfamille, IDtype_cotisation, IDindividu)] ## nbreJoursRestants = (date_fin - datetime.date.today()).days ## if nbreJoursRestants > 15 : ## valide = "ok" ## else: ## valide = "attention" ## else: ## valide = "pasok" ## ## dictDonnees[(IDfamille, IDtype_cotisation, IDindividu)] = (IDfamille, IDtype_cotisation, nomCotisation, typeCotisation, prenom, IDindividu, valide, label) # Répartition par famille dictCotisations = {} nbreFamilles = 0 nbreCotisations = len(dictDonnees) for key, valeurs in dictDonnees.iteritems() : IDfamille = valeurs[0] if dictCotisations.has_key(IDfamille) == False : dictCotisations[IDfamille] = [] if IDfamille != None : nbreFamilles += 1 dictCotisations[IDfamille].append(valeurs) dictCotisations[IDfamille].sort() # Formatage des données dictFinal = {} titulaires = UTILS_Titulaires.GetTitulaires() for IDfamille, dictTemp in dictCotisations.iteritems() : ## print IDfamille ## for cotisation in dictTemp : ## print " >", cotisation if IDfamille != None and titulaires.has_key(IDfamille) : nomTitulaires = titulaires[IDfamille]["titulairesSansCivilite"] else : nomTitulaires = _(u"Aucun titulaire") listeCotisations = [] listeDetailCotisations = [] for cotisation in dictTemp : labelCotisation = cotisation[7] if cotisation[6] != "ok" and labelCotisation not in listeCotisations : listeCotisations.append(labelCotisation) listeDetailCotisations.append(cotisation) texteCotisations = ", ".join(listeCotisations) if concernes == False or (concernes == True and len(listeCotisations) > 0) : dictFinal[IDfamille] = {"titulaires" : nomTitulaires, "cotisations" : texteCotisations, "nbre" : len(listeCotisations), "liste" : listeDetailCotisations} return dictFinal