コード例 #1
0
ファイル: annexes.py プロジェクト: gusthiot/PyFactEl
    def creation_annexes(sommes, clients, edition, livraisons, acces, machines, reservations, prestations, comptes,
                         dossier_annexe, plateforme, prefixe, coefprests, coefmachines, generaux, garde):
        """
        création des annexes techniques
        :param sommes: sommes calculées
        :param clients: clients importés
        :param edition: paramètres d'édition
        :param livraisons: livraisons importées
        :param acces: accès importés
        :param machines: machines importées
        :param reservations: réservations importées
        :param prestations: prestations importées
        :param comptes: comptes importés
        :param dossier_annexe: nom du dossier dans lequel enregistrer les annexes
        :param plateforme: OS utilisé
        :param prefixe: prefixe de nom des annexes
        :param coefprests: coefficients prestations importés
        :param coefmachines: coefficients machines importés
        :param generaux: paramètres généraux
        :param garde: titre page de garde
        """

        if sommes.calculees == 0:
            info = "Vous devez d'abord faire toutes les sommes avant de pouvoir créer les annexes"
            print(info)
            Outils.affiche_message(info)
            return

        for code_client in sommes.sommes_clients.keys():
            contenu = Latex.entete(plateforme)
            contenu += r'''\usepackage[margin=10mm, includefoot]{geometry}
                \usepackage{multirow}
                \usepackage{longtable}
                \usepackage{dcolumn}
                \usepackage{changepage}
                \usepackage[scriptsize]{caption}

                \begin{document}
                \renewcommand{\arraystretch}{1.5}
                '''
            contenu += r'''
                \vspace*{8cm}
                \begin{adjustwidth}{5cm}{}
                \Large\textsc{''' + garde + r'''}\newline\newline'''
            nom = Latex.echappe_caracteres(clients.donnees[code_client]['abrev_labo'])
            code_sap = clients.donnees[code_client]['code_sap']

            contenu += code_client + " - " + code_sap + " - " + nom + r'''\newpage
                \end{adjustwidth}'''
            contenu += Annexes.contenu_client(sommes, clients, code_client, edition, livraisons, acces, machines,
                                              reservations, prestations, comptes, coefprests, coefmachines, generaux)
            contenu += r'''\end{document}'''

            nom = prefixe + str(edition.annee) + "_" + Outils.mois_string(edition.mois) + "_" + \
                  str(edition.version) + "_" + code_client

            Latex.creer_latex_pdf(nom, contenu, dossier_annexe)
コード例 #2
0
ファイル: annexes.py プロジェクト: gusthiot/PySubsEl-V3
    def annexes(consolidation, plateforme, subgeneraux, subedition,
                dossier_annexe):
        """
        création des annexes de subsides
        :param consolidation: classe de consolidation des données des bilans
        :param plateforme: OS utilisé
        :param subgeneraux: paramètres généraux
        :param subedition: paramètres d'édition
        :param dossier_annexe: nom du dossier dans lequel enregistrer le dossier des annexes
        """
        for code_client, dcl in consolidation.clients.items():
            code_client = Latex.echappe_caracteres(code_client)

            contenu = Latex.entete(plateforme)
            contenu += r'''
                \usepackage[margin=10mm, includehead]{geometry}
                \usepackage{changepage}
                \usepackage{graphicx}
                \usepackage{longtable}
                \usepackage{dcolumn}
                \usepackage[scriptsize]{caption}
                \usepackage{fancyhdr}
                '''

            if subedition.filigrane != "":
                contenu += r'''
                    \usepackage{draftwatermark}
                    \SetWatermarkLightness{0.8}
                    \SetWatermarkAngle{45}
                    \SetWatermarkScale{2}
                    \SetWatermarkFontSize{2cm}
                    \SetWatermarkText{''' + subedition.filigrane[:15] + r'''}
                    '''

            contenu += r'''
                \pagestyle{fancy}

                \fancyhead{}
                \fancyfoot{}

                \renewcommand{\headrulewidth}{0pt}
                \renewcommand{\footrulewidth}{0pt}

                \fancyhead[L]{\leftmark \\ \rightmark}
                \fancyhead[R]{\thepage}

                \newcommand{\fakesection}[2]{
                    \markboth{#1}{#2}
                }
                
                \begin{document}
                \renewcommand{\arraystretch}{1.5}
                '''
            reference = "SUBS" + str(subedition.annee_fin_general)[2:] + \
                        Outils.mois_string(subedition.mois_fin_general) + "." + code_client

            contenu += r'''
                \begin{titlepage}
                \vspace*{8cm}
                \begin{adjustwidth}{5cm}{}
                \Large\textsc{Annexes subsides \newline Subsidies Appendices}\newline
                \Large\textsc{''' + reference + r'''}\newline\newline\newline
                '''

            debut = Outils.mois_nom(subedition.mois_debut_general) + " " + str(
                subedition.annee_debut_general)
            fin = Outils.mois_nom(subedition.mois_fin_general) + " " + str(
                subedition.annee_fin_general)
            dic_entete = {
                'code': code_client,
                'code_sap': Latex.echappe_caracteres(dcl['sap']),
                'nom': Latex.echappe_caracteres(dcl['abrev']),
                'debut': debut,
                'fin': fin
            }

            contenu += r'''Client %(code)s - %(code_sap)s - %(nom)s \newline
                 %(debut)s - %(fin)s
                \end{adjustwidth}
                \end{titlepage}    
                \clearpage
                ''' % dic_entete
            contenu += Annexes.contenu_client(code_client, consolidation,
                                              subgeneraux, subedition)
            contenu += r'''\end{document}'''

            nom = "subside_" + str(subedition.annee_fin_general) + "_" + \
                  Outils.mois_string(subedition.mois_fin_general) + "_" + code_client

            Latex.creer_latex_pdf(nom, contenu, dossier_annexe)
コード例 #3
0
    def annexes(sommes, clients, edition, livraisons, acces, machines,
                reservations, comptes, paramannexe, generaux, users,
                categories, docpdf):
        """
        création des annexes
        :param sommes: sommes calculées
        :param clients: clients importés
        :param edition: paramètres d'édition
        :param livraisons: livraisons importées
        :param acces: accès importés
        :param machines: machines importées
        :param reservations: réservations importées
        :param comptes: comptes importés
        :param paramannexe: paramètres d'annexe
        :param generaux: paramètres généraux
        :param users: users importés
        :param categories: catégories importées
        :param docpdf: paramètres d'ajout de document pdf
        """

        if sommes.calculees == 0:
            info = "Vous devez d'abord faire toutes les sommes avant de pouvoir créer les annexes"
            Outils.affiche_message(info)
            return

        for code_client, scl in sommes.sommes_clients.items():
            code_client = Latex.echappe_caracteres(code_client)
            client = clients.donnees[code_client]
            nature = Latex.echappe_caracteres(
                generaux.code_ref_par_code_n(client['nature']))
            av_hc = Latex.echappe_caracteres(
                generaux.avantage_hc_par_code_n(client['nature']))
            reference = nature + str(edition.annee)[2:] + Outils.mois_string(
                edition.mois) + "." + code_client
            if edition.version > 0:
                reference += "-" + str(edition.version)

            filtre = generaux.filtrer_article_nul_par_code_n(client['nature'])

            contenu_prix_xaj = ""
            contenu_prix_xf = ""
            inc_fact = 1

            contenu_prix_lvr_xdj_tab = {}
            for article in generaux.articles_d3:
                contenu_prix_lvr_xdj_tab[article.code_d] = ""

            contenu_projets = ""
            contenu_details = ""

            todo = {}
            for donnee in paramannexe.donnees:
                if generaux.code_ref_par_code_n(client['nature']) == "INT":
                    todo[donnee['nom']] = donnee['int']
                elif client['mode'] == "MAIL":
                    todo[donnee['nom']] = donnee['ext_mail']
                else:
                    todo[donnee['nom']] = donnee['ext_postal']

            if code_client in sommes.sommes_comptes:
                comptes_utilises = Outils.comptes_in_somme(
                    sommes.sommes_comptes[code_client], comptes)

                for id_compte, num_compte in sorted(comptes_utilises.items(),
                                                    key=lambda x: x[1]):
                    id_compte = Latex.echappe_caracteres(id_compte)

                    # ## COMPTE

                    sco = sommes.sommes_comptes[code_client][id_compte]
                    compte = comptes.donnees[id_compte]
                    intitule_compte = Latex.echappe_caracteres(
                        compte['numero'] + " - " + compte['intitule'])

                    # ## ligne Prix XF - Table Client Récap Postes de la facture

                    if sco['c1'] > 0 and not (filtre == "OUI"
                                              and sco['c2'] == 0):
                        poste = inc_fact * 10
                        intitule = Latex.echappe_caracteres(
                            intitule_compte + " - " +
                            generaux.articles[2].intitule_long)

                        if sco['somme_j_mm'] > 0 and not (filtre == "OUI"
                                                          and sco['mj'] == 0):
                            dico_prix_xf = {
                                'intitule': intitule,
                                'poste': str(poste),
                                'mm': Outils.format_2_dec(sco['somme_j_mm']),
                                'mr': Outils.format_2_dec(sco['somme_j_mr']),
                                'mj': Outils.format_2_dec(sco['mj'])
                            }
                            contenu_prix_xf += r'''
                                %(poste)s & %(intitule)s & %(mm)s  & %(mr)s & %(mj)s \\
                                \hline
                                ''' % dico_prix_xf
                            poste += 1

                        for article in generaux.articles_d3:
                            categorie = article.code_d
                            if sco['sommes_cat_m'][categorie] > 0 and not (
                                    filtre == "OUI"
                                    and sco['tot_cat'][article.code_d] == 0):
                                intitule = Latex.echappe_caracteres(
                                    intitule_compte + " - " +
                                    article.intitule_long)
                                dico_prix_xf = {
                                    'intitule':
                                    intitule,
                                    'poste':
                                    str(poste),
                                    'mm':
                                    Outils.format_2_dec(
                                        sco['sommes_cat_m'][article.code_d]),
                                    'mr':
                                    Outils.format_2_dec(
                                        sco['sommes_cat_r'][article.code_d]),
                                    'mj':
                                    Outils.format_2_dec(
                                        sco['tot_cat'][article.code_d])
                                }
                                contenu_prix_xf += r'''
                                    %(poste)s & %(intitule)s & %(mm)s  & %(mr)s & %(mj)s \\
                                    \hline
                                    ''' % dico_prix_xf
                                poste += 1

                        inc_fact += 1

                    # ## ligne Prix XA/J - Table Client Récap Articles/Compte

                    total = sco['mj']
                    dico_prix_xaj = {
                        'compte': intitule_compte,
                        'type':
                        Latex.echappe_caracteres(compte['type_subside']),
                        'procede': Outils.format_2_dec(sco['mj'])
                    }

                    ligne = r'''%(compte)s & %(type)s & %(procede)s ''' % dico_prix_xaj

                    for categorie in generaux.codes_d3():
                        total += sco['tot_cat'][categorie]
                        ligne += r''' & ''' + Outils.format_2_dec(
                            sco['tot_cat'][categorie])

                    if total > 0:
                        dico_prix_xaj['total'] = Outils.format_2_dec(total)
                        ligne += r'''& %(total)s \\
                            \hline
                            ''' % dico_prix_xaj
                        contenu_prix_xaj += ligne

                    # ## ligne Prix LVR X/D/J - Table Client Récap Prestations livr./code D/Compte

                    if code_client in livraisons.sommes and id_compte in livraisons.sommes[
                            code_client]:
                        for article in generaux.articles_d3:
                            if article.code_d in livraisons.sommes[
                                    code_client][id_compte]:
                                if contenu_prix_lvr_xdj_tab[
                                        article.code_d] == "":
                                    contenu_prix_lvr_xdj_tab[
                                        article.code_d] = r'''
                                        \cline{2-4}
                                        \multicolumn{1}{c}{} & \multicolumn{3}{|c|}{
                                        ''' + Latex.echappe_caracteres(
                                            article.intitule_long) + r'''} \\
                                        \hline
                                        Compte & Montant & Rabais & Montant net \\
                                        \hline
                                        '''
                                dico_prest_client = {
                                    'intitule':
                                    intitule_compte,
                                    'cmj':
                                    Outils.format_2_dec(
                                        sco['sommes_cat_m'][article.code_d]),
                                    'crj':
                                    Outils.format_2_dec(
                                        sco['sommes_cat_r'][article.code_d]),
                                    'cj':
                                    Outils.format_2_dec(
                                        sco['tot_cat'][article.code_d])
                                }
                                contenu_prix_lvr_xdj_tab[
                                    article.code_d] += r'''
                                %(intitule)s & %(cmj)s & %(crj)s & %(cj)s \\
                                \hline
                                ''' % dico_prest_client

                    # ##

                    ann_pro_titre = "Récapitulatif du projet : " + intitule_compte
                    contenu_projets += Annexes.titre_annexe(
                        client, edition, generaux, reference, ann_pro_titre,
                        "Annexe facture")
                    contenu_projets += Annexes.section(client, generaux,
                                                       reference,
                                                       ann_pro_titre)

                    contenu_projets += TablesAnnexes.table_prix_ja(
                        sco, generaux)
                    contenu_projets += TablesAnnexes.table_prix_cae_jk(
                        code_client, id_compte, intitule_compte, sco,
                        acces.sommes, categories)
                    contenu_projets += TablesAnnexes.table_prix_lvr_jd(
                        code_client, id_compte, intitule_compte, sco,
                        livraisons.sommes, generaux)
                    if av_hc == "RABAIS":
                        contenu_projets += TablesAnnexes.table_prix_jdmu(
                            code_client, id_compte, intitule_compte, sco,
                            acces.sommes, machines, users)
                    contenu_projets += r'''\clearpage'''

                    ann_det_titre = "Annexe détaillée du projet : " + intitule_compte
                    contenu_details += Annexes.titre_annexe(
                        client, edition, generaux, reference, ann_det_titre,
                        "Annexe facture")
                    contenu_details += Annexes.section(client, generaux,
                                                       reference,
                                                       ann_det_titre)
                    contenu_details += TablesAnnexes.table_tps_cae_jkmu(
                        code_client, id_compte, intitule_compte, users,
                        machines, categories, acces)
                    if code_client in livraisons.sommes and id_compte in livraisons.sommes[
                            code_client]:
                        contenu_details += TablesAnnexes.table_qte_lvr_jdu(
                            code_client, id_compte, intitule_compte, generaux,
                            livraisons, users)
                    contenu_details += r'''\clearpage'''

                    # ## compte

            contenu_cae_xmu = TablesAnnexes.contenu_tps_m_cae_xmu(
                code_client, scl, acces.sommes, machines, users, comptes)

            suffixe = "_" + str(edition.annee) + "_" + Outils.mois_string(
                edition.mois) + "_"
            suffixe += str(edition.version) + "_" + code_client

            # ## Début des tableaux

            pdfs_annexes = {}

            if scl['somme_t'] > 0:
                if todo['Annexe-client'] != "NO":
                    contenu_annexe_client = Annexes.entete(edition)
                    contenu_annexe_client += Annexes.titre_annexe(
                        client, edition, generaux, reference,
                        "Récapitulatif pour le client", "Annexe facture")
                    contenu_annexe_client += Annexes.section(
                        client, generaux, reference,
                        "Récapitulatif pour le client")

                    contenu_annexe_client += TablesAnnexes.table_prix_xf(
                        scl, generaux, filtre, contenu_prix_xf)
                    contenu_annexe_client += TablesAnnexes.table_prix_xaj(
                        scl, generaux, contenu_prix_xaj)
                    if av_hc == "BONUS":
                        contenu_annexe_client += TablesAnnexes.table_points_xbmu(
                            code_client, scl, acces.sommes, machines, users)
                    contenu_annexe_client += TablesAnnexes.table_prix_xrmu(
                        code_client, scl, reservations.sommes, machines, users)
                    contenu_annexe_client += r'''\end{document}'''
                    Latex.creer_latex_pdf('Annexe-client' + suffixe,
                                          contenu_annexe_client)
                    pdfs_annexes['Annexe-client'] = [
                        'Annexe-client' + suffixe + ".pdf"
                    ]

                if not contenu_projets == "" and todo['Annexe-projets'] != "NO":
                    contenu_annexe_projets = Annexes.entete(edition)
                    contenu_annexe_projets += contenu_projets
                    contenu_annexe_projets += r'''\end{document}'''
                    Latex.creer_latex_pdf('Annexe-projets' + suffixe,
                                          contenu_annexe_projets)
                    pdfs_annexes['Annexe-projets'] = [
                        'Annexe-projets' + suffixe + ".pdf"
                    ]

                if todo['Annexe-détails'] != "NO":
                    contenu_details_2 = ""
                    if code_client in reservations.sommes or contenu_cae_xmu != "":
                        contenu_details_2 += Annexes.titre_annexe(
                            client, edition, generaux, reference,
                            "Annexe détaillée des pénalités de réservation",
                            "Annexe facture")
                        contenu_details_2 += Annexes.section(
                            client, generaux, reference,
                            "Annexe détaillée des pénalités de réservation")
                        contenu_details_2 += TablesAnnexes.table_tps_penares_xmu(
                            code_client, scl, acces.sommes,
                            reservations.sommes, machines, users)
                        contenu_details_2 += TablesAnnexes.table_tps_m_cae_xmu(
                            code_client, acces, contenu_cae_xmu)
                        contenu_details_2 += TablesAnnexes.table_tps_res_xmu(
                            code_client, reservations, machines, users)
                    if not contenu_details == "" or not contenu_details_2 == "":
                        contenu_annexe_details = Annexes.entete(edition)
                        contenu_annexe_details += contenu_details
                        contenu_annexe_details += contenu_details_2
                        contenu_annexe_details += r'''\end{document}'''
                        Latex.creer_latex_pdf('Annexe-détails' + suffixe,
                                              contenu_annexe_details)
                        pdfs_annexes['Annexe-détails'] = [
                            'Annexe-détails' + suffixe + ".pdf"
                        ]

                if docpdf is not None and todo['Annexe-pièces'] != "NO":
                    pdfs = docpdf.pdfs_pour_client(client, 'Annexe-pièces')
                    if pdfs is not None and len(pdfs) > 0:
                        nom_pdf = 'Annexe-pièces' + suffixe
                        pieces = [nom_pdf + '.pdf']
                        texte = ""
                        for pos, docs in sorted(pdfs.items()):
                            for doc in docs:
                                texte += str(pos) + r''' \hspace*{5cm} 
                                    ''' + Latex.echappe_caracteres(
                                    doc['nom']) + r'''
                                     \\ 
                                    '''
                                pieces.append(doc['chemin'])
                        contenu_annexe_pieces = Annexes.entete(edition)
                        contenu_annexe_pieces += Annexes.titre_annexe(
                            client, edition, generaux, reference,
                            "Documents contractuels et informatifs",
                            "Annexe facture")
                        contenu_annexe_pieces += Annexes.section(
                            client, generaux, reference,
                            "Documents contractuels et informatifs")
                        contenu_annexe_pieces += texte
                        contenu_annexe_pieces += r'''\end{document}'''
                        Latex.creer_latex_pdf(nom_pdf, contenu_annexe_pieces)
                        pdfs_annexes['Annexe-pièces'] = pieces

            if docpdf is not None and todo['Annexe-interne'] != "NO":
                pdfs = docpdf.pdfs_pour_client(client, 'Annexe-interne')
                if pdfs is not None and len(pdfs) > 0:
                    nom_pdf = 'Annexe-interne-anntemp'
                    pieces = [nom_pdf + '.pdf']
                    texte = ""
                    for pos, docs in sorted(pdfs.items()):
                        for doc in docs:
                            texte += str(pos) + r''' \hspace*{5cm} 
                                ''' + Latex.echappe_caracteres(
                                doc['nom']) + r'''
                                 \\ 
                                '''
                            pieces.append(doc['chemin'])
                    contenu_annexe_interne_a = Annexes.entete(edition)
                    contenu_annexe_interne_a += Annexes.titre_annexe(
                        client, edition, generaux, reference,
                        "Documents contractuels et informatifs",
                        "Annexe interne")
                    contenu_annexe_interne_a += Annexes.section(
                        client, generaux, reference,
                        "Annexe interne / Documents contractuels et informatifs"
                    )
                    contenu_annexe_interne_a += texte
                    contenu_annexe_interne_a += r'''\end{document}'''
                    Latex.creer_latex_pdf(nom_pdf, contenu_annexe_interne_a)
                    pdfs_annexes['Annexe-interne'] = pieces

            for donnee in paramannexe.donnees:
                if donnee['nom'] in pdfs_annexes:
                    if len(pdfs_annexes[donnee['nom']]) > 1:
                        Latex.concatenation_pdfs(donnee['nom'] + suffixe,
                                                 pdfs_annexes[donnee['nom']])
                    Latex.finaliser_pdf(donnee['nom'] + suffixe,
                                        donnee['chemin'])
                    if donnee['nom'] == 'Annexe-projets':
                        lignes = RecaProjet.creation_lignes(
                            edition, sommes.sommes_comptes[code_client],
                            client, generaux, acces, livraisons, comptes,
                            categories)
                        RecaProjet.recap(donnee['dossier_pdf'],
                                         donnee['nom'] + suffixe, lignes)

            files = [f for f in os.listdir('.') if os.path.isfile(f)]
            for f in files:
                if f.endswith('anntemp.pdf'):
                    os.unlink(f)
コード例 #4
0
    def creation_annexes(sommes, clients, edition, livraisons, acces, machines,
                         reservations, prestations, comptes, dossier_annexe,
                         plateforme, prefixe, coefprests, coefmachines,
                         generaux, garde):
        """
        création des annexes techniques
        :param sommes: sommes calculées
        :param clients: clients importés
        :param edition: paramètres d'édition
        :param livraisons: livraisons importées
        :param acces: accès importés
        :param machines: machines importées
        :param reservations: réservations importées
        :param prestations: prestations importées
        :param comptes: comptes importés
        :param dossier_annexe: nom du dossier dans lequel enregistrer les annexes
        :param plateforme: OS utilisé
        :param prefixe: prefixe de nom des annexes
        :param coefprests: coefficients prestations importés
        :param coefmachines: coefficients machines importés
        :param generaux: paramètres généraux
        :param garde: titre page de garde
        """

        if sommes.calculees == 0:
            info = "Vous devez d'abord faire toutes les sommes avant de pouvoir créer les annexes"
            print(info)
            Outils.affiche_message(info)
            return

        for code_client in sommes.sommes_clients.keys():
            contenu = Latex.entete(plateforme)
            contenu += r'''\usepackage[margin=10mm, includefoot]{geometry}
                \usepackage{multirow}
                \usepackage{longtable}
                \usepackage{dcolumn}
                \usepackage{changepage}
                \usepackage[scriptsize]{caption}

                \begin{document}
                \renewcommand{\arraystretch}{1.5}
                '''
            contenu += r'''
                \vspace*{8cm}
                \begin{adjustwidth}{5cm}{}
                \Large\textsc{''' + garde + r'''}\newline\newline'''
            nom = Latex.echappe_caracteres(
                clients.donnees[code_client]['abrev_labo'])
            code_sap = clients.donnees[code_client]['code_sap']

            contenu += code_client + " - " + code_sap + " - " + nom + r'''\newpage
                \end{adjustwidth}'''
            contenu += Annexes.contenu_client(sommes, clients, code_client,
                                              edition, livraisons, acces,
                                              machines, reservations,
                                              prestations, comptes, coefprests,
                                              coefmachines, generaux)
            contenu += r'''\end{document}'''

            nom = prefixe + str(edition.annee) + "_" + Outils.mois_string(edition.mois) + "_" + \
                  str(edition.version) + "_" + code_client

            Latex.creer_latex_pdf(nom, contenu, dossier_annexe)