Esempio n. 1
0
    def creation_lignes(edition, sommes, clients, generaux, acces, livraisons, comptes, categories, prestations):
        """
        génération des lignes de données du détail
        :param edition: paramètres d'édition
        :param sommes: sommes calculées
        :param clients: clients importés
        :param generaux: paramètres généraux
        :param acces: accès importés
        :param livraisons: livraisons importées
        :param comptes: comptes importés
        :param categories: catégories importées
        :param prestations: prestations importées
        :return: lignes de données du détail
        """
        if sommes.calculees == 0:
            info = "Vous devez d'abord faire toutes les sommes avant de pouvoir créer le détail des coûts"
            Outils.affiche_message(info)
            return None

        lignes = []

        for code_client in sorted(sommes.sommes_clients.keys()):
            client = clients.donnees[code_client]

            if code_client in sommes.sommes_comptes:
                sclo = sommes.sommes_comptes[code_client]
                comptes_utilises = Outils.comptes_in_somme(sclo, comptes)
                base_client = [edition.annee, edition.mois, code_client, client['code_sap'], client['abrev_labo'],
                               'U', client['nature']]

                for id_compte, num_compte in sorted(comptes_utilises.items(), key=lambda x: x[1]):
                    compte = comptes.donnees[id_compte]
                    base_compte = base_client + [id_compte, num_compte, compte['intitule'], compte['type_subside']]

                    if code_client in acces.sommes and id_compte in acces.sommes[code_client]['categories']:
                        som_cats = acces.sommes[code_client]['categories'][id_compte]['machine']
                        for id_categorie, som_cat in sorted(som_cats.items()):
                            duree = som_cat['duree_hp'] + som_cat['duree_hc']
                            ligne = base_compte + ['M', id_categorie, categories.donnees[id_categorie]['intitule'], duree,
                                                   som_cat['mo'], 0, 0, 0, 0, "", "", "", "", "", "", ""]
                            lignes.append(ligne)

                    if code_client in livraisons.sommes and id_compte in livraisons.sommes[code_client]:
                        somme = livraisons.sommes[code_client][id_compte]

                        for article in generaux.articles_d3:
                            if article.code_d in somme:
                                for no_prestation, sip in sorted(somme[article.code_d].items()):
                                    prestation = prestations.prestation_de_num(no_prestation)
                                    ligne = base_compte + [article.code_d, "", "", "", "", "", "", "", "",
                                                           article.intitule_court, no_prestation, sip['nom'],
                                                           Outils.format_2_dec(sip['montantx']),
                                                           Outils.format_2_dec(sip['rabais']), prestation['categ_stock'], prestation['affiliation']]
                                    lignes.append(ligne)

        return lignes
Esempio n. 2
0
    def creation_lignes(edition, sommes, clients, generaux, comptes):
        """
        génération des lignes de données du bilan
        :param edition: paramètres d'édition
        :param sommes: sommes calculées
        :param clients: clients importés
        :param generaux: paramètres généraux
        :param comptes: comptes importés
        :return: lignes de données du bilan
        """
        if sommes.calculees == 0:
            info = "Vous devez d'abord faire toutes les sommes avant de pouvoir créer le bilan des comptes"
            Outils.affiche_message(info)
            return None

        lignes = []
        for code_client in sorted(sommes.sommes_clients.keys()):
            if code_client in sommes.sommes_comptes:
                client = clients.donnees[code_client]
                nature = generaux.code_ref_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)

                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]):
                    compte = comptes.donnees[id_compte]
                    sco = sommes.sommes_comptes[code_client][id_compte]
                    ligne = [
                        edition.annee, edition.mois, reference, code_client,
                        client['code_sap'], client['abrev_labo'],
                        client['nom_labo'], 'U', client['nature'], id_compte,
                        num_compte, compte['intitule'], compte['type_subside'],
                        Outils.format_2_dec(sco['somme_j_mai']),
                        Outils.format_2_dec(sco['somme_j_moi']),
                        Outils.format_2_dec(client['rh'] * sco['somme_j_dhi']),
                        Outils.format_2_dec(sco['mj'])
                    ]
                    total = sco['mj']
                    for categorie in generaux.codes_d3():
                        total += sco['tot_cat'][categorie]
                        ligne.append(
                            Outils.format_2_dec(sco['tot_cat'][categorie]))
                    ligne += [
                        Outils.format_2_dec(total),
                        Outils.format_2_dec(client['bh'] * sco['somme_j_dhi'])
                    ]
                    lignes.append(ligne)
        return lignes
Esempio n. 3
0
    def factures(self, sommes, destination, edition, generaux, clients,
                 comptes, paramannexe):
        """
        génère la facture sous forme de csv
        
        :param sommes: sommes calculées
        :param destination: Une instance de la classe dossier.DossierDestination
        :param edition: paramètres d'édition
        :param generaux: paramètres généraux
        :param clients: clients importés
        :param comptes: comptes importés
        :param paramannexe: paramètres d'annexe
        :return: données du combolist et des sections
        """

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

        nom_facture = "facture_" + str(edition.annee) + "_" + Outils.mois_string(edition.mois) + "_" + \
                      str(edition.version)
        if edition.version > 0:
            nom_facture += "_" + str(edition.client_unique)
        if self.prod2qual:
            nom_facture += "_qualite.csv"
        else:
            nom_facture += ".csv"

        with destination.writer(nom_facture) as fichier_writer:
            fichier_writer.writerow([
                "Poste", "Système d'origine", "Type de document de vente",
                "Organisation commerciale", "Canal de distribution",
                "Secteur d'activité", "", "", "Client", "Nom 2 du client",
                "Nom 3 du client", "Adresse e-mail du client", "Client",
                "Client", "Client", "Devise", "Mode d'envoi",
                "Référence de la facture", "", "", "Texte d'entête",
                "Lien réseau vers l'annexe client .pdf", "Document interne",
                "Lien réseau vers l'annexe projets .pdf", "Document interne",
                "Lien réseau vers l'annexe détails .pdf", "Document interne",
                "Lien réseau vers l'annexe pièces .pdf", "Document interne",
                "Lien réseau vers l'annexe interne .pdf", "Document interne",
                "Article", "", "Quantité", "Unité de quantité", "Type de prix",
                "Prix net du poste", "Type de rabais",
                "Valeur rabais du poste", "Date de livraison",
                "Centre financier", "", "Fonds à créditer", "", "",
                "Code opération", "", "", "", "Texte libre du poste", "Nom"
            ])

            combo_list = {}

            for code_client in sorted(sommes.sommes_clients.keys()):
                poste = 0
                scl = sommes.sommes_clients[code_client]
                client = clients.donnees[code_client]

                if scl['somme_t'] == 0:
                    continue

                code_sap = client['code_sap']
                if self.prod2qual and not (
                        self.prod2qual.code_client_existe(code_sap)):
                    continue

                if client['nature'] == "I":
                    genre = generaux.code_int
                else:
                    genre = generaux.code_ext
                nature = generaux.code_ref_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'])

                if self.prod2qual:
                    code_sap_traduit = self.prod2qual.traduire_code_client(
                        code_sap)
                else:
                    code_sap_traduit = code_sap
                dico_contenu = {
                    'code': code_client,
                    'abrev': client['abrev_labo'],
                    'nom': client['nom_labo'],
                    'dest': client['dest'],
                    'ref': client['ref'],
                    'ref_fact': reference,
                    'texte': generaux.entete
                }
                contenu_client = r'''<section id="%(code)s"><div id="entete"> %(code)s <br />
                    %(abrev)s <br />
                    %(nom)s <br />
                    %(dest)s <br />
                    %(ref)s <br />
                    </div><br />
                    %(ref_fact)s <br /><br />
                    %(texte)s <br />
                    ''' % dico_contenu

                contenu_client += r'''<table id="tableau">
                    <tr>
                    <td>Item </td><td> Date </td><td> Name </td><td> Description </td><td> Unit </td><td> Quantity </td>
                    <td> Unit Price <br /> [CHF] </td><td> Discount </td><td> Net amount <br /> [CHF] </td>
                    </tr>
                    '''

                ligne = [
                    poste, generaux.origine, genre, generaux.commerciale,
                    generaux.canal, generaux.secteur, "", "", code_sap_traduit,
                    client['dest'], client['ref'], client['email'],
                    code_sap_traduit, code_sap_traduit, code_sap_traduit,
                    generaux.devise, client['mode'], reference, "", "",
                    generaux.entete
                ]
                for donnee in paramannexe.donnees:
                    nom_annexe = donnee['nom'] + "_" + str(edition.annee) + "_" + Outils.mois_string(edition.mois) + \
                                 "_" + str(edition.version) + "_" + code_client + ".pdf"
                    ligne.append(donnee['lien'] + nom_annexe)
                    if generaux.code_ref_par_code_n(client['nature']) == "INT":
                        ligne.append(donnee['int'])
                    elif client['mode'] == "MAIL":
                        ligne.append(donnee['ext_mail'])
                    else:
                        ligne.append(donnee['ext_postal'])

                fichier_writer.writerow(ligne)

                op_centre = client['nature'] + str(
                    edition.annee)[2:] + Outils.mois_string(edition.mois)

                if scl['em'] > 0 and not (filtre == "OUI" and scl['e'] == 0):
                    poste = generaux.poste_emolument
                    fichier_writer.writerow(
                        self.ligne_facture(generaux, generaux.articles[0],
                                           poste, scl['em'], scl['er'],
                                           op_centre, "", edition))
                    contenu_client += self.ligne_tableau(
                        generaux.articles[0], poste, scl['em'], scl['er'], "",
                        edition)

                if scl['rm'] > 0 and not (filtre == "OUI" and scl['r'] == 0):
                    poste = generaux.poste_reservation
                    fichier_writer.writerow(
                        self.ligne_facture(generaux, generaux.articles[1],
                                           poste, scl['rm'], scl['rr'],
                                           op_centre, "", edition))
                    contenu_client += self.ligne_tableau(
                        generaux.articles[1], poste, scl['rm'], scl['rr'], "",
                        edition)

                inc = 1

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

                    for id_compte, num_compte in sorted(
                            comptes_utilises.items(), key=lambda x: x[1]):
                        sco = sclo[id_compte]
                        compte = comptes.donnees[id_compte]
                        if sco['c1'] > 0 and not (filtre == "OUI"
                                                  and sco['c2'] == 0):
                            poste = inc * 10
                            if sco['somme_j_mm'] > 0 and not (
                                    filtre == "OUI" and sco['mj'] == 0):
                                fichier_writer.writerow(
                                    self.ligne_facture(
                                        generaux, generaux.articles[2], poste,
                                        sco['somme_j_mm'], sco['somme_j_mr'],
                                        op_centre, compte['numero'] + " - " +
                                        compte['intitule'], edition))
                                contenu_client += self.ligne_tableau(
                                    generaux.articles[2], poste,
                                    sco['somme_j_mm'], sco['somme_j_mr'],
                                    compte['numero'] + " - " +
                                    compte['intitule'], edition)
                                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):
                                    fichier_writer.writerow(
                                        self.ligne_facture(
                                            generaux, article, poste,
                                            sco['sommes_cat_m'][categorie],
                                            sco['sommes_cat_r'][categorie],
                                            op_centre, compte['numero'] +
                                            " - " + compte['intitule'],
                                            edition))
                                    contenu_client += self.ligne_tableau(
                                        article, poste,
                                        sco['sommes_cat_m'][categorie],
                                        sco['sommes_cat_r'][categorie],
                                        compte['numero'] + " - " +
                                        compte['intitule'], edition)
                                    poste += 1
                            inc += 1
                contenu_client += r'''
                    <tr><td colspan="8" id="toright">Net amount [CHF] : </td><td id="toright">
                    ''' + "%.2f" % scl['somme_t'] + r'''</td></tr>
                    </table>
                    '''
                contenu_client += r'''<table><tr>'''
                for donnee in paramannexe.donnees:
                    nom_annexe = donnee['nom'] + "_" + str(edition.annee) + "_" + Outils.mois_string(edition.mois) \
                                 + "_" + str(edition.version) + "_" + code_client + ".pdf"
                    dossier_annexe = "../" + donnee[
                        'dossier'] + "/" + nom_annexe
                    chemin_annexe = donnee['chemin'] + "/" + nom_annexe

                    if not os.path.isfile(chemin_annexe):
                        continue

                    contenu_client += r'''<td><a href="''' + dossier_annexe + r'''" target="new">''' + nom_annexe + r'''
                        </a></td>'''
                contenu_client += r'''</tr></table>'''
                contenu_client += "</section>"
                combo_list[client['abrev_labo'] + " (" + code_client +
                           ")"] = contenu_client
        self.creer_html(destination, combo_list, edition)
        return combo_list
Esempio n. 4
0
    def creation_lignes(edition, somme_client, client, generaux, acces,
                        livraisons, comptes, categories):
        """
        génération des lignes de données du récapitulatif
        :param edition: paramètres d'édition
        :param somme_client: sommes par comptes calculées pour un client donné
        :param client: client donné
        :param generaux: paramètres généraux
        :param acces: accès importés
        :param livraisons: livraisons importées
        :param comptes: comptes importés
        :param categories: catégories importées
        :return: lignes de données du récapitulatif
        """

        lignes = []

        code_client = client['code']
        comptes_utilises = Outils.comptes_in_somme(somme_client, comptes)
        nature = generaux.code_ref_par_code_n(client['nature'])
        ref = nature + str(edition.annee)[2:] + Outils.mois_string(
            edition.mois) + "." + code_client
        if edition.version > 0:
            ref += "-" + str(edition.version)
        base_client = [
            generaux.centre, edition.annee, edition.mois, ref,
            client['code_sap'], client['abrev_labo']
        ]

        for id_compte, num_compte in sorted(comptes_utilises.items(),
                                            key=lambda x: x[1]):
            compte = comptes.donnees[id_compte]
            base_compte = base_client + [
                num_compte + " - " + compte['intitule']
            ]

            if code_client in acces.sommes and id_compte in acces.sommes[
                    code_client]['categories']:

                for cat, som_cats in sorted(acces.sommes[code_client]
                                            ['categories'][id_compte].items()):
                    for id_categorie, som_cat in sorted(som_cats.items()):
                        unite = categories.donnees[id_categorie]['unite']
                        montant = som_cat['mk']
                        if unite == 'h':
                            quantite = som_cat['quantite'] / 1440
                        else:
                            quantite = som_cat['quantite']
                        if montant > 0:
                            ligne = base_compte + [
                                'Services',
                                categories.donnees[id_categorie]['intitule'],
                                quantite, unite, som_cat['pk'], montant
                            ]
                            lignes.append(ligne)

            if code_client in livraisons.sommes and id_compte in livraisons.sommes[
                    code_client]:
                somme = livraisons.sommes[code_client][id_compte]

                for article in generaux.articles_d3:
                    if article.code_d in somme:
                        if article.code_d == 'C':
                            base_article = base_compte + ['Consumables']
                        else:
                            base_article = base_compte + ['Other']
                        for no_prestation, sip in sorted(
                                somme[article.code_d].items()):
                            if sip['montant'] > 0:
                                ligne = base_article + [
                                    str(no_prestation) + " - " + sip['nom'],
                                    sip['quantite'], sip['unite'], sip['pn'],
                                    (sip['montant'] - sip['rabais'])
                                ]
                                lignes.append(ligne)

        return lignes
Esempio n. 5
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)
Esempio n. 6
0
    def contenu_tps_m_cae_xmu(code_client, scl, sommes_acces, machines, users, comptes):
        """
        contenu Tps_M CAE X/M/U - Table Client Récap Temps mach avec pénalités /Machine/User
        :param code_client: code du client concerné
        :param scl: sommes client calculées
        :param sommes_acces: sommes des accès importés
        :param machines: machines importées
        :param users: users importés
        :param comptes: comptes importés
        :return: contenu
        """

        contenu = ""
        if code_client in sommes_acces:
            somme = sommes_acces[code_client]['machines']
            machines_utilisees = Outils.machines_in_somme(somme, machines)

            for id_categorie, mics in sorted(machines_utilisees.items()):
                for nom_machine, id_machine in sorted(mics.items()):
                    if id_machine in scl['res']:
                        pur_hp = somme[id_machine]['pur_hp']
                        pur_hc = somme[id_machine]['pur_hc']
                        tx_hp = machines.donnees[id_machine]['tx_occ_eff_hp']
                        tx_hc = machines.donnees[id_machine]['tx_occ_eff_hc']
                        if (pur_hc > 0 and tx_hc > 0) or (pur_hp > 0 and tx_hp > 0):
                            dico_machine = {'machine': Latex.echappe_caracteres(nom_machine),
                                            'hp': Outils.format_heure(somme[id_machine]['duree_hp']),
                                            'hc': Outils.format_heure(somme[id_machine]['duree_hc'])}
                            contenu += r'''
                               \textbf{%(machine)s} & \hspace{5mm} %(hp)s & \hspace{5mm} %(hc)s \\
                                \hline
                                ''' % dico_machine

                            utilisateurs = Outils.utilisateurs_in_somme(somme[id_machine]['users'], users)

                            for nom, upi in sorted(utilisateurs.items()):
                                for prenom, ids in sorted(upi.items()):
                                    for id_user in sorted(ids):
                                        smu = somme[id_machine]['users'][id_user]
                                        dico_user = {'user': Latex.echappe_caracteres(nom + " " + prenom),
                                                     'hp': Outils.format_heure(smu['duree_hp']),
                                                     'hc': Outils.format_heure(smu['duree_hc'])}
                                        contenu += r'''
                                            \hspace{5mm} %(user)s & %(hp)s & %(hc)s \\
                                            \hline
                                            ''' % dico_user

                                        comptes_utilises = Outils.comptes_in_somme(smu['comptes'], comptes)

                                        for id_compte, num_compte in sorted(comptes_utilises.items(), key=lambda x: x[1]):
                                            smuc = smu['comptes'][id_compte]
                                            compte = comptes.donnees[id_compte]
                                            intitule_compte = Latex.echappe_caracteres(compte['numero']
                                                                                       + " - " + compte['intitule'])
                                            dico_compte = {'compte': intitule_compte,
                                                           'hp': Outils.format_heure(smuc['duree_hp']),
                                                           'hc': Outils.format_heure(smuc['duree_hc'])}
                                            contenu += r'''
                                                \hspace{10mm} %(compte)s & %(hp)s \hspace{5mm} & %(hc)s \hspace{5mm} \\
                                                \hline
                                                ''' % dico_compte
        return contenu