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

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

        # Récupération des infos sur l'organisme
        DB = GestionDB.DB()
        req = """SELECT nom, rue, cp, ville, tel, fax, mail, site, num_agrement, num_siret, code_ape
        FROM organisateur
        WHERE IDorganisateur=1;"""
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        dictOrganisme = {}
        for nom, rue, cp, ville, tel, fax, mail, site, num_agrement, num_siret, code_ape in listeDonnees:
            dictOrganisme["nom"] = nom
            dictOrganisme["rue"] = rue
            dictOrganisme["cp"] = cp
            if ville != None: ville = ville.capitalize()
            dictOrganisme["ville"] = ville
            dictOrganisme["tel"] = tel
            dictOrganisme["fax"] = fax
            dictOrganisme["mail"] = mail
            dictOrganisme["site"] = site
            dictOrganisme["num_agrement"] = num_agrement
            dictOrganisme["num_siret"] = num_siret
            dictOrganisme["code_ape"] = code_ape
        DB.Close()

        date_editionDD = datetime.date.today()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        return dictChampsFusion
Beispiel #3
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