Esempio n. 1
0
    def creation_lignes(subedition, subgeneraux, consolidation):
        """
        génération des lignes de données du bilan
        :param subedition: paramètres d'édition
        :param subgeneraux: paramètres généraux
        :param consolidation: classe de consolidation des données des bilans
        :return: lignes de données du bilan
        """
        lignes = []
        for code_client, client in sorted(consolidation.clients.items()):

            numbers = {}
            for id_compte, compte in client['comptes'].items():
                numbers[id_compte] = compte['num_compte']

            for id_compte, num_compte in sorted(numbers.items(), key=lambda x: x[1]):
                compte = client['comptes'][id_compte]
                if compte['subs'] > 0:
                    ligne = [subedition.annee_fin_general, subedition.mois_fin_general, code_client, client['sap'],
                             client['abrev'], client['nom'], client['type'], client['nature'], id_compte,
                             num_compte, compte['intitule'], compte['type'], compte['t3'],
                             Outils.format_2_dec(compte['s-mt'])]
                    for categorie in subgeneraux.codes_d3():
                        ligne.append(Outils.format_2_dec(compte['s-' + categorie + 't']))
                    ligne += [Outils.format_2_dec(compte['subs'])]
                    lignes.append(ligne)
        return lignes
Esempio n. 2
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. 3
0
    def table_prix_lvr_jd(code_client, id_compte, intitule_compte, sco, sommes_livraisons, generaux):
        """
        Prix LVR J/D - Table Compte Récap Prestations livrées/code D
        :param code_client: code du client concerné
        :param id_compte: id du compte concerné
        :param intitule_compte: intitulé du compte concerné
        :param sco: sommes compte calculées
        :param sommes_livraisons: sommes des livraisons importées
        :param generaux: paramètres généraux
        :return: table au format latex
        """

        if code_client in sommes_livraisons and id_compte in sommes_livraisons[code_client]:
            somme = sommes_livraisons[code_client][id_compte]
            structure = r'''{|l|r|c|r|r|r|}'''
            legende = r'''Consommables et autres prestations'''
            contenu_prests = ""
            for article in generaux.articles_d3:
                if article.code_d in somme and sco['sommes_cat_m'][article.code_d] > 0:
                    if contenu_prests != "":
                        contenu_prests += r'''
                            \multicolumn{6}{c}{} \\
                            '''

                    contenu_prests += r'''
                        \hline
                        \multicolumn{1}{|l|}{
                        \textbf{''' + intitule_compte + " - " + Latex.echappe_caracteres(article.intitule_long) + r'''
                        }} & \multicolumn{1}{c|}{Quantité} & Unité & \multicolumn{1}{c|}{P.U.}
                        & \multicolumn{1}{c|}{Montant} & \multicolumn{1}{c|}{Rabais} \\
                        \hline
                        '''
                    for no_prestation, sip in sorted(somme[article.code_d].items()):
                        if sip['montant'] > 0:
                            dico_prestations = {'nom': Latex.echappe_caracteres(sip['nom']),
                                                'num': no_prestation,
                                                'quantite': "%.1f" % sip['quantite'],
                                                'unite': Latex.echappe_caracteres(sip['unite']),
                                                'pn': Outils.format_2_dec(sip['pn']),
                                                'montant': Outils.format_2_dec(sip['montant']),
                                                'rabais': Outils.format_2_dec(sip['rabais'])}
                            contenu_prests += r'''
                                %(num)s - %(nom)s & \hspace{5mm} %(quantite)s & %(unite)s & %(pn)s & %(montant)s
                                & %(rabais)s  \\
                                \hline
                                ''' % dico_prestations
                    dico_prestations = {'montant': Outils.format_2_dec(sco['sommes_cat_m'][article.code_d]),
                                        'rabais': Outils.format_2_dec(sco['sommes_cat_r'][article.code_d])}
                    contenu_prests += r'''
                        \multicolumn{4}{|r|}{Total} & %(montant)s & %(rabais)s  \\
                        \hline
                        ''' % dico_prestations
            return Latex.tableau(contenu_prests, structure, legende)
        else:
            return ""
Esempio n. 4
0
    def table_prix_cae_jk(code_client, id_compte, intitule_compte, sco, sommes_acces, categories):
        """
        Prix CAE J/K - Table Compte Récap Procédés/Catégorie Machine
        :param code_client: code du client concerné
        :param id_compte: id du compte concerné
        :param intitule_compte: intitulé du compte concerné
        :param sco: sommes compte calculées
        :param sommes_acces: sommes des accès importés
        :param categories: catégories importées
        :return: table au format latex
        """

        if code_client in sommes_acces and id_compte in sommes_acces[code_client]['comptes'] and sco['somme_j_mk'] > 0:

            structure = r'''{|l|c|c|r|r|}'''
            legende = r'''Services'''
            contenu = r'''
                \hline
                \textbf{''' + intitule_compte + r'''} & Unité & Quantité & \multicolumn{1}{c|}{PU} &
                 \multicolumn{1}{c|}{Montant}   \\
                \hline
                '''

            for cat, som_cat in sorted(sommes_acces[code_client]['categories'][id_compte].items()):

                for id_categorie, cats in sorted(som_cat.items()):
                    montant = cats['mk']
                    unite = categories.donnees[id_categorie]['unite']
                    if unite == 'hh_mm':
                        quantite = Outils.format_heure(cats['quantite'])
                    else:
                        quantite = cats['quantite']
                    if montant > 0:
                        dico_cat = {'intitule': Latex.echappe_caracteres(categories.donnees[id_categorie]['intitule']),
                                    'pk': Outils.format_2_dec(cats['pk']),
                                    'unite': Latex.echappe_caracteres(unite),
                                    'quantite': quantite,
                                    'mk': Outils.format_2_dec(montant)}
                        contenu += r'''
                            %(intitule)s & %(unite)s & %(quantite)s & %(pk)s & %(mk)s  \\
                            \hline
                            ''' % dico_cat

            dico_cat = {'mkj': Outils.format_2_dec(sco['somme_j_mk'])}

            contenu += r'''
                \multicolumn{4}{|r|}{Total} & %(mkj)s \\
                \hline
                ''' % dico_cat

            return Latex.tableau(contenu, structure, legende)
        else:
            return ""
Esempio n. 5
0
    def creation_lignes(edition, sommes, clients, generaux, acces, livraisons,
                        comptes, reservations):
        """
        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 acces: accès importés
        :param livraisons: livraisons importées
        :param comptes: comptes importés
        :param reservations: réservations importées
        :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 mensuel"
            Outils.affiche_message(info)
            return None

        lignes = []

        for code_client in sorted(sommes.sommes_clients.keys()):
            scl = sommes.sommes_clients[code_client]
            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)
            users, cptes = BilanMensuel.utilisateurs_et_comptes(
                acces, livraisons, code_client, comptes, reservations)
            nb_u = len(users)
            nb_c = len(cptes)

            rht = client['rh'] * scl['dht']

            ligne = [
                edition.annee, edition.mois, reference, code_client,
                client['code_sap'], client['abrev_labo'], client['nom_labo'],
                'U', client['nature'], scl['em'], scl['er'], nb_u, nb_c,
                Outils.format_2_dec(scl['mat']),
                Outils.format_2_dec(scl['mot']),
                Outils.format_2_dec(rht), scl['e'],
                Outils.format_2_dec(scl['r']),
                Outils.format_2_dec(scl['mt'])
            ]
            for categorie in generaux.codes_d3():
                ligne.append(Outils.format_2_dec(scl['tot_cat'][categorie]))
            ligne += [
                Outils.format_2_dec(scl['somme_t']),
                Outils.format_2_dec(scl['somme_t_mb'])
            ]
            lignes.append(ligne)
        return lignes
Esempio n. 6
0
    def table_prix_xaj(scl, generaux, contenu_prix_xaj):
        """
        Prix XA/J - Table Client Récap Articles/Compte
        :param scl: sommes client calculées
        :param generaux: paramètres généraux
        :param contenu_prix_xaj: contenu généré de la table
        :return: table au format latex
        """

        structure = r'''{|l|l|r|r|'''
        legende = r'''Récapitulatif des projets'''

        contenu = r'''
            \hline
            Projet & Type & \multicolumn{1}{c|}{Procédés}'''

        for article in generaux.articles_d3:
            structure += r'''r|'''
            contenu += r''' & \multicolumn{1}{c|}{
            ''' + Latex.echappe_caracteres(article.intitule_court) + r'''}'''
        structure += r'''}'''
        contenu += r'''& \multicolumn{1}{c|}{Total} \\
            \hline
            '''

        contenu += contenu_prix_xaj

        dico = {'procedes': Outils.format_2_dec(scl['mt']),
                'total': Outils.format_2_dec((scl['somme_t']-scl['r']-scl['e']))}

        contenu += r'''Total article & & %(procedes)s''' % dico

        for categorie in generaux.codes_d3():
            contenu += r''' & ''' + Outils.format_2_dec(scl['tot_cat'][categorie])

        contenu += r'''& %(total)s \\
            \hline
            ''' % dico

        return Latex.long_tableau(contenu, structure, legende)
Esempio n. 7
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'], 0, 0,
                             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. 8
0
    def creation_lignes(subedition, subgeneraux, consolidation):
        """
        génération des lignes de données du bilan
        :param subedition: paramètres d'édition
        :param subgeneraux: paramètres généraux
        :param consolidation: classe de consolidation des données des bilans
        :return: lignes de données du bilan
        """
        lignes = []

        for code_client, client in sorted(consolidation.clients.items()):
            ligne = [
                subedition.annee_fin_general, subedition.mois_fin_general,
                code_client, client['sap'], client['abrev'], client['nom'],
                client['type'], client['nature'], client['bonus'],
                Outils.format_2_dec(client['subs_m'])
            ]
            for categorie in subgeneraux.codes_d3():
                ligne.append(
                    Outils.format_2_dec(client['subs_' + categorie + 't']))
            ligne += [Outils.format_2_dec(client['subs'])]
            lignes.append(ligne)
        return lignes
Esempio n. 9
0
    def table_prix_xf(scl, generaux, filtre, contenu_prix_xf):
        """
        Prix XF - Table Client Récap Postes de la facture
        :param scl: sommes client calculées
        :param generaux: paramètres généraux
        :param filtre: si nul pour code n
        :param contenu_prix_xf: contenu généré de la table
        :return: table au format latex
        """

        brut = scl['rm'] + scl['somme_t_mm'] + scl['em']
        for cat, tt in scl['sommes_cat_m'].items():
            brut += tt
        if scl['somme_t'] > 0 or (filtre == "NON" and brut > 0):
            structure = r'''{|c|l|r|r|r|}'''
            legende = r'''Récapitulatif des postes de la facture'''

            dico = {'emom': Outils.format_2_dec(scl['em']), 'emor': Outils.format_2_dec(scl['er']),
                    'emo': Outils.format_2_dec(scl['e']), 'resm': Outils.format_2_dec(scl['rm']),
                    'resr': Outils.format_2_dec(scl['rr']), 'res': Outils.format_2_dec(scl['r']),
                    'int_emo': Latex.echappe_caracteres(generaux.articles[0].intitule_long),
                    'int_res': Latex.echappe_caracteres(generaux.articles[1].intitule_long),
                    'p_emo': generaux.poste_emolument, 'p_res': generaux.poste_reservation}

            contenu = r'''
                \hline
                N. Poste & Poste & \multicolumn{1}{c|}{Montant} & \multicolumn{1}{c|}{Rabais}
                & \multicolumn{1}{c|}{Total} \\
                \hline'''
            if scl['em'] > 0 and not (filtre == "OUI" and scl['e'] == 0):
                contenu += r'''
                    %(p_emo)s & %(int_emo)s & %(emom)s & %(emor)s & %(emo)s \\
                    \hline''' % dico
            if scl['rm'] > 0 and not (filtre == "OUI" and scl['r'] == 0):
                contenu += r'''
                    %(p_res)s & %(int_res)s & %(resm)s & %(resr)s & %(res)s \\
                    \hline
                    ''' % dico

            contenu += contenu_prix_xf

            contenu += r'''\multicolumn{4}{|r|}{Total}
                & ''' + Outils.format_2_dec(scl['somme_t']) + r'''\\
                \hline
                '''
            return Latex.long_tableau(contenu, structure, legende)
        else:
            return ""
Esempio n. 10
0
    def table_prix_ja(sco, generaux):
        """
        Prix JA - Table Compte Récap Articles
        :param sco: sommes compte calculées
        :param generaux: paramètres généraux
        :return: table au format latex
        """

        structure = r'''{|l|r|r|r|}'''
        legende = r'''Récapitulatif des articles du projet'''

        contenu = r'''
            \cline{2-4}
            \multicolumn{1}{r|}{} & \multicolumn{1}{c|}{Montant} & \multicolumn{1}{c|}{Rabais}
            & \multicolumn{1}{c|}{Net} \\
            \hline'''

        if sco['somme_j_mm'] > 0:
            dico = {'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']),
                    'int_proc': Latex.echappe_caracteres(generaux.articles[2].intitule_long)}
            contenu += r'''
                %(int_proc)s & %(mm)s & %(mr)s & %(mj)s \\
                \hline
                ''' % dico

        total = sco['mj']
        for article in generaux.articles_d3:
            total += sco['tot_cat'][article.code_d]
            if sco['sommes_cat_m'][article.code_d]:
                dico = {'intitule': Latex.echappe_caracteres(article.intitule_long),
                        '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 += r'''
                %(intitule)s & %(cmj)s & %(crj)s & %(cj)s \\
                \hline
                ''' % dico

        contenu += r'''\multicolumn{3}{|r|}{Total} & ''' + Outils.format_2_dec(total) + r'''\\
        \hline
        '''

        return Latex.tableau(contenu, structure, legende)
Esempio n. 11
0
    def contenu_client(code_client, consolidation, subgeneraux, subedition):
        """
        création du contenu de l'annexe pour un client
        :param code_client: code du client pour l'annexe
        :param consolidation: classe de consolidation des données des bilans
        :param subgeneraux: paramètres généraux
        :param subedition: paramètres d'édition
        """

        contenu = ""

        client = consolidation.clients[code_client]
        reference = "SUBS" + str(subedition.annee_fin_general)[2:] + \
                    Outils.mois_string(subedition.mois_fin_general) + "." + code_client

        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_section = {
            'code': code_client,
            'code_sap': Latex.echappe_caracteres(client['sap']),
            'nom': Latex.echappe_caracteres(client['abrev']),
            'ref': reference,
            'date_debut': debut,
            'date_fin': fin
        }

        contenu += r'''
            \fakesection{%(ref)s \hspace*{4cm} Client %(code)s - %(code_sap)s - %(nom)s - %(date_debut)s - %(date_fin)s}
            {}
            ''' % dic_section

        contenu_recap_compte = ""
        contenu_detail_compte = ""
        inc_4 = 0
        taille_d3 = len(subgeneraux.articles_d3)

        numbers = {}
        for id_compte, compte in client['comptes'].items():
            numbers[id_compte] = compte['num_compte']

        for id_compte, num_compte in sorted(numbers.items(),
                                            key=lambda x: x[1]):
            compte = client['comptes'][id_compte]

            # ## COMPTE

            # ## ligne 3
            if compte['subs'] > 0:
                dico_recap_compte = {
                    'numero': num_compte,
                    'intitule': Latex.echappe_caracteres(compte['intitule']),
                    'code': Latex.echappe_caracteres(compte['id_sub']),
                    'type_s': Latex.echappe_caracteres(compte['type_s']),
                    'type_p': Latex.echappe_caracteres(compte['type_p']),
                    'montant': Outils.format_2_dec(compte['subs'])
                }
                contenu_recap_compte += r'''
                    %(numero)s & %(intitule)s & %(code)s & %(type_s)s & %(type_p)s & %(montant)s \\
                    \hline
                      ''' % dico_recap_compte

            # ## partie 4

            if compte['subs'] > 0:
                dico_detail_compte = {
                    'taille': (4 + taille_d3),
                    'numero': num_compte,
                    'intitule': Latex.echappe_caracteres(compte['intitule']),
                    'type': Latex.echappe_caracteres(compte['type'])
                }
                if inc_4 > 0:
                    contenu_detail_compte += r'''
                        \multicolumn{%(taille)s}{c}{} \\ \noalign{\penalty-5000}
                          ''' % dico_detail_compte
                else:
                    inc_4 = 1
                contenu_detail_compte += r'''
                    \hline
                    \multicolumn{%(taille)s}{|c|}{%(numero)s - %(intitule)s - %(type)s} \\*
                    \hline
                    Année & Mois & \multicolumn{1}{c|}{Coûts Procédés} 
                      ''' % dico_detail_compte

                for article in subgeneraux.articles_d3:
                    contenu_detail_compte += r''' & \multicolumn{1}{c|}{
                        ''' + Latex.echappe_caracteres(
                        article.intitule_court) + r'''}'''

                for a, annee in sorted(compte['annees'].items()):
                    for m, mois in sorted(annee['mois'].items()):
                        dico = {
                            'annee': a,
                            'mois': m,
                            'mj': Outils.format_2_dec(mois['mj'])
                        }
                        contenu_detail_compte += r'''\\*
                            \hline
                            %(annee)s & %(mois)s & %(mj)s
                            ''' % dico
                        for d3 in subgeneraux.codes_d3():
                            contenu_detail_compte += r''' & ''' + Outils.format_2_dec(
                                mois[d3 + 'j'])

                dico_detail_compte = {
                    'm_mois': compte['m_mois'],
                    'm_compte': compte['m_compte'],
                    'mt': Outils.format_2_dec(compte['mt']),
                    'mt_p': Outils.format_2_dec(compte['mt_p']),
                    's-mt': Outils.format_2_dec(compte['s-mt'])
                }

                contenu_detail_compte += r'''\\*
                    \hline
                    \multicolumn{2}{|l|}{Total période} & %(mt)s
                    ''' % dico_detail_compte
                for d3 in subgeneraux.codes_d3():
                    contenu_detail_compte += r''' &
                    ''' + Outils.format_2_dec(compte[d3 + 't'])

                contenu_detail_compte += r'''\\*
                    \hline
                    \multicolumn{2}{|l|}{Plafond par mois} & %(m_mois)s
                    ''' % dico_detail_compte
                for d3 in subgeneraux.codes_d3():
                    contenu_detail_compte += r''' &
                    ''' + Outils.format_2_dec(compte[d3 + '_mois'])

                contenu_detail_compte += r'''\\*
                    \hline
                    \multicolumn{2}{|l|}{Total des montants plafonnés} & %(mt_p)s
                    ''' % dico_detail_compte
                for d3 in subgeneraux.codes_d3():
                    contenu_detail_compte += r''' &
                    ''' + Outils.format_2_dec(compte[d3 + 't_p'])

                contenu_detail_compte += r'''\\*
                    \hline
                    \multicolumn{2}{|l|}{Plafond par compte} & %(m_compte)s
                    ''' % dico_detail_compte
                for d3 in subgeneraux.codes_d3():
                    contenu_detail_compte += r''' &
                    ''' + Outils.format_2_dec(compte[d3 + '_compte'])

                contenu_detail_compte += r'''\\*
                    \hline
                    \multicolumn{2}{|l|}{Subsides} & %(s-mt)s
                    ''' % dico_detail_compte
                for d3 in subgeneraux.codes_d3():
                    contenu_detail_compte += r''' &
                    ''' + Outils.format_2_dec(compte['s-' + d3 + 't'])

                dico_detail_compte = {
                    'taille': (2 + len(subgeneraux.articles_d3)),
                    'subs': Outils.format_2_dec(compte['subs'])
                }
                contenu_detail_compte += r'''\\*
                    \hline
                    \multicolumn{2}{|l|}{Total subsides} & \multicolumn{%(taille)s}{r|}{%(subs)s} \\ 
                    \hline
                    ''' % dico_detail_compte

        # ## 1

        structure_total = r'''{|c|l|l|r|}'''
        contenu_total = r'''
            \hline
            Code OP & \multicolumn{1}{c|}{Poste} & \multicolumn{1}{c|}{Prestation} & \multicolumn{1}{c|}{Montant} \\
            \hline
            '''
        base = client['nature'] + str(subedition.annee_fin_general)[2:] + \
               Outils.mois_string(subedition.mois_fin_general)
        if client['bonus'] > 0:
            poste = Latex.echappe_caracteres(
                subgeneraux.article_t_indice('2').texte_t_long)
            prestation = Latex.echappe_caracteres(
                subgeneraux.articles[0].intitule_long)
            op = subgeneraux.article_t_indice(
                '2').code_t + base + subgeneraux.articles[0].code_d
            dico = {
                'op': op,
                'poste': poste,
                'prestation': prestation,
                'montant': Outils.format_2_dec(client['bonus'])
            }
            contenu_total += r'''
                %(op)s & %(poste)s & %(prestation)s & %(montant)s \\
                \hline
                ''' % dico
        for t3, client_t3 in sorted(client['codes'].items()):
            poste = subgeneraux.article_t(t3).texte_t_long
            if client_t3['sm'] > 0:
                prestation = Latex.echappe_caracteres(
                    subgeneraux.articles[0].intitule_long)
                op = t3 + base + subgeneraux.articles[0].code_d
                dico = {
                    'op': op,
                    'poste': poste,
                    'prestation': prestation,
                    'montant': Outils.format_2_dec(client_t3['sm'])
                }
                contenu_total += r'''
                    %(op)s & %(poste)s & %(prestation)s & %(montant)s \\
                    \hline
                    ''' % dico
            for article in subgeneraux.articles_d3:
                if client_t3['s' + article.code_d] > 0:
                    prestation = Latex.echappe_caracteres(
                        article.intitule_long)
                    op = t3 + base + article.code_d
                    dico = {
                        'op':
                        op,
                        'poste':
                        poste,
                        'prestation':
                        prestation,
                        'montant':
                        Outils.format_2_dec(client_t3['s' + article.code_d])
                    }
                    contenu_total += r'''
                        %(op)s & %(poste)s & %(prestation)s & %(montant)s \\
                        \hline
                        ''' % dico
        total = Outils.format_2_dec(client['subs'] + client['bonus'])
        contenu_total += r'''
            \multicolumn{3}{|r|}{TOTAL} & ''' + total + r''' \\
            \hline
            '''

        legende_total = r'''Table 1 - Récapitulatif des bonus et subsides'''

        contenu += Latex.tableau(contenu_total, structure_total, legende_total)

        # ## 2

        if client['bonus'] > 0:
            structure_bonus = r'''{|c|c|l|r|}'''
            contenu_bonus = r'''
                \hline
                Année & Mois & \multicolumn{1}{c|}{Code} & \multicolumn{1}{c|}{Montant} \\
                \hline
                '''

            for a, annee in sorted(client['annees'].items()):
                for m, mois in sorted(annee['mois'].items()):
                    code = Latex.echappe_caracteres(
                        subgeneraux.article_t_indice('2').texte_t_court)
                    dico = {
                        'annee': a,
                        'mois': m,
                        'bj': mois['bj'],
                        'code': code
                    }
                    contenu_bonus += r'''
                        %(annee)s & %(mois)s & %(code)s & %(bj)s \\
                        \hline
                        ''' % dico

            contenu_bonus += r'''
                \multicolumn{3}{|r|}{TOTAL} & ''' + str(
                client['bonus']) + r''' \\
                \hline
                '''

            legende_bonus = r'''Table 2 - Bonus d'utilisation en heures creuses'''

            contenu += Latex.tableau(contenu_bonus, structure_bonus,
                                     legende_bonus)
        else:
            contenu += Latex.tableau_vide(
                r'''Table 2 vide : Pas de bonus d'utilisation en heures creuses'''
            )

        if client['subs'] > 0:

            # ## 3

            structure_recap = r'''{|r|l|l|l|l|r|}'''
            contenu_recap = r'''
                \hline
                \multicolumn{1}{|c|}{N. compte} & \multicolumn{1}{c|}{Intitulé compte} & \multicolumn{1}{c|}{Code} & 
                \multicolumn{1}{c|}{Type Subsides} & \multicolumn{1}{c|}{Type projet} & \multicolumn{1}{c|}{Montant} \\
                \hline
                '''
            contenu_recap += contenu_recap_compte
            contenu_recap += r'''
                \multicolumn{5}{|r|}{TOTAL} & ''' + Outils.format_2_dec(
                client['subs']) + r''' \\
                \hline
                '''

            legende_recap = r'''Table 3 - Récapitulatif des subsides par compte'''

            contenu += Latex.tableau(contenu_recap, structure_recap,
                                     legende_recap)

            # ## 4

            structure_detail = r'''{|>{\centering}p{1.5cm}|c|r|r|'''
            for i in range(taille_d3):
                structure_detail += r'''r|'''
            structure_detail += r'''}'''

            legende_detail = r'''Table 4 - Détail des subsides'''

            contenu += Latex.long_tableau(contenu_detail_compte,
                                          structure_detail, legende_detail)

        else:
            contenu += Latex.tableau_vide(
                r'''Table 3 vide : Pas de subsides''')

        return contenu
Esempio n. 12
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. 13
0
    def table_prix_xrmu(code_client, scl, sommes_reservations, machines, users):
        """
        Prix XR/M/U - Table Client Récap Pénalités Réservations/Machine/user
        :param code_client: code du client concerné
        :param scl: sommes client calculées
        :param sommes_reservations: sommes des réservations importées
        :param machines: machines importées
        :param users: users importés
        :return: table au format latex
        """
        if scl['rm'] > 0:
            structure = r'''{|l|c|c|r|r|}'''
            legende = r'''Récapitulatif des pénalités de réservation'''

            contenu = r'''
                \cline{3-5}
                \multicolumn{2}{l|}{} & \multicolumn{1}{c|}{Pénalités} & \multicolumn{1}{c|}{PU} 
                & \multicolumn{1}{c|}{Montant} \\
                \cline{3-5}
                \multicolumn{2}{l|}{} & \multicolumn{1}{c|}{Durée} & \multicolumn{1}{c|}{CHF/h} 
                & \multicolumn{1}{c|}{CHF} \\
                \hline
                '''

            somme = sommes_reservations[code_client]

            machines_reservees = Outils.machines_in_somme(somme, machines)

            for id_categorie, mics in sorted(machines_reservees.items()):
                for nom_machine, id_machine in sorted(mics.items()):
                    scm = scl['res'][id_machine]
                    contenu_hp = ""
                    contenu_hc = ""
                    dico_machine = {'machine': Latex.echappe_caracteres(nom_machine),
                                    'duree_hp': Outils.format_heure(scm['tot_hp']),
                                    'pu_hp': Outils.format_2_dec(somme[id_machine]['pu_hp']),
                                    'montant_hp': Outils.format_2_dec(scm['mont_hp']),
                                    'duree_hc': Outils.format_heure(scm['tot_hc']),
                                    'pu_hc': Outils.format_2_dec(somme[id_machine]['pu_hc']),
                                    'montant_hc': Outils.format_2_dec(scm['mont_hc'])}
                    if scm['mont_hp'] > 0:
                        contenu_hp += r'''
                                %(machine)s & HP & %(duree_hp)s & %(pu_hp)s  & %(montant_hp)s \\
                                \hline
                                ''' % dico_machine

                    if scm['mont_hc'] > 0:
                        contenu_hc += r'''
                                %(machine)s & HC & %(duree_hc)s & %(pu_hc)s  & %(montant_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 = scm['users'][id_user]
                                dico_user = {'user': Latex.echappe_caracteres(nom + " " + prenom),
                                             'duree_hp': Outils.format_heure(smu['tot_hp']),
                                             'duree_hc': Outils.format_heure(smu['tot_hc'])}
                                if scm['mont_hp'] > 0 and smu['tot_hp'] > 0:
                                    contenu_hp += r'''
                                            \hspace{5mm} %(user)s & HP & %(duree_hp)s \hspace{5mm} & & \\
                                            \hline
                                            ''' % dico_user

                                if scm['mont_hc'] > 0 and smu['tot_hc'] > 0:
                                    contenu_hc += r'''
                                            \hspace{5mm} %(user)s & HC & %(duree_hc)s \hspace{5mm} & & \\
                                            \hline
                                            ''' % dico_user
                    contenu += contenu_hp
                    contenu += contenu_hc

            dico = {'penalite_d': Outils.format_2_dec(scl['rm_d']),
                    'penalite': Outils.format_2_dec(scl['rm']),
                    'rabais': Outils.format_2_dec(scl['rr']),
                    'total': Outils.format_2_dec(scl['r'])}

            contenu += r'''
                \multicolumn{4}{|r|}{Arrondi} & %(penalite_d)s \\
                \hline
                \multicolumn{4}{|r|}{Total} & %(penalite)s \\
                \hline
                \multicolumn{4}{|r|}{Rabais} & %(rabais)s \\
                \hline
                \multicolumn{4}{|r|}{\textbf{Total à payer}} & %(total)s \\
                \hline
                ''' % dico

            return Latex.long_tableau(contenu, structure, legende)
        else:
            return ""
Esempio n. 14
0
    def table_prix_jdmu(code_client, id_compte, intitule_compte, sco, sommes_acces, machines, users):
        """
        Prix JD/M/U - Table Compte Déductions HC (Rabais) par Machine
        :param code_client: code du client concerné
        :param id_compte: id du compte concerné
        :param intitule_compte: intitulé du compte concerné
        :param sco: sommes compte calculées
        :param sommes_acces: sommes des accès importés
        :param machines: machines importées
        :param users: users importés
        :return: table au format latex
        """

        if sco['somme_j_dhi'] > 0 and code_client in sommes_acces and id_compte in sommes_acces[code_client]['comptes']:
            structure = r'''{|l|c|r|r|}'''
            legende = r'''Rabais d’utilisation de machines en heures creuses'''
            contenu = r'''
                \hline
                \multicolumn{2}{|l|}{\textbf{''' + intitule_compte + r'''}} & \multicolumn{1}{c|}{Temps Mach.}
                 & \multicolumn{1}{c|}{Rabais (CHF)} \\
                \hline
                '''

            somme = sommes_acces[code_client]['comptes'][id_compte]
            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 somme[id_machine]['dhi'] > 0:
                        dico_machine = {'machine': Latex.echappe_caracteres(nom_machine),
                                        'hc': Outils.format_heure(somme[id_machine]['duree_hc']),
                                        'dhi': Outils.format_2_dec(somme[id_machine]['dhi'])}
                        contenu += r'''
                            \hspace{2mm} %(machine)s & HC & %(hc)s & %(dhi)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]
                                    if smu['duree_hc'] > 0:
                                        dico_user = {'user': Latex.echappe_caracteres(nom + " " + prenom),
                                                     'hc': Outils.format_heure(smu['duree_hc'])}
                                        contenu += r'''
                                            \hspace{5mm} %(user)s & HC & %(hc)s \hspace{5mm} & \\
                                            \hline
                                        ''' % dico_user

            dico = {'rabais_d': Outils.format_2_dec(sco['somme_j_dhi_d']),
                    'rabais': Outils.format_2_dec(sco['somme_j_dhi'])}

            contenu += r'''
                \multicolumn{3}{|r|}{Arrondi} & %(rabais_d)s \\
                \hline
                \multicolumn{3}{|r|}{Total} & %(rabais)s \\
                \hline
                ''' % dico

            return Latex.long_tableau(contenu, structure, legende)
        else:
            return ""
Esempio n. 15
0
    def table_qte_lvr_jdu(code_client, id_compte, intitule_compte, generaux, livraisons, users):
        """
        Qté LVR J/D/U - Table Compte Détail Quantités livrées/Prestation (code D)/User
        :param code_client: code du client concerné
        :param id_compte: id du compte concerné
        :param intitule_compte: intitulé du compte concerné
        :param generaux: paramètres généraux
        :param livraisons: livraisons importées
        :param users: users importés
        :return: table au format latex
        """

        structure = r'''{|l|c|c|c|}'''
        legende = r'''Détails des prestations livrées'''

        contenu = r'''
            '''
        i = 0
        somme = livraisons.sommes[code_client][id_compte]
        for article in generaux.articles_d3:
            if article.code_d in somme:
                if i == 0:
                    i += 1
                else:
                    contenu += r'''\multicolumn{4}{c}{} \\
                        '''
                contenu += r'''
                    \hline
                    \multicolumn{1}{|l|}{
                    \textbf{''' + intitule_compte + " - " + Latex.echappe_caracteres(article.intitule_long) + r'''
                    }} & Quantité & Unité & Rabais \\
                    \hline
                    '''
                for no_prestation, sip in sorted(somme[article.code_d].items()):
                    dico_prestations = {'nom': Latex.echappe_caracteres(sip['nom']),
                                        'num': no_prestation,
                                        'quantite': "%.1f" % sip['quantite'],
                                        'unite': Latex.echappe_caracteres(sip['unite']),
                                        'rabais': Outils.format_2_dec(sip['rabais'])}
                    contenu += r'''
                        %(num)s - %(nom)s & \hspace{5mm} %(quantite)s & %(unite)s
                        & \hspace{5mm} %(rabais)s \\
                        \hline
                        ''' % dico_prestations

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

                    for nom, upi in sorted(utilisateurs.items()):
                        for prenom, ids in sorted(upi.items()):
                            for id_user in sorted(ids):
                                spu = sip['users'][id_user]
                                dico_user = {'user': Latex.echappe_caracteres(nom + " " + prenom),
                                             'quantite': "%.1f" % spu['quantite'],
                                             'unite': Latex.echappe_caracteres(sip['unite']),
                                             'rabais': Outils.format_2_dec(spu['rabais'])}
                                contenu += r'''
                                    \hspace{5mm} %(user)s & %(quantite)s & %(unite)s & %(rabais)s \\
                                    \hline
                                ''' % dico_user

                                for pos in spu['data']:
                                    liv = livraisons.donnees[pos]
                                    rem = ""
                                    dl = ""
                                    if liv['remarque'] != "":
                                        rem = "; Remarque : " + liv['remarque']
                                    if liv['date_livraison'] != "":
                                        dl = "Dt livraison: " + liv['date_livraison'] + ";"
                                    op = users.donnees[liv['id_operateur']]
                                    dico_pos = {'date_liv': Latex.echappe_caracteres(dl),
                                                'quantite': "%.1f" % liv['quantite'],
                                                'rabais': Outils.format_2_dec(liv['rabais_r']),
                                                'id': Latex.echappe_caracteres(liv['id_livraison']),
                                                'unite': Latex.echappe_caracteres(sip['unite']),
                                                'responsable': Latex.echappe_caracteres(op['prenom'] + " " + op['nom']),
                                                'commande': Latex.echappe_caracteres(liv['date_commande']),
                                                'remarque': Latex.echappe_caracteres(rem)}
                                    contenu += r'''
                                        \hspace{10mm} %(date_liv)s N. livraison: %(id)s
                                        & %(quantite)s \hspace{5mm} & %(unite)s & %(rabais)s \hspace{5mm} \\
        
                                        \hspace{10mm} \scalebox{.8}{Commande: %(commande)s;
                                        Resp: %(responsable)s%(remarque)s} & & & \\
                                        \hline
                                    ''' % dico_pos

        return Latex.long_tableau(contenu, structure, legende)