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
def creation_lignes(edition, sommes, clients, generaux, comptes): """ génération des lignes de données du bilan :param edition: paramètres d'édition :param sommes: sommes calculées :param clients: clients importés :param generaux: paramètres généraux :param comptes: comptes importés :return: lignes de données du bilan """ if sommes.calculees == 0: info = "Vous devez d'abord faire toutes les sommes avant de pouvoir créer le bilan des comptes" Outils.affiche_message(info) return None lignes = [] for code_client in sorted(sommes.sommes_clients.keys()): if code_client in sommes.sommes_comptes: client = clients.donnees[code_client] nature = generaux.code_ref_par_code_n(client['nature']) reference = nature + str( edition.annee)[2:] + Outils.mois_string( edition.mois) + "." + code_client if edition.version > 0: reference += "-" + str(edition.version) comptes_utilises = Outils.comptes_in_somme( sommes.sommes_comptes[code_client], comptes) for id_compte, num_compte in sorted(comptes_utilises.items(), key=lambda x: x[1]): compte = comptes.donnees[id_compte] sco = sommes.sommes_comptes[code_client][id_compte] ligne = [ edition.annee, edition.mois, reference, code_client, client['code_sap'], client['abrev_labo'], client['nom_labo'], 'U', client['nature'], id_compte, num_compte, compte['intitule'], compte['type_subside'], Outils.format_2_dec(sco['somme_j_mai']), Outils.format_2_dec(sco['somme_j_moi']), Outils.format_2_dec(client['rh'] * sco['somme_j_dhi']), Outils.format_2_dec(sco['mj']) ] total = sco['mj'] for categorie in generaux.codes_d3(): total += sco['tot_cat'][categorie] ligne.append( Outils.format_2_dec(sco['tot_cat'][categorie])) ligne += [ Outils.format_2_dec(total), Outils.format_2_dec(client['bh'] * sco['somme_j_dhi']) ] lignes.append(ligne) return lignes
def factures(self, sommes, destination, edition, generaux, clients, comptes, paramannexe): """ génère la facture sous forme de csv :param sommes: sommes calculées :param destination: Une instance de la classe dossier.DossierDestination :param edition: paramètres d'édition :param generaux: paramètres généraux :param clients: clients importés :param comptes: comptes importés :param paramannexe: paramètres d'annexe :return: données du combolist et des sections """ if sommes.calculees == 0: info = "Vous devez d'abord faire toutes les sommes avant de pouvoir créer la facture" Outils.affiche_message(info) return nom_facture = "facture_" + str(edition.annee) + "_" + Outils.mois_string(edition.mois) + "_" + \ str(edition.version) if edition.version > 0: nom_facture += "_" + str(edition.client_unique) if self.prod2qual: nom_facture += "_qualite.csv" else: nom_facture += ".csv" with destination.writer(nom_facture) as fichier_writer: fichier_writer.writerow([ "Poste", "Système d'origine", "Type de document de vente", "Organisation commerciale", "Canal de distribution", "Secteur d'activité", "", "", "Client", "Nom 2 du client", "Nom 3 du client", "Adresse e-mail du client", "Client", "Client", "Client", "Devise", "Mode d'envoi", "Référence de la facture", "", "", "Texte d'entête", "Lien réseau vers l'annexe client .pdf", "Document interne", "Lien réseau vers l'annexe projets .pdf", "Document interne", "Lien réseau vers l'annexe détails .pdf", "Document interne", "Lien réseau vers l'annexe pièces .pdf", "Document interne", "Lien réseau vers l'annexe interne .pdf", "Document interne", "Article", "", "Quantité", "Unité de quantité", "Type de prix", "Prix net du poste", "Type de rabais", "Valeur rabais du poste", "Date de livraison", "Centre financier", "", "Fonds à créditer", "", "", "Code opération", "", "", "", "Texte libre du poste", "Nom" ]) combo_list = {} for code_client in sorted(sommes.sommes_clients.keys()): poste = 0 scl = sommes.sommes_clients[code_client] client = clients.donnees[code_client] if scl['somme_t'] == 0: continue code_sap = client['code_sap'] if self.prod2qual and not ( self.prod2qual.code_client_existe(code_sap)): continue if client['nature'] == "I": genre = generaux.code_int else: genre = generaux.code_ext nature = generaux.code_ref_par_code_n(client['nature']) reference = nature + str( edition.annee)[2:] + Outils.mois_string( edition.mois) + "." + code_client if edition.version > 0: reference += "-" + str(edition.version) filtre = generaux.filtrer_article_nul_par_code_n( client['nature']) if self.prod2qual: code_sap_traduit = self.prod2qual.traduire_code_client( code_sap) else: code_sap_traduit = code_sap dico_contenu = { 'code': code_client, 'abrev': client['abrev_labo'], 'nom': client['nom_labo'], 'dest': client['dest'], 'ref': client['ref'], 'ref_fact': reference, 'texte': generaux.entete } contenu_client = r'''<section id="%(code)s"><div id="entete"> %(code)s <br /> %(abrev)s <br /> %(nom)s <br /> %(dest)s <br /> %(ref)s <br /> </div><br /> %(ref_fact)s <br /><br /> %(texte)s <br /> ''' % dico_contenu contenu_client += r'''<table id="tableau"> <tr> <td>Item </td><td> Date </td><td> Name </td><td> Description </td><td> Unit </td><td> Quantity </td> <td> Unit Price <br /> [CHF] </td><td> Discount </td><td> Net amount <br /> [CHF] </td> </tr> ''' ligne = [ poste, generaux.origine, genre, generaux.commerciale, generaux.canal, generaux.secteur, "", "", code_sap_traduit, client['dest'], client['ref'], client['email'], code_sap_traduit, code_sap_traduit, code_sap_traduit, generaux.devise, client['mode'], reference, "", "", generaux.entete ] for donnee in paramannexe.donnees: nom_annexe = donnee['nom'] + "_" + str(edition.annee) + "_" + Outils.mois_string(edition.mois) + \ "_" + str(edition.version) + "_" + code_client + ".pdf" ligne.append(donnee['lien'] + nom_annexe) if generaux.code_ref_par_code_n(client['nature']) == "INT": ligne.append(donnee['int']) elif client['mode'] == "MAIL": ligne.append(donnee['ext_mail']) else: ligne.append(donnee['ext_postal']) fichier_writer.writerow(ligne) op_centre = client['nature'] + str( edition.annee)[2:] + Outils.mois_string(edition.mois) if scl['em'] > 0 and not (filtre == "OUI" and scl['e'] == 0): poste = generaux.poste_emolument fichier_writer.writerow( self.ligne_facture(generaux, generaux.articles[0], poste, scl['em'], scl['er'], op_centre, "", edition)) contenu_client += self.ligne_tableau( generaux.articles[0], poste, scl['em'], scl['er'], "", edition) if scl['rm'] > 0 and not (filtre == "OUI" and scl['r'] == 0): poste = generaux.poste_reservation fichier_writer.writerow( self.ligne_facture(generaux, generaux.articles[1], poste, scl['rm'], scl['rr'], op_centre, "", edition)) contenu_client += self.ligne_tableau( generaux.articles[1], poste, scl['rm'], scl['rr'], "", edition) inc = 1 if code_client in sommes.sommes_comptes: sclo = sommes.sommes_comptes[code_client] comptes_utilises = Outils.comptes_in_somme(sclo, comptes) for id_compte, num_compte in sorted( comptes_utilises.items(), key=lambda x: x[1]): sco = sclo[id_compte] compte = comptes.donnees[id_compte] if sco['c1'] > 0 and not (filtre == "OUI" and sco['c2'] == 0): poste = inc * 10 if sco['somme_j_mm'] > 0 and not ( filtre == "OUI" and sco['mj'] == 0): fichier_writer.writerow( self.ligne_facture( generaux, generaux.articles[2], poste, sco['somme_j_mm'], sco['somme_j_mr'], op_centre, compte['numero'] + " - " + compte['intitule'], edition)) contenu_client += self.ligne_tableau( generaux.articles[2], poste, sco['somme_j_mm'], sco['somme_j_mr'], compte['numero'] + " - " + compte['intitule'], edition) poste += 1 for article in generaux.articles_d3: categorie = article.code_d if sco['sommes_cat_m'][categorie] > 0 and not ( filtre == "OUI" and sco['tot_cat'][article.code_d] == 0): fichier_writer.writerow( self.ligne_facture( generaux, article, poste, sco['sommes_cat_m'][categorie], sco['sommes_cat_r'][categorie], op_centre, compte['numero'] + " - " + compte['intitule'], edition)) contenu_client += self.ligne_tableau( article, poste, sco['sommes_cat_m'][categorie], sco['sommes_cat_r'][categorie], compte['numero'] + " - " + compte['intitule'], edition) poste += 1 inc += 1 contenu_client += r''' <tr><td colspan="8" id="toright">Net amount [CHF] : </td><td id="toright"> ''' + "%.2f" % scl['somme_t'] + r'''</td></tr> </table> ''' contenu_client += r'''<table><tr>''' for donnee in paramannexe.donnees: nom_annexe = donnee['nom'] + "_" + str(edition.annee) + "_" + Outils.mois_string(edition.mois) \ + "_" + str(edition.version) + "_" + code_client + ".pdf" dossier_annexe = "../" + donnee[ 'dossier'] + "/" + nom_annexe chemin_annexe = donnee['chemin'] + "/" + nom_annexe if not os.path.isfile(chemin_annexe): continue contenu_client += r'''<td><a href="''' + dossier_annexe + r'''" target="new">''' + nom_annexe + r''' </a></td>''' contenu_client += r'''</tr></table>''' contenu_client += "</section>" combo_list[client['abrev_labo'] + " (" + code_client + ")"] = contenu_client self.creer_html(destination, combo_list, edition) return combo_list
def creation_lignes(edition, somme_client, client, generaux, acces, livraisons, comptes, categories): """ génération des lignes de données du récapitulatif :param edition: paramètres d'édition :param somme_client: sommes par comptes calculées pour un client donné :param client: client donné :param generaux: paramètres généraux :param acces: accès importés :param livraisons: livraisons importées :param comptes: comptes importés :param categories: catégories importées :return: lignes de données du récapitulatif """ lignes = [] code_client = client['code'] comptes_utilises = Outils.comptes_in_somme(somme_client, comptes) nature = generaux.code_ref_par_code_n(client['nature']) ref = nature + str(edition.annee)[2:] + Outils.mois_string( edition.mois) + "." + code_client if edition.version > 0: ref += "-" + str(edition.version) base_client = [ generaux.centre, edition.annee, edition.mois, ref, client['code_sap'], client['abrev_labo'] ] for id_compte, num_compte in sorted(comptes_utilises.items(), key=lambda x: x[1]): compte = comptes.donnees[id_compte] base_compte = base_client + [ num_compte + " - " + compte['intitule'] ] if code_client in acces.sommes and id_compte in acces.sommes[ code_client]['categories']: for cat, som_cats in sorted(acces.sommes[code_client] ['categories'][id_compte].items()): for id_categorie, som_cat in sorted(som_cats.items()): unite = categories.donnees[id_categorie]['unite'] montant = som_cat['mk'] if unite == 'h': quantite = som_cat['quantite'] / 1440 else: quantite = som_cat['quantite'] if montant > 0: ligne = base_compte + [ 'Services', categories.donnees[id_categorie]['intitule'], quantite, unite, som_cat['pk'], montant ] lignes.append(ligne) if code_client in livraisons.sommes and id_compte in livraisons.sommes[ code_client]: somme = livraisons.sommes[code_client][id_compte] for article in generaux.articles_d3: if article.code_d in somme: if article.code_d == 'C': base_article = base_compte + ['Consumables'] else: base_article = base_compte + ['Other'] for no_prestation, sip in sorted( somme[article.code_d].items()): if sip['montant'] > 0: ligne = base_article + [ str(no_prestation) + " - " + sip['nom'], sip['quantite'], sip['unite'], sip['pn'], (sip['montant'] - sip['rabais']) ] lignes.append(ligne) return lignes
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)
def contenu_tps_m_cae_xmu(code_client, scl, sommes_acces, machines, users, comptes): """ contenu Tps_M CAE X/M/U - Table Client Récap Temps mach avec pénalités /Machine/User :param code_client: code du client concerné :param scl: sommes client calculées :param sommes_acces: sommes des accès importés :param machines: machines importées :param users: users importés :param comptes: comptes importés :return: contenu """ contenu = "" if code_client in sommes_acces: somme = sommes_acces[code_client]['machines'] machines_utilisees = Outils.machines_in_somme(somme, machines) for id_categorie, mics in sorted(machines_utilisees.items()): for nom_machine, id_machine in sorted(mics.items()): if id_machine in scl['res']: pur_hp = somme[id_machine]['pur_hp'] pur_hc = somme[id_machine]['pur_hc'] tx_hp = machines.donnees[id_machine]['tx_occ_eff_hp'] tx_hc = machines.donnees[id_machine]['tx_occ_eff_hc'] if (pur_hc > 0 and tx_hc > 0) or (pur_hp > 0 and tx_hp > 0): dico_machine = {'machine': Latex.echappe_caracteres(nom_machine), 'hp': Outils.format_heure(somme[id_machine]['duree_hp']), 'hc': Outils.format_heure(somme[id_machine]['duree_hc'])} contenu += r''' \textbf{%(machine)s} & \hspace{5mm} %(hp)s & \hspace{5mm} %(hc)s \\ \hline ''' % dico_machine utilisateurs = Outils.utilisateurs_in_somme(somme[id_machine]['users'], users) for nom, upi in sorted(utilisateurs.items()): for prenom, ids in sorted(upi.items()): for id_user in sorted(ids): smu = somme[id_machine]['users'][id_user] dico_user = {'user': Latex.echappe_caracteres(nom + " " + prenom), 'hp': Outils.format_heure(smu['duree_hp']), 'hc': Outils.format_heure(smu['duree_hc'])} contenu += r''' \hspace{5mm} %(user)s & %(hp)s & %(hc)s \\ \hline ''' % dico_user comptes_utilises = Outils.comptes_in_somme(smu['comptes'], comptes) for id_compte, num_compte in sorted(comptes_utilises.items(), key=lambda x: x[1]): smuc = smu['comptes'][id_compte] compte = comptes.donnees[id_compte] intitule_compte = Latex.echappe_caracteres(compte['numero'] + " - " + compte['intitule']) dico_compte = {'compte': intitule_compte, 'hp': Outils.format_heure(smuc['duree_hp']), 'hc': Outils.format_heure(smuc['duree_hc'])} contenu += r''' \hspace{10mm} %(compte)s & %(hp)s \hspace{5mm} & %(hc)s \hspace{5mm} \\ \hline ''' % dico_compte return contenu