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 ""
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 ""
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)
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
def contenu_client(sommes, clients, code_client, edition, livraisons, acces, machines, reservations, prestations, comptes, coefprests, coefmachines, generaux): """ création du contenu de l'annexe pour un client :param sommes: sommes calculées :param clients: clients importés :param code_client: code du client pour l'annexe :param edition: paramètres d'édition :param livraisons: livraisons importées :param acces: accès importés :param machines: machines importées :param reservations: réservations importées :param prestations: prestations importées :param comptes: comptes importés :param coefprests: coefficients prestations importés :param coefmachines: coefficients machines importés :param generaux: paramètres généraux :return: contenu de l'annexe du client """ contenu = "" scl = sommes.sommes_clients[code_client] client = clients.donnees[code_client] sca = sommes.sommes_categories[code_client] intitule_client = code_client + " - " + Latex.echappe_caracteres(client['abrev_labo']) structure_recap_compte = r'''{|l|l|r|r|r|''' contenu_recap_compte = r''' \hline Compte & Catégorie & \multicolumn{1}{l|}{Plafonné} & \multicolumn{1}{l|}{Non Plaf.}''' for categorie in generaux.codes_d3(): structure_recap_compte += r'''r|''' contenu_recap_compte += r''' & \multicolumn{1}{l|}{ ''' + Latex.echappe_caracteres(coefprests.obtenir_noms_categories(categorie)) + r'''}''' structure_recap_compte += r'''}''' legende_recap_compte = r'''Récapitulatif des comptes pour client ''' + intitule_client contenu_recap_compte += r'''& \multicolumn{1}{l|}{Total cpte} \\ \hline ''' client_comptes = sommes.sommes_comptes[code_client] contenu_compte = "" for id_compte in sorted(client_comptes.keys()): # ## COMPTE co = comptes.donnees[id_compte] intitule_compte = id_compte + " - " + Latex.echappe_caracteres(co['intitule']) dico_nom = {'labo': Latex.echappe_caracteres(client['abrev_labo']), 'utilisateur': Latex.echappe_caracteres(co['intitule']), 'date': edition.mois_txt + " " + str(edition.annee)} contenu_compte += r''' \clearpage %(labo)s - %(utilisateur)s - %(date)s ''' % dico_nom structure_recap_projet = r'''{|l|r|r|r|''' contenu_recap_projet = r''' \hline Projet & \multicolumn{1}{l|}{Plafonné} & \multicolumn{1}{l|}{Non Plaf.} ''' for categorie in generaux.codes_d3(): structure_recap_projet += r'''r|''' contenu_recap_projet += r''' & \multicolumn{1}{l|}{ ''' + Latex.echappe_caracteres(coefprests.obtenir_noms_categories(categorie)) + r'''}''' structure_recap_projet += r'''}''' legende_recap_projet = r'''Récapitulatif compte ''' + intitule_compte contenu_recap_projet += r''' & \multicolumn{1}{l|}{Total projet} \\ \hline ''' client_compte_projet = sommes.sommes_projets[code_client][id_compte] contenu_projet = "" for num_projet in sorted(client_compte_projet.keys()): # ## PROJET sp = sommes.sommes_projets[code_client][id_compte][num_projet] intitule_projet = num_projet + " - " + Latex.echappe_caracteres(sp['intitule']) machines_utilisees = {} dico_recap_projet = {'num': intitule_projet, 'plafond': "%.2f" % sp['somme_p_pm'], 'non_plafond': "%.2f" % sp['somme_p_nm']} total = sp['somme_p_pm'] + sp['somme_p_nm'] contenu_recap_projet += r''' \hline %(num)s & %(plafond)s & %(non_plafond)s''' % dico_recap_projet for categorie in generaux.codes_d3(): total += sp['tot_cat'][categorie] contenu_recap_projet += r''' & ''' + "%.2f" % sp['tot_cat'][categorie] dico_recap_projet['total'] = "%.2f" % total contenu_recap_projet += r''' & %(total)s \\ \hline ''' % dico_recap_projet # ## CAE structure_cae = r'''{|l|l|l|l|l|l||r|r|r||r|r|r|}''' dico_cae = {'compte': intitule_compte, 'projet': intitule_projet} contenu_cae = r''' \hline \multicolumn{3}{|l|}{%(compte)s / %(projet)s} & & \multicolumn{2}{l||}{hh:mm} & \multicolumn{3}{l||}{CHF/h} & \multicolumn{3}{l|}{CHF} \\ \hline Date & Heure & Equipement & & mach. & oper. & \multicolumn{1}{l|}{P} & \multicolumn{1}{l|}{NP} & \multicolumn{1}{l||}{OP} & \multicolumn{1}{l|}{P} & \multicolumn{1}{l|}{NP} & \multicolumn{1}{l|}{OP} \\ \hline ''' % dico_cae nombre_cae = 0 legende_cae = r'''Récapitulatif Utilisation machines : ''' + intitule_compte + r''' / ''' +\ intitule_projet cae_proj = acces.acces_pour_projet(num_projet, id_compte, code_client) resultats = [0, 0, 0] for cae in cae_proj: nombre_cae += 1 if cae['id_machine'] not in machines_utilisees: machines_utilisees[cae['id_machine']] = {'machine': cae['nom_machine'], 'usage_hp': 0, 'reservation_hp': 0, 'facture_hp': 0, 'usage_hc': 0, 'reservation_hc': 0, 'facture_hc': 0} machines_utilisees[cae['id_machine']]['usage_hp'] += cae['duree_machine_hp'] machines_utilisees[cae['id_machine']]['usage_hc'] += cae['duree_machine_hc'] machine = machines.donnees[cae['id_machine']] coefmachine = coefmachines.donnees[client['id_classe_tarif'] + machine['categorie']] ligne, resultat = Annexes.ligne_cae(cae, machine, coefmachine) resultats[0] += resultat[0] resultats[1] += resultat[1] resultats[2] += resultat[2] contenu_cae += ligne contenu_cae += r''' \multicolumn{9}{|r||}{Total} & ''' + Outils.format_si_nul(resultats[0]) + r''' & ''' + Outils.format_si_nul(resultats[1]) + r''' & ''' + Outils.format_si_nul(resultats[2]) + r''' \\ \hline ''' if nombre_cae > 0: contenu_projet += Latex.long_tableau(contenu_cae, structure_cae, legende_cae) # ## cae # ## RES structure_res = r'''{|l|l|l|l|l|l||r|r||r|r|}''' dico_res = {'compte': intitule_compte, 'projet': intitule_projet} contenu_res = r''' \hline \multicolumn{3}{|l|}{%(compte)s / %(projet)s} & & \multicolumn{2}{l||}{hh:mm} & \multicolumn{2}{l||}{CHF/h} & \multicolumn{2}{l|}{CHF} \\ \hline Date & Heure & Equipement & & slot & fact. & \multicolumn{1}{l|}{P} & \multicolumn{1}{l||}{NP} & \multicolumn{1}{l|}{P} & \multicolumn{1}{l|}{NP} \\ \hline ''' % dico_res nombre_res = 0 legende_res = r'''Récapitulatif Réservations : ''' + intitule_compte + r''' / ''' + intitule_projet res_proj = reservations.reservations_pour_projet(num_projet, id_compte, code_client) resultats = [0, 0] for res in res_proj: nombre_res += 1 if res['id_machine'] not in machines_utilisees: machines_utilisees[res['id_machine']] = {'machine': res['nom_machine'], 'usage_hp': 0, 'reservation_hp': 0, 'facture_hp': 0, 'usage_hc': 0, 'reservation_hc': 0, 'facture_hc': 0} machines_utilisees[res['id_machine']]['reservation_hp'] += res['duree_hp'] machines_utilisees[res['id_machine']]['reservation_hc'] += res['duree_hc'] machines_utilisees[res['id_machine']]['facture_hp'] += res['duree_fact_hp'] machines_utilisees[res['id_machine']]['facture_hc'] += res['duree_fact_hc'] ligne, resultat = Annexes.ligne_res(res, machines.donnees[res['id_machine']]) resultats[0] += resultat[0] resultats[1] += resultat[1] contenu_res += ligne contenu_res += r''' \multicolumn{8}{|r||}{Total} & ''' + Outils.format_si_nul(resultats[0]) + r''' & ''' + Outils.format_si_nul(resultats[1]) + r'''\\ \hline ''' if nombre_res > 0: contenu_projet += Latex.long_tableau(contenu_res, structure_res, legende_res) # ## res # ## LIV structure_liv = r'''{|l|l|l|l|r|r|r|r|}''' dico_liv = {'compte': intitule_compte, 'projet': intitule_projet} contenu_liv = r''' \hline \multicolumn{2}{|l|}{%(compte)s / %(projet)s} & & & & & & \\ \hline Date livr. & Désignation & Q & Unité & \multicolumn{1}{l|}{PU} & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline ''' % dico_liv nombre_liv = 0 legende_liv = r'''Récapitulatif Livraisons : ''' + intitule_compte + r''' / ''' + intitule_projet liv_proj_cat = livraisons.livraisons_pour_projet_par_categorie(num_projet, id_compte, code_client, prestations) resultats = 0 for categorie in generaux.codes_d3(): if categorie in liv_proj_cat: livs = liv_proj_cat[categorie] for liv in livs: nombre_liv += 1 ligne, resultat = Annexes.ligne_liv(liv) resultats += resultat contenu_liv += ligne contenu_liv += r''' \multicolumn{7}{|r|}{Total} & ''' + Outils.format_si_nul(resultats) + r'''\\ \hline ''' if nombre_liv > 0: contenu_projet += Latex.long_tableau(contenu_liv, structure_liv, legende_liv) # ## liv if nombre_cae > 0 or nombre_res > 0: structure_stat_machines = r'''{|l|l|l|l|l|}''' legende_stat_machines = r'''Statistiques de réservation/utilisation par machine : ''' + \ intitule_compte + r''' / ''' + intitule_projet contenu_stat_machines = r''' \hline Equipement & & Utilisation & Res. Slot & Res. Effect. \\ \hline ''' for machine_t in sorted(machines_utilisees.items(), key=lambda k_v: k_v[1]['machine']): machine = machine_t[1] dico_stat_machines = { 'machine': Latex.echappe_caracteres(machine['machine']), 'usage_hp': Outils.format_heure(machine['usage_hp']), 'reservation_hp': Outils.format_heure(machine['reservation_hp']), 'facture_hp': Outils.format_heure(machine['facture_hp']), 'usage_hc': Outils.format_heure(machine['usage_hc']), 'reservation_hc': Outils.format_heure(machine['reservation_hc']), 'facture_hc': Outils.format_heure(machine['facture_hc'])} if machine['facture_hp'] > 0 or \ machine['reservation_hp'] or machine['usage_hp']: contenu_stat_machines += r'''%(machine)s & HP & %(usage_hp)s & %(reservation_hp)s & %(facture_hp)s \\ \hline ''' % dico_stat_machines if machine['facture_hc'] > 0 or \ machine['reservation_hc'] or machine['usage_hc']: contenu_stat_machines += r'''%(machine)s & HC & %(usage_hc)s & %(reservation_hc)s & %(facture_hc)s \\ \hline ''' % dico_stat_machines contenu_projet += Latex.tableau(contenu_stat_machines, structure_stat_machines, legende_stat_machines) # ## projet sco = sommes.sommes_comptes[code_client][id_compte] dico_recap_projet = {'plafond': "%.2f" % sco['somme_j_pm'], 'non_plafond': "%.2f" % sco['somme_j_nm'], 'prj': "%.2f" % sco['prj'], 'nrj': "%.2f" % sco['nrj'], 'pj': "%.2f" % sco['pj'], 'nj': "%.2f" % sco['nj']} ligne1 = r'''\hline Montant article & %(plafond)s & %(non_plafond)s''' % dico_recap_projet ligne2 = r'''Plafonnement & %(prj)s & %(nrj)s''' % dico_recap_projet ligne3 = r'''Total article & %(pj)s & %(nj)s''' % dico_recap_projet sj = sco['pj'] + sco['nj'] for categorie in generaux.codes_d3(): ligne1 += r''' & ''' + "%.2f" % sco['tot_cat'][categorie] ligne2 += r''' & ''' ligne3 += r''' & ''' + "%.2f" % sco['tot_cat'][categorie] sj += sco['tot_cat'][categorie] dico_recap_projet['sj'] = "%.2f" % sj ligne1 += r''' & \\ \hline ''' ligne2 += r''' & \\ \hline ''' ligne3 += r''' & %(sj)s\\ \hline ''' % dico_recap_projet contenu_recap_projet += ligne1 + ligne2 + ligne3 contenu_compte += Latex.tableau(contenu_recap_projet, structure_recap_projet, legende_recap_projet) dico_recap_compte = {'compte': intitule_compte, 'type': co['categorie'], 'plafond': "%.2f" % sco['pj'], 'non_plafond': "%.2f" % sco['nj'], 'total': "%.2f" % sj} contenu_recap_compte += r'''%(compte)s & %(type)s & %(plafond)s & %(non_plafond)s ''' \ % dico_recap_compte for categorie in generaux.codes_d3(): contenu_recap_compte += r''' & ''' + "%.2f" % sco['tot_cat'][categorie] contenu_recap_compte += r'''& %(total)s \\ \hline ''' % dico_recap_compte structure_recap_poste = r'''{|l|r|r|r|}''' legende_recap_poste = r'''Récapitulatif postes pour compte ''' + intitule_compte dico_recap_poste = {'spu': "%.2f" % sco['somme_j_pu'], 'prj': "%.2f" % sco['prj'], 'pj': "%.2f" % sco['pj'], 'spv': "%.2f" % sco['somme_j_pv'], 'squ': "%.2f" % sco['somme_j_qu'], 'nrj': "%.2f" % sco['nrj'], 'nj': "%.2f" % sco['nj'], 'sqv': "%.2f" % sco['somme_j_qv'], 'som': "%.2f" % sco['somme_j_om']} contenu_recap_poste = r''' \hline Compte : ''' + intitule_compte + r''' & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline Montant utilisation Machine P & %(spu)s & \multirow{2}{*}{%(prj)s} & \multirow{2}{*}{%(pj)s} \\ \cline{1-2} Montant réservation Machine P & %(spv)s & & \\ \hline Montant utilisation Machine NP & %(squ)s & \multirow{3}{*}{%(nrj)s} & \multirow{3}{*}{%(nj)s} \\ \cline{1-2} Montant réservation Machine NP & %(sqv)s & & \\ \cline{1-2} Montant Main d'oeuvre & %(som)s & & \\ \hline ''' % dico_recap_poste for categorie in generaux.codes_d3(): contenu_recap_poste += Latex.echappe_caracteres(coefprests.obtenir_noms_categories(categorie)) contenu_recap_poste += r''' & ''' + "%.2f" % sco['sommes_cat_m'][categorie] contenu_recap_poste += r''' & ''' + "%.2f" % sco['sommes_cat_r'][categorie] contenu_recap_poste += r''' & ''' + "%.2f" % sco['tot_cat'][categorie] contenu_recap_poste += r''' \\ \hline ''' contenu_compte += Latex.tableau(contenu_recap_poste, structure_recap_poste, legende_recap_poste) contenu_compte += contenu_projet # ## compte dic_entete = {'code': code_client, 'code_sap': client['code_sap'], 'nom': Latex.echappe_caracteres(client['abrev_labo']), 'date': edition.mois_txt + " " + str(edition.annee)} entete = r''' %(code)s - %(code_sap)s - %(nom)s - %(date)s ''' % dic_entete contenu += entete dic_emo = {'emb': "%.2f" % client['emol_base_mens'], 'ef': "%.2f" % client['emol_fixe'], 'pente': client['coef'], 'tot_eq_p': "%.2f" % scl['pt'], 'tot_eq_np': "%.2f" % scl['qt'], 'tot_eq': "%.2f" % scl['somme_eq'], 'rabais': "%.2f" % scl['er']} structure_emolument = r'''{|r|r|l|r|r|r|r|}''' legende_emolument = r'''Emolument pour client ''' + intitule_client contenu_emolument = r''' \hline \multicolumn{1}{|l|}{Emolument de base} & \multicolumn{1}{l|}{Emolument fixe} & Pente & \multicolumn{1}{l|}{Total EQ P} & \multicolumn{1}{l|}{Total EQ NP} & \multicolumn{1}{l|}{Total EQ} & \multicolumn{1}{l|}{Rabais émolument} \\ \hline %(emb)s & %(ef)s & %(pente)s & %(tot_eq_p)s & %(tot_eq_np)s & %(tot_eq)s & %(rabais)s \\ \hline ''' % dic_emo contenu += Latex.tableau(contenu_emolument, structure_emolument, legende_emolument) dico_recap_compte = {'plafond': "%.2f" % scl['pt'], 'non_plafond': "%.2f" % scl['nt'], 'total': "%.2f" % scl['somme_t']} contenu_recap_compte += r'''Total article & & %(plafond)s & %(non_plafond)s''' % dico_recap_compte for categorie in generaux.codes_d3(): contenu_recap_compte += r''' & ''' + "%.2f" % scl['tot_cat'][categorie] contenu_recap_compte += r'''& %(total)s \\ \hline ''' % dico_recap_compte contenu += Latex.tableau(contenu_recap_compte, structure_recap_compte, legende_recap_compte) structure_recap_poste_cl = r'''{|l|r|r|r|}''' legende_recap_poste_cl = r'''Récapitulatif postes pour client ''' + intitule_client dico_recap_poste_cl = {'kpm1': '0.00', 'kprj1': '0.00', 'pk1': '0.00', 'kpm2': '0.00', 'kprj2': '0.00', 'pk2': '0.00', 'kpm3': '0.00', 'kprj3': '0.00', 'pk3': '0.00', 'kpm4': '0.00', 'kprj4': '0.00', 'pk4': '0.00', 'tpm': "%.2f" % scl['somme_t_pm'], 'tprj': "%.2f" % scl['somme_t_prj'], 'pt': "%.2f" % scl['pt'], 'tqm': "%.2f" % scl['somme_t_qm'], 'nt': "%.2f" % scl['nt'], 'tnrj': "%.2f" % scl['somme_t_nrj'], 'tom': "%.2f" % scl['somme_t_om']} if '1' in sca: dico_recap_poste_cl['kpm1'] = "%.2f" % sca['1']['somme_k_pm'] dico_recap_poste_cl['kprj1'] = "%.2f" % sca['1']['somme_k_prj'] dico_recap_poste_cl['pk1'] = "%.2f" % sca['1']['pk'] if '2' in sca: dico_recap_poste_cl['kpm2'] = "%.2f" % sca['2']['somme_k_pm'] dico_recap_poste_cl['kprj2'] = "%.2f" % sca['2']['somme_k_prj'] dico_recap_poste_cl['pk2'] = "%.2f" % sca['2']['pk'] if '3' in sca: dico_recap_poste_cl['kpm3'] = "%.2f" % sca['3']['somme_k_pm'] dico_recap_poste_cl['kprj3'] = "%.2f" % sca['3']['somme_k_prj'] dico_recap_poste_cl['pk3'] = "%.2f" % sca['3']['pk'] if '4' in sca: dico_recap_poste_cl['kpm4'] = "%.2f" % sca['4']['somme_k_pm'] dico_recap_poste_cl['kprj4'] = "%.2f" % sca['4']['somme_k_prj'] dico_recap_poste_cl['pk4'] = "%.2f" % sca['4']['pk'] contenu_recap_poste_cl = r''' \hline & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline Machine P (catégorie 1 : Utilisateur) & %(kpm1)s & %(kprj1)s & %(pk1)s \\ \hline Machine P (catégorie 2 : Etudiant en projet Master) & %(kpm2)s & %(kprj2)s & %(pk2)s \\ \hline Machine P (catégorie 3 : Etudiant en projet Semestre) & %(kpm3)s & %(kprj3)s & %(pk3)s \\ \hline Machine P (catégorie 4 : Client) & %(kpm4)s & %(kprj4)s & %(pk4)s \\ \hline Machine P (total des catégories) & %(tpm)s & %(tprj)s & %(pt)s \\ \hline Machine NP & %(tqm)s & \multirow{2}{*}{%(tnrj)s} & \multirow{2}{*}{%(nt)s} \\ \cline{1-2} Main d'oeuvre & %(tom)s & & \\ \hline ''' % dico_recap_poste_cl for categorie in generaux.codes_d3(): contenu_recap_poste_cl += Latex.echappe_caracteres(coefprests.obtenir_noms_categories(categorie)) contenu_recap_poste_cl += r''' & ''' contenu_recap_poste_cl += "%.2f" % scl['sommes_cat_m'][categorie] + r''' & ''' contenu_recap_poste_cl += "%.2f" % scl['sommes_cat_r'][categorie] + r''' & ''' contenu_recap_poste_cl += "%.2f" % scl['tot_cat'][categorie] + r''' \\ \hline ''' contenu += Latex.tableau(contenu_recap_poste_cl, structure_recap_poste_cl, legende_recap_poste_cl) contenu += contenu_compte return contenu
def contenu_client(sommes, clients, code_client, edition, livraisons, acces, machines, reservations, prestations, comptes, coefprests, coefmachines, generaux): """ création du contenu de l'annexe pour un client :param sommes: sommes calculées :param clients: clients importés :param code_client: code du client pour l'annexe :param edition: paramètres d'édition :param livraisons: livraisons importées :param acces: accès importés :param machines: machines importées :param reservations: réservations importées :param prestations: prestations importées :param comptes: comptes importés :param coefprests: coefficients prestations importés :param coefmachines: coefficients machines importés :param generaux: paramètres généraux :return: contenu de l'annexe du client """ contenu = "" scl = sommes.sommes_clients[code_client] client = clients.donnees[code_client] sca = sommes.sommes_categories[code_client] intitule_client = code_client + " - " + Latex.echappe_caracteres(client['abrev_labo']) structure_recap_compte = r'''{|l|l|r|r|''' contenu_recap_compte = r''' \hline Compte & Catégorie & \multicolumn{1}{l|}{Procédés}''' for categorie in generaux.codes_d3(): structure_recap_compte += r'''r|''' contenu_recap_compte += r''' & \multicolumn{1}{l|}{ ''' + Latex.echappe_caracteres(coefprests.obtenir_noms_categories(categorie)) + r'''}''' structure_recap_compte += r'''}''' legende_recap_compte = r'''Récapitulatif des comptes pour client ''' + intitule_client contenu_recap_compte += r'''& \multicolumn{1}{l|}{Total cpte} \\ \hline ''' structure_recap_eligibles = r'''{|l|c|c|c|c|c|c|c|c|}''' legende_recap_eligibles = r'''Coûts procédés éligibles des comptes pour client ''' + intitule_client contenu_recap_eligibles = r''' \hline Compte & Coûts A & Coûts B & Coûts C & Coûts U1 & Coûts U2 & Coûts U3 & Coûts MO & Coûts CO \\ \hline ''' client_comptes = sommes.sommes_comptes[code_client] contenu_compte = "" for id_compte in sorted(client_comptes.keys()): # ## COMPTE compte = comptes.donnees[id_compte] intitule_compte = id_compte + " - " + Latex.echappe_caracteres(compte['intitule']) dico_nom = {'labo': Latex.echappe_caracteres(client['abrev_labo']), 'utilisateur': Latex.echappe_caracteres(compte['intitule']), 'date': edition.mois_txt + " " + str(edition.annee)} contenu_compte += r''' \clearpage %(labo)s - %(utilisateur)s - %(date)s ''' % dico_nom # ## RES structure_res = r'''{|l|l|l|l|l|l|}''' dico_res = {'compte': intitule_compte} contenu_res = r''' \hline \multicolumn{3}{|l|}{%(compte)s} & & \multicolumn{2}{l|}{hh:mm} \\ \hline Date & Heure & Equipement & & slot & fact. \\ \hline ''' % dico_res nombre_res = 0 legende_res = r'''Récapitulatif Réservations : ''' + intitule_compte res_proj = reservations.reservations_pour_compte(id_compte, code_client) for res in res_proj: nombre_res += 1 ligne = Annexes.ligne_res(res) contenu_res += ligne contenu_rsv = "" if nombre_res > 0: contenu_rsv = Latex.long_tableau(contenu_res, structure_res, legende_res) # ## res structure_recap_projet = r'''{|l|r|r|''' contenu_recap_projet = r''' \hline Projet & \multicolumn{1}{l|}{Procédés} ''' for categorie in generaux.codes_d3(): structure_recap_projet += r'''r|''' contenu_recap_projet += r''' & \multicolumn{1}{l|}{ ''' + Latex.echappe_caracteres(coefprests.obtenir_noms_categories(categorie)) + r'''}''' structure_recap_projet += r'''}''' legende_recap_projet = r'''Récapitulatif compte ''' + intitule_compte contenu_recap_projet += r''' & \multicolumn{1}{l|}{Total projet} \\ \hline ''' contenu_projet = "" if code_client in sommes.sommes_projets: if id_compte in sommes.sommes_projets[code_client]: print(code_client, id_compte) client_compte_projet = sommes.sommes_projets[code_client][id_compte] for num_projet in sorted(client_compte_projet.keys()): # ## PROJET sp = sommes.sommes_projets[code_client][id_compte][num_projet] intitule_projet = num_projet + " - " + Latex.echappe_caracteres(sp['intitule']) dico_recap_projet = {'num': intitule_projet, 'procede': "%.2f" % sp['mp']} total = sp['mp'] contenu_recap_projet += r''' \hline %(num)s & %(procede)s''' % dico_recap_projet for categorie in generaux.codes_d3(): total += sp['tot_cat'][categorie] contenu_recap_projet += r''' & ''' + "%.2f" % sp['tot_cat'][categorie] dico_recap_projet['total'] = "%.2f" % total contenu_recap_projet += r''' & %(total)s \\ \hline ''' % dico_recap_projet ## CAE structure_cae = r'''{|l|l|l|c|c|c|c|c|c|c|c|c|c|}''' dico_cae = {'compte': intitule_compte, 'projet': intitule_projet} contenu_cae = r''' \hline \multicolumn{3}{|l|}{%(compte)s / %(projet)s} & & \multicolumn{2}{c|}{hh:mm} & \multicolumn{2}{c|}{CHF/h} & Montant & \multicolumn{2}{c|}{Déductions} & Montant & Montant \\ \cline{1-8} \cline{10-11} Date & Heure & Equipement & & mach. & oper. & mach. & MO & machine & spé. & HC & MO & net \\ \hline ''' % dico_cae nombre_cae = 0 legende_cae = r'''Récapitulatif Utilisation machines : ''' + intitule_compte + r''' / ''' +\ intitule_projet cae_proj = acces.acces_pour_projet(num_projet, id_compte, code_client) resultats = [0, 0, 0, 0, 0] for cae in cae_proj: nombre_cae += 1 machine = machines.donnees[cae['id_machine']] coefmachine = coefmachines.donnees[client['id_classe_tarif'] + machine['categorie']] ligne, resultat = Annexes.ligne_cae(cae, machine, coefmachine) resultats[0] += resultat[0] resultats[1] += resultat[1] resultats[2] += resultat[2] resultats[3] += resultat[3] resultats[4] += resultat[4] contenu_cae += ligne contenu_cae += r''' \multicolumn{8}{|r|}{Total} & ''' + Outils.format_si_nul(resultats[0]) + r''' & ''' + Outils.format_si_nul(resultats[1]) + r''' & ''' + Outils.format_si_nul(resultats[2]) + r''' & ''' + Outils.format_si_nul(resultats[3]) + r''' & ''' + Outils.format_si_nul(resultats[4]) + r''' \\ \hline ''' if nombre_cae > 0: contenu_projet += Latex.long_tableau(contenu_cae, structure_cae, legende_cae) ## cae # ## LIV structure_liv = r'''{|l|l|l|l|r|r|r|r|}''' dico_liv = {'compte': intitule_compte, 'projet': intitule_projet} contenu_liv = r''' \hline \multicolumn{2}{|l|}{%(compte)s / %(projet)s} & & & & & & \\ \hline Date livr. & Désignation & Q & Unité & \multicolumn{1}{l|}{PU} & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline ''' % dico_liv nombre_liv = 0 legende_liv = r'''Récapitulatif Livraisons : ''' + intitule_compte + r''' / ''' + intitule_projet liv_proj_cat = livraisons.livraisons_pour_projet_par_categorie(num_projet, id_compte, code_client, prestations) resultats = 0 for categorie in generaux.codes_d3(): if categorie in liv_proj_cat: livs = liv_proj_cat[categorie] for liv in livs: nombre_liv += 1 ligne, resultat = Annexes.ligne_liv(liv) resultats += resultat contenu_liv += ligne contenu_liv += r''' \multicolumn{7}{|r|}{Total} & ''' + Outils.format_si_nul(resultats) + r'''\\ \hline ''' if nombre_liv > 0: contenu_projet += Latex.long_tableau(contenu_liv, structure_liv, legende_liv) # ## liv # ## projet sco = sommes.sommes_comptes[code_client][id_compte] ligne = r'''\hline Total article & ''' + "%.2f" % sco['mj'] sj = sco['mj'] for categorie in generaux.codes_d3(): ligne += r''' & ''' + "%.2f" % sco['tot_cat'][categorie] sj += sco['tot_cat'][categorie] ligne += r''' & ''' + "%.2f" % sj ligne += r'''\\ \hline ''' contenu_recap_projet += ligne contenu_compte += Latex.tableau(contenu_recap_projet, structure_recap_projet, legende_recap_projet) dico_recap_compte = {'compte': intitule_compte, 'type': compte['categorie'], 'procede': "%.2f" % sco['mj'], 'total': "%.2f" % sj} contenu_recap_compte += r'''%(compte)s & %(type)s & %(procede)s ''' \ % dico_recap_compte for categorie in generaux.codes_d3(): contenu_recap_compte += r''' & ''' + "%.2f" % sco['tot_cat'][categorie] contenu_recap_compte += r'''& %(total)s \\ \hline ''' % dico_recap_compte u1 = sco['somme_j_ai'] u2 = u1 + sco['somme_j_bi'] u3 = u2 + sco['somme_j_ci'] couts_co = 0 for cat, tt in sco['tot_cat'].items(): couts_co += tt dico_recap_eligibles = {'compte': intitule_compte, 'couts_a': "%.2f" % sco['somme_j_ai'], 'couts_mo': "%.2f" % sco['somme_j_oi'], 'couts_b': "%.2f" % sco['somme_j_bi'], 'couts_c': "%.2f" % sco['somme_j_ci'], 'u1': "%.2f" % u1, 'u2': "%.2f" % u2, 'u3': "%.2f" % u3, 'couts_co': "%.2f" % couts_co} contenu_recap_eligibles += r'''%(compte)s & %(couts_a)s & %(couts_b)s & %(couts_c)s & %(u1)s & %(u2)s & %(u3)s & %(couts_mo)s & %(couts_co)s \\ \hline ''' % dico_recap_eligibles structure_recap_poste = r'''{|l|r|r|r|}''' legende_recap_poste = r'''Récapitulatif postes pour compte ''' + intitule_compte dico_recap_poste = {'maij': "%.2f" % sco['somme_j_mai'], 'moij': "%.2f" % sco['somme_j_moi'], 'mrj': "%.2f" % sco['somme_j_mr'], 'mj': "%.2f" % sco['mj']} contenu_recap_poste = r''' \hline Compte : ''' + intitule_compte + r''' & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline Machine & %(maij)s & \multirow{2}{*}{%(mrj)s} & \multirow{2}{*}{%(mj)s} \\ \cline{1-2} Main d'oeuvre & %(moij)s & & \\ \hline ''' % dico_recap_poste for categorie in generaux.codes_d3(): contenu_recap_poste += Latex.echappe_caracteres(coefprests.obtenir_noms_categories(categorie)) contenu_recap_poste += r''' & ''' + "%.2f" % sco['sommes_cat_m'][categorie] contenu_recap_poste += r''' & ''' + "%.2f" % sco['sommes_cat_r'][categorie] contenu_recap_poste += r''' & ''' + "%.2f" % sco['tot_cat'][categorie] contenu_recap_poste += r''' \\ \hline ''' contenu_compte += Latex.tableau(contenu_recap_poste, structure_recap_poste, legende_recap_poste) if nombre_res > 0: contenu_compte += contenu_rsv machines_utilisees = {} somme_res_compte = {} if code_client in reservations.sommes: if id_compte in reservations.sommes[code_client]['comptes']: somme_res_compte = reservations.sommes[code_client]['comptes'][id_compte] for key in somme_res_compte.keys(): machines_utilisees[key] = {'machine': machines.donnees[key]['nom']} somme_cae_compte = {} if code_client in acces.sommes: if id_compte in acces.sommes[code_client]: somme_cae_compte = acces.sommes[code_client][id_compte] for key in somme_cae_compte.keys(): if key not in machines_utilisees: machines_utilisees[key] = {'machine': machines.donnees[key]['nom']} if len(machines_utilisees) > 0: structure_stat_machines = r'''{|l|c|c|c|c|c|c|r|}''' legende_stat_machines = r'''Statistiques de réservation/utilisation par machine : ''' + intitule_compte contenu_stat_machines = r''' \hline Equipement & & Slot rés. & Slot ann. & Taux & Utilisation minimale & Machine & Pénalités [h] \\ \hline ''' for machine_t in sorted(machines_utilisees.items(), key=lambda k_v: k_v[1]['machine']): machine = machine_t[1] id_machine = machine_t[0] taux_hp = machines.donnees[id_machine]['tx_occ_eff_hp'] taux_hc = machines.donnees[id_machine]['tx_occ_eff_hc'] duree_hp = 0 duree_hc = 0 res_hp = 0 res_hc = 0 ann_hp = 0 ann_hc = 0 if id_machine in somme_cae_compte: duree_hp = somme_cae_compte[id_machine]['duree_hp'] duree_hc = somme_cae_compte[id_machine]['duree_hc'] if id_machine in somme_res_compte: res_hp = somme_res_compte[id_machine]['res_hp'] res_hc = somme_res_compte[id_machine]['res_hc'] ann_hp = somme_res_compte[id_machine]['ann_hp'] ann_hc = somme_res_compte[id_machine]['ann_hc'] min_hp = (res_hp + ann_hp) * taux_hp / 100 min_hc = (res_hc + ann_hc) * taux_hc / 100 pen_hp = min_hp - duree_hp pen_hc = min_hc - duree_hc dico_stat_machines = { 'machine': Latex.echappe_caracteres(machine['machine']), 'res_hp': Outils.format_heure(res_hp), 'res_hc': Outils.format_heure(res_hc), 'ann_hp': Outils.format_heure(ann_hp), 'ann_hc': Outils.format_heure(ann_hc), 'duree_hp': Outils.format_heure(duree_hp), 'duree_hc': Outils.format_heure(duree_hc), 'taux_hp': str(int(taux_hp)) + '\%', 'taux_hc': str(int(taux_hc)) + '\%', 'min_hp': Outils.format_heure(min_hp), 'min_hc': Outils.format_heure(min_hc), 'pen_hp': "%.1f" % round(pen_hp/60, 1), 'pen_hc': "%.1f" % round(pen_hc/60, 1)} if res_hp > 0 or ann_hp or duree_hp: contenu_stat_machines += r'''%(machine)s & HP & %(res_hp)s & %(ann_hp)s & %(taux_hp)s & %(min_hp)s & %(duree_hp)s & %(pen_hp)s \\ \hline ''' % dico_stat_machines if res_hc > 0 or ann_hc or duree_hc: contenu_stat_machines += r'''%(machine)s & HC & %(res_hc)s & %(ann_hc)s & %(taux_hc)s & %(min_hc)s & %(duree_hc)s & %(pen_hc)s \\ \hline ''' % dico_stat_machines contenu_compte += Latex.tableau(contenu_stat_machines, structure_stat_machines, legende_stat_machines) contenu_compte += contenu_projet # ## compte dic_entete = {'code': code_client, 'code_sap': client['code_sap'], 'nom': Latex.echappe_caracteres(client['abrev_labo']), 'date': edition.mois_txt + " " + str(edition.annee)} entete = r''' %(code)s - %(code_sap)s - %(nom)s - %(date)s ''' % dic_entete contenu += entete structure_recap_poste_cl = r'''{|l|r|r|r|}''' legende_recap_poste_cl = r'''Récapitulatif postes pour client ''' + intitule_client dico_recap_poste_cl = {'emom': "%.2f" % scl['em'], 'emor': "%.2f" % scl['er'], 'emo': "%.2f" % scl['e'], 'resm': "%.2f" % scl['rm'], 'resr': "%.2f" % scl['rr'], 'res': "%.2f" % scl['r'], 'mat': "%.2f" % scl['mat'], 'stmr': "%.2f" % scl['somme_t_mr'], 'mt': "%.2f" % scl['mt'], 'mot': "%.2f" % scl['mot']} contenu_recap_poste_cl = r''' \hline & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline Emolument & %(emom)s & %(emor)s & %(emo)s \\ \hline Frais de réservation & %(resm)s & %(resr)s & %(res)s \\ \hline Machine & %(mat)s & \multirow{2}{*}{%(stmr)s} & \multirow{2}{*}{%(mt)s} \\ \cline{1-2} Main d'oeuvre & %(mot)s & & \\ \hline ''' % dico_recap_poste_cl for categorie in generaux.codes_d3(): contenu_recap_poste_cl += Latex.echappe_caracteres(coefprests.obtenir_noms_categories(categorie)) contenu_recap_poste_cl += r''' & ''' contenu_recap_poste_cl += "%.2f" % scl['sommes_cat_m'][categorie] + r''' & ''' contenu_recap_poste_cl += "%.2f" % scl['sommes_cat_r'][categorie] + r''' & ''' contenu_recap_poste_cl += "%.2f" % scl['tot_cat'][categorie] + r''' \\ \hline ''' contenu += Latex.tableau(contenu_recap_poste_cl, structure_recap_poste_cl, legende_recap_poste_cl) dico_emolument = {'emb': "%.2f" % client['emol_base_mens'], 'ef': "%.2f" % client['emol_fixe'], 'pente': client['coef'], 'tot_eq_r': "%.2f" % scl['r'], 'tot_eq_m': "%.2f" % (scl['mt']-scl['mot']), 'tot_eq': "%.2f" % scl['somme_eq'], 'rabais': "%.2f" % scl['er']} structure_emolument = r'''{|r|r|l|r|r|r|r|}''' legende_emolument = r'''Emolument pour client ''' + intitule_client contenu_emolument = r''' \hline \multicolumn{1}{|l|}{Emolument de base} & \multicolumn{1}{l|}{Emolument fixe} & Pente & \multicolumn{1}{l|}{Total EQ R} & \multicolumn{1}{l|}{Total EQ M} & \multicolumn{1}{l|}{Total EQ} & \multicolumn{1}{l|}{Rabais émolument} \\ \hline %(emb)s & %(ef)s & %(pente)s & %(tot_eq_r)s & %(tot_eq_m)s & %(tot_eq)s & %(rabais)s \\ \hline ''' % dico_emolument contenu += Latex.tableau(contenu_emolument, structure_emolument, legende_emolument) if scl['r'] > 0: structure_frais_client = r'''{|l|c|r|r|r|}''' legende_frais_client = r'''Frais de réservation/utilisation par machine pour client : ''' + intitule_client contenu_frais_client = r''' \hline Equipement & & Pénalités [h] & PU & Montant \\ \hline ''' machines_utilisees = {} for key in scl['res']: machines_utilisees[key] = {'machine': machines.donnees[key]['nom']} for machine_t in sorted(machines_utilisees.items(), key=lambda k_v: k_v[1]['machine']): machine = machine_t[1] id_machine = machine_t[0] som_m = scl['res'][id_machine] if som_m['pen_hp'] > 0 or som_m['pen_hc'] > 0: dico_frais_client = { 'machine': Latex.echappe_caracteres(machine['machine']), 'pen_hp': "%.1f" % som_m['pen_hp'], 'pen_hc': "%.1f" % som_m['pen_hc'], 'mont_hp': Outils.format_si_nul(som_m['m_hp']), 'mont_hc': Outils.format_si_nul(som_m['m_hc']), 'pu_hp': Outils.format_si_nul(reservations.sommes[code_client]['machines'][id_machine]['pu_hp']), 'pu_hc': Outils.format_si_nul(reservations.sommes[code_client]['machines'][id_machine]['pu_hc'])} if som_m['pen_hp'] > 0: contenu_frais_client += r'''%(machine)s & HP & %(pen_hp)s & %(pu_hp)s & %(mont_hp)s \\ \hline ''' % dico_frais_client if som_m['pen_hc'] > 0: contenu_frais_client += r'''%(machine)s & HC & %(pen_hc)s & %(pu_hc)s & %(mont_hc)s \\ \hline ''' % dico_frais_client contenu_frais_client += r''' \multicolumn{4}{|r|}{Total} & ''' + Outils.format_si_nul(scl['r']) + r'''\\ \hline ''' contenu += Latex.tableau(contenu_frais_client, structure_frais_client, legende_frais_client) dico_recap_compte = {'procedes': "%.2f" % scl['mt'], 'total': "%.2f" % (scl['somme_t']-scl['r'])} contenu_recap_compte += r'''Total article & & %(procedes)s''' % dico_recap_compte for categorie in generaux.codes_d3(): contenu_recap_compte += r''' & ''' + "%.2f" % scl['tot_cat'][categorie] contenu_recap_compte += r'''& %(total)s \\ \hline ''' % dico_recap_compte contenu += Latex.tableau(contenu_recap_compte, structure_recap_compte, legende_recap_compte) u1 = scl['somme_t_ai'] u2 = u1 + scl['somme_t_bi'] u3 = u2 + scl['somme_t_ci'] tot_co = 0 for cat, tt in scl['tot_cat'].items(): tot_co += tt dico_recap_eligibles = {'ait': "%.2f" % scl['somme_t_ai'], 'moit': "%.2f" % scl['somme_t_oi'], 'bit': "%.2f" % scl['somme_t_bi'], 'cit': "%.2f" % scl['somme_t_ci'], 'u1': "%.2f" % u1, 'u2': "%.2f" % u2, 'u3': "%.2f" % u3, 'coit': "%.2f" % tot_co} contenu_recap_eligibles += r'''Total article & %(ait)s & %(bit)s & %(cit)s & %(u1)s & %(u2)s & %(u3)s & %(moit)s & %(coit)s \\ \hline ''' % dico_recap_eligibles contenu += Latex.tableau(contenu_recap_eligibles, structure_recap_eligibles, legende_recap_eligibles) structure_recap_cat_cl = r'''{|l|r|r|r|}''' legende_recap_cat_cl = r'''Détail par catégorie pour client ''' + intitule_client dico_recap_cat_cl = {'mmk1': '0.00', 'mrk1': '0.00', 'mk1': '0.00', 'mmk2': '0.00', 'mrk2': '0.00', 'mk2': '0.00', 'mmk3': '0.00', 'mrk3': '0.00', 'mk3': '0.00', 'mmk4': '0.00', 'mrk4': '0.00', 'mk4': '0.00', 'mm': "%.2f" % scl['somme_t_mm'], 'mr': "%.2f" % scl['somme_t_mr'], 'mt': "%.2f" % scl['mt']} if '1' in sca: dico_recap_cat_cl['mmk1'] = "%.2f" % sca['1']['somme_k_mm'] dico_recap_cat_cl['mrk1'] = "%.2f" % sca['1']['somme_k_mr'] dico_recap_cat_cl['mk1'] = "%.2f" % sca['1']['mk'] if '2' in sca: dico_recap_cat_cl['mmk2'] = "%.2f" % sca['2']['somme_k_mm'] dico_recap_cat_cl['mrk2'] = "%.2f" % sca['2']['somme_k_mr'] dico_recap_cat_cl['mk2'] = "%.2f" % sca['2']['mk'] if '3' in sca: dico_recap_cat_cl['mmk3'] = "%.2f" % sca['3']['somme_k_mm'] dico_recap_cat_cl['mrk3'] = "%.2f" % sca['3']['somme_k_mr'] dico_recap_cat_cl['mk3'] = "%.2f" % sca['3']['mk'] if '4' in sca: dico_recap_cat_cl['mmk4'] = "%.2f" % sca['4']['somme_k_mm'] dico_recap_cat_cl['mrk4'] = "%.2f" % sca['4']['somme_k_mr'] dico_recap_cat_cl['mk4'] = "%.2f" % sca['4']['mk'] contenu_recap_cat_cl = r''' \hline & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline Coût procédés (catégorie Utilisateur) & %(mmk1)s & %(mrk1)s & %(mk1)s \\ \hline Coût procédés (catégorie Etudiant en projet Master) & %(mmk2)s & %(mrk2)s & %(mk2)s \\ \hline Coût procédés (catégorie Etudiant en projet Semestre) & %(mmk3)s & %(mrk3)s & %(mk3)s \\ \hline Coût procédés (catégorie Client) & %(mmk4)s & %(mrk4)s & %(mk4)s \\ \hline Total & %(mm)s & %(mr)s & %(mt)s \\ \hline ''' % dico_recap_cat_cl contenu += Latex.tableau(contenu_recap_cat_cl, structure_recap_cat_cl, legende_recap_cat_cl) contenu += contenu_compte return contenu
def contenu_client(sommes, clients, code_client, edition, livraisons, acces, machines, reservations, prestations, comptes, coefprests, coefmachines, generaux): """ création du contenu de l'annexe pour un client :param sommes: sommes calculées :param clients: clients importés :param code_client: code du client pour l'annexe :param edition: paramètres d'édition :param livraisons: livraisons importées :param acces: accès importés :param machines: machines importées :param reservations: réservations importées :param prestations: prestations importées :param comptes: comptes importés :param coefprests: coefficients prestations importés :param coefmachines: coefficients machines importés :param generaux: paramètres généraux :return: contenu de l'annexe du client """ contenu = "" scl = sommes.sommes_clients[code_client] client = clients.donnees[code_client] sca = sommes.sommes_categories[code_client] intitule_client = code_client + " - " + Latex.echappe_caracteres( client['abrev_labo']) structure_recap_compte = r'''{|l|l|r|r|''' contenu_recap_compte = r''' \hline Compte & Catégorie & \multicolumn{1}{l|}{Procédés}''' for categorie in generaux.codes_d3(): structure_recap_compte += r'''r|''' contenu_recap_compte += r''' & \multicolumn{1}{l|}{ ''' + Latex.echappe_caracteres( coefprests.obtenir_noms_categories(categorie)) + r'''}''' structure_recap_compte += r'''}''' legende_recap_compte = r'''Récapitulatif des comptes pour client ''' + intitule_client contenu_recap_compte += r'''& \multicolumn{1}{l|}{Total cpte} \\ \hline ''' structure_recap_eligibles = r'''{|l|c|c|c|c|c|c|c|c|}''' legende_recap_eligibles = r'''Coûts procédés éligibles des comptes pour client ''' + intitule_client contenu_recap_eligibles = r''' \hline Compte & Coûts A & Coûts B & Coûts C & Coûts U1 & Coûts U2 & Coûts U3 & Coûts MO & Coûts CO \\ \hline ''' client_comptes = sommes.sommes_comptes[code_client] contenu_compte = "" for id_compte in sorted(client_comptes.keys()): # ## COMPTE compte = comptes.donnees[id_compte] intitule_compte = id_compte + " - " + Latex.echappe_caracteres( compte['intitule']) dico_nom = { 'labo': Latex.echappe_caracteres(client['abrev_labo']), 'utilisateur': Latex.echappe_caracteres(compte['intitule']), 'date': edition.mois_txt + " " + str(edition.annee) } contenu_compte += r''' \clearpage %(labo)s - %(utilisateur)s - %(date)s ''' % dico_nom # ## RES structure_res = r'''{|l|l|l|l|l|l|}''' dico_res = {'compte': intitule_compte} contenu_res = r''' \hline \multicolumn{3}{|l|}{%(compte)s} & & \multicolumn{2}{l|}{hh:mm} \\ \hline Date & Heure & Equipement & & slot & fact. \\ \hline ''' % dico_res nombre_res = 0 legende_res = r'''Récapitulatif Réservations : ''' + intitule_compte res_proj = reservations.reservations_pour_compte( id_compte, code_client) for res in res_proj: nombre_res += 1 ligne = Annexes.ligne_res(res) contenu_res += ligne contenu_rsv = "" if nombre_res > 0: contenu_rsv = Latex.long_tableau(contenu_res, structure_res, legende_res) # ## res structure_recap_projet = r'''{|l|r|r|''' contenu_recap_projet = r''' \hline Projet & \multicolumn{1}{l|}{Procédés} ''' for categorie in generaux.codes_d3(): structure_recap_projet += r'''r|''' contenu_recap_projet += r''' & \multicolumn{1}{l|}{ ''' + Latex.echappe_caracteres( coefprests.obtenir_noms_categories(categorie)) + r'''}''' structure_recap_projet += r'''}''' legende_recap_projet = r'''Récapitulatif compte ''' + intitule_compte contenu_recap_projet += r''' & \multicolumn{1}{l|}{Total projet} \\ \hline ''' contenu_projet = "" if code_client in sommes.sommes_projets: if id_compte in sommes.sommes_projets[code_client]: print(code_client, id_compte) client_compte_projet = sommes.sommes_projets[code_client][ id_compte] for num_projet in sorted(client_compte_projet.keys()): # ## PROJET sp = sommes.sommes_projets[code_client][id_compte][ num_projet] intitule_projet = num_projet + " - " + Latex.echappe_caracteres( sp['intitule']) dico_recap_projet = { 'num': intitule_projet, 'procede': "%.2f" % sp['mp'] } total = sp['mp'] contenu_recap_projet += r''' \hline %(num)s & %(procede)s''' % dico_recap_projet for categorie in generaux.codes_d3(): total += sp['tot_cat'][categorie] contenu_recap_projet += r''' & ''' + "%.2f" % sp[ 'tot_cat'][categorie] dico_recap_projet['total'] = "%.2f" % total contenu_recap_projet += r''' & %(total)s \\ \hline ''' % dico_recap_projet ## CAE structure_cae = r'''{|l|l|l|c|c|c|c|c|c|c|c|c|c|}''' dico_cae = { 'compte': intitule_compte, 'projet': intitule_projet } contenu_cae = r''' \hline \multicolumn{3}{|l|}{%(compte)s / %(projet)s} & & \multicolumn{2}{c|}{hh:mm} & \multicolumn{2}{c|}{CHF/h} & Montant & \multicolumn{2}{c|}{Déductions} & Montant & Montant \\ \cline{1-8} \cline{10-11} Date & Heure & Equipement & & mach. & oper. & mach. & MO & machine & spé. & HC & MO & net \\ \hline ''' % dico_cae nombre_cae = 0 legende_cae = r'''Récapitulatif Utilisation machines : ''' + intitule_compte + r''' / ''' +\ intitule_projet cae_proj = acces.acces_pour_projet( num_projet, id_compte, code_client) resultats = [0, 0, 0, 0, 0] for cae in cae_proj: nombre_cae += 1 machine = machines.donnees[cae['id_machine']] coefmachine = coefmachines.donnees[ client['id_classe_tarif'] + machine['categorie']] ligne, resultat = Annexes.ligne_cae( cae, machine, coefmachine) resultats[0] += resultat[0] resultats[1] += resultat[1] resultats[2] += resultat[2] resultats[3] += resultat[3] resultats[4] += resultat[4] contenu_cae += ligne contenu_cae += r''' \multicolumn{8}{|r|}{Total} & ''' + Outils.format_si_nul( resultats[0]) + r''' & ''' + Outils.format_si_nul(resultats[1]) + r''' & ''' + Outils.format_si_nul(resultats[2]) + r''' & ''' + Outils.format_si_nul(resultats[3]) + r''' & ''' + Outils.format_si_nul( resultats[4]) + r''' \\ \hline ''' if nombre_cae > 0: contenu_projet += Latex.long_tableau( contenu_cae, structure_cae, legende_cae) ## cae # ## LIV structure_liv = r'''{|l|l|l|l|r|r|r|r|}''' dico_liv = { 'compte': intitule_compte, 'projet': intitule_projet } contenu_liv = r''' \hline \multicolumn{2}{|l|}{%(compte)s / %(projet)s} & & & & & & \\ \hline Date livr. & Désignation & Q & Unité & \multicolumn{1}{l|}{PU} & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline ''' % dico_liv nombre_liv = 0 legende_liv = r'''Récapitulatif Livraisons : ''' + intitule_compte + r''' / ''' + intitule_projet liv_proj_cat = livraisons.livraisons_pour_projet_par_categorie( num_projet, id_compte, code_client, prestations) resultats = 0 for categorie in generaux.codes_d3(): if categorie in liv_proj_cat: livs = liv_proj_cat[categorie] for liv in livs: nombre_liv += 1 ligne, resultat = Annexes.ligne_liv(liv) resultats += resultat contenu_liv += ligne contenu_liv += r''' \multicolumn{7}{|r|}{Total} & ''' + Outils.format_si_nul( resultats) + r'''\\ \hline ''' if nombre_liv > 0: contenu_projet += Latex.long_tableau( contenu_liv, structure_liv, legende_liv) # ## liv # ## projet sco = sommes.sommes_comptes[code_client][id_compte] ligne = r'''\hline Total article & ''' + "%.2f" % sco['mj'] sj = sco['mj'] for categorie in generaux.codes_d3(): ligne += r''' & ''' + "%.2f" % sco['tot_cat'][categorie] sj += sco['tot_cat'][categorie] ligne += r''' & ''' + "%.2f" % sj ligne += r'''\\ \hline ''' contenu_recap_projet += ligne contenu_compte += Latex.tableau(contenu_recap_projet, structure_recap_projet, legende_recap_projet) dico_recap_compte = { 'compte': intitule_compte, 'type': compte['categorie'], 'procede': "%.2f" % sco['mj'], 'total': "%.2f" % sj } contenu_recap_compte += r'''%(compte)s & %(type)s & %(procede)s ''' \ % dico_recap_compte for categorie in generaux.codes_d3(): contenu_recap_compte += r''' & ''' + "%.2f" % sco['tot_cat'][ categorie] contenu_recap_compte += r'''& %(total)s \\ \hline ''' % dico_recap_compte u1 = sco['somme_j_ai'] u2 = u1 + sco['somme_j_bi'] u3 = u2 + sco['somme_j_ci'] couts_co = 0 for cat, tt in sco['tot_cat'].items(): couts_co += tt dico_recap_eligibles = { 'compte': intitule_compte, 'couts_a': "%.2f" % sco['somme_j_ai'], 'couts_mo': "%.2f" % sco['somme_j_oi'], 'couts_b': "%.2f" % sco['somme_j_bi'], 'couts_c': "%.2f" % sco['somme_j_ci'], 'u1': "%.2f" % u1, 'u2': "%.2f" % u2, 'u3': "%.2f" % u3, 'couts_co': "%.2f" % couts_co } contenu_recap_eligibles += r'''%(compte)s & %(couts_a)s & %(couts_b)s & %(couts_c)s & %(u1)s & %(u2)s & %(u3)s & %(couts_mo)s & %(couts_co)s \\ \hline ''' % dico_recap_eligibles structure_recap_poste = r'''{|l|r|r|r|}''' legende_recap_poste = r'''Récapitulatif postes pour compte ''' + intitule_compte dico_recap_poste = { 'maij': "%.2f" % sco['somme_j_mai'], 'moij': "%.2f" % sco['somme_j_moi'], 'mrj': "%.2f" % sco['somme_j_mr'], 'mj': "%.2f" % sco['mj'] } contenu_recap_poste = r''' \hline Compte : ''' + intitule_compte + r''' & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline Machine & %(maij)s & \multirow{2}{*}{%(mrj)s} & \multirow{2}{*}{%(mj)s} \\ \cline{1-2} Main d'oeuvre & %(moij)s & & \\ \hline ''' % dico_recap_poste for categorie in generaux.codes_d3(): contenu_recap_poste += Latex.echappe_caracteres( coefprests.obtenir_noms_categories(categorie)) contenu_recap_poste += r''' & ''' + "%.2f" % sco[ 'sommes_cat_m'][categorie] contenu_recap_poste += r''' & ''' + "%.2f" % sco[ 'sommes_cat_r'][categorie] contenu_recap_poste += r''' & ''' + "%.2f" % sco['tot_cat'][ categorie] contenu_recap_poste += r''' \\ \hline ''' contenu_compte += Latex.tableau(contenu_recap_poste, structure_recap_poste, legende_recap_poste) if nombre_res > 0: contenu_compte += contenu_rsv machines_utilisees = {} somme_res_compte = {} if code_client in reservations.sommes: if id_compte in reservations.sommes[code_client]['comptes']: somme_res_compte = reservations.sommes[code_client][ 'comptes'][id_compte] for key in somme_res_compte.keys(): machines_utilisees[key] = { 'machine': machines.donnees[key]['nom'] } somme_cae_compte = {} if code_client in acces.sommes: if id_compte in acces.sommes[code_client]: somme_cae_compte = acces.sommes[code_client][id_compte] for key in somme_cae_compte.keys(): if key not in machines_utilisees: machines_utilisees[key] = { 'machine': machines.donnees[key]['nom'] } if len(machines_utilisees) > 0: structure_stat_machines = r'''{|l|c|c|c|c|c|c|r|}''' legende_stat_machines = r'''Statistiques de réservation/utilisation par machine : ''' + intitule_compte contenu_stat_machines = r''' \hline Equipement & & Slot rés. & Slot ann. & Taux & Utilisation minimale & Machine & Pénalités [h] \\ \hline ''' for machine_t in sorted(machines_utilisees.items(), key=lambda k_v: k_v[1]['machine']): machine = machine_t[1] id_machine = machine_t[0] taux_hp = machines.donnees[id_machine]['tx_occ_eff_hp'] taux_hc = machines.donnees[id_machine]['tx_occ_eff_hc'] duree_hp = 0 duree_hc = 0 res_hp = 0 res_hc = 0 ann_hp = 0 ann_hc = 0 if id_machine in somme_cae_compte: duree_hp = somme_cae_compte[id_machine]['duree_hp'] duree_hc = somme_cae_compte[id_machine]['duree_hc'] if id_machine in somme_res_compte: res_hp = somme_res_compte[id_machine]['res_hp'] res_hc = somme_res_compte[id_machine]['res_hc'] ann_hp = somme_res_compte[id_machine]['ann_hp'] ann_hc = somme_res_compte[id_machine]['ann_hc'] min_hp = (res_hp + ann_hp) * taux_hp / 100 min_hc = (res_hc + ann_hc) * taux_hc / 100 pen_hp = min_hp - duree_hp pen_hc = min_hc - duree_hc dico_stat_machines = { 'machine': Latex.echappe_caracteres(machine['machine']), 'res_hp': Outils.format_heure(res_hp), 'res_hc': Outils.format_heure(res_hc), 'ann_hp': Outils.format_heure(ann_hp), 'ann_hc': Outils.format_heure(ann_hc), 'duree_hp': Outils.format_heure(duree_hp), 'duree_hc': Outils.format_heure(duree_hc), 'taux_hp': str(int(taux_hp)) + '\%', 'taux_hc': str(int(taux_hc)) + '\%', 'min_hp': Outils.format_heure(min_hp), 'min_hc': Outils.format_heure(min_hc), 'pen_hp': "%.1f" % round(pen_hp / 60, 1), 'pen_hc': "%.1f" % round(pen_hc / 60, 1) } if res_hp > 0 or ann_hp or duree_hp: contenu_stat_machines += r'''%(machine)s & HP & %(res_hp)s & %(ann_hp)s & %(taux_hp)s & %(min_hp)s & %(duree_hp)s & %(pen_hp)s \\ \hline ''' % dico_stat_machines if res_hc > 0 or ann_hc or duree_hc: contenu_stat_machines += r'''%(machine)s & HC & %(res_hc)s & %(ann_hc)s & %(taux_hc)s & %(min_hc)s & %(duree_hc)s & %(pen_hc)s \\ \hline ''' % dico_stat_machines contenu_compte += Latex.tableau(contenu_stat_machines, structure_stat_machines, legende_stat_machines) contenu_compte += contenu_projet # ## compte dic_entete = { 'code': code_client, 'code_sap': client['code_sap'], 'nom': Latex.echappe_caracteres(client['abrev_labo']), 'date': edition.mois_txt + " " + str(edition.annee) } entete = r''' %(code)s - %(code_sap)s - %(nom)s - %(date)s ''' % dic_entete contenu += entete structure_recap_poste_cl = r'''{|l|r|r|r|}''' legende_recap_poste_cl = r'''Récapitulatif postes pour client ''' + intitule_client dico_recap_poste_cl = { 'emom': "%.2f" % scl['em'], 'emor': "%.2f" % scl['er'], 'emo': "%.2f" % scl['e'], 'resm': "%.2f" % scl['rm'], 'resr': "%.2f" % scl['rr'], 'res': "%.2f" % scl['r'], 'mat': "%.2f" % scl['mat'], 'stmr': "%.2f" % scl['somme_t_mr'], 'mt': "%.2f" % scl['mt'], 'mot': "%.2f" % scl['mot'] } contenu_recap_poste_cl = r''' \hline & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline Emolument & %(emom)s & %(emor)s & %(emo)s \\ \hline Frais de réservation & %(resm)s & %(resr)s & %(res)s \\ \hline Machine & %(mat)s & \multirow{2}{*}{%(stmr)s} & \multirow{2}{*}{%(mt)s} \\ \cline{1-2} Main d'oeuvre & %(mot)s & & \\ \hline ''' % dico_recap_poste_cl for categorie in generaux.codes_d3(): contenu_recap_poste_cl += Latex.echappe_caracteres( coefprests.obtenir_noms_categories(categorie)) contenu_recap_poste_cl += r''' & ''' contenu_recap_poste_cl += "%.2f" % scl['sommes_cat_m'][ categorie] + r''' & ''' contenu_recap_poste_cl += "%.2f" % scl['sommes_cat_r'][ categorie] + r''' & ''' contenu_recap_poste_cl += "%.2f" % scl['tot_cat'][ categorie] + r''' \\ \hline ''' contenu += Latex.tableau(contenu_recap_poste_cl, structure_recap_poste_cl, legende_recap_poste_cl) dico_emolument = { 'emb': "%.2f" % client['emol_base_mens'], 'ef': "%.2f" % client['emol_fixe'], 'pente': client['coef'], 'tot_eq_r': "%.2f" % scl['r'], 'tot_eq_m': "%.2f" % (scl['mt'] - scl['mot']), 'tot_eq': "%.2f" % scl['somme_eq'], 'rabais': "%.2f" % scl['er'] } structure_emolument = r'''{|r|r|l|r|r|r|r|}''' legende_emolument = r'''Emolument pour client ''' + intitule_client contenu_emolument = r''' \hline \multicolumn{1}{|l|}{Emolument de base} & \multicolumn{1}{l|}{Emolument fixe} & Pente & \multicolumn{1}{l|}{Total EQ R} & \multicolumn{1}{l|}{Total EQ M} & \multicolumn{1}{l|}{Total EQ} & \multicolumn{1}{l|}{Rabais émolument} \\ \hline %(emb)s & %(ef)s & %(pente)s & %(tot_eq_r)s & %(tot_eq_m)s & %(tot_eq)s & %(rabais)s \\ \hline ''' % dico_emolument contenu += Latex.tableau(contenu_emolument, structure_emolument, legende_emolument) if scl['r'] > 0: structure_frais_client = r'''{|l|c|r|r|r|}''' legende_frais_client = r'''Frais de réservation/utilisation par machine pour client : ''' + intitule_client contenu_frais_client = r''' \hline Equipement & & Pénalités [h] & PU & Montant \\ \hline ''' machines_utilisees = {} for key in scl['res']: machines_utilisees[key] = { 'machine': machines.donnees[key]['nom'] } for machine_t in sorted(machines_utilisees.items(), key=lambda k_v: k_v[1]['machine']): machine = machine_t[1] id_machine = machine_t[0] som_m = scl['res'][id_machine] if som_m['pen_hp'] > 0 or som_m['pen_hc'] > 0: dico_frais_client = { 'machine': Latex.echappe_caracteres(machine['machine']), 'pen_hp': "%.1f" % som_m['pen_hp'], 'pen_hc': "%.1f" % som_m['pen_hc'], 'mont_hp': Outils.format_si_nul(som_m['m_hp']), 'mont_hc': Outils.format_si_nul(som_m['m_hc']), 'pu_hp': Outils.format_si_nul( reservations.sommes[code_client]['machines'] [id_machine]['pu_hp']), 'pu_hc': Outils.format_si_nul(reservations.sommes[code_client] ['machines'][id_machine]['pu_hc']) } if som_m['pen_hp'] > 0: contenu_frais_client += r'''%(machine)s & HP & %(pen_hp)s & %(pu_hp)s & %(mont_hp)s \\ \hline ''' % dico_frais_client if som_m['pen_hc'] > 0: contenu_frais_client += r'''%(machine)s & HC & %(pen_hc)s & %(pu_hc)s & %(mont_hc)s \\ \hline ''' % dico_frais_client contenu_frais_client += r''' \multicolumn{4}{|r|}{Total} & ''' + Outils.format_si_nul( scl['r']) + r'''\\ \hline ''' contenu += Latex.tableau(contenu_frais_client, structure_frais_client, legende_frais_client) dico_recap_compte = { 'procedes': "%.2f" % scl['mt'], 'total': "%.2f" % (scl['somme_t'] - scl['r']) } contenu_recap_compte += r'''Total article & & %(procedes)s''' % dico_recap_compte for categorie in generaux.codes_d3(): contenu_recap_compte += r''' & ''' + "%.2f" % scl['tot_cat'][ categorie] contenu_recap_compte += r'''& %(total)s \\ \hline ''' % dico_recap_compte contenu += Latex.tableau(contenu_recap_compte, structure_recap_compte, legende_recap_compte) u1 = scl['somme_t_ai'] u2 = u1 + scl['somme_t_bi'] u3 = u2 + scl['somme_t_ci'] tot_co = 0 for cat, tt in scl['tot_cat'].items(): tot_co += tt dico_recap_eligibles = { 'ait': "%.2f" % scl['somme_t_ai'], 'moit': "%.2f" % scl['somme_t_oi'], 'bit': "%.2f" % scl['somme_t_bi'], 'cit': "%.2f" % scl['somme_t_ci'], 'u1': "%.2f" % u1, 'u2': "%.2f" % u2, 'u3': "%.2f" % u3, 'coit': "%.2f" % tot_co } contenu_recap_eligibles += r'''Total article & %(ait)s & %(bit)s & %(cit)s & %(u1)s & %(u2)s & %(u3)s & %(moit)s & %(coit)s \\ \hline ''' % dico_recap_eligibles contenu += Latex.tableau(contenu_recap_eligibles, structure_recap_eligibles, legende_recap_eligibles) structure_recap_cat_cl = r'''{|l|r|r|r|}''' legende_recap_cat_cl = r'''Détail par catégorie pour client ''' + intitule_client dico_recap_cat_cl = { 'mmk1': '0.00', 'mrk1': '0.00', 'mk1': '0.00', 'mmk2': '0.00', 'mrk2': '0.00', 'mk2': '0.00', 'mmk3': '0.00', 'mrk3': '0.00', 'mk3': '0.00', 'mmk4': '0.00', 'mrk4': '0.00', 'mk4': '0.00', 'mm': "%.2f" % scl['somme_t_mm'], 'mr': "%.2f" % scl['somme_t_mr'], 'mt': "%.2f" % scl['mt'] } if '1' in sca: dico_recap_cat_cl['mmk1'] = "%.2f" % sca['1']['somme_k_mm'] dico_recap_cat_cl['mrk1'] = "%.2f" % sca['1']['somme_k_mr'] dico_recap_cat_cl['mk1'] = "%.2f" % sca['1']['mk'] if '2' in sca: dico_recap_cat_cl['mmk2'] = "%.2f" % sca['2']['somme_k_mm'] dico_recap_cat_cl['mrk2'] = "%.2f" % sca['2']['somme_k_mr'] dico_recap_cat_cl['mk2'] = "%.2f" % sca['2']['mk'] if '3' in sca: dico_recap_cat_cl['mmk3'] = "%.2f" % sca['3']['somme_k_mm'] dico_recap_cat_cl['mrk3'] = "%.2f" % sca['3']['somme_k_mr'] dico_recap_cat_cl['mk3'] = "%.2f" % sca['3']['mk'] if '4' in sca: dico_recap_cat_cl['mmk4'] = "%.2f" % sca['4']['somme_k_mm'] dico_recap_cat_cl['mrk4'] = "%.2f" % sca['4']['somme_k_mr'] dico_recap_cat_cl['mk4'] = "%.2f" % sca['4']['mk'] contenu_recap_cat_cl = r''' \hline & \multicolumn{1}{l|}{Montant} & \multicolumn{1}{l|}{Rabais} & \multicolumn{1}{l|}{Total} \\ \hline Coût procédés (catégorie Utilisateur) & %(mmk1)s & %(mrk1)s & %(mk1)s \\ \hline Coût procédés (catégorie Etudiant en projet Master) & %(mmk2)s & %(mrk2)s & %(mk2)s \\ \hline Coût procédés (catégorie Etudiant en projet Semestre) & %(mmk3)s & %(mrk3)s & %(mk3)s \\ \hline Coût procédés (catégorie Client) & %(mmk4)s & %(mrk4)s & %(mk4)s \\ \hline Total & %(mm)s & %(mr)s & %(mt)s \\ \hline ''' % dico_recap_cat_cl contenu += Latex.tableau(contenu_recap_cat_cl, structure_recap_cat_cl, legende_recap_cat_cl) contenu += contenu_compte return contenu