예제 #1
0
    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 CreationPDF(self,
                    nomDoc=FonctionsPerso.GenerationNomDoc(
                        "INSCRIPTION", "pdf"),
                    afficherDoc=True):
        dictChampsFusion = {}

        # Récupération des valeurs de base
        dictDonnees = DICT_DONNEES

        # Récupération des infos sur l'organisme
        DB = GestionDB.DB()
        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()
        dictOrganisme = {}
        for nom, rue, cp, ville, tel, fax, mail, site, num_agrement, num_siret, code_ape in listeDonnees:
            dictOrganisme["nom"] = nom
            dictOrganisme["rue"] = rue
            dictOrganisme["cp"] = cp
            if ville != None: ville = ville.capitalize()
            dictOrganisme["ville"] = ville
            dictOrganisme["tel"] = tel
            dictOrganisme["fax"] = fax
            dictOrganisme["mail"] = mail
            dictOrganisme["site"] = site
            dictOrganisme["num_agrement"] = num_agrement
            dictOrganisme["num_siret"] = num_siret
            dictOrganisme["code_ape"] = code_ape
        DB.Close()

        date_editionDD = datetime.date.today()

        # Adresse
        self.IDindividu = self.dictInscription["IDINDIVIDU"]
        individus = UTILS_Titulaires.GetIndividus()
        self.dictInscription["INDIVIDU_RUE"] = individus[
            self.IDindividu]["rue"]
        self.dictInscription["INDIVIDU_CP"] = individus[self.IDindividu]["cp"]
        self.dictInscription["INDIVIDU_VILLE"] = individus[
            self.IDindividu]["ville"]

        # Nom Titulaires
        dictTitulaires = UTILS_Titulaires.GetTitulaires(listeIDfamille=[
            self.IDfamille,
        ])
        self.dictInscription["FAMILLE_NOM"] = dictTitulaires[
            self.IDfamille]["titulairesSansCivilite"]

        # Civilité
        dictCivilites = Civilites.GetDictCivilites()
        if self.dictInscription["IDCIVILITE"] == None or self.dictInscription[
                "IDCIVILITE"] == "":
            IDcivilite = 1
        else:
            IDcivilite = self.dictInscription["IDCIVILITE"]
        self.dictInscription["INDIVIDU_GENRE"] = dictCivilites[IDcivilite][
            "sexe"]
        self.dictInscription["INDIVIDU_CIVILITE_LONG"] = dictCivilites[
            IDcivilite]["civiliteLong"]
        self.dictInscription["INDIVIDU_CIVILITE_COURT"] = dictCivilites[
            IDcivilite]["civiliteAbrege"]

        # Date de naissance
        if self.dictInscription["INDIVIDU_DATE_NAISS"] == None:
            self.dictInscription["INDIVIDU_AGE"] = None
        else:
            datenaissDD = datetime.date(
                year=int(self.dictInscription["INDIVIDU_DATE_NAISS"][:4]),
                month=int(self.dictInscription["INDIVIDU_DATE_NAISS"][5:7]),
                day=int(self.dictInscription["INDIVIDU_DATE_NAISS"][8:10]))
            datedujour = datetime.date.today()
            age = (datedujour.year - datenaissDD.year) - int(
                (datedujour.month, datedujour.day) <
                (datenaissDD.month, datenaissDD.day))
            self.dictInscription["INDIVIDU_AGE"] = age

        # Insertion des données de base dans le dictValeurs
        IDfamille = self.IDfamille
        dictValeurs = {
            "IDfamille":
            self.IDfamille,
            "{IDFAMILLE}":
            str(self.IDfamille),
            "{DATE_EDITION}":
            DateEngFr(str(date_editionDD)),
            "{DATE_EDITION_LONG}":
            DateComplete(date_editionDD),
            "{DATE_EDITION_COURT}":
            DateEngFr(str(date_editionDD)),
            "{ORGANISATEUR_NOM}":
            dictOrganisme["nom"],
            "{ORGANISATEUR_RUE}":
            dictOrganisme["rue"],
            "{ORGANISATEUR_CP}":
            dictOrganisme["cp"],
            "{ORGANISATEUR_VILLE}":
            dictOrganisme["ville"],
            "{ORGANISATEUR_TEL}":
            dictOrganisme["tel"],
            "{ORGANISATEUR_FAX}":
            dictOrganisme["fax"],
            "{ORGANISATEUR_MAIL}":
            dictOrganisme["mail"],
            "{ORGANISATEUR_SITE}":
            dictOrganisme["site"],
            "{ORGANISATEUR_AGREMENT}":
            dictOrganisme["num_agrement"],
            "{ORGANISATEUR_SIRET}":
            dictOrganisme["num_siret"],
            "{ORGANISATEUR_APE}":
            dictOrganisme["code_ape"],
            "{IDINSCRIPTION}":
            FormateStr(self.dictInscription["IDINSCRIPTION"]),
            "{DATE_INSCRIPTION}":
            FormateDate(self.dictInscription["DATE_INSCRIPTION"]),
            "{EST_PARTI}":
            FormateBool(self.dictInscription["EST_PARTI"]),
            "{IDACTIVITE}":
            FormateStr(self.dictInscription["IDACTIVITE"]),
            "{ACTIVITE_NOM_LONG}":
            FormateStr(self.dictInscription["ACTIVITE_NOM_LONG"]),
            "{ACTIVITE_NOM_COURT}":
            FormateStr(self.dictInscription["ACTIVITE_NOM_COURT"]),
            "{IDGROUPE}":
            FormateStr(self.dictInscription["IDGROUPE"]),
            "{GROUPE_NOM_LONG}":
            FormateStr(self.dictInscription["GROUPE_NOM_LONG"]),
            "{GROUPE_NOM_COURT}":
            FormateStr(self.dictInscription["GROUPE_NOM_COURT"]),
            "{IDCATEGORIETARIF}":
            FormateStr(self.dictInscription["IDCATEGORIETARIF"]),
            "{NOM_CATEGORIE_TARIF}":
            FormateStr(self.dictInscription["NOM_CATEGORIE_TARIF"]),
            "{IDINDIVIDU}":
            FormateStr(self.dictInscription["IDINDIVIDU"]),
            "{INDIVIDU_CIVILITE_LONG}":
            FormateStr(self.dictInscription["INDIVIDU_CIVILITE_LONG"]),
            "{INDIVIDU_CIVILITE_COURT}":
            FormateStr(self.dictInscription["INDIVIDU_CIVILITE_COURT"]),
            "{INDIVIDU_GENRE}":
            FormateStr(self.dictInscription["INDIVIDU_GENRE"]),
            "{INDIVIDU_NOM}":
            FormateStr(self.dictInscription["INDIVIDU_NOM"]),
            "{INDIVIDU_PRENOM}":
            FormateStr(self.dictInscription["INDIVIDU_PRENOM"]),
            "{INDIVIDU_DATE_NAISS}":
            FormateDate(self.dictInscription["INDIVIDU_DATE_NAISS"]),
            "{INDIVIDU_AGE}":
            FormateStr(self.dictInscription["INDIVIDU_AGE"]),
            "{INDIVIDU_CP_NAISS}":
            FormateStr(self.dictInscription["INDIVIDU_CP_NAISS"]),
            "{INDIVIDU_VILLE_NAISS}":
            FormateStr(self.dictInscription["INDIVIDU_VILLE_NAISS"]),
            "{INDIVIDU_RUE}":
            FormateStr(self.dictInscription["INDIVIDU_RUE"]),
            "{INDIVIDU_CP}":
            FormateStr(self.dictInscription["INDIVIDU_CP"]),
            "{INDIVIDU_VILLE}":
            FormateStr(self.dictInscription["INDIVIDU_VILLE"]),
            "{INDIVIDU_PROFESSION}":
            FormateStr(self.dictInscription["INDIVIDU_PROFESSION"]),
            "{INDIVIDU_EMPLOYEUR}":
            FormateStr(self.dictInscription["INDIVIDU_EMPLOYEUR"]),
            "{INDIVIDU_TEL_DOMICILE}":
            FormateStr(self.dictInscription["INDIVIDU_TEL_DOMICILE"]),
            "{INDIVIDU_TEL_MOBILE}":
            FormateStr(self.dictInscription["INDIVIDU_TEL_MOBILE"]),
            "{INDIVIDU_FAX}":
            FormateStr(self.dictInscription["INDIVIDU_FAX"]),
            "{INDIVIDU_EMAIL}":
            FormateStr(self.dictInscription["INDIVIDU_EMAIL"]),
            "{INDIVIDU_TEL_PRO}":
            FormateStr(self.dictInscription["INDIVIDU_TEL_PRO"]),
            "{INDIVIDU_FAX_PRO}":
            FormateStr(self.dictInscription["INDIVIDU_FAX_PRO"]),
            "{INDIVIDU_EMAIL_PRO}":
            FormateStr(self.dictInscription["INDIVIDU_EMAIL_PRO"]),
            "{FAMILLE_NOM}":
            FormateStr(self.dictInscription["FAMILLE_NOM"]),
            "{FAMILLE_CAISSE}":
            FormateStr(self.dictInscription["FAMILLE_CAISSE"]),
            "{FAMILLE_REGIME}":
            FormateStr(self.dictInscription["FAMILLE_REGIME"]),
            "{FAMILLE_NUMALLOC}":
            FormateStr(self.dictInscription["FAMILLE_NUMALLOC"]),
        }

        # Récupération des infos de base individus et familles
        self.infosIndividus = UTILS_Infos_individus.Informations()
        dictValeurs.update(
            self.infosIndividus.GetDictValeurs(mode="famille",
                                               ID=IDfamille,
                                               formatChamp=True))
        dictValeurs.update(
            self.infosIndividus.GetDictValeurs(
                mode="individu",
                ID=self.dictInscription["IDINDIVIDU"],
                formatChamp=True))

        # Récupération des questionnaires
        Questionnaires = UTILS_Questionnaires.ChampsEtReponses(type="famille")
        for dictReponse in Questionnaires.GetDonnees(IDfamille):
            dictValeurs[dictReponse["champ"]] = dictReponse["reponse"]
            if dictReponse["controle"] == "codebarres":
                dictValeurs["{CODEBARRES_QUESTION_%d}" %
                            dictReponse["IDquestion"]] = dictReponse["reponse"]

        # Récupération du signataire
        infosSignataire = self.ctrl_signataire.GetInfos()
        if infosSignataire == None:
            dlg = wx.MessageDialog(
                self, _(u"Vous n'avez sélectionné aucun signataire !"),
                _(u"Annulation"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        nomSignataire = infosSignataire["nom"]
        fonctionSignataire = infosSignataire["fonction"]
        sexeSignataire = infosSignataire["sexe"]
        if sexeSignataire == "H":
            genreSignataire = u""
        else:
            genreSignataire = u"e"

        # Récupération et transformation du texte d'intro
        if self.ctrl_intro.GetValue() == True:
            textIntro = self.ctrl_texte_intro.GetValue()
            textIntro = textIntro.replace("{SIGNATAIRE_GENRE}",
                                          genreSignataire)
            textIntro = textIntro.replace("{SIGNATAIRE_NOM}", nomSignataire)
            textIntro = textIntro.replace("{SIGNATAIRE_FONCTION}",
                                          fonctionSignataire)
            for key, valeur in dictValeurs.items():
                if key.startswith("{"):
                    if valeur == None: valeur = ""
                    if type(valeur) == int: valeur = str(valeur)
                    textIntro = textIntro.replace(key, valeur)
            dictValeurs["intro"] = textIntro
        else:
            dictValeurs["intro"] = None

        # Tableau
        dictValeurs["tableau"] = self.ctrl_tableau.GetValue()

        for key, valeur in dictValeurs.items():
            if valeur == None: valeur = ""
            dictChampsFusion[key] = valeur

        # Préparation des données pour une sauvegarde dans l'historique
        self.dictSave = {}
        self.dictSave["activite"] = self.dictInscription["ACTIVITE_NOM_LONG"]
        self.dictSave["groupe"] = self.dictInscription["GROUPE_NOM_LONG"]

        # Récupération du modèle
        IDmodele = self.ctrl_modele.GetID()
        if IDmodele == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement sélectionner un modèle !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Fabrication du PDF
        from Utils import UTILS_Impression_inscription
        UTILS_Impression_inscription.Impression(dictValeurs,
                                                IDmodele=IDmodele,
                                                nomDoc=nomDoc,
                                                afficherDoc=afficherDoc)

        return dictChampsFusion
예제 #3
0
import datetime
import decimal
import GestionDB
from Utils import UTILS_Dates
from Utils import UTILS_Identification
from Utils import UTILS_Mandats
import wx.lib.dialogs as dialogs

from Utils import UTILS_Config
SYMBOLE = UTILS_Config.GetParametre("monnaie_symbole", u"¤")

from Utils import UTILS_Interface
from Ctrl.CTRL_ObjectListView import FastObjectListView, ColumnDefn, Filter, CTRL_Outils

from Utils import UTILS_Titulaires
DICT_INDIVIDUS = UTILS_Titulaires.GetIndividus()


class Track(object):
    def __init__(self, donnees, dictTitulaires):
        self.dictTitulaires = dictTitulaires
        self.IDpiece = donnees["IDpiece"]
        self.IDlot = donnees["IDlot"]
        self.IDfamille = donnees["IDfamille"]
        self.IDcompte_payeur = donnees["IDcompte_payeur"]

        self.prelevement = donnees["prelevement"]
        self.prelevement_iban = donnees["prelevement_iban"]
        self.prelevement_bic = donnees["prelevement_bic"]
        self.prelevement_rum = donnees["prelevement_rum"]
        self.prelevement_date_mandat = donnees["prelevement_date_mandat"]
예제 #4
0
    def CreationPDF(self, nomDoc=FonctionsPerso.GenerationNomDoc("MANDAT_SEPA", "pdf"), afficherDoc=True):
        dictChampsFusion = {}
        dictDonnees = {}
        
        # Récupère infos sur organisateur
        from Utils import UTILS_Organisateur
        dictOrganisateur = UTILS_Organisateur.GetDonnees(tailleLogo=(200, 200))
        
        # ICS
        DB = GestionDB.DB()
        req = """SELECT IDcompte, nom, numero, code_ics
        FROM comptes_bancaires;"""
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        DB.Close()       
        ics = ""
        if len(listeDonnees) > 0 :
            IDcompte, nomCompte, numeroCompte, ics = listeDonnees[0]
            if ics == None :
                ics = ""
         
        # Récupère données du mandat        
        titulaire_nom = ""
        titulaire_rue = ""
        titulaire_cp = ""
        titulaire_ville = ""
        
        if self.radio_membre.GetValue() :
            IDindividu = self.ctrl_membre.GetID() 
            if IDindividu != None :
                dictIndividus = UTILS_Titulaires.GetIndividus()
                titulaire_nom = dictIndividus[IDindividu]["nom_complet"]
                titulaire_rue = dictIndividus[IDindividu]["rue"]
                titulaire_cp = dictIndividus[IDindividu]["cp"]
                titulaire_ville = dictIndividus[IDindividu]["ville"]
        else :
            titulaire_nom = self.ctrl_individu_nom.GetValue()
            titulaire_rue = self.ctrl_individu_rue.GetValue()
            titulaire_cp = self.ctrl_individu_ville.GetValueCP()
            titulaire_ville = self.ctrl_individu_ville.GetValueVille()
            
        iban = self.ctrl_iban.GetValue() 
        bic = self.ctrl_bic.GetValue() 
        rum = self.ctrl_reference_mandat.GetValue() 
        date = self.ctrl_date_mandat.GetDate() 
        if date == None :
            date = ""
        if self.ctrl_type_mandat.GetSelection() == 0 :
            typeMandat = "recurrent"
        else :
            typeMandat = "ponctuel"

        dictDonnees = {
            "titulaire_nom" : titulaire_nom,
            "titulaire_rue" : titulaire_rue,
            "titulaire_cp" : titulaire_cp,
            "titulaire_ville" : titulaire_ville,
            "iban" : iban,
            "bic" : bic,
            "rum" : rum,
            "date" : date,
            "typeMandat" : typeMandat,
            "organisateur" : dictOrganisateur,
            "ics" : ics,
            }
        
        # Mémorisation pour la fusion Emails
        dictChampsFusion["{RUM}"] = rum
        dictChampsFusion["{DATE}"] = date

        # Lancement de l'édition du PDF
        Impression(dictDonnees, nomDoc=nomDoc, afficherDoc=afficherDoc)
        
        return dictChampsFusion
예제 #5
0
    def GetTracks(self):
        """ Récupération des données """
        self.individus = UTILS_Titulaires.GetIndividus() 
        self.titulaires = UTILS_Titulaires.GetTitulaires() 
        
        listeID = None
        DB = GestionDB.DB()

        # Conditions
        listeConditions = []
        conditions = ""
        
##        if self.IDfamille != None :
##            listeConditions.append("cotisations.IDfamille = %d" % self.IDfamille)
##
##        if self.IDindividu != None :
##            listeConditions.append("cotisations.IDindividu = %d" % self.IDindividu)
        
        # 1ère série de filtres
        if self.filtres != None :
            for filtre in self.filtres :

                # IDcotisation_intervalle
                if filtre["type"] == "IDcotisation_intervalle" :
                    listeConditions.append( "(cotisations.IDcotisation>=%d AND cotisations.IDcotisation<=%d)" % (filtre["IDcotisation_min"], filtre["IDcotisation_max"]) )

                # IDcotisation_liste
                if filtre["type"] == "IDcotisation_liste" :
                    if len(filtre["liste"]) == 0 : listeTemp = "()" 
                    elif len(filtre["liste"]) == 1 : listeTemp = "(%d)" % filtre["liste"][0]
                    else : listeTemp = str(tuple(filtre["liste"]))
                    listeConditions.append( "cotisations.IDcotisation IN %s" % listeTemp)

                # Type de cotisation
                if filtre["type"] == "type" :
                    listeConditions.append("cotisations.IDtype_cotisation=%d" % filtre["IDtype_cotisation"])

                # Unité de cotisation
                if filtre["type"] == "unite" :
                    listeConditions.append("cotisations.IDunite_cotisation=%d" % filtre["IDunite_cotisation"])

##                # Date d'échéance
##                if filtre["type"] == "date_echeance" :
##                    listeConditions.append( "(factures.date_echeance>='%s' AND factures.date_echeance<='%s')" % (filtre["date_min"], filtre["date_max"]) )
                
                # Carte créée
                if filtre["type"] == "carte" :
                    if filtre["choix"] == True :
                        listeConditions.append( "cotisations.date_creation_carte IS NOT NULL")
                    else :
                        listeConditions.append( "cotisations.date_creation_carte IS NULL")

                # Carte facturée
                if filtre["type"] == "facturee" :
                    if filtre["choix"] == True :
                        listeConditions.append( "cotisations.IDprestation IS NOT NULL")
                    else :
                        listeConditions.append( "cotisations.IDprestation IS NULL")

                # Dépôt
                if filtre["type"] == "depot" :
                    listeConditions.append("cotisations.IDdepot_cotisation=%d" % filtre["IDdepot_cotisation"])
                                

        dictFacturation = {}
        
        if self.mode == "liste" :
            
##            if self.filtre == None or self.filtre["IDtype_cotisation"] == None or self.filtre["IDunite_cotisation"] == None :
##                return []
            
##            if self.filtre != None :
##                conditionsCotisations = "WHERE cotisations.IDtype_cotisation=%d AND cotisations.IDunite_cotisation=%d" % (self.filtre["IDtype_cotisation"], self.filtre["IDunite_cotisation"])
                
            # Pour le mode LISTE 
            if len(listeConditions) > 0 :
                conditions = "WHERE %s" % " AND ".join(listeConditions)
            
            # Récupère les prestations
##            req = """SELECT IDcotisation, SUM(montant)
##            FROM prestations
##            LEFT JOIN cotisations ON cotisations.IDprestation = prestations.IDprestation
##            %s 
##            GROUP BY cotisations.IDcotisation;""" % conditions
            req = """SELECT prestations.IDprestation, SUM(montant)
            FROM cotisations
            LEFT JOIN prestations ON prestations.IDprestation = cotisations.IDprestation
            %s 
            GROUP BY cotisations.IDprestation;""" % conditions
            DB.ExecuterReq(req)
            listePrestations = DB.ResultatReq()
            for IDprestation, montant in listePrestations :
                dictFacturation[IDprestation] = {"montant":montant, "ventilation":0.0, "dateReglement":None,"modeReglement":None}
            
            # Recherche la ventilation
            req = """SELECT IDprestation, SUM(ventilation.montant), MIN(reglements.date), MIN(modes_reglements.label)
            FROM ventilation
            LEFT JOIN reglements ON reglements.IDreglement = ventilation.IDreglement
            LEFT JOIN modes_reglements ON modes_reglements.IDmode = reglements.IDmode
            GROUP BY ventilation.IDprestation;"""
            DB.ExecuterReq(req)
            listeVentilations = DB.ResultatReq()
            for IDprestation, ventilation, dateReglement, modeReglement in listeVentilations :
                if dictFacturation.has_key(IDprestation) :
                    dictFacturation[IDprestation]["ventilation"] = ventilation
                    dictFacturation[IDprestation]["dateReglement"] = dateReglement
                    dictFacturation[IDprestation]["modeReglement"] = modeReglement
            
            # Récupère la ventilation
##            req = """SELECT IDcotisation, SUM(ventilation.montant), MIN(reglements.date), MIN(modes_reglements.label)
##            FROM ventilation
##            LEFT JOIN prestations ON prestations.IDprestation = ventilation.IDprestation
##            LEFT JOIN cotisations ON cotisations.IDprestation = ventilation.IDprestation
##            LEFT JOIN reglements ON reglements.IDreglement = ventilation.IDreglement
##            LEFT JOIN modes_reglements ON modes_reglements.IDmode = reglements.IDmode
##            %s
##            GROUP BY cotisations.IDcotisation;""" % conditions
##            DB.ExecuterReq(req)
##            listeVentilations = DB.ResultatReq()
##            for IDcotisation, ventilation, dateReglement, modeReglement in listeVentilations :
##                if dictFacturation.has_key(IDcotisation) :
##                    dictFacturation[IDcotisation]["ventilation"] = ventilation
##                    dictFacturation[IDcotisation]["dateReglement"] = dateReglement
##                    dictFacturation[IDcotisation]["modeReglement"] = modeReglement
                        
            # Recherche les cotisations
            req = """
            SELECT 
            cotisations.IDcotisation, 
            cotisations.IDfamille, cotisations.IDindividu, cotisations.IDtype_cotisation, cotisations.IDunite_cotisation,
            cotisations.date_saisie, cotisations.IDutilisateur, cotisations.date_creation_carte, cotisations.numero,
            cotisations.IDdepot_cotisation, cotisations.date_debut, cotisations.date_fin, cotisations.IDprestation, 
            types_cotisations.nom, types_cotisations.type, types_cotisations.carte,
            unites_cotisations.nom, comptes_payeurs.IDcompte_payeur, cotisations.observations, cotisations.activites
            FROM cotisations 
            LEFT JOIN types_cotisations ON types_cotisations.IDtype_cotisation = cotisations.IDtype_cotisation
            LEFT JOIN unites_cotisations ON unites_cotisations.IDunite_cotisation = cotisations.IDunite_cotisation
            LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = cotisations.IDfamille
            %s
            ORDER BY cotisations.date_saisie
            ;""" % conditions
            
        else :
            
            if self.IDindividu != None :
                # Pour une fiche individu
                if self.dictFamillesRattachees != None :
                    listeIDfamille = []
                    for IDfamille, dictFamille in self.dictFamillesRattachees.iteritems() :
                        if dictFamille["IDcategorie"] in (1, 2) :
                            listeIDfamille.append(IDfamille)
                    if len(listeIDfamille) == 0 : conditionIDfamille = "()"
                    if len(listeIDfamille) == 1 : conditionIDfamille = "(%d)" % listeIDfamille[0]
                    else : conditionIDfamille = str(tuple(listeIDfamille))
                else:
                    conditionIDfamille = "()"
                
                listeConditions.append("(cotisations.IDindividu=%d OR (cotisations.IDfamille IN %s AND cotisations.IDindividu IS NULL))" % (self.IDindividu, conditionIDfamille))

                if len(listeConditions) > 0 :
                    conditions = "WHERE %s" % " AND ".join(listeConditions)
                
                req = """
                SELECT 
                cotisations.IDcotisation, 
                cotisations.IDfamille, cotisations.IDindividu, cotisations.IDtype_cotisation, cotisations.IDunite_cotisation,
                cotisations.date_saisie, cotisations.IDutilisateur, cotisations.date_creation_carte, cotisations.numero,
                cotisations.IDdepot_cotisation, cotisations.date_debut, cotisations.date_fin, cotisations.IDprestation, 
                types_cotisations.nom, types_cotisations.type, types_cotisations.carte, 
                unites_cotisations.nom, comptes_payeurs.IDcompte_payeur, cotisations.observations, cotisations.activites
                FROM cotisations 
                LEFT JOIN types_cotisations ON types_cotisations.IDtype_cotisation = cotisations.IDtype_cotisation
                LEFT JOIN unites_cotisations ON unites_cotisations.IDunite_cotisation = cotisations.IDunite_cotisation
                LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = cotisations.IDfamille
                %s;
                """ % conditions
            else:
                # Pour une fiche famille
                req = """
                SELECT IDindividu, IDcategorie
                FROM rattachements 
                WHERE IDfamille=%d AND IDcategorie IN (1, 2);
                """ % self.IDfamille
                DB.ExecuterReq(req)
                listeDonnees = DB.ResultatReq()
                listeIDindividus = []
                for IDindividu, IDcategorie in listeDonnees :
                    if IDindividu not in listeIDindividus :
                        listeIDindividus.append(IDindividu) 
                if len(listeIDindividus) == 0 : conditionIndividus = "()"
                if len(listeIDindividus) == 1 : conditionIndividus = "(%d)" % listeIDindividus[0]
                else : conditionIndividus = str(tuple(listeIDindividus))
                
                listeConditions.append("(cotisations.IDfamille=%d OR (cotisations.IDindividu IN %s AND cotisations.IDfamille IS NULL))" % (self.IDfamille, conditionIndividus))

                if len(listeConditions) > 0 :
                    conditions = "WHERE %s" % " AND ".join(listeConditions)

                req = """
                SELECT 
                cotisations.IDcotisation, 
                cotisations.IDfamille, cotisations.IDindividu, cotisations.IDtype_cotisation, cotisations.IDunite_cotisation,
                cotisations.date_saisie, cotisations.IDutilisateur, cotisations.date_creation_carte, cotisations.numero,
                cotisations.IDdepot_cotisation, cotisations.date_debut, cotisations.date_fin, cotisations.IDprestation,
                types_cotisations.nom, types_cotisations.type, types_cotisations.carte, 
                unites_cotisations.nom, comptes_payeurs.IDcompte_payeur, cotisations.observations, cotisations.activites
                FROM cotisations 
                LEFT JOIN types_cotisations ON types_cotisations.IDtype_cotisation = cotisations.IDtype_cotisation
                LEFT JOIN unites_cotisations ON unites_cotisations.IDunite_cotisation = cotisations.IDunite_cotisation
                LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = cotisations.IDfamille
                %s
                """ % conditions

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

        DB.Close()
        
        listeListeView = []
        listeIDfamilles = []
        
        for item in listeCotisations :
            track = Track(self, item, dictFacturation)
            
            # Pour compter le nbre de familles
            IDfamille = item[1]
            if IDfamille not in listeIDfamilles and IDfamille != None :
                listeIDfamilles.append(IDfamille) 

            valide = True
                
            # 2ème série de filtres
            if self.filtres != None :
                for filtre in self.filtres :
            
                    # Montant
                    if filtre["type"] == "montant" :
                        montant = track.montant
                        if montant == None :
                            montant = 0.0
                        if self.ComparateurFiltre(montant, filtre["operateur"], filtre["montant"]) == False :
                            valide = False
                    
                    # Solde actuel
                    if filtre["type"] == "solde_actuel" :
                        solde = track.solde
                        if solde == None :
                            solde = 0.0
                        if self.ComparateurFiltre(solde, filtre["operateur"], filtre["montant"]) == False :
                            valide = False

                    # numero_intervalle
                    if filtre["type"] == "numero_intervalle" :
                        if track.numero_int < filtre["numero_min"] or track.numero_int > filtre["numero_max"] :
                            valide = False

                    # numero_liste
                    if filtre["type"] == "numero_liste" :
                        if track.numero_int not in filtre["liste"] :
                            valide = False

##                    if filtre["type"] == "email" :
##                        if filtre["choix"] == True :
##                            if dictTemp["email_factures"] == None : valide = False
##                        else :
##                            if dictTemp["email_factures"] != None : valide = False

            if listeID != None :
                if item[0] not in listeID :
                    valide = False
                    
            if valide == True :
                listeListeView.append(track)
                if self.selectionID == item[0] :
                    self.selectionTrack = track
        
        self.nbreFamilles = len(listeIDfamilles)
        
        return listeListeView