Ejemplo n.º 1
0
    def GetTracks(self):
        """ Récupération des données """
        DB = GestionDB.DB()

        # Lecture Individus
        req = """SELECT IDindividu, nom, prenom
        FROM individus;"""
        DB.ExecuterReq(req)
        listeIndividus = DB.ResultatReq()
        dictIndividus = {}
        for IDindividu, nom, prenom in listeIndividus:
            if prenom == None: prenom = ""
            dictIndividus[IDindividu] = u"%s %s" % (nom, prenom)

        # Lecture unités
        req = """SELECT IDunite, nom, abrege
        FROM unites
        ORDER BY ordre;"""
        DB.ExecuterReq(req)
        listeUnites = DB.ResultatReq()
        dictUnites = {}
        for IDunite, nom, abrege in listeUnites:
            dictUnites[IDunite] = nom

        DB.Close()

        # Récupération du IDfichier
        IDfichier = FonctionsPerso.GetIDfichier()

        # Lecture des fichiers du répertoire SYNC
        listeFichiers = os.listdir(UTILS_Fichiers.GetRepSync())

        listeListeView = []
        listeDictTempTraites = []
        for nomFichier in listeFichiers:
            if nomFichier.startswith("actions_%s" % IDfichier) and (
                    nomFichier.endswith(".dat") and self.listeFichiers
                    == None) or (self.listeFichiers != None
                                 and nomFichier in self.listeFichiers):
                nomFichierCourt = nomFichier.replace(".dat", "").replace(
                    ".archive", "")

                if nomFichier not in self.listeFichiersTrouves:
                    self.listeFichiersTrouves.append(nomFichier)

                # Taille fichier
                tailleFichier = os.path.getsize(
                    UTILS_Fichiers.GetRepSync(nomFichier))

                # Horodatage
                horodatage = nomFichierCourt.split("_")[2]
                horodatage = UTILS_Dates.HorodatageEnDatetime(horodatage)

                # Lecture du contenu du fichier
                DB = GestionDB.DB(
                    suffixe=None,
                    nomFichier=UTILS_Fichiers.GetRepSync(nomFichier),
                    modeCreation=False)
                req = """SELECT IDparametre, nom, valeur 
                FROM parametres;"""
                DB.ExecuterReq(req)
                listeParametres = DB.ResultatReq()
                dictParametres = {}
                for IDparametre, nom, valeur in listeParametres:
                    dictParametres[nom] = valeur

                if dictParametres.has_key("nom_appareil") == False:
                    dictParametres["nom_appareil"] = "Appareil inconnu"
                if dictParametres.has_key("ID_appareil") == False:
                    dictParametres["ID_appareil"] = "IDAppareil inconnu"

                # Mémorise l'IDappareil
                self.dictIDappareil[nomFichierCourt] = dictParametres[
                    "ID_appareil"]

                # Lecture des consommations
                req = """SELECT IDconso, horodatage, action, IDindividu, IDactivite, IDinscription, date, IDunite, IDgroupe, heure_debut, heure_fin, etat, date_saisie, IDutilisateur, IDcategorie_tarif, IDcompte_payeur, quantite, IDfamille
                FROM consommations;"""
                DB.ExecuterReq(req)
                listeConsommations = DB.ResultatReq()
                for IDconso, horodatage, action, IDindividu, IDactivite, IDinscription, date, IDunite, IDgroupe, heure_debut, heure_fin, etat, date_saisie, IDutilisateur, IDcategorie_tarif, IDcompte_payeur, quantite, IDfamille in listeConsommations:
                    horodatage = UTILS_Dates.HorodatageEnDatetime(
                        horodatage, separation="-")
                    date = UTILS_Dates.DateEngEnDateDD(date)
                    date_saisie = UTILS_Dates.DateEngEnDateDD(date_saisie)
                    dictTemp = {
                        "categorie": "consommation",
                        "IDconso": IDconso,
                        "horodatage": horodatage,
                        "action": action,
                        "IDindividu": IDindividu,
                        "IDactivite": IDactivite,
                        "IDinscription": IDinscription,
                        "date": date,
                        "IDunite": IDunite,
                        "IDgroupe": IDgroupe,
                        "heure_debut": heure_debut,
                        "heure_fin": heure_fin,
                        "etat": etat,
                        "quantite": quantite,
                        "date_saisie": date_saisie,
                        "IDutilisateur": IDutilisateur,
                        "IDcategorie_tarif": IDcategorie_tarif,
                        "IDcompte_payeur": IDcompte_payeur,
                        "IDfamille": IDfamille,
                    }

                    # Vérifie que cette action n'est pas déjà dans la liste
                    if dictTemp not in listeDictTempTraites:
                        listeListeView.append(
                            Track(dictTemp,
                                  dictIndividus=dictIndividus,
                                  dictUnites=dictUnites,
                                  dictParametres=dictParametres,
                                  nomFichier=nomFichier))
                        if self.cacher_doublons == True:
                            listeDictTempTraites.append(dictTemp)

                # Lecture des mémos journaliers
                req = """SELECT IDmemo, horodatage, action, IDindividu, date, texte
                FROM memo_journee;"""
                DB.ExecuterReq(req)
                listeMemosJournees = DB.ResultatReq()
                for IDmemo, horodatage, action, IDindividu, date, texte in listeMemosJournees:
                    horodatage = UTILS_Dates.HorodatageEnDatetime(
                        horodatage, separation="-")
                    date = UTILS_Dates.DateEngEnDateDD(date)
                    dictTemp = {
                        "categorie": "memo_journee",
                        "IDmemo": IDmemo,
                        "horodatage": horodatage,
                        "action": action,
                        "IDindividu": IDindividu,
                        "date": date,
                        "texte": texte,
                    }

                    # Vérifie que cette action n'est pas déjà dans la liste
                    if dictTemp not in listeDictTempTraites:
                        listeListeView.append(
                            Track(dictTemp,
                                  dictIndividus=dictIndividus,
                                  dictParametres=dictParametres,
                                  nomFichier=nomFichier))
                        if self.cacher_doublons == True:
                            listeDictTempTraites.append(dictTemp)

                DB.Close()

        return listeListeView
Ejemplo n.º 2
0
    def GetListeFactures(self):
        dictTitulaires = UTILS_Titulaires.GetTitulaires()

        DB = GestionDB.DB()

        # Conditions
        listeConditions = []

        if self.IDcompte_payeur != None:
            listeConditions.append("prestations.IDcompte_payeur = %d" %
                                   self.IDcompte_payeur)

        # 1ère série de filtres
        if self.filtres != None:
            for filtre in self.filtres:

                # IDfacture_intervalle
                if filtre["type"] == "IDfacture_intervalle":
                    listeConditions.append(
                        "(factures.IDfacture>=%d AND factures.IDfacture<=%d)" %
                        (filtre["IDfacture_min"], filtre["IDfacture_max"]))

                # IDfacture_liste
                if filtre["type"] == "IDfacture_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("factures.IDfacture IN %s" %
                                           listeTemp)

                # Préfixe
                if filtre["type"] == "prefixe":
                    if filtre["IDprefixe"] == None:
                        listeConditions.append("factures.IDprefixe IS NULL")
                    else:
                        listeConditions.append("factures.IDprefixe=%d" %
                                               filtre["IDprefixe"])

                # Lot de factures
                if filtre["type"] == "lot":
                    listeConditions.append("factures.IDlot=%d" %
                                           filtre["IDlot"])

                # Date d'émission
                if filtre["type"] == "date_emission":
                    listeConditions.append(
                        "(factures.date_edition>='%s' AND factures.date_edition<='%s')"
                        % (filtre["date_min"], filtre["date_max"]))

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

                # numero_intervalle
                if filtre["type"] == "numero_intervalle":
                    listeConditions.append(
                        "(factures.numero>=%d AND factures.numero<=%d)" %
                        (filtre["numero_min"], filtre["numero_max"]))

                # numero_liste
                if filtre["type"] == "numero_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("factures.numero IN %s" % listeTemp)

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

        # Récupération des totaux des prestations pour chaque facture
        req = """
        SELECT 
        prestations.IDfacture, SUM(prestations.montant)
        FROM prestations
        LEFT JOIN factures ON factures.IDfacture = prestations.IDfacture
        %s
        GROUP BY prestations.IDfacture
        ;""" % conditions
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        dictPrestations = {}
        for IDfacture, totalPrestations in listeDonnees:
            if IDfacture != None:
                dictPrestations[IDfacture] = totalPrestations

        # Récupération des factures
        req = """
        SELECT factures.IDfacture, factures.IDprefixe, factures_prefixes.prefixe, factures.numero, factures.IDcompte_payeur,
        factures.date_edition, factures.date_echeance, factures.IDutilisateur,
        factures.date_debut, factures.date_fin, factures.total, factures.regle, factures.solde,
        comptes_payeurs.IDfamille, factures.IDlot, lots_factures.nom, factures.etat
        FROM factures
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = factures.IDcompte_payeur
        LEFT JOIN lots_factures ON lots_factures.IDlot = factures.IDlot
        LEFT JOIN factures_prefixes ON factures_prefixes.IDprefixe = factures.IDprefixe
        %s
        ORDER BY factures.date_edition
        ;""" % conditions.replace("prestations.IDcompte_payeur",
                                  "comptes_payeurs.IDcompte_payeur")
        DB.ExecuterReq(req)
        listeFactures = DB.ResultatReq()

        # Récupération de la ventilation
        req = """
        SELECT prestations.IDfacture, SUM(ventilation.montant)
        FROM ventilation
        LEFT JOIN prestations ON prestations.IDprestation = ventilation.IDprestation
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = prestations.IDcompte_payeur
        LEFT JOIN factures ON factures.IDfacture = prestations.IDfacture
        %s
        GROUP BY prestations.IDfacture
        ;""" % conditions
        DB.ExecuterReq(req)
        listeVentilation = DB.ResultatReq()
        dictVentilation = {}
        for IDfacture, montantVentilation in listeVentilation:
            if IDfacture != None:
                dictVentilation[IDfacture] = montantVentilation

        # Infos Prélèvement + Envoi par Email des factures
        if self.IDcompte_payeur != None:
            conditions = "WHERE comptes_payeurs.IDcompte_payeur = %d" % self.IDcompte_payeur
        else:
            conditions = ""

        req = """
        SELECT 
        prelevement_activation, prelevement_etab, prelevement_guichet, prelevement_numero, prelevement_cle, prelevement_banque,
        prelevement_individu, prelevement_nom, prelevement_rue, prelevement_cp, prelevement_ville, 
        prelevement_cle_iban, prelevement_iban, prelevement_bic, prelevement_reference_mandat, prelevement_date_mandat, 
        email_factures,
        comptes_payeurs.IDcompte_payeur,
        individus.nom, individus.prenom,
        titulaire_helios
        FROM familles
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = familles.IDfamille
        LEFT JOIN individus ON individus.IDindividu = prelevement_individu
        %s
        ;""" % conditions
        DB.ExecuterReq(req)
        listeInfosFamilles = DB.ResultatReq()
        dictInfosFamilles = {}
        for prelevement_activation, prelevement_etab, prelevement_guichet, prelevement_numero, prelevement_cle, prelevement_banque, prelevement_individu, prelevement_nom, prelevement_rue, prelevement_cp, prelevement_ville, prelevement_cle_iban, prelevement_iban, prelevement_bic, prelevement_reference_mandat, prelevement_date_mandat, email_factures, IDcompte_payeur, nomPayeur, prenomPayeur, titulaire_helios in listeInfosFamilles:
            prelevement_date_mandat = UTILS_Dates.DateEngEnDateDD(
                prelevement_date_mandat)
            dictInfosFamilles[IDcompte_payeur] = {
                "prelevement_activation": prelevement_activation,
                "prelevement_etab": prelevement_etab,
                "prelevement_guichet": prelevement_guichet,
                "prelevement_numero": prelevement_numero,
                "prelevement_cle": prelevement_cle,
                "prelevement_banque": prelevement_banque,
                "prelevement_individu": prelevement_individu,
                "prelevement_nom": prelevement_nom,
                "prelevement_rue": prelevement_rue,
                "prelevement_cp": prelevement_cp,
                "prelevement_ville": prelevement_ville,
                "prelevement_cle_iban": prelevement_cle_iban,
                "prelevement_iban": prelevement_iban,
                "prelevement_bic": prelevement_bic,
                "prelevement_reference_mandat": prelevement_reference_mandat,
                "prelevement_date_mandat": prelevement_date_mandat,
                "email_factures": email_factures,
                "nomPayeur": nomPayeur,
                "prenomPayeur": prenomPayeur,
                "titulaire_helios": titulaire_helios,
            }

        DB.Close()

        listeResultats = []
        for IDfacture, IDprefixe, prefixe, numero, IDcompte_payeur, date_edition, date_echeance, IDutilisateur, date_debut, date_fin, total, regle, solde, IDfamille, IDlot, nomLot, etat in listeFactures:
            if numero == None: numero = 0
            date_edition = UTILS_Dates.DateEngEnDateDD(date_edition)
            date_debut = UTILS_Dates.DateEngEnDateDD(date_debut)
            date_fin = UTILS_Dates.DateEngEnDateDD(date_fin)
            date_echeance = UTILS_Dates.DateEngEnDateDD(date_echeance)
            total = FloatToDecimal(total)
            if dictVentilation.has_key(IDfacture):
                totalVentilation = FloatToDecimal(dictVentilation[IDfacture])
            else:
                totalVentilation = FloatToDecimal(0.0)
            if dictPrestations.has_key(IDfacture):
                totalPrestations = FloatToDecimal(dictPrestations[IDfacture])
            else:
                totalPrestations = FloatToDecimal(0.0)
            solde_actuel = totalPrestations - totalVentilation
            if dictTitulaires.has_key(IDfamille) == True:

                titulaires = dictTitulaires[IDfamille][
                    "titulairesSansCivilite"]
                adresse_famille = dictTitulaires[IDfamille]["adresse"]

                dictTemp = {
                    "IDfacture": IDfacture,
                    "IDprefixe": IDprefixe,
                    "prefixe": prefixe,
                    "numero": numero,
                    "IDcompte_payeur": IDcompte_payeur,
                    "date_edition": date_edition,
                    "date_echeance": date_echeance,
                    "IDutilisateur": IDutilisateur,
                    "date_debut": date_debut,
                    "date_fin": date_fin,
                    "total": total,
                    "regle": regle,
                    "solde": solde,
                    "totalPrestations": totalPrestations,
                    "totalVentilation": totalVentilation,
                    "IDfamille": IDfamille,
                    "titulaires": titulaires,
                    "IDlot": IDlot,
                    "nomLot": nomLot,
                    "adresse_famille": adresse_famille,
                    "etat": etat,
                }

                if dictInfosFamilles.has_key(IDcompte_payeur):
                    dictTemp.update(dictInfosFamilles[IDcompte_payeur])

                valide = True

                # 2ème série de filtres
                if self.filtres != None:
                    for filtre in self.filtres:

                        # IDfacture_intervalle
                        if filtre["type"] == "solde_initial":
                            if self.ComparateurFiltre(
                                    -solde, filtre["operateur"],
                                    filtre["montant"]) == False:
                                valide = False

                        if filtre["type"] == "solde_actuel":
                            if self.ComparateurFiltre(
                                    -solde_actuel, filtre["operateur"],
                                    filtre["montant"]) == False:
                                valide = False

                        if filtre["type"] == "prelevement":
                            if filtre["choix"] == True:
                                if dictTemp["prelevement_activation"] == None:
                                    valide = False
                            else:
                                if dictTemp["prelevement_activation"] != None:
                                    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 etat == "annulation" and self.afficherAnnulations == False:
                    valide = False

                # Mémorisation des valeurs
                if valide == True:
                    listeResultats.append(dictTemp)

        return listeResultats
Ejemplo n.º 3
0
    def OnBoutonOk(self, event):
        # Validation des données
        titre = self.ctrl_titre.GetValue()
        if titre == "":
            dlg = wx.MessageDialog(
                self, _(u"Vous devez obligatoirement saisir un titre !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_titre.SetFocus()
            return

        texte = self.ctrl_texte.GetValue()
        if texte == "":
            dlg = wx.MessageDialog(
                self, _(u"Vous devez obligatoirement saisir un texte !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_texte.SetFocus()
            return

        if self.radio_dates.GetValue() == True:

            affichage_date_debut = self.ctrl_affichage_date_debut.GetDate()
            if affichage_date_debut == None:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir une date de début pour l'affichage !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_affichage_date_debut.SetFocus()
                return

            affichage_heure_debut = self.ctrl_affichage_heure_debut.GetHeure()
            if affichage_heure_debut == None or self.ctrl_affichage_heure_debut.Validation(
            ) == False:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir une heure de début valide pour l'affichage !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_affichage_heure_debut.SetFocus()
                return

            affichage_date_fin = self.ctrl_affichage_date_fin.GetDate()
            if affichage_date_fin == None:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir une date de fin pour l'affichage !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_affichage_date_fin.SetFocus()
                return

            affichage_heure_fin = self.ctrl_affichage_heure_fin.GetHeure()
            if affichage_heure_fin == None or self.ctrl_affichage_heure_fin.Validation(
            ) == False:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir une heure de fin valide pour l'affichage !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_affichage_heure_fin.SetFocus()
                return

            if affichage_date_debut > affichage_date_fin:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir une date de fin supérieure à la date de début pour l'affichage !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_affichage_date_fin.SetFocus()
                return

            # Assemblage des dates et heures d'affichage
            affichage_date_debut = datetime.datetime(
                year=affichage_date_debut.year,
                month=affichage_date_debut.month,
                day=affichage_date_debut.day,
                hour=int(affichage_heure_debut[:2]),
                minute=int(affichage_heure_debut[3:]))
            affichage_date_fin = datetime.datetime(
                year=affichage_date_fin.year,
                month=affichage_date_fin.month,
                day=affichage_date_fin.day,
                hour=int(affichage_heure_fin[:2]),
                minute=int(affichage_heure_fin[3:]))

        else:
            affichage_date_debut = None
            affichage_date_fin = None

        # Sauvegarde des données
        DB = GestionDB.DB()
        listeDonnees = [
            ("titre", titre),
            ("texte", texte),
            ("affichage_date_debut", affichage_date_debut),
            ("affichage_date_fin", affichage_date_fin),
        ]
        if self.IDmessage == None:
            self.IDmessage = DB.ReqInsert("portail_messages", listeDonnees)
        else:
            DB.ReqMAJ("portail_messages", listeDonnees, "IDmessage",
                      self.IDmessage)
        DB.Close()

        self.EndModal(wx.ID_OK)
Ejemplo n.º 4
0
    def Importation(self):
        DB = GestionDB.DB()

        if len(self.listeActivites) == 0: conditionActivites = "()"
        elif len(self.listeActivites) == 1: conditionActivites = "(%d)" % self.listeActivites[0]
        else: conditionActivites = str(tuple(self.listeActivites))

        if self.affichage_caisse:
            conditionsCaisse = "AND aides.IDcaisse=%d" % self.affichage_caisse
        else:
            conditionsCaisse = ""

        # Déductions
        req = """SELECT 
        IDdeduction, deductions.IDprestation, deductions.IDcompte_payeur, deductions.date, deductions.montant, deductions.label, deductions.IDaide, 
        individus.nom, individus.prenom, individus.date_naiss,
        prestations.label, prestations.montant, prestations.montant_initial, prestations.IDfamille, prestations.IDactivite, activites.abrege, prestations.IDindividu, prestations.date, prestations.IDfacture,
        familles.IDcaisse, familles.num_allocataire, caisses.nom, aides.nom
        FROM deductions
        LEFT JOIN prestations ON prestations.IDprestation = deductions.IDprestation
        LEFT JOIN individus ON individus.IDindividu = prestations.IDindividu
        LEFT JOIN activites ON activites.IDactivite = prestations.IDactivite
        LEFT JOIN familles ON familles.IDfamille = prestations.IDfamille
        LEFT JOIN caisses ON caisses.IDcaisse = familles.IDcaisse
        LEFT JOIN aides ON aides.IDaide = deductions.IDaide
        WHERE deductions.date>='%s' AND deductions.date<='%s' AND prestations.IDactivite IN %s
        %s;""" % (self.date_debut, self.date_fin, conditionActivites, conditionsCaisse)
        DB.ExecuterReq(req)
        listeDeductions = DB.ResultatReq()
        DB.Close()

        # Calcul des données
        dictResultats = {}
        listePrestations = []
        for IDdeduction, IDprestation, IDcompte_payeur, date, montant, label, IDaide, nomIndividu, prenomIndividu, date_naiss, labelPrestation, montantPrestation, montantInitialPrestation, IDfamille, IDactivite, abregeActivite, IDindividu, datePrestation, IDfacture, IDcaisse, num_allocataire, nomCaisse, nomAide in listeDeductions:
            date = UTILS_Dates.DateEngEnDateDD(date)
            datePrestation = UTILS_Dates.DateEngEnDateDD(datePrestation)
            date_naiss = UTILS_Dates.DateEngEnDateDD(date_naiss)
            mois = date.month
            annee = date.year
            nom_complet_individu = u"%s %s" % (nomIndividu, prenomIndividu)
            montantInitialPrestation = FloatToDecimal(montantInitialPrestation)
            montant = FloatToDecimal(montant)
            montantPrestation = FloatToDecimal(montantPrestation)

            # Recherche du regroupement
            try :
                if self.affichage_regroupement == "jour" : regroupement = date
                if self.affichage_regroupement == "mois" : regroupement = (annee, mois)
                if self.affichage_regroupement == "annee" : regroupement = annee
                if self.affichage_regroupement == "montant_deduction": regroupement = montant
                if self.affichage_regroupement == "nom_aide" : regroupement = nomAide
                if self.affichage_regroupement == "nom_deduction": regroupement = label
                if self.affichage_regroupement == "ville_residence" : regroupement = self.dictInfosFamilles[IDfamille]["FAMILLE_VILLE"]
                if self.affichage_regroupement == "secteur" : regroupement = self.dictInfosFamilles[IDfamille]["FAMILLE_SECTEUR"]
                if self.affichage_regroupement == "famille" : regroupement = self.dictInfosFamilles[IDfamille]["FAMILLE_NOM"]
                if self.affichage_regroupement == "individu": regroupement = IDindividu
                if self.affichage_regroupement == "regime" : regroupement = self.dictInfosFamilles[IDfamille]["FAMILLE_NOM_REGIME"]
                if self.affichage_regroupement == "caisse" : regroupement = self.dictInfosFamilles[IDfamille]["FAMILLE_NOM_CAISSE"]

                # QF
                if self.affichage_regroupement == "qf" :
                    regroupement = None
                    qf = self.dictInfosFamilles[IDfamille]["FAMILLE_QF_ACTUEL_INT"]
                    for x in range(0, 10000, 100) :
                        min, max = x, x+99
                        if qf >= min and qf <= max :
                            regroupement = (min, max)

                # Questionnaires
                if self.affichage_regroupement.startswith("question_") and "famille" in self.affichage_regroupement:
                    regroupement = self.dictInfosFamilles[IDfamille]["QUESTION_%s" % self.affichage_regroupement[17:]]

            except :
                regroupement = None

            if regroupement in ("", None):
                regroupement = _(u"- Non renseigné -")

            # Colonne
            if labelPrestation not in listePrestations:
                listePrestations.append(labelPrestation)

            # Regroupement
            if regroupement not in dictResultats:
                dictResultats[regroupement] = {
                    "caisse": nomCaisse, "num_allocataire": num_allocataire, "prestations": {},
                    "montant_initial": FloatToDecimal(0), "montant_deduction": FloatToDecimal(0), "montant_final": FloatToDecimal(0),
                    "liste_dates": [], "individu": nom_complet_individu, "famille": self.dictInfosFamilles[IDfamille]["FAMILLE_NOM"],
                }
            dictResultats[regroupement]["montant_initial"] += montantInitialPrestation
            dictResultats[regroupement]["montant_deduction"] += montant
            dictResultats[regroupement]["montant_final"] += montantPrestation
            if date not in dictResultats[regroupement]["liste_dates"]:
                dictResultats[regroupement]["liste_dates"].append(date)

            # Prestations
            if labelPrestation not in dictResultats[regroupement]["prestations"]:
                dictResultats[regroupement]["prestations"][labelPrestation] = {
                    "nbre": 0, "liste_dates": [], "montant_initial": montantInitialPrestation,
                    "montant_deduction": montant, "montant_final": montantPrestation,
                }
            dictResultats[regroupement]["prestations"][labelPrestation]["nbre"] += 1
            if date not in dictResultats[regroupement]["prestations"][labelPrestation]["liste_dates"]:
                dictResultats[regroupement]["prestations"][labelPrestation]["liste_dates"].append(date)
            dictResultats[regroupement]["prestations"][labelPrestation]["montant_initial"] += montantInitialPrestation
            dictResultats[regroupement]["prestations"][labelPrestation]["montant_deduction"] += montant
            dictResultats[regroupement]["prestations"][labelPrestation]["montant_final"] += montantPrestation

        return dictResultats, listePrestations
Ejemplo n.º 5
0
    def MAJ(self):
        """ MAJ integrale du controle avec MAJ des donnees """
        if self.majEffectuee == False:
            self.ctrl_parametres.MAJ()
            DB = GestionDB.DB()
            req = """SELECT internet_actif, internet_identifiant, internet_mdp, titulaire_helios, code_comptable, idtiers_helios, natidtiers_helios, reftiers_helios, cattiers_helios, natjur_helios, autre_adresse_facturation
            FROM familles
            WHERE IDfamille=%d;""" % self.IDfamille
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            DB.Close()
            if len(listeDonnees) > 0:
                internet_actif, internet_identifiant, internet_mdp, titulaire_helios, code_comptable, idtiers_helios, natidtiers_helios, reftiers_helios, cattiers_helios, natjur_helios, autre_adresse_facturation = listeDonnees[
                    0]

                # Compte internet
                self.ctrl_compte_internet.SetDonnees({
                    "internet_actif":
                    internet_actif,
                    "internet_identifiant":
                    internet_identifiant,
                    "internet_mdp":
                    internet_mdp
                })

                # Hélios
                self.ctrl_parametres.SetPropertyValue("titulaire_helios",
                                                      titulaire_helios)
                if idtiers_helios != None:
                    self.ctrl_parametres.SetPropertyValue(
                        "idtiers_helios", idtiers_helios)
                if natidtiers_helios != None:
                    self.ctrl_parametres.SetPropertyValue(
                        "natidtiers_helios", natidtiers_helios)
                if reftiers_helios != None:
                    self.ctrl_parametres.SetPropertyValue(
                        "reftiers_helios", reftiers_helios)
                if cattiers_helios != None:
                    self.ctrl_parametres.SetPropertyValue(
                        "cattiers_helios", cattiers_helios)
                if natjur_helios != None:
                    self.ctrl_parametres.SetPropertyValue(
                        "natjur_helios", natjur_helios)

                # Autre adresse de facturation
                self.ctrl_parametres.SetAdresseFacturation(
                    autre_adresse_facturation)

                # Code comptable
                self.ctrl_parametres.SetPropertyValue("code_comptable",
                                                      code_comptable)
            self.MAJaffichage()

        else:
            self.ctrl_parametres.MAJ()

        # Droits utilisateurs
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel(
                "familles_compte_internet", "modifier",
                afficheMessage=False) == False:
            self.bouton_modifier.Enable(False)

        self.majEffectuee = True
Ejemplo n.º 6
0
    def Importation_prestations(self):
        """ Importation des données """

        # Chargement des informations individuelles
        self.infosIndividus = UTILS_Infos_individus.Informations(date_reference=self.date_debut, qf=True, inscriptions=True, messages=False, infosMedicales=False, cotisationsManquantes=False, piecesManquantes=False, questionnaires=True, scolarite=True)
        self.dictInfosIndividus = self.infosIndividus.GetDictValeurs(mode="individu", ID=None, formatChamp=False)
        self.dictInfosFamilles = self.infosIndividus.GetDictValeurs(mode="famille", ID=None, formatChamp=False)

        DB = GestionDB.DB()

        # Récupèration de la ventilation des prestations de la période
        conditionDepots = ""
        if self.filtreDepots == True and self.filtreDepots_dateDebut != None and self.filtreDepots_dateFin !=None :
            conditionDepots = " AND (depots.date>='%s' and depots.date<='%s') " % (self.filtreDepots_dateDebut, self.filtreDepots_dateFin)
        
        conditionReglements = ""
        if self.filtreReglements == True and self.filtreReglements_dateDebut != None and self.filtreReglements_dateFin !=None :
            conditionReglements = " AND (reglements.date_saisie>='%s' and reglements.date_saisie<='%s') " % (self.filtreReglements_dateDebut, self.filtreReglements_dateFin)
        
        req = """SELECT 
        ventilation.IDventilation, ventilation.IDreglement, ventilation.IDprestation, ventilation.montant,
        reglements.date, reglements.date_saisie, depots.date,
        prestations.date
        FROM ventilation
        LEFT JOIN reglements ON reglements.IDreglement = ventilation.IDreglement
        LEFT JOIN prestations ON prestations.IDprestation = ventilation.IDprestation
        LEFT JOIN depots ON depots.IDdepot = reglements.IDdepot
        WHERE prestations.date>='%s' AND prestations.date <='%s' %s %s
        ORDER BY prestations.date; """ % (self.date_debut, self.date_fin, conditionDepots, conditionReglements)
        DB.ExecuterReq(req)
        listeVentilation = DB.ResultatReq()

        dictVentilation = {}
        for IDventilation, IDreglement, IDprestation, montantVentilation, dateReglement, dateSaisieReglement, dateDepotReglement, datePrestation in listeVentilation :
            if (IDprestation in dictVentilation) == False :
                dictVentilation[IDprestation] = 0.0
            dictVentilation[IDprestation] += montantVentilation
            
        # Condition Afficher Cotisations et/ou Consommations ?
        listeAffichage = []
        if self.afficher_cotisations == True : listeAffichage.append("cotisation")
        if self.afficher_consommations == True : listeAffichage.append("consommation")
        if self.afficher_autres == True : listeAffichage.append("autre")
        
        if len(listeAffichage) == 0 : conditionAfficher = "categorie='xxxxxxx' "
        elif len(listeAffichage) == 1 : conditionAfficher = "categorie='%s'" % listeAffichage[0]
        else : conditionAfficher = "categorie IN %s" % str(tuple(listeAffichage))
                
        # Condition Activités affichées
        if len(self.listeActivites) == 0 : conditionActivites = "prestations.IDactivite=9999999"
        elif len(self.listeActivites) == 1 : conditionActivites = "prestations.IDactivite=%d" % self.listeActivites[0]
        else : conditionActivites = "prestations.IDactivite IN %s" % str(tuple(self.listeActivites))

        # Filtre Prestation facturée / non facturée
        conditionFacturee = ""
        if "facturee" in self.mode_affichage :
            conditionFacturee = " AND prestations.IDfacture IS NOT NULL"
        if "nonfacturee" in self.mode_affichage :
            conditionFacturee = " AND prestations.IDfacture IS NULL"
        
        # Récupération de toutes les prestations de la période
        req = """SELECT IDprestation, date, categorie, label, montant, prestations.IDactivite, prestations.IDcategorie_tarif, IDfamille, IDindividu
        FROM prestations
        WHERE date>='%s' AND date <='%s'
        AND %s AND (%s OR prestations.IDactivite IS NULL)
        %s
        ORDER BY date; """ % (self.date_debut, self.date_fin, conditionAfficher, conditionActivites, conditionFacturee)
        DB.ExecuterReq(req)
        listePrestations = DB.ResultatReq()

        # Récupération des tranches de tarifs paramétrées
        if len(self.listeActivites) == 0 :
            condition = ""
        else :
            condition = "AND %s" % conditionActivites.replace("prestations.", "")
        req = """SELECT IDligne, qf_min, qf_max
        FROM tarifs_lignes
        WHERE qf_min IS NOT NULL AND qf_max IS NOT NULL
        %s
        ;""" % condition
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        liste_tranches = []
        for IDligne, qf_min, qf_max in listeDonnees:
            tranche = qf_min, qf_max
            if tranche not in liste_tranches :
                liste_tranches.append(tranche)
        liste_tranches.sort()

        DB.Close()
        
        dictPrestations = {}
        listeRegroupements = []
        dictLabelsRegroupements = {}
        for IDprestation, date, categorie, label, montant, IDactivite, IDcategorie_tarif, IDfamille, IDindividu in listePrestations :
            date = UTILS_Dates.DateEngEnDateDD(date)
            annee = date.year
            mois = date.month

            if montant == None :
                montant = 0.0

            def GetKey(key_code=""):
                key = None
                key_label = ""
                key_tri = None

                if key_code == "jour":
                    key = date
                    key_tri = key
                    key_label = UTILS_Dates.DateEngFr(date)

                if key_code == "mois":
                    key = (annee, mois)
                    key_tri = key
                    key_label = PeriodeComplete(mois, annee)

                if key_code == "annee":
                    key = annee
                    key_tri = key
                    key_label = str(annee)

                if key_code == "label_prestation":
                    key = label
                    key_tri = label
                    key_label = label

                if key_code == "activite":
                    key = IDactivite
                    if IDactivite == None or (IDactivite in self.dictActivites) == False:
                        key_label = _(u"Activité inconnue")
                    else:
                        key_label = self.dictActivites[IDactivite]["nom"]
                    key_tri = key_label

                if key_code == "categorie_tarif":
                    key = IDcategorie_tarif
                    if IDcategorie_tarif == None or (IDcategorie_tarif in self.dictCategoriesTarifs) == False:
                        key_label = _(u"Sans catégorie")
                    else:
                        key_label = self.dictCategoriesTarifs[IDcategorie_tarif]["nomCategorie"]
                    key_tri = key_label

                if key_code == "famille":
                    key = IDfamille
                    if IDfamille == None or (IDfamille in self.dict_titulaires) == False:
                        key_label = _(u"Famille inconnue")
                    else:
                        key_label = self.dict_titulaires[IDfamille]["titulairesSansCivilite"]
                    key_tri = key_label

                if key_code == "individu":
                    key = IDindividu
                    if IDindividu == None or (IDindividu in self.dictIndividus) == False:
                        key_label = _(u"Individu inconnu")
                    else:
                        key_label = self.dictIndividus[IDindividu]["nom_complet"]
                    key_tri = key_label

                if key_code == "ville_residence" and IDindividu not in (0, None) :
                    key = self.dictInfosIndividus[IDindividu]["INDIVIDU_VILLE"]
                    key_label = key
                    key_tri = key

                if key_code == "secteur" and IDindividu not in (0, None) :
                    key = self.dictInfosIndividus[IDindividu]["INDIVIDU_SECTEUR"]
                    key_label = key
                    key_tri = key

                if key_code == "age" and IDindividu not in (0, None) :
                    key = self.dictInfosIndividus[IDindividu]["INDIVIDU_AGE_INT"]
                    key_label = str(key)
                    key_tri = key

                if key_code == "nom_ecole" and IDindividu not in (0, None) :
                    key = self.dictInfosIndividus[IDindividu]["SCOLARITE_NOM_ECOLE"]
                    key_label = key
                    key_tri = key

                if key_code == "nom_classe" and IDindividu not in (0, None) :
                    key = self.dictInfosIndividus[IDindividu]["SCOLARITE_NOM_CLASSE"]
                    key_label = key
                    key_tri = key

                if key_code == "nom_niveau_scolaire" and IDindividu not in (0, None) :
                    key = self.dictInfosIndividus[IDindividu]["SCOLARITE_NOM_NIVEAU"]
                    key_label = key
                    key_tri = key

                if key_code == "regime":
                    key = self.dictInfosFamilles[IDfamille]["FAMILLE_NOM_REGIME"]
                    key_label = key
                    key_tri = key

                if key_code == "caisse":
                    key = self.dictInfosFamilles[IDfamille]["FAMILLE_NOM_CAISSE"]
                    key_label = key
                    key_tri = key

                # QF
                if key_code.startswith("qf"):
                    key = None
                    if "FAMILLE_QF_ACTUEL_INT" in self.dictInfosFamilles[IDfamille]:
                        qf = self.dictInfosFamilles[IDfamille]["FAMILLE_QF_ACTUEL_INT"]

                        # Tranches de 100
                        if key_code == "qf_100" :
                            for x in range(0, 10000, 100):
                                min, max = x, x + 99
                                if qf >= min and qf <= max:
                                    key = (min, max)
                                    key_tri = key
                                    key_label = "%s - %s" % (min, max)

                        # Tranches paramétrées
                        if key_code == "qf_tarifs" :
                            for min, max in liste_tranches :
                                if qf >= min and qf <= max:
                                    key = (min, max)
                                    key_tri = key
                                    key_label = "%s - %s" % (min, max)


                # Questionnaires
                if key_code.startswith("question_") and "famille" in key_code:
                    key = self.dictInfosFamilles[IDfamille]["QUESTION_%s" % key_code[17:]]
                    key_label = six.text_type(key)
                    key_tri = key_label

                if key_code.startswith("question_") and "individu" in key_code and IDindividu not in (0, None) :
                    key = self.dictInfosIndividus[IDindividu]["QUESTION_%s" % key_code[18:]]
                    key_label = six.text_type(key)
                    key_tri = key_label

                if key in ("", None) :
                    key = _(u"- Autre -")
                    key_label = key
                    key_tri = key_label

                return key, key_label, key_tri

            # Création des keys de regroupements
            regroupement, labelRegroupement, triRegroupement = GetKey(self.key_colonne)
            key1, key1_label, key1_tri = GetKey(self.key_ligne1)
            key2, key2_label, key2_tri = GetKey(self.key_ligne2)

            # Mémorisation du regroupement
            if regroupement not in listeRegroupements :
                listeRegroupements.append(regroupement)
                dictLabelsRegroupements[regroupement] = labelRegroupement


            # Total
            if (key1 in dictPrestations) == False :
                dictPrestations[key1] = {"label" : key1_label, "tri" : key1_tri, "nbre" : 0, "facture" : 0.0, "regle" : 0.0, "impaye" : 0.0, "regroupements" : {} }
            dictPrestations[key1]["nbre"] += 1
            dictPrestations[key1]["facture"] += montant
            
            # Détail par période
            if (regroupement in dictPrestations[key1]["regroupements"]) == False :
                dictPrestations[key1]["regroupements"][regroupement] = {"nbre" : 0, "facture" : 0.0, "regle" : 0.0, "impaye" : 0.0, "key2" : {} }
            dictPrestations[key1]["regroupements"][regroupement]["nbre"] += 1
            dictPrestations[key1]["regroupements"][regroupement]["facture"] += montant
            
            # Détail par catégorie de tarifs
            if (key2 in dictPrestations[key1]["regroupements"][regroupement]["key2"]) == False :
                dictPrestations[key1]["regroupements"][regroupement]["key2"][key2] = {"label" : key2_label, "tri" : key2_tri, "nbre" : 0, "facture" : 0.0, "regle" : 0.0, "impaye" : 0.0}
            dictPrestations[key1]["regroupements"][regroupement]["key2"][key2]["nbre"] += 1
            dictPrestations[key1]["regroupements"][regroupement]["key2"][key2]["facture"] += montant
            
            # Ajoute la ventilation
            if IDprestation in dictVentilation :
                dictPrestations[key1]["regle"] += dictVentilation[IDprestation]
                dictPrestations[key1]["regroupements"][regroupement]["regle"] += dictVentilation[IDprestation]
                dictPrestations[key1]["regroupements"][regroupement]["key2"][key2]["regle"] += dictVentilation[IDprestation]
            
            # Calcule les impayés
            dictPrestations[key1]["impaye"] = dictPrestations[key1]["regle"] - dictPrestations[key1]["facture"]
            dictPrestations[key1]["regroupements"][regroupement]["impaye"] = dictPrestations[key1]["regroupements"][regroupement]["regle"] - dictPrestations[key1]["regroupements"][regroupement]["facture"]
            dictPrestations[key1]["regroupements"][regroupement]["key2"][key2]["impaye"] = dictPrestations[key1]["regroupements"][regroupement]["key2"][key2]["regle"] - dictPrestations[key1]["regroupements"][regroupement]["key2"][key2]["facture"]

        listeRegroupements.sort()

        return dictPrestations, listeRegroupements, dictLabelsRegroupements
Ejemplo n.º 7
0
    def __init__(self, parent, IDutilisateur=None):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent
        self.IDutilisateur = IDutilisateur
        self.mdp = None
        self.mdpcrypt = None

        if IDutilisateur == None:
            DB = GestionDB.DB()
            IDutilisateur = DB.GetProchainID("utilisateurs")
            DB.Close()

        # Identité
        self.staticbox_identite_staticbox = wx.StaticBox(
            self, -1, _(u"Identité"))
        self.label_sexe = wx.StaticText(self, -1, _(u"Sexe :"))
        self.ctrl_sexe = wx.Choice(self,
                                   -1,
                                   choices=[_(u"Homme"),
                                            _(u"Femme")])
        self.label_nom = wx.StaticText(self, -1, _(u"Nom :"))
        self.ctrl_nom = wx.TextCtrl(self, -1, u"")
        self.label_prenom = wx.StaticText(self, -1, _(u"Prénom :"))
        self.ctrl_prenom = wx.TextCtrl(self, -1, u"")

        # Image
        self.staticbox_image_staticbox = wx.StaticBox(self, -1, _(u"Avatar"))
        self.ctrl_image = CTRL_Image(self)
        self.hyper_image = Hyperlien(
            self,
            label=_(u"Choisir un avatar"),
            infobulle=_(
                u"Cliquez ici pour modifier l'avatar de l'utilisateur"),
            URL="")

        # Accès
        self.staticbox_acces_staticbox = wx.StaticBox(self, -1, _(u"Accès"))
        self.ctrl_actif = wx.CheckBox(self, -1, u"Utilisateur actif")
        self.ctrl_actif.SetValue(True)
        self.bouton_modif_mdp = CTRL_Bouton_image.CTRL(
            self, texte="", cheminImage="Images/32x32/Cle.png")

        # Compte internet
        self.staticbox_internet_staticbox = wx.StaticBox(
            self, -1, _(u"Compte internet"))
        self.ctrl_compte_internet = CTRL_Compte_internet.CTRL(
            self, IDutilisateur=IDutilisateur, couleurFond=wx.WHITE)
        self.bouton_modifier = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Modifier.png"),
                      wx.BITMAP_TYPE_ANY))
        #self.bouton_envoi_mail = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Emails_exp.png"), wx.BITMAP_TYPE_ANY))
        self.bouton_envoi_pressepapiers = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Clipboard.png"),
                      wx.BITMAP_TYPE_ANY))
        #self.bouton_historique = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Historique.png"), wx.BITMAP_TYPE_ANY))

        # Droits
        self.staticbox_droits_staticbox = wx.StaticBox(self, -1, _(u"Droits"))
        self.radio_droits_admin = wx.RadioButton(self,
                                                 -1,
                                                 _(u"Administrateur"),
                                                 style=wx.RB_GROUP)
        self.radio_droits_modele = wx.RadioButton(
            self, -1, _(u"Le modèle de droits suivant :"))
        self.ctrl_modele_droits = CTRL_Modeles_droits(self)
        self.radio_droits_perso = wx.RadioButton(
            self, -1, _(u"Les droits personnalisés suivants :"))
        self.ctrl_droits = CTRL_Droits.CTRL(self,
                                            IDutilisateur=self.IDutilisateur)
        self.ctrl_droits.MAJ()

        # Commandes
        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_ok = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Ok"), cheminImage="Images/32x32/Valider.png")
        self.bouton_annuler = CTRL_Bouton_image.CTRL(
            self,
            id=wx.ID_CANCEL,
            texte=_(u"Annuler"),
            cheminImage="Images/32x32/Annuler.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonModifMdp, self.bouton_modif_mdp)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok)
        self.Bind(wx.EVT_RADIOBUTTON, self.OnRadioDroits,
                  self.radio_droits_admin)
        self.Bind(wx.EVT_RADIOBUTTON, self.OnRadioDroits,
                  self.radio_droits_modele)
        self.Bind(wx.EVT_RADIOBUTTON, self.OnRadioDroits,
                  self.radio_droits_perso)
        self.Bind(wx.EVT_BUTTON, self.ctrl_compte_internet.Modifier,
                  self.bouton_modifier)
        #self.Bind(wx.EVT_BUTTON, self.Envoyer_email, self.bouton_envoi_mail)
        self.Bind(wx.EVT_BUTTON,
                  self.ctrl_compte_internet.Envoyer_pressepapiers,
                  self.bouton_envoi_pressepapiers)
        #self.Bind(wx.EVT_BUTTON, self.Consulter_historique, self.bouton_historique)

        if self.IDutilisateur == None:
            self.SetTitle(_(u"Saisie d'un utilisateur"))

            # Création des codes internet
            internet_identifiant = UTILS_Internet.CreationIdentifiant(
                IDutilisateur=IDutilisateur)
            internet_mdp = UTILS_Internet.CreationMDP(nbreCaract=8)
            self.ctrl_compte_internet.SetDonnees({
                "internet_actif": 0,
                "internet_identifiant": internet_identifiant,
                "internet_mdp": internet_mdp
            })

        else:
            self.SetTitle(_(u"Modification d'un utilisateur"))
            self.Importation()

        self.OnRadioDroits(None)
        self.MAJboutonMdp()
Ejemplo n.º 8
0
    def Importation(self):
        DB = GestionDB.DB()

        if len(self.listeGroupes) == 0: conditionGroupes = "()"
        elif len(self.listeGroupes) == 1:
            conditionGroupes = "(%d)" % self.listeGroupes[0]
        else:
            conditionGroupes = str(tuple(self.listeGroupes))

        if self.affichage_mode == "reservation":
            if len(self.affichage_etat) == 0:
                conditionEtat = "()"
            elif len(self.affichage_etat) == 1:
                conditionEtat = "('%s')" % self.affichage_etat[0]
            else:
                conditionEtat = str(tuple(self.affichage_etat))
        elif self.affichage_mode == "attente":
            conditionEtat = "('attente')"
        elif self.affichage_mode == "refus":
            conditionEtat = "('refus')"
        else:
            conditionEtat = "()"

        # Unités
        req = """SELECT IDunite, nom, abrege
        FROM unites
        WHERE IDactivite=%d
        ORDER BY ordre;""" % self.IDactivite
        DB.ExecuterReq(req)
        listeUnites = DB.ResultatReq()

        # Groupes
        req = """SELECT IDgroupe, nom, abrege
        FROM groupes
        WHERE IDactivite=%d
        ORDER BY ordre;""" % self.IDactivite
        DB.ExecuterReq(req)
        listeGroupes = DB.ResultatReq()

        # Evènements
        self.dictEvenements = {}
        req = """SELECT IDevenement, nom, date
        FROM evenements
        WHERE IDactivite=%d
        AND date>='%s' AND date<='%s'
        ;""" % (self.IDactivite, self.date_debut, self.date_fin)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        for IDevenement, nom, date in listeDonnees:
            date = UTILS_Dates.DateEngEnDateDD(date)
            self.dictEvenements[IDevenement] = {"nom": nom, "date": date}

        # Etiquettes
        self.dictEtiquettes = {}
        req = """SELECT IDetiquette, label, IDactivite, parent, ordre, couleur
        FROM etiquettes;"""
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        for IDetiquette, label, IDactivite, parent, ordre, couleur in listeDonnees:
            couleurTemp = couleur[1:-1].split(",")
            couleur = wx.Colour(int(couleurTemp[0]), int(couleurTemp[1]),
                                int(couleurTemp[2]))
            self.dictEtiquettes[IDetiquette] = {
                "label": label,
                "IDactivite": IDactivite,
                "parent": parent,
                "ordre": ordre,
                "couleur": couleur
            }

        # Consommations
        req = """SELECT IDconso, consommations.date, consommations.IDindividu, consommations.IDunite, consommations.IDgroupe, consommations.IDactivite, consommations.etiquettes,
        heure_debut, heure_fin, consommations.etat, quantite, IDevenement, consommations.IDprestation, prestations.temps_facture,
        comptes_payeurs.IDfamille,  
        activites.nom,
        groupes.nom,
        categories_tarifs.nom
        FROM consommations
        LEFT JOIN prestations ON prestations.IDprestation = consommations.IDprestation
        LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = consommations.IDcompte_payeur
        LEFT JOIN activites ON activites.IDactivite = consommations.IDactivite
        LEFT JOIN groupes ON groupes.IDgroupe = consommations.IDgroupe
        LEFT JOIN categories_tarifs ON categories_tarifs.IDcategorie_tarif = consommations.IDcategorie_tarif
        WHERE consommations.IDactivite=%d AND consommations.IDgroupe IN %s 
        AND consommations.date>='%s' AND consommations.date<='%s'
        AND consommations.etat IN %s
        ;""" % (self.IDactivite, conditionGroupes, self.date_debut,
                self.date_fin, conditionEtat)
        DB.ExecuterReq(req)
        listeConsommations = DB.ResultatReq()
        DB.Close()

        # Calcul des données
        dictResultats = {}
        listePrestationsTraitees = []
        for IDconso, date, IDindividu, IDunite, IDgroupe, IDactivite, etiquettes, heure_debut, heure_fin, etat, quantite, IDevenement, IDprestation, tempsFacture, IDfamille, nomActivite, nomGroupe, nomCategorie in listeConsommations:
            date = DateEngEnDateDD(date)
            mois = date.month
            annee = date.year

            # Recherche du regroupement
            try:
                if self.affichage_regroupement == "jour": regroupement = date
                if self.affichage_regroupement == "mois":
                    regroupement = (annee, mois)
                if self.affichage_regroupement == "annee": regroupement = annee
                if self.affichage_regroupement == "activite":
                    regroupement = nomActivite
                if self.affichage_regroupement == "groupe":
                    regroupement = nomGroupe
                if self.affichage_regroupement == "evenement":
                    regroupement = IDevenement
                if self.affichage_regroupement == "evenement_date":
                    regroupement = IDevenement
                if self.affichage_regroupement == "categorie_tarif":
                    regroupement = nomCategorie
                if self.affichage_regroupement == "ville_residence":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "INDIVIDU_VILLE"]
                if self.affichage_regroupement == "secteur":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "INDIVIDU_SECTEUR"]
                if self.affichage_regroupement == "genre":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "INDIVIDU_SEXE"]
                if self.affichage_regroupement == "age":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "INDIVIDU_AGE_INT"]
                if self.affichage_regroupement == "ville_naissance":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "INDIVIDU_VILLE_NAISS"]
                if self.affichage_regroupement == "nom_ecole":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "SCOLARITE_NOM_ECOLE"]
                if self.affichage_regroupement == "nom_classe":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "SCOLARITE_NOM_CLASSE"]
                if self.affichage_regroupement == "nom_niveau_scolaire":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "SCOLARITE_NOM_NIVEAU"]
                if self.affichage_regroupement == "famille":
                    regroupement = self.dictInfosFamilles[IDfamille][
                        "FAMILLE_NOM"]
                if self.affichage_regroupement == "individu":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "INDIVIDU_NOM_COMPLET"]
                if self.affichage_regroupement == "regime":
                    regroupement = self.dictInfosFamilles[IDfamille][
                        "FAMILLE_NOM_REGIME"]
                if self.affichage_regroupement == "caisse":
                    regroupement = self.dictInfosFamilles[IDfamille][
                        "FAMILLE_NOM_CAISSE"]
                if self.affichage_regroupement == "categorie_travail":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "INDIVIDU_CATEGORIE_TRAVAIL"]
                if self.affichage_regroupement == "categorie_travail_pere":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "PERE_CATEGORIE_TRAVAIL"]
                if self.affichage_regroupement == "categorie_travail_mere":
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "MERE_CATEGORIE_TRAVAIL"]

                # QF
                if self.affichage_regroupement == "qf":
                    regroupement = None
                    qf = self.dictInfosFamilles[IDfamille][
                        "FAMILLE_QF_ACTUEL_INT"]
                    for x in range(0, 10000, 100):
                        min, max = x, x + 99
                        if qf >= min and qf <= max:
                            regroupement = (min, max)

                # Etiquettes
                if self.affichage_regroupement == "etiquette":
                    etiquettes = UTILS_Texte.ConvertStrToListe(etiquettes)
                    if len(etiquettes) > 0:
                        temp = []
                        for IDetiquette in etiquettes:
                            if IDetiquette in self.dictEtiquettes:
                                temp.append(
                                    self.dictEtiquettes[IDetiquette]["label"])
                        regroupement = temp
                    else:
                        regroupement = _(u"- Aucune étiquette -")

                # Questionnaires
                if self.affichage_regroupement.startswith(
                        "question_"
                ) and "famille" in self.affichage_regroupement:
                    regroupement = self.dictInfosFamilles[IDfamille][
                        "QUESTION_%s" % self.affichage_regroupement[17:]]
                if self.affichage_regroupement.startswith(
                        "question_"
                ) and "individu" in self.affichage_regroupement:
                    regroupement = self.dictInfosIndividus[IDindividu][
                        "QUESTION_%s" % self.affichage_regroupement[18:]]

            except:
                regroupement = None

            if regroupement in ("", None):
                regroupement = _(u"- Non renseigné -")

            # Quantité
            if quantite == None:
                quantite = 1

            # Formatage des heures
            if heure_debut != None and heure_debut != "":
                h, m = heure_debut.split(":")
                heure_debut = datetime.time(int(h), int(m))
            if heure_fin != None and heure_fin != "":
                h, m = heure_fin.split(":")
                heure_fin = datetime.time(int(h), int(m))

            # Calcul du temps
            temps_presence = datetime.timedelta(hours=0, minutes=0)
            if heure_debut != None and heure_debut != "" and heure_fin != None and heure_fin != "":
                valeur = datetime.timedelta(
                    hours=heure_fin.hour,
                    minutes=heure_fin.minute) - datetime.timedelta(
                        hours=heure_debut.hour, minutes=heure_debut.minute)
                temps_presence += valeur

            # Si c'est en fonction du temps facturé
            temps_facture = datetime.timedelta(hours=0, minutes=0)
            if tempsFacture != None and tempsFacture != "":
                if IDprestation not in listePrestationsTraitees:
                    hr, mn = tempsFacture.split(":")
                    temps_facture += datetime.timedelta(hours=int(hr),
                                                        minutes=int(mn))
                    listePrestationsTraitees.append(IDprestation)

            if self.detail_groupes == True:
                groupe = IDgroupe
            else:
                groupe = None

            if self.affichage_donnees == "quantite": valeur = quantite
            if self.affichage_donnees == "temps_presence":
                valeur = temps_presence
            if self.affichage_donnees == "temps_facture":
                valeur = temps_facture

            if self.affichage_donnees == "quantite":
                defaut = 0
            else:
                defaut = datetime.timedelta(hours=0, minutes=0)

            # En cas de regroupements multiples :
            if type(regroupement) == list:
                listeRegroupements = regroupement
            else:
                listeRegroupements = [
                    regroupement,
                ]

            for regroupement in listeRegroupements:
                if (groupe in dictResultats) == False:
                    dictResultats[groupe] = {}
                if (IDunite in dictResultats[groupe]) == False:
                    dictResultats[groupe][IDunite] = {}
                if (regroupement in dictResultats[groupe][IDunite]) == False:
                    dictResultats[groupe][IDunite][regroupement] = defaut
                dictResultats[groupe][IDunite][regroupement] += valeur

        return dictResultats, listeUnites, listeGroupes
Ejemplo n.º 9
0
    def GetDonneesImpression(self, listeInscriptions=[]):
        """ Impression des inscriptions """
        dlgAttente = wx.BusyInfo(_(u"Recherche des données..."), None)

        # Récupère les données de la facture
        if len(listeInscriptions) == 0:
            conditions = "()"
        elif len(listeInscriptions) == 1:
            conditions = "(%d)" % listeInscriptions[0]
        else:
            conditions = str(tuple(listeInscriptions))

        # Récupération des informations sur l'inscription
        dictChamps = {
            "inscriptions.IDinscription": "IDINSCRIPTION",
            "inscriptions.date_inscription": "DATE_INSCRIPTION",
            "inscriptions.date_desinscription": "EST_PARTI",
            "activites.IDactivite": "IDACTIVITE",
            "activites.nom": "ACTIVITE_NOM_LONG",
            "activites.abrege": "ACTIVITE_NOM_COURT",
            "groupes.IDgroupe": "IDGROUPE",
            "groupes.nom": "GROUPE_NOM_LONG",
            "groupes.abrege": "GROUPE_NOM_COURT",
            "categories_tarifs.IDcategorie_tarif": "IDCATEGORIETARIF",
            "categories_tarifs.nom": "NOM_CATEGORIE_TARIF",
            "individus.IDindividu": "IDINDIVIDU",
            "individus.IDcivilite": "IDCIVILITE",
            "individus.nom": "INDIVIDU_NOM",
            "individus.prenom": "INDIVIDU_PRENOM",
            "individus.date_naiss": "INDIVIDU_DATE_NAISS",
            "individus.cp_naiss": "INDIVIDU_CP_NAISS",
            "individus.ville_naiss": "INDIVIDU_VILLE_NAISS",
            "individus.adresse_auto": "INDIVIDU_ADRESSE_AUTO",
            "individus.rue_resid": "INDIVIDU_RUE",
            "individus.cp_resid": "INDIVIDU_CP",
            "individus.ville_resid": "INDIVIDU_VILLE",
            "individus.profession": "INDIVIDU_PROFESSION",
            "individus.employeur": "INDIVIDU_EMPLOYEUR",
            "individus.tel_domicile": "INDIVIDU_TEL_DOMICILE",
            "individus.tel_mobile": "INDIVIDU_TEL_MOBILE",
            "individus.tel_fax": "INDIVIDU_FAX",
            "individus.mail": "INDIVIDU_EMAIL",
            "individus.travail_tel": "INDIVIDU_TEL_PRO",
            "individus.travail_fax": "INDIVIDU_FAX_PRO",
            "individus.travail_mail": "INDIVIDU_EMAIL_PRO",
            "familles.IDfamille": "IDFAMILLE",
            "caisses.nom": "FAMILLE_CAISSE",
            "regimes.nom": "FAMILLE_REGIME",
            "familles.num_allocataire": "FAMILLE_NUMALLOC",
        }

        listeChamps = list(dictChamps.keys())

        DB = GestionDB.DB()
        req = """SELECT %s
        FROM inscriptions
        LEFT JOIN activites ON activites.IDactivite = inscriptions.IDactivite
        LEFT JOIN groupes ON groupes.IDgroupe = inscriptions.IDgroupe
        LEFT JOIN categories_tarifs ON categories_tarifs.IDcategorie_tarif = inscriptions.IDcategorie_tarif
        LEFT JOIN individus ON individus.IDindividu = inscriptions.IDindividu
        LEFT JOIN familles ON familles.IDfamille = inscriptions.IDfamille
        LEFT JOIN caisses ON caisses.IDcaisse = familles.IDcaisse
        LEFT JOIN regimes ON regimes.IDregime = caisses.IDregime
        WHERE IDinscription IN %s
        """ % (", ".join(listeChamps), conditions)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        DB.Close()
        if len(listeDonnees) == 0:
            del dlgAttente
            return False

        dictDonnees = {}
        dictChampsFusion = {}
        for item in listeDonnees:

            dictDonnee = {}

            index = 0
            for nomChamp in listeChamps:
                code = dictChamps[nomChamp]
                valeur = item[index]
                dictDonnee["{%s}" % code] = valeur
                index += 1

            IDinscription = dictDonnee["{IDINSCRIPTION}"]
            IDfamille = dictDonnee["{IDFAMILLE}"]
            IDindividu = dictDonnee["{IDINDIVIDU}"]

            # Famille
            if IDfamille != None:
                nomTitulaires = self.dictTitulaires[IDfamille][
                    "titulairesAvecCivilite"]
                famille_rue = self.dictTitulaires[IDfamille]["adresse"]["rue"]
                famille_cp = self.dictTitulaires[IDfamille]["adresse"]["cp"]
                famille_ville = self.dictTitulaires[IDfamille]["adresse"][
                    "ville"]
            else:
                nomTitulaires = "Famille inconnue"
                famille_rue = ""
                famille_cp = ""
                famille_ville = ""

            # Mémorisation des données
            dictDonnee.update({
                "select":
                True,
                "{IDFAMILLE}":
                str(IDfamille),
                "{FAMILLE_NOM}":
                nomTitulaires,
                "{FAMILLE_RUE}":
                famille_rue,
                "{FAMILLE_CP}":
                famille_cp,
                "{FAMILLE_VILLE}":
                famille_ville,
                "{ORGANISATEUR_NOM}":
                self.dictOrganisme["nom"],
                "{ORGANISATEUR_RUE}":
                self.dictOrganisme["rue"],
                "{ORGANISATEUR_CP}":
                self.dictOrganisme["cp"],
                "{ORGANISATEUR_VILLE}":
                self.dictOrganisme["ville"],
                "{ORGANISATEUR_TEL}":
                self.dictOrganisme["tel"],
                "{ORGANISATEUR_FAX}":
                self.dictOrganisme["fax"],
                "{ORGANISATEUR_MAIL}":
                self.dictOrganisme["mail"],
                "{ORGANISATEUR_SITE}":
                self.dictOrganisme["site"],
                "{ORGANISATEUR_AGREMENT}":
                self.dictOrganisme["num_agrement"],
                "{ORGANISATEUR_SIRET}":
                self.dictOrganisme["num_siret"],
                "{ORGANISATEUR_APE}":
                self.dictOrganisme["code_ape"],
                "{DATE_EDITION_COURT}":
                UTILS_Dates.DateDDEnFr(datetime.date.today()),
                "{DATE_EDITION_LONG}":
                UTILS_Dates.DateComplete(datetime.date.today()),
            })

            # Formatage spécial
            dictDonnee["{DATE_INSCRIPTION}"] = UTILS_Dates.DateEngFr(
                dictDonnee["{DATE_INSCRIPTION}"])
            dictDonnee["{INDIVIDU_DATE_NAISS}"] = UTILS_Dates.DateEngFr(
                dictDonnee["{INDIVIDU_DATE_NAISS}"])

            # Autres données
            if IDfamille != None:
                dictDonnee.update(
                    self.infosIndividus.GetDictValeurs(mode="famille",
                                                       ID=IDfamille,
                                                       formatChamp=True))

            # Ajoute les réponses des questionnaires
            for dictReponse in self.Questionnaires_familles.GetDonnees(
                    IDfamille):
                dictDonnee[dictReponse["champ"]] = dictReponse["reponse"]
                if dictReponse["controle"] == "codebarres":
                    dictDonnee[
                        "{CODEBARRES_QUESTION_%d}" %
                        dictReponse["IDquestion"]] = dictReponse["reponse"]

            for dictReponse in self.Questionnaires_individus.GetDonnees(
                    IDindividu):
                dictDonnee[dictReponse["champ"]] = dictReponse["reponse"]
                if dictReponse["controle"] == "codebarres":
                    dictDonnee[
                        "{CODEBARRES_QUESTION_%d}" %
                        dictReponse["IDquestion"]] = dictReponse["reponse"]

            for dictReponse in self.Questionnaires_inscriptions.GetDonnees(
                    IDinscription):
                dictDonnee[dictReponse["champ"]] = dictReponse["reponse"]
                if dictReponse["controle"] == "codebarres":
                    dictDonnee[
                        "{CODEBARRES_QUESTION_%d}" %
                        dictReponse["IDquestion"]] = dictReponse["reponse"]

            dictDonnees[IDinscription] = dictDonnee

            # Champs de fusion pour Email
            dictChampsFusion[IDinscription] = {}
            for key, valeur in dictDonnee.items():
                if key[0] == "{":
                    dictChampsFusion[IDinscription][key] = valeur

        del dlgAttente
        return dictDonnees, dictChampsFusion
Ejemplo n.º 10
0
    def Supprimer(self, event):
        if len(self.Selection()) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez sélectionné aucune inscription à supprimer dans la liste"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        IDinscription = self.Selection()[0].IDinscription
        IDfamille = self.Selection()[0].IDfamille
        IDindividu = self.Selection()[0].IDindividu
        nomActivite = self.Selection()[0].nom_activite
        IDactivite = self.Selection()[0].IDactivite

        # Verrouillage utilisateurs
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel(
                "individus_inscriptions", "supprimer",
                IDactivite=IDactivite) == False:
            return

        DB = GestionDB.DB()

        # Recherche si des consommations existent
        req = """SELECT IDconso, date, forfait
        FROM consommations
        WHERE IDinscription=%d AND (forfait IS NULL OR forfait=1);""" % IDinscription
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        listeConso = []
        for IDconso, date, forfait in listeDonnees:
            date = UTILS_Dates.DateEngEnDateDD(date)
            listeConso.append({
                "IDconso": IDconso,
                "date": date,
                "forfait": forfait
            })
        if len(listeConso) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Il existe déjà %d consommations enregistrées sur cette inscription. \n\nIl est donc impossible de la supprimer !"
                  ) % len(listeConso), _(u"Annulation impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return

        # Recherche si des prestations existent
        req = """SELECT IDprestation, prestations.date, prestations.forfait
        FROM prestations
        WHERE IDactivite=%d AND IDindividu=%d
        ;""" % (IDactivite, IDindividu)
        DB.ExecuterReq(req)
        listePrestations = DB.ResultatReq()
        listePrestationsForfait = []
        listePrestationsNormales = []
        listeDatesPrestations = []
        for IDprestation, date, forfait in listePrestations:
            listeDatesPrestations.append(UTILS_Dates.DateEngEnDateDD(date))
            if forfait == 2:
                if IDprestation not in listePrestationsForfait:
                    listePrestationsForfait.append(IDprestation)
            else:
                if IDprestation not in listePrestationsNormales:
                    listePrestationsNormales.append(IDprestation)
        if len(listePrestations) - len(listePrestationsForfait) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Il existe déjà %d prestations enregistrées sur cette inscription. \n\nIl est donc impossible de la supprimer !"
                  ) % len(listePrestations), _(u"Annulation impossible"),
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            DB.Close()
            return

        DB.Close()

        # Périodes de gestion
        self.gestion = UTILS_Gestion.Gestion(self)
        if self.gestion.Verification("consommations", listeConso) == False:
            return False
        if self.gestion.Verification("prestations",
                                     listeDatesPrestations) == False:
            return False

        # Demande de confirmation
        if len(listePrestationsForfait) == 0: texteForfait = u""
        elif len(listePrestationsForfait) == 1:
            texteForfait = _(
                u"\n\n(La prestation associée sera également supprimée)")
        else:
            texteForfait = _(
                u"\n\n(Les %d prestations associées seront également supprimées)"
            ) % len(listePrestationsForfait)
        dlg = wx.MessageDialog(
            self,
            _(u"Souhaitez-vous vraiment supprimer cette inscription ?%s") %
            texteForfait, _(u"Suppression"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        if dlg.ShowModal() == wx.ID_YES:
            IDinscription = self.Selection()[0].IDinscription
            DB = GestionDB.DB()
            DB.ReqDEL("inscriptions", "IDinscription", IDinscription)
            # Suppression des forfaits associés déjà saisis
            for IDprestation in listePrestationsForfait:
                DB.ReqDEL("prestations", "IDprestation", IDprestation)
                DB.ReqDEL("consommations", "IDprestation", IDprestation)
                DB.ReqDEL("deductions", "IDprestation", IDprestation)
                DB.ReqDEL("ventilation", "IDprestation", IDprestation)
            DB.Close()

            # Mémorise l'action dans l'historique
            UTILS_Historique.InsertActions([
                {
                    "IDindividu":
                    self.IDindividu,
                    "IDfamille":
                    IDfamille,
                    "IDcategorie":
                    19,
                    "action":
                    _(u"Suppression de l'inscription à l'activité '%s'") %
                    nomActivite
                },
            ])

            # Actualise l'affichage
            self.MAJ()
        dlg.Destroy()
Ejemplo n.º 11
0
    def InitObjectListView(self):
        # Couleur en alternance des lignes
        self.oddRowsBackColor = UTILS_Interface.GetValeur(
            "couleur_tres_claire", wx.Colour(240, 251, 237))
        self.evenRowsBackColor = wx.Colour(255, 255, 255)
        self.useExpansionColumn = True

        # Règle la taille des images
        self.afficheImages = UTILS_Config.GetParametre(
            "depots_afficher_images", defaut=True)
        if self.afficheImages == True:
            taille = self.tailleImagesMaxi
        else:
            taille = self.tailleImagesMini

        # Image list
        dictImages = {"standard": {}, "modes": {}, "emetteurs": {}}
        imageList = wx.ImageList(taille[0], taille[1])

        # Images standard
        dictImages["standard"]["vert"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(
                    Chemins.GetStaticPath("Images/16x16/Ventilation_vert.png"),
                    wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["orange"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(
                    Chemins.GetStaticPath(
                        "Images/16x16/Ventilation_orange.png"),
                    wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["rouge"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(
                    Chemins.GetStaticPath(
                        "Images/16x16/Ventilation_rouge.png"),
                    wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["ok"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ok.png"),
                          wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["erreur"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Interdit.png"),
                          wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["attente"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Attente.png"),
                          wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["avis_depot_oui"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Emails_exp.png"),
                          wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["avis_depot_non"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(
                    Chemins.GetStaticPath("Images/16x16/Emails_exp_gris.png"),
                    wx.BITMAP_TYPE_PNG), taille))

        # Images Modes
        if self.afficheImages == True:

            DB = GestionDB.DB()
            req = """SELECT modes_reglements.IDmode, modes_reglements.image FROM modes_reglements"""
            DB.ExecuterReq(req)
            listeModes = DB.ResultatReq()
            for IDmode, buffer in listeModes:
                bmp = self.GetImagefromBuffer(buffer, taille)
                dictImages["modes"][IDmode] = imageList.Add(bmp)

            # Images Emetteurs
            req = """SELECT emetteurs.IDemetteur, emetteurs.image FROM emetteurs"""
            DB.ExecuterReq(req)
            listeEmetteurs = DB.ResultatReq()
            for IDemetteur, buffer in listeEmetteurs:
                bmp = self.GetImagefromBuffer(buffer, taille)
                dictImages["emetteurs"][IDemetteur] = imageList.Add(bmp)

            DB.Close()

        self.SetImageLists(imageList, imageList)

        # Flèches tri
        bmp_haut = self.ConvertTailleImage(
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Fleche_haut_2.png"),
                      wx.BITMAP_TYPE_PNG), taille)
        bmp_bas = self.ConvertTailleImage(
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Fleche_bas_2.png"),
                      wx.BITMAP_TYPE_PNG), taille)
        self.RegisterSortIndicators(bmp_haut, bmp_bas)

        def GetImageMode(track):
            if dictImages["modes"].has_key(track.IDmode):
                return dictImages["modes"][track.IDmode]
            else:
                return None

        def GetImageEmetteur(track):
            if dictImages["emetteurs"].has_key(track.IDemetteur):
                return dictImages["emetteurs"][track.IDemetteur]
            else:
                return None

        def GetImageVentilation(track):
            if track.montant_ventilation == None:
                return dictImages["standard"]["rouge"]
            resteAVentiler = decimal.Decimal(str(
                track.montant)) - decimal.Decimal(
                    str(track.montant_ventilation))
            if resteAVentiler == decimal.Decimal(str("0.0")):
                return dictImages["standard"]["vert"]
            if resteAVentiler > decimal.Decimal(str("0.0")):
                return dictImages["standard"]["orange"]
            if resteAVentiler < decimal.Decimal(str("0.0")):
                return dictImages["standard"]["rouge"]

        def GetImageDepot(track):
            if track.IDdepot == None:
                if track.encaissement_attente == 1:
                    return dictImages["standard"]["attente"]
                else:
                    return dictImages["standard"]["erreur"]
            else:
                return dictImages["standard"]["ok"]

        def GetImageDiffere(track):
            if track.date_differe == None:
                return None
            if track.date_differe <= datetime.date.today():
                return dictImages["standard"]["ok"]
            else:
                return dictImages["standard"]["erreur"]

        def GetImageAttente(track):
            if track.encaissement_attente == True:
                return dictImages["standard"]["attente"]
            return None

        def GetImageAvisDepot(track):
            if track.avis_depot != None:
                return dictImages["standard"]["avis_depot_oui"]
            if track.email_depots != None:
                return dictImages["standard"]["avis_depot_non"]
            return None

        def FormateDateLong(dateDD):
            return DateComplete(dateDD)

        def FormateDateCourt(dateDD):
            if dateDD == None:
                return ""
            else:
                return DateEngFr(str(dateDD))

        def FormateMontant(montant):
            if montant == None: return u""
            return u"%.2f %s" % (montant, SYMBOLE)

        def FormateAttente(attente):
            if attente == True:
                return _(u"Attente !")
            return ""

        def rowFormatter(listItem, track):
            # Si Observations
            if track.observations != "":
                listItem.SetTextColour((0, 102, 205))
            # Si en attente
            if track.encaissement_attente == True:
                listItem.SetTextColour((255, 0, 0))
            # Si date différé est supérieure à la date d'aujourd'hui
            if track.date_differe != None:
                if track.date_differe > datetime.date.today():
                    listItem.SetTextColour((255, 0, 0))

        liste_Colonnes = [
            ColumnDefn(_(u"ID"), "left", 0, "IDreglement",
                       typeDonnee="entier"),
            ColumnDefn(_(u"Date"),
                       'left',
                       80,
                       "date",
                       typeDonnee="date",
                       stringConverter=FormateDateCourt),
            ColumnDefn(_(u"Mode"),
                       'left',
                       120,
                       "nom_mode",
                       typeDonnee="texte",
                       imageGetter=GetImageMode),
            ColumnDefn(_(u"Emetteur"),
                       'left',
                       145,
                       "nom_emetteur",
                       typeDonnee="texte",
                       imageGetter=GetImageEmetteur),
            ColumnDefn(_(u"Numéro"),
                       'left',
                       60,
                       "numero_piece",
                       typeDonnee="texte"),
            ColumnDefn(_(u"Payeur"),
                       'left',
                       160,
                       "nom_payeur",
                       typeDonnee="texte"),
            ColumnDefn(_(u"Montant"),
                       'right',
                       80,
                       "montant",
                       typeDonnee="montant",
                       stringConverter=FormateMontant),
            ColumnDefn(_(u"Avis"),
                       'left',
                       110,
                       "avis_depot",
                       typeDonnee="date",
                       stringConverter=FormateDateCourt,
                       imageGetter=GetImageAvisDepot),
            ColumnDefn(_(u"Compte"),
                       'left',
                       100,
                       "nom_compte",
                       typeDonnee="texte"),
            ColumnDefn(_(u"Différé"),
                       'left',
                       85,
                       "date_differe",
                       typeDonnee="date",
                       stringConverter=FormateDateCourt
                       ),  #, imageGetter=GetImageDiffere),
            ColumnDefn(_(u"Attente"),
                       'left',
                       65,
                       "encaissement_attente",
                       typeDonnee="texte",
                       stringConverter=FormateAttente
                       ),  #, imageGetter=GetImageAttente),
            ColumnDefn(_(u"Quittancier"),
                       'left',
                       75,
                       "numero_quittancier",
                       typeDonnee="texte"),
            ColumnDefn(_(u"Observations"),
                       'left',
                       200,
                       "observations",
                       typeDonnee="texte"),
        ]

        self.rowFormatter = rowFormatter
        self.SetColumns(liste_Colonnes)
        if self.inclus == True:
            self.SetEmptyListMsg(_(u"Aucun règlement dans ce dépôt"))
        else:
            self.SetEmptyListMsg(_(u"Aucun règlement disponible"))
        self.SetEmptyListMsgFont(wx.FFont(11, wx.DEFAULT, False, "Tekton"))
        ##        self.SetSortColumn(self.columns[self.numColonneTri])
        self.SortBy(self.numColonneTri, ascending=self.ordreAscendant)
        self.SetObjects(self.donnees)
Ejemplo n.º 12
0
    def __init__(self, parent, labelControleNom=_(u"Nom")):
        wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL)
        self.labelControleNom = labelControleNom

        # Nom
        self.box_nom_staticbox = wx.StaticBox(self, -1, labelControleNom)
        self.label_nom = wx.StaticText(self, -1, u"%s :" % labelControleNom)
        self.ctrl_nom = wx.TextCtrl(self, -1, u"")

        # Protection
        self.box_mdp_staticbox = wx.StaticBox(self, -1, _(u"Protection"))
        self.label_cryptage = wx.StaticText(self, -1, _(u"Cryptage :"))
        self.check_cryptage = wx.CheckBox(self, -1, u"")
        self.label_mdp = wx.StaticText(self, -1, _(u"Mot de passe :"))
        self.ctrl_mdp = wx.TextCtrl(self, -1, u"", style=wx.TE_PASSWORD)
        self.label_confirmation = wx.StaticText(self, -1, _(u"Confirmation :"))
        self.ctrl_confirmation = wx.TextCtrl(self,
                                             -1,
                                             u"",
                                             style=wx.TE_PASSWORD)

        # Destination
        self.box_destination_staticbox = wx.StaticBox(self, -1,
                                                      _(u"Destination"))
        self.check_repertoire = wx.CheckBox(self, -1, _(u"Répertoire :"))
        self.ctrl_repertoire = wx.TextCtrl(self, -1, u"")
        self.bouton_repertoire = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Repertoire.png"),
                      wx.BITMAP_TYPE_ANY))
        self.check_email = wx.CheckBox(self, -1, _(u"Envoi par Email :"))
        self.ctrl_email = wx.TextCtrl(self, -1, u"")

        # Données
        self.box_donnees_staticbox = wx.StaticBox(
            self, -1, _(u"Données à sauvegarder"))
        self.ctrl_donnees = CTRL_Donnees(self)
        self.ctrl_donnees.SetMinSize((300, -1))
        self.check_locaux = wx.CheckBox(self, -1, _(u"Fichiers locaux"))
        self.check_reseau = wx.CheckBox(self, -1, _(u"Fichiers réseau"))

        self.__set_properties()
        self.__do_layout()

        # Binds
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckCryptage, self.check_cryptage)
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckRepertoire,
                  self.check_repertoire)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonRepertoire,
                  self.bouton_repertoire)
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckEmail, self.check_email)
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckLocaux, self.check_locaux)
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckReseau, self.check_reseau)

        # Init Contrôles
        self.OnCheckCryptage(None)
        self.OnCheckRepertoire(None)
        self.OnCheckEmail(None)

        self.check_locaux.SetValue(True)
        # Récupération des paramètres de connexion réseau
        self.dictConnexion = None
        DB = GestionDB.DB()
        if DB.echec != 1:
            if DB.isNetwork == True:
                self.check_reseau.SetValue(True)
                self.dictConnexion = DB.GetParamConnexionReseau()
        DB.Close()

        self.ctrl_donnees.MAJ()
Ejemplo n.º 13
0
    def GetTracks(self):
        """ Récupération des données """
        listeID = None
        db = GestionDB.DB()

        if self.IDindividu != None:
            # Pour un 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 = "()"
            req = """
            SELECT 
            IDpiece, pieces.IDtype_piece, pieces.IDindividu, pieces.IDfamille, date_debut, date_fin, 
            types_pieces.nom, public, duree_validite, valide_rattachement, 
            individus.nom, individus.prenom
            FROM pieces 
            LEFT JOIN types_pieces ON types_pieces.IDtype_piece = pieces.IDtype_piece
            LEFT JOIN individus ON pieces.IDindividu = individus.IDindividu
            WHERE pieces.IDindividu=%d OR (pieces.IDfamille IN %s AND pieces.IDindividu IS NULL);
            """ % (self.IDindividu, conditionIDfamille)
        else:
            # Pour une 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))
            req = """
            SELECT 
            IDpiece, pieces.IDtype_piece, pieces.IDindividu, pieces.IDfamille, date_debut, date_fin, 
            types_pieces.nom, public, duree_validite, valide_rattachement, 
            individus.nom, individus.prenom
            FROM pieces 
            LEFT JOIN types_pieces ON types_pieces.IDtype_piece = pieces.IDtype_piece
            LEFT JOIN individus ON pieces.IDindividu = individus.IDindividu
            WHERE pieces.IDfamille=%d OR (pieces.IDindividu IN %s AND pieces.IDfamille IS NULL);
            """ % (self.IDfamille, conditionIndividus)

        db.ExecuterReq(req)
        listeDonnees = db.ResultatReq()
        db.Close()

        listeListeView = []

        listeIDfamilles = []
        for item in listeDonnees:

            # Pour compter le nbre de familles
            IDfamille = item[3]
            if IDfamille not in listeIDfamilles and IDfamille != None:
                listeIDfamilles.append(IDfamille)

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

        self.nbreFamilles = len(listeIDfamilles)

        return listeListeView
Ejemplo n.º 14
0
    def Remplissage(self):
        # Récupération des données
        self.listePiecesObligatoires = []
        self.dictItems = {}

        # Création des conditions
        condition = ""
        # Si pour fiche FAMILLE :
        if self.IDfamille != None:
            condition = "WHERE inscriptions.IDfamille=%d " % self.IDfamille
        # Si pour fiche INDIVIDU
        if self.IDindividu != None:
            condition = "WHERE inscriptions.IDindividu=%d " % self.IDindividu

        DB = GestionDB.DB()

        # Récupération des pièces à fournir pour la famille ou l'individu
        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
        GROUP BY inscriptions.IDfamille, pieces_activites.IDtype_piece, individus.IDindividu;
        """ % condition
        DB.ExecuterReq(req)
        listePiecesObligatoires = DB.ResultatReq()

        # Récupération des pièces de la famille
        dateDuJour = datetime.date.today()

        if self.IDindividu != None:
            # Pour un 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 = "()"
            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'
            AND (IDindividu=%d OR (IDfamille IN %s AND IDindividu IS NULL))
            ORDER BY date_fin
            ;""" % (str(dateDuJour), str(dateDuJour), self.IDindividu,
                    conditionIDfamille)
        else:
            # Pour une 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))
            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'
            AND (IDfamille=%s OR (IDindividu IN %s AND IDfamille IS NULL))
            ORDER BY date_fin
            """ % (str(dateDuJour), str(dateDuJour), self.IDfamille,
                   conditionIndividus)


##        condition = ""
##        # Si pour fiche famille
##        if self.IDfamille != None :
##            condition = " AND IDfamille=%d " % self.IDfamille
##        # Si pour fiche INDIVIDU
##        if self.IDindividu != None :
##            condition = " AND IDindividu=%d " % self.IDindividu
##        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' %s
##        ORDER BY date_fin;
##        """ % (str(dateDuJour), str(dateDuJour), condition)

        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:

            # Pour les pièces familiales :
            if publicPiece == "famille": IDindividu = None
            # Pour les pièces qui sont indépendantes de la famille
            if rattachementPiece == 1:
                IDfamille = None

            # Mémorise pour la fenêtre de saisie d'une pièce
            self.listePiecesObligatoires.append(
                (IDfamille, IDtype_piece, IDindividu))

            if dictPiecesFournies.has_key(
                (IDfamille, IDtype_piece, IDindividu)):
                date_debut, date_fin = dictPiecesFournies[(IDfamille,
                                                           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)

        # 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()

        # Création de la racine
        self.root = self.AddRoot(_(u"Racine"))

        # Création des branches
        for IDfamille, valeurs in dictPieces.iteritems():

            # Niveau 1 : Titulaires des familles
            if nbreFamilles > 1:
                if IDfamille == None:
                    label = _(u"Pièces indépendantes")
                else:
                    if self.dictFamillesRattachees != None and len(
                            self.dictFamillesRattachees) > 0:
                        label = self.dictFamillesRattachees[IDfamille][
                            "nomsTitulaires"]
                    else:
                        label = _(u"IDfamille=%d") % IDfamille
                niveau1 = self.AppendItem(self.root, label)
                self.SetPyData(niveau1, {
                    "type": "famille",
                    "IDfamille": IDfamille
                })
                self.SetItemBold(niveau1, True)
            else:
                niveau1 = self.root

            # Niveau 2 : Nom des pièces
            for IDfamille, IDtype_piece, nomPiece, publicPiece, prenom, IDindividu, valide in valeurs:
                if publicPiece == "famille" or self.IDindividu != None:
                    label = nomPiece
                else:
                    label = _(u"%s de %s") % (nomPiece, prenom)
                niveau2 = self.AppendItem(niveau1, label)
                self.SetPyData(
                    niveau2, {
                        "type": "piece",
                        "IDtype_piece": IDtype_piece,
                        "IDindividu": IDindividu,
                        "IDfamille": IDfamille,
                        "valide": valide,
                        "nomPiece": nomPiece
                    })
                self.dictItems[(IDfamille, IDtype_piece, IDindividu)] = niveau2
                if valide == "ok":
                    self.SetItemImage(niveau2,
                                      self.img_ok,
                                      which=wx.TreeItemIcon_Normal)
                if valide == "attention":
                    self.SetItemImage(niveau2,
                                      self.img_attention,
                                      which=wx.TreeItemIcon_Normal)
                if valide == "pasok":
                    self.SetItemImage(niveau2,
                                      self.img_pasok,
                                      which=wx.TreeItemIcon_Normal)

        if nbreFamilles < 2:
            self.SetAGWWindowStyleFlag(wx.TR_NO_LINES | wx.TR_HIDE_ROOT
                                       | wx.TR_NO_BUTTONS
                                       | wx.TR_HAS_VARIABLE_ROW_HEIGHT
                                       | HTL.TR_NO_HEADER)

        self.ExpandAllChildren(self.root)
Ejemplo n.º 15
0
def GetListeUtilisateurs(nomFichier=""):
    """ Récupère la liste des utilisateurs et de leurs droits """
    DB = GestionDB.DB(nomFichier=nomFichier)

    # Droits
    req = """SELECT IDdroit, IDutilisateur, IDmodele, categorie, action, etat
    FROM droits;"""
    DB.ExecuterReq(req)
    listeDonnees = DB.ResultatReq()
    dictDroitsUtilisateurs = {}
    dictDroitsModeles = {}
    for IDdroit, IDutilisateur, IDmodele, categorie, action, etat in listeDonnees:
        key = (categorie, action)
        if IDutilisateur != None:
            if dictDroitsUtilisateurs.has_key(IDutilisateur) == False:
                dictDroitsUtilisateurs[IDutilisateur] = {}
            dictDroitsUtilisateurs[IDutilisateur][key] = etat
        if IDmodele != None:
            if dictDroitsModeles.has_key(IDmodele) == False:
                dictDroitsModeles[IDmodele] = {}
            dictDroitsModeles[IDmodele][key] = etat

    # Utilisateurs
    req = """SELECT IDutilisateur, sexe, nom, prenom, mdp, profil, actif
    FROM utilisateurs
    WHERE actif=1;"""
    DB.ExecuterReq(req)
    listeDonnees = DB.ResultatReq()
    listeUtilisateurs = []

    # chargement avatars
    try:
        req = """SELECT IDutilisateur, image
        FROM utilisateurs;"""
        DB.ExecuterReq(req)
        listeAvatars = DB.ResultatReq()
    except:
        pass
    dictAvatars = {}
    for IDutilisateur, image in listeAvatars:
        dictAvatars[IDutilisateur] = image

    for IDutilisateur, sexe, nom, prenom, mdp, profil, actif in listeDonnees:
        droits = None
        if profil.startswith("administrateur"):
            droits = None
        if profil.startswith("modele"):
            IDmodele = int(profil.split(":")[1])
            if dictDroitsModeles.has_key(IDmodele):
                droits = dictDroitsModeles[IDmodele]
        if profil.startswith("perso"):
            if dictDroitsUtilisateurs.has_key(IDutilisateur):
                droits = dictDroitsUtilisateurs[IDutilisateur]

        # Avatar
        if dictAvatars.has_key(IDutilisateur):
            image = dictAvatars[IDutilisateur]
        else:
            image = "Automatique"

        dictTemp = {
            "IDutilisateur": IDutilisateur,
            "nom": nom,
            "prenom": prenom,
            "sexe": sexe,
            "mdp": mdp,
            "profil": profil,
            "actif": actif,
            "image": image,
            "droits": droits
        }
        listeUtilisateurs.append(dictTemp)

    DB.Close()
    return listeUtilisateurs
Ejemplo n.º 16
0
    def Impression(self,
                   listeInscriptions=[],
                   nomDoc=None,
                   afficherDoc=True,
                   dictOptions=None,
                   repertoire=None,
                   repertoireTemp=False):
        """ Impression des inscriptions """
        from Utils import UTILS_Impression_inscription

        # Récupération des données à partir des IDinscription
        resultat = self.GetDonneesImpression(listeInscriptions)
        if resultat == False:
            return False
        dictInscriptions, dictChampsFusion = resultat

        # Récupération des paramètres d'affichage
        if dictOptions == None:
            if afficherDoc == False:
                dlg = DLG_Apercu_inscription.Dialog(
                    None,
                    titre=_(u"Sélection des paramètres de l'inscription"),
                    intro=
                    _(u"Sélectionnez ici les paramètres d'affichage de l'inscription."
                      ))
                dlg.bouton_ok.SetImageEtTexte("Images/32x32/Valider.png",
                                              _("Ok"))
            else:
                dlg = DLG_Apercu_inscription.Dialog(None)
            if dlg.ShowModal() == wx.ID_OK:
                dictOptions = dlg.GetParametres()
                dlg.Destroy()
            else:
                dlg.Destroy()
                return False

        # Création des PDF à l'unité
        def CreationPDFunique(repertoireCible=""):
            dictPieces = {}
            dlgAttente = wx.BusyInfo(
                _(u"Génération des PDF à l'unité en cours..."), None)
            try:
                index = 0
                for IDinscription, dictInscription in dictInscriptions.items():
                    if dictInscription["select"] == True:
                        nomTitulaires = self.Supprime_accent(
                            dictInscription["{FAMILLE_NOM}"])
                        nomFichier = _(u"Inscription %d - %s") % (
                            IDinscription, nomTitulaires)
                        cheminFichier = u"%s/%s.pdf" % (repertoireCible,
                                                        nomFichier)
                        dictComptesTemp = {IDinscription: dictInscription}
                        self.EcritStatusbar(
                            _(u"Edition de l'inscription %d/%d : %s") %
                            (index, len(dictInscription), nomFichier))
                        UTILS_Impression_inscription.Impression(
                            dictComptesTemp,
                            dictOptions,
                            IDmodele=dictOptions["IDmodele"],
                            ouverture=False,
                            nomFichier=cheminFichier)
                        dictPieces[IDinscription] = cheminFichier
                        index += 1
                self.EcritStatusbar("")
                del dlgAttente
                return dictPieces
            except Exception as err:
                del dlgAttente
                traceback.print_exc(file=sys.stdout)
                dlg = wx.MessageDialog(
                    None,
                    _(u"Désolé, le problème suivant a été rencontré dans l'édition des inscriptions : \n\n%s"
                      ) % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                return False

        # Répertoire souhaité par l'utilisateur
        if repertoire != None:
            resultat = CreationPDFunique(repertoire)
            if resultat == False:
                return False

        # Répertoire TEMP (pour Emails)
        dictPieces = {}
        if repertoireTemp == True:
            dictPieces = CreationPDFunique(UTILS_Fichiers.GetRepTemp())
            if dictPieces == False:
                return False

        # Sauvegarde dans un porte-documents
        if dictOptions["questionnaire"] != None:
            # Création des PDF
            if len(dictPieces) == 0:
                dictPieces = CreationPDFunique(UTILS_Fichiers.GetRepTemp())

            # Recherche des IDreponse
            IDquestion = dictOptions["questionnaire"]
            DB = GestionDB.DB()
            req = """SELECT IDreponse, IDdonnee
            FROM questionnaire_reponses
            WHERE IDquestion=%d
            ;""" % IDquestion
            DB.ExecuterReq(req)
            listeReponses = DB.ResultatReq()
            DB.Close()
            dictReponses = {}
            for IDreponse, IDinscription in listeReponses:
                dictReponses[IDinscription] = IDreponse

            DB = GestionDB.DB(suffixe="DOCUMENTS")
            for IDinscription, cheminFichier in dictPieces.items():
                # Préparation du blob
                fichier = open(cheminFichier, "rb")
                data = fichier.read()
                fichier.close()
                buffer = six.BytesIO(data)
                blob = buffer.read()
                # Recherche l'IDreponse
                if IDinscription in dictReponses:
                    IDreponse = dictReponses[IDinscription]
                else:
                    # Création d'une réponse de questionnaire
                    listeDonnees = [
                        ("IDquestion", IDquestion),
                        ("reponse", "##DOCUMENTS##"),
                        ("type", "inscription"),
                        ("IDdonnee", IDinscription),
                    ]
                    DB2 = GestionDB.DB()
                    IDreponse = DB2.ReqInsert("questionnaire_reponses",
                                              listeDonnees)
                    DB2.Close()
                # Sauvegarde du document
                listeDonnees = [("IDreponse", IDreponse), ("type", "pdf"),
                                ("label", dictOptions["nomModele"]),
                                ("last_update", datetime.datetime.now())]
                IDdocument = DB.ReqInsert("documents", listeDonnees)
                DB.MAJimage(table="documents",
                            key="IDdocument",
                            IDkey=IDdocument,
                            blobImage=blob,
                            nomChampBlob="document")
            DB.Close()

        # Fabrication du PDF global
        if repertoireTemp == False:
            dlgAttente = wx.BusyInfo(_(u"Création du PDF en cours..."), None)
            self.EcritStatusbar(
                _(u"Création du PDF des inscriptions en cours... veuillez patienter..."
                  ))
            try:
                UTILS_Impression_inscription.Impression(
                    dictInscriptions,
                    dictOptions,
                    IDmodele=dictOptions["IDmodele"],
                    ouverture=afficherDoc,
                    nomFichier=nomDoc)
                self.EcritStatusbar("")
                del dlgAttente
            except Exception as err:
                del dlgAttente
                traceback.print_exc(file=sys.stdout)
                dlg = wx.MessageDialog(
                    None,
                    u"Désolé, le problème suivant a été rencontré dans l'édition des inscriptions : \n\n%s"
                    % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                return False

        return dictChampsFusion, dictPieces
Ejemplo n.º 17
0
    def SauvegardeFactures(self):
        """ Sauvegarde des factures """
        # Récupère Utilisateur en cours
        IDutilisateur = UTILS_Identification.GetIDutilisateur()

        # Génération des factures
        listeFacturesGenerees = []

        # Tri par ordre alphabétique de la liste
        listeComptes = []
        for track in self.ctrl_factures.GetTracksCoches():
            listeComptes.append((track.nomSansCivilite, track.IDcompte_payeur))
        listeComptes.sort()

        # ProgressBar
        dlgProgress = wx.ProgressDialog(_(u"Génération des factures"),
                                        _(u"Initialisation..."),
                                        maximum=len(listeComptes),
                                        parent=None,
                                        style=wx.PD_SMOOTH | wx.PD_AUTO_HIDE
                                        | wx.PD_APP_MODAL)

        # Sélection du prochain numéro de facture
        numero = self.parent.dictParametres["prochain_numero"]
        IDprefixe = self.parent.dictParametres["IDprefixe"]

        if numero == None:
            # Recherche du prochain numéro de facture si mode AUTO
            if IDprefixe == None:
                conditions = "WHERE IDprefixe IS NULL"
            else:
                conditions = "WHERE IDprefixe=%d" % IDprefixe
            DB = GestionDB.DB()
            req = """SELECT MAX(numero)
            FROM factures
            %s;""" % conditions
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            DB.Close()
            if listeDonnees[0][0] == None:
                numero = 1
            else:
                numero = listeDonnees[0][0] + 1

        # Sauvegarde
        DB = GestionDB.DB()
        try:

            index = 0
            for nomTitulaires, IDcompte_payeur in listeComptes:
                dictCompte = self.ctrl_factures.dictComptes[IDcompte_payeur]
                texte = _(u"Génération de la facture %d sur %d...") % (
                    index + 1, len(listeComptes))
                self.EcritStatusbar(texte)
                dlgProgress.Update(index + 1, texte)

                listePrestations = dictCompte["listePrestations"]
                total = dictCompte["total"]
                regle = dictCompte["ventilation"]
                solde = total - regle
                # Dates
                date_edition = dictCompte["date_edition"]
                date_echeance = dictCompte["date_echeance"]
                # Liste des activités
                texteActivites = ""
                for IDactivite in dictCompte["liste_activites"]:
                    texteActivites += "%d;" % IDactivite
                if len(dictCompte["liste_activites"]) > 0:
                    texteActivites = texteActivites[:-1]
                # Liste des individus
                texteIndividus = ""
                for IDindividu in list(dictCompte["individus"].keys()):
                    texteIndividus += "%d;" % IDindividu
                if len(list(dictCompte["individus"].keys())) > 0:
                    texteIndividus = texteIndividus[:-1]

                # Sauvegarde de la facture
                listeDonnees = [
                    ("IDprefixe", IDprefixe),
                    ("numero", numero),
                    ("IDcompte_payeur", IDcompte_payeur),
                    ("date_edition", str(date_edition)),
                    ("date_echeance", date_echeance),
                    ("activites", texteActivites),
                    ("individus", texteIndividus),
                    ("IDutilisateur", IDutilisateur),
                    ("date_debut", str(dictCompte["date_debut"])),
                    ("date_fin", str(dictCompte["date_fin"])),
                    ("total", float(total)),
                    ("regle", float(regle)),
                    ("solde", float(solde)),
                    ("IDlot", self.parent.dictParametres["IDlot"]),
                    ("prestations",
                     ";".join(self.parent.dictParametres["prestations"])),
                    ("IDregie", self.parent.dictParametres["IDregie"]),
                    ("mention1", self.parent.dictParametres["mention1"]),
                    ("mention2", self.parent.dictParametres["mention2"]),
                    ("mention3", self.parent.dictParametres["mention3"]),
                ]
                IDfacture = DB.ReqInsert("factures", listeDonnees)

                # Attribution des IDfacture à chaque prestation
                for IDindividu, IDprestation in listePrestations:
                    if dictCompte["individus"][IDindividu]["select"] == True:
                        listeDonnees = [
                            ("IDfacture", IDfacture),
                        ]
                        DB.ReqMAJ("prestations", listeDonnees, "IDprestation",
                                  IDprestation)

                listeFacturesGenerees.append(IDfacture)
                numero += 1
                index += 1

            DB.Close()
            self.EcritStatusbar(u"")
            dlgProgress.Destroy()

        except Exception as err:
            DB.Close()
            dlgProgress.Destroy()
            traceback.print_exc(file=sys.stdout)
            dlg = wx.MessageDialog(
                self,
                _(u"Désolé, le problème suivant a été rencontré : \n\n%s"
                  ) % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            self.EcritStatusbar(u"")
            return False

        self.EcritStatusbar(u"")
        return listeFacturesGenerees
Ejemplo n.º 18
0
    def OnBoutonOk(self, event):
        # Récupération des années
        if self.ctrl_annees.GetValue() == "":
            dlg = wx.MessageDialog(
                self, _(u"Vous devez obligatoirement saisir une année !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        listeAnnees = []
        for annee in self.ctrl_annees.GetValue().split(";"):
            try:
                listeAnnees.append(int(annee))
                if int(annee) < 1900 or int(annee) > 3000:
                    raise Exception()
            except:
                dlg = wx.MessageDialog(
                    self, _(u"Les années saisies ne semblent pas valides !"),
                    _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return False

        # Récupération jours fériés à créer
        listeCoches = []
        for index in range(0, self.ctrl_jours.GetCount()):
            if self.ctrl_jours.IsChecked(index):
                listeCoches.append(index)

        if len(listeCoches) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement cocher au moins un jour férié à créer !"
                  ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        # Récupération des jours déjà présents dans la base de données
        DB = GestionDB.DB()
        req = """SELECT IDferie, nom, jour, mois, annee
        FROM jours_feries
        WHERE type='variable' ; """
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        listeJoursExistants = []
        for IDferie, nom, jour, mois, annee in listeDonnees:
            try:
                listeJoursExistants.append(datetime.date(annee, mois, jour))
            except:
                pass

        def SauvegarderDate(nom="", date=None):
            if date not in listeJoursExistants:
                IDferie = DB.ReqInsert("jours_feries", [("type", "variable"),
                                                        ("nom", nom),
                                                        ("annee", date.year),
                                                        ("mois", date.month),
                                                        ("jour", date.day)])

        # Calcul des jours fériés
        for annee in listeAnnees:

            # Dimanche de Paques
            dimanche_paques = easter(annee)

            # Lundi de Pâques
            lundi_paques = dimanche_paques + relativedelta(days=+1)
            if 0 in listeCoches:
                SauvegarderDate(_(u"Lundi de Pâques"), lundi_paques)

            # Ascension
            ascension = dimanche_paques + relativedelta(days=+39)
            if 1 in listeCoches:
                SauvegarderDate(_(u"Jeudi de l'Ascension"), ascension)

            # Pentecote
            pentecote = dimanche_paques + relativedelta(days=+50)
            if 2 in listeCoches:
                SauvegarderDate(_(u"Lundi de Pentecôte"), pentecote)

        DB.Close()

        # Fermeture
        self.EndModal(wx.ID_OK)
Ejemplo n.º 19
0
    def __init__(self, parent): 
        HTL.HyperTreeList.__init__(self, parent, -1)
        self.parent = parent
        self.dictImpression = {}
        
        # Paramètres
        self.mode_affichage = "facture" # "facture", "regle", "nbre", "impaye"
        self.key_colonne = "mois" # "mois", "annee"
        self.key_ligne1 = "activite"
        self.key_ligne2 = "label"
        self.date_debut = None
        self.date_fin = None
        self.afficher_consommations = True
        self.afficher_cotisations = True
        self.afficher_autres = True
        self.listeActivites = []
        self.affichage_details_total = True

        self.filtreCotisations = False
        self.filtreCotisations_dateDebut = None
        self.filtreCotisations_dateFin = None
        self.filtreReglements = False
        self.filtreReglements_dateDebut = None
        self.filtreReglements_dateFin = None
        self.filtreDepots = False
        self.filtreDepots_dateDebut = None
        self.filtreDepots_dateFin = None
        
        self.labelParametres = ""

        # Importation de données
        DB = GestionDB.DB()

        req = """SELECT IDcategorie_tarif, categories_tarifs.nom, activites.nom, activites.abrege
        FROM categories_tarifs
        LEFT JOIN activites ON activites.IDactivite = categories_tarifs.IDactivite
        ORDER BY categories_tarifs.nom; """
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        self.dictCategoriesTarifs = {}
        for IDcategorie_tarif, nomCategorie, nomActivite, abregeActivite in listeDonnees :
            self.dictCategoriesTarifs[IDcategorie_tarif] = {
                "nomCategorie" : nomCategorie,
                "nomActivite" : nomActivite,
                "abregeActivite" : abregeActivite,
                }

        req = """SELECT IDactivite, nom
        FROM activites;"""
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        self.dictActivites = {}
        for IDactivite, nom in listeDonnees :
            self.dictActivites[IDactivite] = {"nom" : nom}

        req = """SELECT IDindividu, nom, prenom
        FROM individus;"""
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        self.dictIndividus = {}
        for IDindividu, nom, prenom in listeDonnees :
            if nom == None : nom = ""
            if prenom == None : prenom = ""
            nom_complet = u"%s %s" % (nom, prenom)
            self.dictIndividus[IDindividu] = {"nom" : nom, "prenom": prenom, "nom_complet" : nom_complet}

        DB.Close()

        self.dict_titulaires = UTILS_Titulaires.GetTitulaires()

        # wx.TR_COLUMN_LINES |  | wx.TR_HAS_BUTTONS
        self.SetBackgroundColour(wx.WHITE)
        if 'phoenix' in wx.PlatformInfo:
            TR_COLUMN_LINES = HTL.TR_COLUMN_LINES
        else :
            TR_COLUMN_LINES = wx.TR_COLUMN_LINES
        self.SetAGWWindowStyleFlag(wx.TR_HIDE_ROOT  | wx.TR_ROW_LINES | TR_COLUMN_LINES | wx.TR_HAS_BUTTONS | wx.TR_HAS_VARIABLE_ROW_HEIGHT | wx.TR_FULL_ROW_HIGHLIGHT ) # HTL.TR_NO_HEADER
Ejemplo n.º 20
0
    def Sauvegarde(self):
        """ Sauvegarde dans la base """
        DB = GestionDB.DB()

        # Enregistrement des informations générales sur le contrat
        listeDonnees = (
            ("IDindividu", self.GetValeur("IDindividu", None)),
            ("IDinscription", self.GetValeur("IDinscription", None)),
            ("IDactivite", self.GetValeur("IDactivite", None)),
            ("date_debut", self.GetValeur("date_debut", None)),
            ("date_fin", self.GetValeur("date_fin", None)),
            ("observations", self.GetValeur("observations", None)),
            ("type", "psu"),
            ("duree_absences_prevues",
             UTILS_Dates.DeltaEnStr(self.GetValeur("duree_absences_prevues",
                                                   datetime.timedelta(0)),
                                    separateur=":")),
            ("duree_heures_regularisation",
             UTILS_Dates.DeltaEnStr(self.GetValeur(
                 "duree_heures_regularisation", datetime.timedelta(0)),
                                    separateur=":")),
            ("arrondi_type", self.GetValeur("arrondi_type", None)),
            ("arrondi_delta", self.GetValeur("arrondi_delta", 30)),
            ("planning", self.GetValeur("planning", None)),
        )
        if self.IDcontrat == None:
            self.IDcontrat = DB.ReqInsert("contrats", listeDonnees)
        else:
            DB.ReqMAJ("contrats", listeDonnees, "IDcontrat", self.IDcontrat)

        # Enregistrement des consommations
        # liste_IDconso = []
        # for track in self.GetValeur("tracks_previsions", []):
        #     listeDonnees = (
        #         ("IDindividu", self.GetValeur("IDindividu", None)),
        #         ("IDinscription", self.GetValeur("IDinscription", None)),
        #         ("IDactivite", self.GetValeur("IDactivite", None)),
        #         ("date", track.date),
        #         ("IDunite", track.IDunite),
        #         ("IDgroupe", self.GetValeur("IDgroupe", None)),
        #         ("heure_debut", track.heure_debut),
        #         ("heure_fin", track.heure_fin),
        #         ("etat", track.etat),
        #         #("date_saisie", track.date_saisie),
        #         ("IDutilisateur", UTILS_Identification.GetIDutilisateur()),
        #         ("IDcategorie_tarif", self.GetValeur("IDcategorie_tarif", None)),
        #         ("IDcompte_payeur", self.GetValeur("IDcompte_payeur", None)),
        #         #("IDprestation", track.IDprestation),#TODO
        #         #("forfait", track.forfait),#TODO
        #         ("quantite", track.quantite),
        #         #("etiquettes", track.etiquettes),#TODO
        #     )
        #     if track.IDconso == None :
        #         IDconso = DB.ReqInsert("consommations", listeDonnees)
        #     else :
        #         IDconso = track.IDconso
        #         DB.ReqMAJ("consommations", listeDonnees, "IDconso", IDconso)
        #     liste_IDconso.append(IDconso)

        # Version optimisée
        listeChamps = [
            "IDindividu",
            "IDinscription",
            "IDactivite",
            "date",
            "IDunite",
            "IDgroupe",
            "heure_debut",
            "heure_fin",
            "etat",
            "IDutilisateur",
            "IDcategorie_tarif",
            "IDcompte_payeur",
            "quantite",
        ]
        liste_IDconso = []
        listeAjouts = []
        listeModifications = []
        for track in self.GetValeur("tracks_previsions", []):
            listeDonnees = [
                self.GetValeur("IDindividu", None),
                self.GetValeur("IDinscription", None),
                self.GetValeur("IDactivite", None),
                track.date,
                track.IDunite,
                self.GetValeur("IDgroupe", None),
                track.heure_debut,
                track.heure_fin,
                track.etat,
                UTILS_Identification.GetIDutilisateur(),
                self.GetValeur("IDcategorie_tarif", None),
                self.GetValeur("IDcompte_payeur", None),
                track.quantite,
            ]
            if track.IDconso == None:
                listeAjouts.append(listeDonnees)
            else:
                IDconso = track.IDconso
                listeDonnees.append(IDconso)
                listeModifications.append(listeDonnees)
                liste_IDconso.append(IDconso)

        # Ajout optimisé des conso
        if len(listeAjouts) > 0:
            texteChampsTemp = ", ".join(listeChamps)
            listeInterrogations = []
            for champ in listeChamps:
                listeInterrogations.append("?")
            texteInterrogations = ", ".join(listeInterrogations)
            DB.Executermany("INSERT INTO consommations (%s) VALUES (%s)" %
                            (texteChampsTemp, texteInterrogations),
                            listeAjouts,
                            commit=True)

        # Modification optimisée des conso
        if len(listeModifications) > 0:
            listeChampsTemp = []
            for champ in listeChamps:
                listeChampsTemp.append(("%s=?" % champ))
            DB.Executermany("UPDATE consommations SET %s WHERE IDconso=?" %
                            ", ".join(listeChampsTemp),
                            listeModifications,
                            commit=True)

        # Suppression des consommations supprimées
        listeSuppressions = []
        for IDconso in self.GetValeur("liste_IDconso", []):
            if IDconso not in liste_IDconso:
                listeSuppressions.append(IDconso)

        if len(listeSuppressions) > 0:
            if len(listeSuppressions) == 1:
                conditionSuppression = "(%d)" % listeSuppressions[0]
            else:
                conditionSuppression = str(tuple(listeSuppressions))
            DB.ExecuterReq("DELETE FROM consommations WHERE IDconso IN %s" %
                           conditionSuppression)

        # Enregistrement des tarifs
        liste_IDtarif = []
        for track in self.GetValeur("tracks_tarifs", []):
            listeDonnees = (
                ("IDcontrat", self.IDcontrat),
                ("date_debut", track.date_debut),
                ("revenu", track.revenu),
                ("quotient", track.quotient),
                ("taux", track.taux),
                ("tarif_base", track.tarif_base),
                ("tarif_depassement", track.tarif_depassement),
            )
            if track.IDcontrat_tarif == None:
                IDcontrat_tarif = DB.ReqInsert("contrats_tarifs", listeDonnees)
            else:
                IDcontrat_tarif = track.IDcontrat_tarif
                DB.ReqMAJ("contrats_tarifs", listeDonnees, "IDcontrat_tarif",
                          IDcontrat_tarif)
            liste_IDtarif.append(IDcontrat_tarif)

        # Suppression des tarifs supprimés
        listeSuppressions = []
        for IDcontrat_tarif in self.GetValeur("liste_IDtarif", []):
            if IDcontrat_tarif not in liste_IDtarif:
                listeSuppressions.append(IDcontrat_tarif)

        if len(listeSuppressions) > 0:
            if len(listeSuppressions) == 1:
                conditionSuppression = "(%d)" % listeSuppressions[0]
            else:
                conditionSuppression = str(tuple(listeSuppressions))
            DB.ExecuterReq(
                "DELETE FROM contrats_tarifs WHERE IDcontrat_tarif IN %s" %
                conditionSuppression)

        # Enregistrement des mensualités
        # liste_IDprestation = []
        # for track in self.GetValeur("tracks_mensualites", []):
        #     listeDonnees = (
        #         ("IDcompte_payeur", self.GetValeur("IDcompte_payeur", None)),
        #         ("date", track.date_facturation),
        #         ("categorie", "consommation"),
        #         ("label", track.label_prestation),
        #         ("montant_initial", track.montant_mois),
        #         ("montant", track.montant_mois),
        #         ("IDactivite", self.GetValeur("IDactivite", None)),
        #         ("IDtarif", self.GetValeur("IDtarif", None)),
        #         ("IDfacture", track.IDfacture),
        #         ("IDfamille", self.GetValeur("IDfamille", None)),
        #         ("IDindividu", self.GetValeur("IDindividu", None)),
        #         ("forfait", None),
        #         ("temps_facture", UTILS_Dates.DeltaEnStr(track.heures_facturees, ":")),
        #         ("IDcategorie_tarif", self.GetValeur("IDcategorie_tarif", None)),
        #         ("forfait_date_debut", track.forfait_date_debut),
        #         ("forfait_date_fin", track.forfait_date_fin),
        #         ("IDcontrat", self.IDcontrat),
        #     )
        #     if track.IDprestation == None :
        #         IDprestation = DB.ReqInsert("prestations", listeDonnees)
        #     else :
        #         IDprestation = track.IDprestation
        #         DB.ReqMAJ("prestations", listeDonnees, "IDprestation", IDprestation)
        #     liste_IDprestation.append(IDprestation)
        #
        # # Suppression des prestations supprimées
        # listeSuppressions = []
        # for IDprestation in self.GetValeur("liste_IDprestation", []):
        #     if IDprestation not in liste_IDprestation :
        #         listeSuppressions.append(IDprestation)
        #
        # if len(listeSuppressions) > 0 :
        #     if len(listeSuppressions) == 1 :
        #         conditionSuppression = "(%d)" % listeSuppressions[0]
        #     else :
        #         conditionSuppression = str(tuple(listeSuppressions))
        #     DB.ExecuterReq("DELETE FROM prestations WHERE IDprestation IN %s" % conditionSuppression)
        #     DB.ExecuterReq("DELETE FROM ventilation WHERE IDprestation IN %s" % conditionSuppression)
        #     DB.ExecuterReq("DELETE FROM deductions WHERE IDprestation IN %s" % conditionSuppression)

        DB.Commit()
        DB.Close()
Ejemplo n.º 21
0
    def OnBoutonOk(self, event):
        # Vérification des données
        if len(self.ctrl_nom.GetValue()) == 0:
            dlg = wx.MessageDialog(
                self, _(u"Vous devez obligatoirement saisir un nom !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_nom.SetFocus()
            return

        if self.mdpcrypt == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement saisir un mot de passe !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Vérifie que le code d'accès n'est pas déjà utilisé
        if self.IDutilisateur == None:
            IDutilisateurTmp = 0
        else:
            IDutilisateurTmp = self.IDutilisateur
        DB = GestionDB.DB()
        req = """SELECT IDutilisateur, sexe, nom, prenom, mdp, mdpcrypt, profil, actif
        FROM utilisateurs 
        WHERE mdpcrypt='%s' AND IDutilisateur<>%d
        ;""" % (self.mdpcrypt, IDutilisateurTmp)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        DB.Close()
        if len(listeDonnees) > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Le code d'accès que vous avez saisi est déjà attribué !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Vérifie qu'il reste au moins un administrateur dans la base de données
        if self.radio_droits_admin.GetValue() == False:
            DB = GestionDB.DB()
            req = """SELECT IDutilisateur, profil
            FROM utilisateurs
            WHERE profil='administrateur' AND IDutilisateur!=%d;""" % IDutilisateurTmp
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            DB.Close()
            if len(listeDonnees) == 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Il doit rester au moins un administrateur dans le fichier !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return

        # Vérifie qu'il reste au moins un administrateur ACTIF dans la base de données
        if self.ctrl_actif.GetValue() == False:
            DB = GestionDB.DB()
            req = """SELECT IDutilisateur, profil, actif
            FROM utilisateurs
            WHERE profil='administrateur' AND actif=1 AND IDutilisateur!=%d;""" % IDutilisateurTmp
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            DB.Close()
            if len(listeDonnees) == 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Il doit rester au moins un administrateur ACTIF dans le fichier ! Cochez la case Actif."
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return

        # Droits
        if self.radio_droits_modele.GetValue() == True:
            if self.ctrl_modele_droits.GetID() == None:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous n'avez sélectionné aucun modèle de droits !"),
                    _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return

        # Vérifie que le compte n'est pas inactif alors que le compte internet est actif
        dictCompteInternet = self.ctrl_compte_internet.GetDonnees()
        if dictCompteInternet[
                "internet_actif"] == 1 and self.ctrl_actif.GetValue() == False:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez désactiver le compte internet si vous souhaitez désactiver cet utilisateur !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        # Sauvegarde
        self.Sauvegarde()

        # Fermeture de la fenêtre
        self.EndModal(wx.ID_OK)
Ejemplo n.º 22
0
    def Importation(self, DBtemp=None):
        """ Importation depuis la base """
        dictValeurs = {}

        # Lecture de la base
        if DBtemp == None:
            DB = GestionDB.DB()
        else:
            DB = DBtemp

        # Informations générales sur le contrat
        if self.IDcontrat != None:

            req = """SELECT contrats.IDindividu, IDinscription, date_debut, date_fin, observations, IDactivite, type,
            duree_absences_prevues, duree_heures_regularisation, arrondi_type, arrondi_delta, duree_tolerance_depassement, planning,
            individus.nom, individus.prenom
            FROM contrats
            LEFT JOIN individus ON individus.IDindividu = contrats.IDindividu
            WHERE IDcontrat=%d
            ;""" % self.IDcontrat
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            if len(listeDonnees) > 0:
                IDindividu, IDinscription, date_debut, date_fin, observations, IDactivite, type_contrat, duree_absences_prevues, duree_heures_regularisation, arrondi_type, arrondi_delta, duree_tolerance_depassement, planning, individu_nom, individu_prenom = listeDonnees[
                    0]

                self.IDinscription = IDinscription
                dictValeurs["IDinscription"] = self.IDinscription
                dictValeurs["date_debut"] = UTILS_Dates.DateEngEnDateDD(
                    date_debut)
                dictValeurs["date_fin"] = UTILS_Dates.DateEngEnDateDD(date_fin)
                dictValeurs["observations"] = observations
                dictValeurs["IDactivite"] = IDactivite
                dictValeurs["type_contrat"] = type_contrat
                dictValeurs[
                    "duree_absences_prevues"] = UTILS_Dates.HeureStrEnDelta(
                        duree_absences_prevues)
                dictValeurs[
                    "duree_heures_regularisation"] = UTILS_Dates.HeureStrEnDelta(
                        duree_heures_regularisation)
                dictValeurs[
                    "duree_tolerance_depassement"] = UTILS_Dates.HeureStrEnDelta(
                        duree_tolerance_depassement)
                dictValeurs["individu_nom"] = individu_nom
                dictValeurs["individu_prenom"] = individu_prenom
                dictValeurs["arrondi_type"] = arrondi_type
                dictValeurs["arrondi_delta"] = arrondi_delta
                dictValeurs["planning"] = planning

                if individu_prenom != None:
                    dictValeurs["individu_nom_complet"] = u"%s %s" % (
                        individu_nom, individu_prenom)
                else:
                    dictValeurs["individu_nom_complet"] = individu_nom

        # Importation des données de l'inscription
        if self.IDinscription != None:

            req = """SELECT IDindividu, IDfamille, IDactivite, IDgroupe, IDcategorie_tarif, IDcompte_payeur, date_inscription, parti
            FROM inscriptions
            WHERE inscriptions.statut='ok' AND IDinscription=%d
            ;""" % self.IDinscription
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            IDindividu, IDfamille, IDactivite, IDgroupe, IDcategorie_tarif, IDcompte_payeur, date_inscription, parti = listeDonnees[
                0]

            dictValeurs["IDinscription"] = self.IDinscription
            dictValeurs["IDindividu"] = IDindividu
            dictValeurs["IDfamille"] = IDfamille
            dictValeurs["IDactivite"] = IDactivite
            dictValeurs["IDgroupe"] = IDgroupe
            dictValeurs["IDcategorie_tarif"] = IDcategorie_tarif
            dictValeurs["IDcompte_payeur"] = IDcompte_payeur
            dictValeurs["date_inscription"] = date_inscription
            dictValeurs["parti"] = parti

            # Infos sur le dernier contrat saisi
            req = """SELECT arrondi_type, arrondi_delta, duree_tolerance_depassement
            FROM contrats
            WHERE type='psu' AND IDactivite=%d
            ORDER BY IDcontrat DESC LIMIT 1
            ;""" % IDactivite
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            if len(listeDonnees) > 0:
                arrondi_type, arrondi_delta, duree_tolerance_depassement = listeDonnees[
                    0]
                dictValeurs["arrondi_type"] = arrondi_type
                dictValeurs["arrondi_delta"] = arrondi_delta
                dictValeurs[
                    "duree_tolerance_depassement"] = UTILS_Dates.HeureStrEnDelta(
                        duree_tolerance_depassement)

        # Informations sur l'activité
        req = """SELECT psu_unite_prevision, psu_unite_presence, psu_tarif_forfait, psu_etiquette_rtt
        FROM activites
        WHERE IDactivite=%d
        ;""" % dictValeurs["IDactivite"]
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        psu_unite_prevision, psu_unite_presence, psu_tarif_forfait, psu_etiquette_rtt = listeDonnees[
            0]

        dictValeurs["IDunite_prevision"] = psu_unite_prevision
        dictValeurs["IDunite_presence"] = psu_unite_presence
        dictValeurs["IDtarif"] = psu_tarif_forfait
        dictValeurs["psu_etiquette_rtt"] = psu_etiquette_rtt
        dictValeurs["duree_absences_prises"] = datetime.timedelta(0)

        # Mémorise les données déjà importées
        self.SetValeurs(dictValeurs)

        # Echap sur nouveau contrat
        if self.IDcontrat == None:
            DB.Close()
            return

        # Lecture des consommations
        req = """SELECT IDconso, date, IDunite, IDgroupe, heure_debut, heure_fin, consommations.etat, verrouillage, date_saisie, IDutilisateur,
        IDcategorie_tarif, IDprestation, forfait, quantite, etiquettes
        FROM consommations
        WHERE IDinscription=%d AND date>='%s' AND date<='%s'
        ;""" % (self.IDinscription, dictValeurs["date_debut"],
                dictValeurs["date_fin"])
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()

        tracks_previsions = []
        liste_IDconso = []
        liste_conso = []
        dict_conso = {}
        for IDconso, date, IDunite, IDgroupe, heure_debut, heure_fin, etat, verrouillage, date_saisie, IDutilisateur, IDcategorie_tarif, IDprestation, forfait, quantite, etiquettes in listeDonnees:
            date = UTILS_Dates.DateEngEnDateDD(date)
            date_saisie = UTILS_Dates.DateEngEnDateDD(date_saisie)
            heure_debut_time = UTILS_Dates.HeureStrEnTime(heure_debut)
            heure_fin_time = UTILS_Dates.HeureStrEnTime(heure_fin)
            etiquettes = UTILS_Texte.ConvertStrToListe(etiquettes)

            dictConso = {
                "IDconso": IDconso,
                "date": date,
                "IDunite": IDunite,
                "IDgroupe": IDgroupe,
                "heure_debut": heure_debut,
                "heure_fin": heure_fin,
                "etat": etat,
                "verrouillage": verrouillage,
                "date_saisie": date_saisie,
                "IDutilisateur": IDutilisateur,
                "IDcategorie_tarif": IDcategorie_tarif,
                "IDprestation": IDprestation,
                "forfait": forfait,
                "quantite": quantite,
                "etiquettes": etiquettes,
                "heure_debut_time": heure_debut_time,
                "heure_fin_time": heure_fin_time,
            }

            track = Track_conso(self, dictConso)

            liste_conso.append(track)
            if (date in dict_conso) == False:
                dict_conso[date] = []
            dict_conso[date].append(track)

            if IDunite == self.GetValeur("IDunite_prevision", None):
                tracks_previsions.append(track)
                liste_IDconso.append(IDconso)

            if dictValeurs["psu_etiquette_rtt"] in etiquettes:
                dictValeurs["duree_absences_prises"] += track.duree_arrondie

        dictValeurs["liste_conso"] = liste_conso
        dictValeurs["dict_conso"] = dict_conso
        dictValeurs["tracks_previsions"] = tracks_previsions
        dictValeurs["liste_IDconso"] = liste_IDconso

        # Lecture des tarifs du contrat
        req = """SELECT IDcontrat_tarif, date_debut, revenu, quotient, taux, tarif_base, tarif_depassement
        FROM contrats_tarifs
        WHERE IDcontrat=%d
        ;""" % self.IDcontrat
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        tracks_tarifs = []
        liste_IDtarif = []
        for IDcontrat_tarif, date_debut, revenu, quotient, taux, tarif_base, tarif_depassement in listeDonnees:
            date_debut = UTILS_Dates.DateEngEnDateDD(date_debut)
            dictTarif = {
                "IDcontrat_tarif": IDcontrat_tarif,
                "date_debut": date_debut,
                "revenu": revenu,
                "quotient": quotient,
                "taux": taux,
                "tarif_base": tarif_base,
                "tarif_depassement": tarif_depassement,
            }
            tracks_tarifs.append(Track_tarif(dictTarif))
            liste_IDtarif.append(IDcontrat_tarif)
        dictValeurs["tracks_tarifs"] = tracks_tarifs
        dictValeurs["liste_IDtarif"] = liste_IDtarif

        # Lecture des mensualités
        req = """SELECT IDprestation, date, label, montant_initial, prestations.montant, prestations.IDfacture, temps_facture,
        forfait_date_debut, forfait_date_fin, factures.numero
        FROM prestations
        LEFT JOIN factures ON factures.IDfacture = prestations.IDfacture
        WHERE IDcontrat=%d
        ;""" % self.IDcontrat
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        liste_prestations = []
        liste_IDprestation = []
        for IDprestation, date_facturation, label, montant_initial, montant, IDfacture, temps_facture, forfait_date_debut, forfait_date_fin, num_facture in listeDonnees:
            date_facturation = UTILS_Dates.DateEngEnDateDD(date_facturation)
            forfait_date_debut = UTILS_Dates.DateEngEnDateDD(
                forfait_date_debut)
            forfait_date_fin = UTILS_Dates.DateEngEnDateDD(forfait_date_fin)
            montant_initial = FloatToDecimal(montant_initial)
            montant = FloatToDecimal(montant)
            temps_facture = UTILS_Dates.HeureStrEnDelta(temps_facture)
            dictMensualite = {
                "IDprestation": IDprestation,
                "date_facturation": date_facturation,
                "label": label,
                "montant_initial": montant_initial,
                "montant": montant,
                "IDfacture": IDfacture,
                "temps_facture": temps_facture,
                "forfait_date_debut": forfait_date_debut,
                "forfait_date_fin": forfait_date_fin,
                "num_facture": num_facture,
            }
            liste_prestations.append(dictMensualite)
            liste_IDprestation.append(IDprestation)
        dictValeurs["liste_prestations"] = liste_prestations
        dictValeurs["liste_IDprestation"] = liste_IDprestation

        # Fermeture de la base
        if DBtemp == None:
            DB.Close()

        # Mémorisation des données
        self.SetValeurs(dictValeurs)
Ejemplo n.º 23
0
    def OnBoutonOk(self, event):
        # Sélection des lignes
        if self.radio_ligne_selectionnee.GetValue() == True:
            tracks = self.listview.GetSelectedObjects()

        if self.radio_lignes_affichees.GetValue() == True:
            tracks = self.listview.GetFilteredObjects()

        if self.radio_lignes_cochees.GetValue() == True:
            tracks = self.listview.GetCheckedObjects()

        # Récupération de toutes les adresses Emails
        listeDonnees = []
        listeAnomalies = []

        if self.radio_individu.GetValue() == True:
            DB = GestionDB.DB()
            req = """SELECT IDindividu, nom, prenom, mail
            FROM individus;"""
            DB.ExecuterReq(req)
            listeAdressesIndividus = DB.ResultatReq()
            DB.Close()
            dictAdressesIndividus = {}
            for IDindividu, nom, prenom, mail in listeAdressesIndividus:
                dictAdressesIndividus[IDindividu] = {
                    "mail": mail,
                    "nom": nom,
                    "prenom": prenom
                }

            for track in tracks:
                if dictAdressesIndividus.has_key(track.IDindividu):
                    adresse = dictAdressesIndividus[track.IDindividu]["mail"]
                    nom, prenom = dictAdressesIndividus[
                        track.IDindividu]["nom"], dictAdressesIndividus[
                            track.IDindividu]["prenom"]
                    if prenom == None: prenom = ""
                    nomIndividu = u"%s %s" % (nom, prenom)
                    if adresse not in ("", None):
                        dictTemp = {
                            "adresse": adresse,
                            "pieces": [],
                            "champs": {}
                        }
                        if dictTemp not in listeDonnees:
                            listeDonnees.append(dictTemp)
                    else:
                        listeAnomalies.append(nomIndividu)

        if self.radio_famille.GetValue() == True:
            dict_titulaires = UTILS_Titulaires.GetTitulaires()

            for track in tracks:
                adresse = None
                if dict_titulaires.has_key(track.IDfamille):
                    #adresse = UTILS_Envoi_email.GetAdresseFamille(track.IDfamille, choixMultiple=False, muet=True, nomTitulaires=track.nomTitulaires)
                    listeEmails = dict_titulaires[
                        track.IDfamille]["listeMails"]
                    if len(listeEmails) > 0:
                        adresse = listeEmails[0]

                    # Mémorisation des données
                    if adresse != None:
                        dictTemp = {
                            "adresse": adresse,
                            "pieces": [],
                            "champs": {}
                        }
                        if dictTemp not in listeDonnees:
                            listeDonnees.append(dictTemp)
                    else:
                        listeAnomalies.append(dict_titulaires[track.IDfamille]
                                              ["titulairesSansCivilite"])

        # Annonce les anomalies trouvées
        if len(listeAnomalies) > 0:
            if self.radio_famille.GetValue() == True:
                introduction = _(
                    u"%d des familles sélectionnées n'ont pas d'adresse Email :"
                ) % len(listeAnomalies)
                conclusion = _(
                    u"Souhaitez-vous quand même continuer avec les %d autres familles ?"
                ) % len(listeDonnees)
            else:
                introduction = _(
                    u"%d des individus sélectionnés n'ont pas d'adresse Email :"
                ) % len(listeAnomalies)
                conclusion = _(
                    u"Souhaitez-vous quand même continuer avec les %d autres individus ?"
                ) % len(listeDonnees)
            dlg = DLG_Messagebox.Dialog(
                self,
                titre=_(u"Anomalies"),
                introduction=introduction,
                detail=u"\n".join(listeAnomalies),
                conclusion=conclusion,
                icone=wx.ICON_EXCLAMATION,
                boutons=[_(u"Oui"), _(u"Non"),
                         _(u"Annuler")])
            reponse = dlg.ShowModal()
            dlg.Destroy()
            if reponse in (1, 2):
                return False

        # Dernière vérification avant transfert
        if len(listeDonnees) == 0:
            dlg = wx.MessageDialog(
                self, _(u"Il ne reste finalement aucun email à envoyer !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Transfert des données vers DLG Mailer
        from Dlg import DLG_Mailer
        dlg = DLG_Mailer.Dialog(self)
        dlg.SetDonnees(listeDonnees, modificationAutorisee=True)
        dlg.ChargerModeleDefaut()
        dlg.ShowModal()
        dlg.Destroy()

        # Fermeture de la fenêtre
        self.EndModal(wx.ID_OK)
Ejemplo n.º 24
0
    def Validation(self):

        # Vérifie qu'un nom a été saisi
        if self.text_nom.GetValue() == "":
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement saisir un nom pour ce modèle !"
                  ), "Erreur", wx.OK)
            dlg.ShowModal()
            dlg.Destroy()
            self.text_nom.SetFocus()
            return False

        # Enregistrement des données
        dictModeles = self.GetGrandParent().dictModeles
        dictChamps = self.GetGrandParent().dictChamps
        DB = GestionDB.DB()

        # Enregistrement des données du MODELE
        listeDonnees = [
            ("IDclassification", dictModeles["IDclassification"]),
            ("IDtype", dictModeles["IDtype"]),
            ("nom", self.text_nom.GetValue()),
            ("description", self.text_description.GetValue()),
        ]

        if dictModeles["IDmodele"] == 0:
            # Ajout
            IDmodele = DB.ReqInsert("contrats_modeles", listeDonnees)
            DB.Commit()
        else:
            # Modification
            DB.ReqMAJ("contrats_modeles", listeDonnees, "IDmodele",
                      dictModeles["IDmodele"])
            DB.Commit()
            IDmodele = dictModeles["IDmodele"]

        # Enregistrement des données des CHAMPS

        # Crée une liste des champs existants déjà pour ce contrat
        req = "SELECT IDval_champ, IDchamp FROM contrats_valchamps WHERE (IDmodele=%d AND type='modele')  ;" % IDmodele
        DB.ExecuterReq(req)
        listeChampsDB = DB.ResultatReq()
        nbreResultats = len(listeChampsDB)

        # On regarde chaque champ un par un
        for IDchamp, valeur in dictChamps.items():

            listeDonnees = [
                ("IDchamp", IDchamp),
                ("type", "modele"),
                ("valeur", valeur),
                ("IDmodele", IDmodele),
                ("IDcontrat", 0),
            ]

            # Recherche si le champ existe déjà dans la base
            modif = False
            for IDval_champDB, IDchampDB in listeChampsDB:
                if IDchampDB == IDchamp:
                    # Le champ existe déjà, alors on le modifie :
                    DB.ReqMAJ("contrats_valchamps", listeDonnees,
                              "IDval_champ", IDval_champDB)
                    DB.Commit()
                    modif = True

            if modif == False:
                # Le champ n'existe pas dans la base, alors on le créée :
                ID = DB.ReqInsert("contrats_valchamps", listeDonnees)
                DB.Commit()

        # On efface les champs déjà créés qui ne sont plus utilisés :
        for IDval_champDB, IDchampDB in listeChampsDB:

            trouve = False
            for IDchamp, valeur in dictChamps.items():
                if IDchampDB == IDchamp: trouve = True

            if trouve == False:
                # On l'efface :
                DB.ReqDEL("contrats_valchamps", "IDval_champ", IDval_champDB)

        # Fermeture de la DB
        DB.Close()

        # Recherche si un parent est à mettre à jour
        if FonctionsPerso.FrameOuverte(
                "panel_config_Modeles_Contrats") != None:
            self.GetGrandParent().GetParent().MAJ_ListCtrl()

        return True
Ejemplo n.º 25
0
    def Supprimer(self, event):
        item = self.GetSelection()
        dictData = self.GetPyData(item)
        if dictData == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement sélectionner une étiquette à supprimer !"
                  ), "Erreur de saisie", wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        IDetiquette = dictData["IDetiquette"]

        dictConsoAssociees = self.RechercheNbreConsoAssociees()
        if dictConsoAssociees.has_key(IDetiquette):
            if dictConsoAssociees[IDetiquette] > 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Cette étiquette a déjà été associée à %d consommation(s) !\n\nVous ne pouvez donc pas la supprimer."
                      % dictConsoAssociees[IDetiquette]), "Erreur de saisie",
                    wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return

        # Confirmation de suppression des étiquettes enfants
        listeTousEnfants = []
        if self.GetChildrenCount(item, recursively=True) > 0:

            # Récupère la liste des tous les items enfants (récursif)
            self.GetItemsEnfants(listeTousEnfants, item)

            # Va servir à vérifier les liens avec les autres tables :
            for dictDataTemp in listeTousEnfants:
                if dictConsoAssociees.has_key(dictDataTemp["IDetiquette"]):
                    if dictConsoAssociees[dictDataTemp["IDetiquette"]] > 0:
                        dlg = wx.MessageDialog(
                            self,
                            _(u"L'étiquette enfant '%s' qui dépend de l'étiquette sélectionnée a déjà été associée à %d consommation(s) !\n\nVous ne pouvez donc pas supprimer l'étiquette parent."
                              % (dictDataTemp["label"],
                                 dictDataTemp["IDetiquette"])),
                            "Erreur de saisie", wx.OK | wx.ICON_EXCLAMATION)
                        dlg.ShowModal()
                        dlg.Destroy()
                        return

            # Demande de confirmation
            dlg = wx.MessageDialog(
                self,
                _(u"Attention, cette étiquette comporte des étiquettes enfants.\n\nSouhaitez-vous vraiment supprimer cette étiquette ? Les étiquettes enfants seront également supprimées !"
                  ), _(u"Suppression"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
            reponse = dlg.ShowModal()
            dlg.Destroy()
            if reponse != wx.ID_YES:
                return

        # Confirmation de suppression
        dlg = wx.MessageDialog(
            self, _(u"Souhaitez-vous vraiment supprimer cette étiquette ?"),
            _(u"Suppression"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        if dlg.ShowModal() == wx.ID_YES:
            DB = GestionDB.DB()

            # Suppression de l'étiquette
            DB.ReqDEL("etiquettes", "IDetiquette", dictData["IDetiquette"])

            # Suppression des étiquettes enfants également
            for dictTemp in listeTousEnfants:
                DB.ReqDEL("etiquettes", "IDetiquette", dictTemp["IDetiquette"])

            # Modification de l'ordre des étiquettes soeurs
            itemParent = self.GetItemParent(item)
            listeItemsSoeurs = []
            self.GetItemsEnfants(liste=listeItemsSoeurs,
                                 item=itemParent,
                                 recursif=False)
            ordre = 1
            for dictDataTemp in listeItemsSoeurs:
                if dictDataTemp["IDetiquette"] != dictData["IDetiquette"]:
                    DB.ReqMAJ("etiquettes", [
                        ("ordre", ordre),
                    ], "IDetiquette", dictDataTemp["IDetiquette"])
                    ordre += 1

            DB.Close()
            self.MAJ()

        dlg.Destroy()
Ejemplo n.º 26
0
    def GetTracks(self):
        """ Récupération des données """
        # Critères
        listeID = None
        self.criteres = ""
        # Liste de filtres
        if len(self.listeFiltres) > 0 :
            listeID, criteres = self.GetListeFiltres(self.listeFiltres)
            if criteres != "" :
                if self.criteres == "" :
                    self.criteres = "WHERE " + criteres
                else:
                    self.criteres += " AND " + criteres
        
        # Importation des villes par défaut
        DB = GestionDB.DB(nomFichier=Chemins.GetStaticPath("Databases/Geographie.dat"), suffixe=None)
        req = """SELECT IDville, nom, cp
        FROM villes %s ORDER BY nom; """ % self.criteres
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        DB.Close()

        # Importation des corrections de villes et codes postaux
        DB = GestionDB.DB()
        req = """SELECT IDcorrection, mode, IDville, nom, cp
        FROM corrections_villes; """ 
        DB.ExecuterReq(req)
        listeCorrections = DB.ResultatReq()
        DB.Close()
        
        # Ajout des corrections
        dictCorrections = {}
        for IDcorrection, mode, IDville, nom, cp in listeCorrections :
            dictCorrections[IDville] = {"mode":mode, "nom":nom, "cp":cp, "IDcorrection":IDcorrection}
            if mode == "ajout" :
                listeDonnees.append((100000+IDcorrection, nom, cp))

        listeListeView = []
        for IDville, nom, cp in listeDonnees :
            mode = None
            
            # Filtre de sélection
            valide = True
            if listeID != None :
                if IDville not in listeID :
                    valide = False
            
            # Traitement des corrections
            if dictCorrections.has_key(IDville) :
                mode = dictCorrections[IDville]["mode"]
                if mode == "modif" :
                    nom = dictCorrections[IDville]["nom"]
                    cp = dictCorrections[IDville]["cp"]
                    IDville = 100000 + dictCorrections[IDville]["IDcorrection"]
                if mode == "suppr" :
                    valide = False
            
            if IDville > 100000 and mode == None :
                mode = "ajout"
            
            # Création des tracks
            if valide == True :
                track = Track((IDville, nom, cp, mode))
                listeListeView.append(track)
                if self.selectionID == IDville :
                    self.selectionTrack = track
        return listeListeView
Ejemplo n.º 27
0
    def Supprimer(self, event):
        if len(self.Selection()) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez sélectionné aucun utilisateur à supprimer dans la liste !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel(
                "parametrage_utilisateurs", "supprimer") == False:
            return
        IDutilisateur = self.Selection()[0].IDutilisateur
        profil = self.Selection()[0].profil
        # Vérifie que cet utilisateur n'est pas déjà attribué à d'autres tables de données

        # Table Consommations
        DB = GestionDB.DB()
        req = """SELECT COUNT(IDconso)
        FROM consommations 
        WHERE IDutilisateur=%d
        ;""" % IDutilisateur
        DB.ExecuterReq(req)
        nbreConso = int(DB.ResultatReq()[0][0])
        DB.Close()
        if nbreConso > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Cet utilisateur a déjà été attribué à %d consommation(s).\n\nVous ne pouvez donc pas le supprimer !"
                  ) % nbreConso, _(u"Suppression impossible"),
                wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Table Règlements
        DB = GestionDB.DB()
        req = """SELECT COUNT(IDreglement)
        FROM reglements 
        WHERE IDutilisateur=%d
        ;""" % IDutilisateur
        DB.ExecuterReq(req)
        nbreReglements = int(DB.ResultatReq()[0][0])
        DB.Close()
        if nbreReglements > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Cet utilisateur a déjà été attribué à %d règlement(s).\n\nVous ne pouvez donc pas le supprimer !"
                  ) % nbreReglements, _(u"Suppression impossible"),
                wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Vérifie qu'il reste au moins un administrateur
        if profil == "administrateur":
            nbreAdmin = 0
            for track in self.donnees:
                if track.profil == "administrateur" and track.IDutilisateur != IDutilisateur:
                    nbreAdmin += 1
            if nbreAdmin == 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous ne pouvez pas supprimer le seul administrateur !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return

        # Suppression
        dlg = wx.MessageDialog(
            self, _(u"Souhaitez-vous vraiment supprimer cet utilisateur ?"),
            _(u"Suppression"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        if dlg.ShowModal() == wx.ID_YES:
            DB = GestionDB.DB()
            DB.ReqDEL("utilisateurs", "IDutilisateur", IDutilisateur)
            DB.ReqDEL("droits", "IDutilisateur", IDutilisateur)
            DB.Close()
            self.MAJ()
        dlg.Destroy()
Ejemplo n.º 28
0
    def Supprimer(self, event):
        item = self.GetSelection()
        dictData = self.GetPyData(item)
        if item == None or dictData == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement sélectionner une page ou un bloc à supprimer !"
                  ), "Erreur de saisie", wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        if 'phoenix' in wx.PlatformInfo:
            dictData = self.GetItemData(item)
        else:
            dictData = self.GetPyData(item)

        # Suppression d'une page
        if dictData["type"] == "page":

            # Confirmation de suppression des blocs
            listeTousEnfants = []
            if self.GetChildrenCount(item, recursively=True) > 0:

                # Récupère la liste des tous les items enfants (récursif)
                self.GetItemsEnfants(listeTousEnfants, item)

                # Demande de confirmation
                dlg = wx.MessageDialog(
                    self,
                    _(u"Attention, cette page comporte des blocs.\n\nSouhaitez-vous vraiment supprimer cette page ? Les blocs seront également supprimées !"
                      ), _(u"Suppression"), wx.YES_NO | wx.NO_DEFAULT
                    | wx.CANCEL | wx.ICON_INFORMATION)
                reponse = dlg.ShowModal()
                dlg.Destroy()
                if reponse != wx.ID_YES:
                    return

            # Confirmation de suppression
            dlg = wx.MessageDialog(
                self, _(u"Souhaitez-vous vraiment supprimer cette page ?"),
                _(u"Suppression"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
            if dlg.ShowModal() == wx.ID_YES:
                DB = GestionDB.DB()

                # Suppression de la page
                DB.ReqDEL("portail_pages", "IDpage", dictData["ID"])

                # Suppression des blocs également
                for dictTemp in listeTousEnfants:
                    DB.ReqDEL("portail_blocs", "IDbloc", dictTemp["ID"])
                    DB.ReqDEL("portail_elements", "IDbloc", dictTemp["ID"])

                # Modification de l'ordre des pages
                itemParent = self.GetItemParent(item)
                listeItemsSoeurs = []
                self.GetItemsEnfants(liste=listeItemsSoeurs,
                                     item=itemParent,
                                     recursif=False)
                ordre = 1
                for dictDataTemp in listeItemsSoeurs:
                    if dictDataTemp["ID"] != dictData["ID"]:
                        DB.ReqMAJ("portail_pages", [
                            ("ordre", ordre),
                        ], "IDpage", dictDataTemp["ID"])
                        ordre += 1

                DB.Close()
                self.MAJ()

            dlg.Destroy()

        # Suppression d'un bloc
        if dictData["type"] == "bloc":

            # Confirmation de suppression
            dlg = wx.MessageDialog(
                self, _(u"Souhaitez-vous vraiment supprimer ce bloc ?"),
                _(u"Suppression"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
            if dlg.ShowModal() == wx.ID_YES:
                DB = GestionDB.DB()

                # Suppression du bloc
                DB.ReqDEL("portail_blocs", "IDbloc", dictData["ID"])
                DB.ReqDEL("portail_elements", "IDbloc", dictData["ID"])

                # Modification de l'ordre des blocs
                itemParent = self.GetItemParent(item)
                listeItemsSoeurs = []
                self.GetItemsEnfants(liste=listeItemsSoeurs,
                                     item=itemParent,
                                     recursif=False)
                ordre = 1
                for dictDataTemp in listeItemsSoeurs:
                    if dictDataTemp["ID"] != dictData["ID"]:
                        DB.ReqMAJ("portail_blocs", [
                            ("ordre", ordre),
                        ], "IDbloc", dictDataTemp["ID"])
                        ordre += 1

                DB.Close()
                self.MAJ()

            dlg.Destroy()

        # Mémorise la date de la modification
        self.MemoriseDateModification()
Ejemplo n.º 29
0
    def Validation(self):
        """ Validation des données saisies """
        # Vérifie date début
        date_debut = self.ctrl_date_debut.GetDate()
        if self.ctrl_date_debut.FonctionValiderDate(
        ) == False or date_debut == None:
            dlg = wx.MessageDialog(
                self,
                _(u"La date de début de période ne semble pas valide !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_debut.SetFocus()
            return False

        # Vérifie date fin
        date_fin = self.ctrl_date_fin.GetDate()
        if self.ctrl_date_fin.FonctionValiderDate(
        ) == False or date_fin == None:
            dlg = wx.MessageDialog(
                self, _(u"La date de fin de période ne semble pas valide !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_fin.SetFocus()
            return False

        # Vérifie les deux dates
        if date_debut > date_fin:
            dlg = wx.MessageDialog(
                self,
                _(u"La date de début de période est supérieure à la date de fin !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_fin.SetFocus()
            return False

        # Vérifie que la période sélectionnée n'est pas dans une période de gestion
        gestion = UTILS_Gestion.Gestion(None)
        if gestion.IsPeriodeinPeriodes("factures", date_debut,
                                       date_fin) == False:
            return False

        # Vérifier si lot de factures
        IDlot = self.ctrl_lot.GetID()
        nomLot = self.ctrl_lot.GetNom()
        if IDlot == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez pas sélectionné de lot de factures à associer.\n\nSouhaitez-vous quand même continuer ?"
                  ), _(u"Confirmation"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION)
            resultat = dlg.ShowModal()
            dlg.Destroy()
            if resultat != wx.ID_YES:
                return False

        # Préfixe de facture
        IDprefixe = self.ctrl_prefixe.GetID()
        prefixe = self.ctrl_prefixe.GetPrefixe()

        # Prochain numéro de facture
        if self.check_numero_auto.GetValue() == True:
            # Numéro auto
            prochain_numero = None
        else:
            # Numéro perso
            try:
                prochain_numero = int(self.ctrl_prochain_numero.GetValue())
            except:
                prochain_numero = None
            if prochain_numero in (None, ""):
                dlg = wx.MessageDialog(
                    self,
                    _(u"Le prochain numéro de facture ne semble pas valide !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_prochain_numero.SetFocus()
                return False

            if prochain_numero < self.prochain_numero_defaut:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Le prochain numéro de facture n'est pas valide : une facture générée porte déjà un numéro égal ou supérieur !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_prochain_numero.SetFocus()
                return False

        # Date d'émission
        date_emission = self.ctrl_date_emission.GetDate()
        if self.ctrl_date_emission.FonctionValiderDate(
        ) == False or date_emission == None:
            dlg = wx.MessageDialog(
                self, _(u"La date d'émission ne semble pas valide !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_emission.SetFocus()
            return False

        # Date d'échéance
        date_echeance = self.ctrl_date_echeance.GetDate()
        if date_echeance == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez pas saisi de date d'échéance. \n\nSouhaitez-vous quand même continuer ?"
                  ), _(u"Confirmation"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION)
            resultat = dlg.ShowModal()
            dlg.Destroy()
            if resultat != wx.ID_YES:
                return False

        # Vérifier si lot de factures
        prestations = []
        if self.check_consommations.GetValue() == True:
            prestations.append("consommation")
        if self.check_cotisations.GetValue() == True:
            prestations.append("cotisation")
        if self.check_locations.GetValue() == True:
            prestations.append("location")
        if self.check_autres.GetValue() == True: prestations.append("autre")
        if len(prestations) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement cocher au moins un type de prestation à facturer !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        # Familles
        if self.radio_familles_toutes.GetValue() == True:
            IDcompte_payeur_unique = None
        else:
            IDcompte_payeur_unique = self.ctrl_famille.GetIDcompte_payeur()
            if IDcompte_payeur_unique == None:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous avez sélectionné l'option 'famille unique' mais sans sélectionner de famille dans la liste proposée !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return False

        # Vérifie les activités sélectionnées
        listeActivites = self.ctrl_activites.GetActivites()
        if len(listeActivites) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez sélectionné aucune activité.\n\nSouhaitez-vous quand même continuer ?"
                  ), _(u"Avertissement"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION)
            resultat = dlg.ShowModal()
            dlg.Destroy()
            if resultat != wx.ID_YES:
                return False

        # Date antérieure
        date_anterieure = None
        if self.check_prestations_anterieures.GetValue() == True:
            date_anterieure = self.ctrl_date_anterieures.GetDate()
            if self.ctrl_date_anterieures.FonctionValiderDate(
            ) == False or date_anterieure == None:
                dlg = wx.MessageDialog(
                    self, _(u"La date antérieure ne semble pas valide !"),
                    _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_date_anterieures.SetFocus()
                return False

        # Vérification droits utilisateurs
        for IDactivite in listeActivites:
            if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel(
                    "facturation_factures",
                    "creer",
                    IDactivite=IDactivite,
                    afficheMessage=False) == False:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous n'avez pas l'autorisation de générer des factures pour l'ensemble des activités sélectionnées !"
                      ), _(u"Action non autorisée"),
                    wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return False

        # Vérifie la compatibilité des régies des activités sélectionnées
        IDregie = None
        if len(listeActivites) >= 1:
            listeAllRegies = []
            for IDactivite in listeActivites:
                DB = GestionDB.DB()
                req = """SELECT regie
                FROM activites
                WHERE IDactivite = %d""" % IDactivite
                DB.ExecuterReq(req)
                listeresult = DB.ResultatReq()
                result = listeresult[0]
                listeAllRegies.append(result[0])
                DB.Close()
            listeRegies = list(set(listeAllRegies))
            if len(listeRegies) > 1:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous ne pouvez pas générer des factures pour l'ensemble des activités sélectionnées !\n\nCertaines activités sont liées à des régies différentes"
                      ), _(u"Régies différentes"),
                    wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return False
            else:
                IDregie = listeRegies[0]

        # Envoi des données à DLG_Factures_generation
        self.parent.dictParametres = {
            "date_debut": date_debut,
            "date_fin": date_fin,
            "IDlot": IDlot,
            "nomLot": nomLot,
            "date_emission": date_emission,
            "date_echeance": date_echeance,
            "prochain_numero": prochain_numero,
            "prestations": prestations,
            "IDcompte_payeur": IDcompte_payeur_unique,
            "listeActivites": listeActivites,
            "IDprefixe": IDprefixe,
            "prefixe": prefixe,
            "date_anterieure": date_anterieure,
            "IDregie": IDregie,
        }

        return True
Ejemplo n.º 30
0
    def Importation(self):
        """ Importation des données """
        dictDonnees = {}
        if self.IDmodele == None or self.date_debut == None or self.date_fin == None:
            return dictDonnees

        DB = GestionDB.DB()

        # Modèle
        req = """SELECT modeles_commandes.nom, modeles_commandes.IDrestaurateur, parametres,
        restaurateurs.nom, restaurateurs.tel, restaurateurs.mail
        FROM modeles_commandes 
        LEFT JOIN restaurateurs ON restaurateurs.IDrestaurateur = modeles_commandes.IDrestaurateur
        WHERE IDmodele=%d;""" % self.IDmodele
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        if len(listeDonnees) > 0:
            nom_modele, IDrestaurateur, parametres, restaurateur_nom, restaurateur_tel, restaurateur_mail = listeDonnees[
                0]
            if type(parametres) in (str, unicode):
                exec(u"parametres = %s" % parametres)

            dictDonnees["modele_nom"] = nom_modele
            dictDonnees["modele_parametres"] = parametres
            dictDonnees["IDrestaurateur"] = IDrestaurateur
            dictDonnees["restaurateur_nom"] = restaurateur_nom
            dictDonnees["restaurateur_tel"] = restaurateur_tel
            dictDonnees["restaurateur_mail"] = restaurateur_mail

        # Colonnes
        req = """SELECT IDcolonne, ordre, nom, largeur, categorie, parametres
        FROM modeles_commandes_colonnes 
        WHERE IDmodele=%d
        ORDER BY ordre;""" % self.IDmodele
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        dictDonnees["liste_colonnes"] = []
        dictDonnees["dict_colonnes"] = {}
        if len(listeDonnees) > 0:
            index = 0
            for IDcolonne, ordre, nom_colonne, largeur, categorie, parametres in listeDonnees:
                if type(parametres) in (str, unicode):
                    exec(u"parametres = %s" % parametres)
                dictColonne = {
                    "IDcolonne": IDcolonne,
                    "ordre": ordre,
                    "nom_colonne": nom_colonne,
                    "largeur": largeur,
                    "categorie": categorie,
                    "parametres": parametres
                }
                dictDonnees["liste_colonnes"].append(dictColonne)

                dictDonnees["dict_colonnes"][index] = dictColonne
                index += 1

        # Recherche les activités concernées
        listeUnites = []
        for dictColonne in dictDonnees["liste_colonnes"]:
            if dictColonne["parametres"].has_key("unites"):
                for (IDgroupe, IDunite) in dictColonne["parametres"]["unites"]:
                    if IDunite not in listeUnites:
                        listeUnites.append(IDunite)

        if len(listeUnites) == 0: conditionUnites = "()"
        elif len(listeUnites) == 1: conditionUnites = "(%d)" % listeUnites[0]
        else: conditionUnites = str(tuple(listeUnites))

        # Ouvertures
        req = """SELECT IDouverture, IDactivite, IDunite, IDgroupe, date
        FROM ouvertures
        WHERE date>='%s' AND date<='%s' AND IDunite IN %s;""" % (
            self.date_debut, self.date_fin, conditionUnites)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        dictDonnees["liste_ouvertures"] = []
        dictDonnees["dict_ouvertures"] = {}
        dictDonnees["liste_dates"] = []
        for IDouverture, IDactivite, IDunite, IDgroupe, date in listeDonnees:
            date = UTILS_Dates.DateEngEnDateDD(date)
            dictOuverture = {
                "IDouverture": IDouverture,
                "IDactivite": IDactivite,
                "IDunite": IDunite,
                "IDgroupe": IDgroupe,
                "date": date
            }
            dictDonnees["liste_ouvertures"].append(dictOuverture)

            # Mémorisation dans un dict
            dictDonnees["dict_ouvertures"] = UTILS_Divers.DictionnaireImbrique(
                dictionnaire=dictDonnees["dict_ouvertures"],
                cles=[date, IDgroupe, IDunite],
                valeur=True)

            # Mémorisation des dates
            if date not in dictDonnees["liste_dates"]:
                dictDonnees["liste_dates"].append(date)
        dictDonnees["liste_dates"].sort()

        dictDonnees["liste_dates"].append(_(u"Total"))

        # Consommations
        req = """SELECT IDconso, date, IDgroupe, IDunite, IDindividu
        FROM consommations 
        WHERE date>='%s' AND date<='%s' AND IDunite IN %s AND consommations.etat IN ('reservation', 'present')
        ;""" % (self.date_debut, self.date_fin, conditionUnites)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        dictDonnees["dict_conso"] = {}
        dictDonnees["liste_individus"] = []
        dictDonnees["dict_dates"] = {}
        for IDconso, date, IDgroupe, IDunite, IDindividu in listeDonnees:
            date = UTILS_Dates.DateEngEnDateDD(date)

            if dictDonnees["dict_conso"].has_key(date) == False:
                dictDonnees["dict_conso"][date] = {}
            if dictDonnees["dict_conso"][date].has_key(IDgroupe) == False:
                dictDonnees["dict_conso"][date][IDgroupe] = {}
            if dictDonnees["dict_conso"][date][IDgroupe].has_key(
                    IDunite) == False:
                dictDonnees["dict_conso"][date][IDgroupe][IDunite] = 0
            dictDonnees["dict_conso"][date][IDgroupe][IDunite] += 1

            if IDindividu not in dictDonnees["liste_individus"]:
                dictDonnees["liste_individus"].append(IDindividu)

            if dictDonnees["dict_dates"].has_key(date) == False:
                dictDonnees["dict_dates"][date] = {}
            if dictDonnees["dict_dates"][date].has_key(IDindividu) == False:
                dictDonnees["dict_dates"][date][IDindividu] = []
            if IDgroupe not in dictDonnees["dict_dates"][date][IDindividu]:
                dictDonnees["dict_dates"][date][IDindividu].append(IDgroupe)

        if len(dictDonnees["liste_individus"]) == 0: conditionIndividus = "()"
        elif len(dictDonnees["liste_individus"]) == 1:
            conditionIndividus = "(%d)" % dictDonnees["liste_individus"][0]
        else:
            conditionIndividus = str(tuple(dictDonnees["liste_individus"]))

        # Informations médicales
        req = """SELECT IDprobleme, problemes_sante.IDindividu, IDtype, intitule, date_debut, date_fin, description, traitement_medical,
        description_traitement, date_debut_traitement, date_fin_traitement,
        individus.nom, individus.prenom
        FROM problemes_sante 
        LEFT JOIN individus ON individus.IDindividu = problemes_sante.IDindividu
        WHERE diffusion_listing_repas=1 AND problemes_sante.IDindividu IN %s
        ;""" % conditionIndividus
        DB.ExecuterReq(req)
        listeInformations = DB.ResultatReq()
        dictInfosMedicales = {}
        for IDprobleme, IDindividu, IDtype, intitule, date_debut, date_fin, description, traitement_medical, description_traitement, date_debut_traitement, date_fin_traitement, individu_nom, individu_prenom in listeInformations:
            date_debut = UTILS_Dates.DateEngEnDateDD(date_debut)
            date_fin = UTILS_Dates.DateEngEnDateDD(date_fin)

            if dictInfosMedicales.has_key(IDindividu) == False:
                dictInfosMedicales[IDindividu] = []
            dictTemp = {
                "IDprobleme": IDprobleme,
                "IDcategorie": IDtype,
                "intitule": intitule,
                "date_debut": date_debut,
                "date_fin": date_fin,
                "description": description,
                "traitement_medical": traitement_medical,
                "description_traitement": description_traitement,
                "date_debut_traitement": date_debut_traitement,
                "date_fin_traitement": date_fin_traitement,
                "individu_nom": individu_nom,
                "individu_prenom": individu_prenom,
            }
            dictInfosMedicales[IDindividu].append(dictTemp)
        dictDonnees["infos_medicales"] = dictInfosMedicales

        # Messages
        req = """SELECT IDmessage, IDcategorie, priorite,
        messages.IDindividu, texte, individus.nom, individus.prenom
        FROM messages
        LEFT JOIN individus ON individus.IDindividu = messages.IDindividu
        WHERE afficher_commande=1 AND messages.IDindividu IN %s
        ;""" % conditionIndividus
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        dictMessages = {}
        for IDmessage, IDcategorie, priorite, IDindividu, texte, individu_nom, individu_prenom in listeDonnees:
            dictTemp = {
                "IDmessage": IDmessage,
                "IDindividu": IDindividu,
                "priorite": priorite,
                "texte": texte,
                "individu_nom": individu_nom,
                "individu_prenom": individu_prenom
            }
            if dictMessages.has_key(IDindividu) == False:
                dictMessages[IDindividu] = []
            dictMessages[IDindividu].append(dictTemp)
        dictDonnees["messages"] = dictMessages

        # Repas
        dictDonnees["valeurs"] = {}
        if self.IDcommande != None:
            req = """SELECT IDvaleur, date, IDcolonne, valeur
            FROM commandes_valeurs
            WHERE IDcommande=%d
            ;""" % self.IDcommande
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()

            for IDvaleur, date, IDcolonne, valeur in listeDonnees:
                date = UTILS_Dates.DateEngEnDateDD(date)
                if dictDonnees["valeurs"].has_key(date) == False:
                    dictDonnees["valeurs"][date] = {}
                dictDonnees["valeurs"][date][IDcolonne] = {
                    "IDvaleur": IDvaleur,
                    "valeur": valeur
                }

        # Menus
        if dictDonnees.has_key("IDrestaurateur"):
            IDrestaurateur = dictDonnees["IDrestaurateur"]
            if IDrestaurateur == None:
                IDrestaurateur = 0
        else:
            IDrestaurateur = 0
        req = """SELECT IDmenu, menus.IDcategorie, menus_categories.nom, date, texte
        FROM menus
        LEFT JOIN menus_categories ON menus_categories.IDcategorie = menus.IDcategorie
        WHERE date>='%s' AND date<='%s' AND IDrestaurateur=%d
        ORDER BY menus_categories.ordre;""" % (self.date_debut, self.date_fin,
                                               IDrestaurateur)
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        dict_menus = {}
        for IDmenu, IDcategorie, nom_categorie, date, texte in listeDonnees:
            date = UTILS_Dates.DateEngEnDateDD(date)
            if dict_menus.has_key(date) == False:
                dict_menus[date] = []
            dict_menus[date].append({
                "IDmenu": IDmenu,
                "IDcategorie": IDcategorie,
                "nom_categorie": nom_categorie,
                "texte": texte
            })
        dictDonnees["dict_menus"] = dict_menus

        DB.Close()

        return dictDonnees