From a2c85a211afccfd44982e133e75aa71cf9c90488 Mon Sep 17 00:00:00 2001 From: Fanilo-Nantenaina Date: Tue, 13 Jan 2026 16:30:34 +0300 Subject: [PATCH] feat(pdf): refactor PDF generation with new SagePDFGenerator class --- docker-compose.dev.yml | 2 +- docker-compose.prod.yml | 2 +- docker-compose.staging.yml | 2 +- email_queue.py | 796 ++++++++++++++++++++++++-------- sage/pdfs/Sage_Text-Bold.ttf | Bin 0 -> 89428 bytes sage/pdfs/Sage_Text-Medium.ttf | Bin 0 -> 91840 bytes sage/pdfs/logo.png | Bin 0 -> 27792 bytes services/universign_document.py | 12 +- services/universign_sync.py | 16 +- 9 files changed, 618 insertions(+), 212 deletions(-) create mode 100644 sage/pdfs/Sage_Text-Bold.ttf create mode 100644 sage/pdfs/Sage_Text-Medium.ttf create mode 100644 sage/pdfs/logo.png diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 7ee11c7..489dd01 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -18,7 +18,7 @@ services: DATABASE_URL: "sqlite+aiosqlite:///./data/sage_dataven.db" restart: unless-stopped healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + test: ["CMD", "curl", "-f", "http://localhost:8000/"] interval: 30s timeout: 10s retries: 3 \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 027eaf7..0908ff1 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -16,7 +16,7 @@ services: DATABASE_URL: "sqlite+aiosqlite:///./data/sage_prod.db" restart: always healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8004/health"] + test: ["CMD", "curl", "-f", "http://localhost:8004/"] interval: 30s timeout: 10s retries: 5 diff --git a/docker-compose.staging.yml b/docker-compose.staging.yml index 81f9215..5bf1b18 100644 --- a/docker-compose.staging.yml +++ b/docker-compose.staging.yml @@ -16,7 +16,7 @@ services: DATABASE_URL: "sqlite+aiosqlite:///./data/sage_staging.db" restart: unless-stopped healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8002/health"] + test: ["CMD", "curl", "-f", "http://localhost:8002/"] interval: 30s timeout: 10s retries: 3 \ No newline at end of file diff --git a/email_queue.py b/email_queue.py index 6079ae8..07fb3c5 100644 --- a/email_queue.py +++ b/email_queue.py @@ -5,6 +5,7 @@ from datetime import datetime, timedelta import smtplib import ssl import socket +import os from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.application import MIMEApplication @@ -12,14 +13,67 @@ from config.config import settings import logging from reportlab.lib.pagesizes import A4 from reportlab.pdfgen import canvas +from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.ttfonts import TTFont from io import BytesIO from reportlab.lib.units import mm -from reportlab.lib.colors import HexColor +from reportlab.lib.colors import HexColor, Color +from PIL import Image logger = logging.getLogger(__name__) +FONT_PATH = os.getenv("SAGE_FONT_PATH", "/sage/pdfs/Sage_Text-Medium.ttf") +LOGO_PATH = os.getenv("SAGE_LOGO_PATH", "/sage/pdfs/logo.png") + +FONT_FALLBACK_PATHS = [ + "/sage/assets/Sage_Text-Medium.ttf", + "./sage/assets/Sage_Text-Medium.ttf", + "/sage/assets/Sage_Text-Bold.ttf", + "./sage/assets/Sage_Text-Bold.ttf", +] + +LOGO_FALLBACK_PATHS = [ + "/sage/assets/logo.png", + "./sage/assets/logo.png", +] + +_sage_font_registered = False + + +def _find_file(primary_path: str, fallback_paths: list) -> str | None: + """Recherche un fichier dans les chemins possibles.""" + all_paths = [primary_path] + fallback_paths + for path in all_paths: + if path and os.path.exists(path): + return path + return None + + +def _register_sage_font(): + """Enregistre la police Sage si disponible.""" + global _sage_font_registered + + if _sage_font_registered: + return True + + font_path = _find_file(FONT_PATH, FONT_FALLBACK_PATHS) + + if font_path: + try: + pdfmetrics.registerFont(TTFont("SageText", font_path)) + pdfmetrics.registerFont(TTFont("SageText-Bold", font_path)) + _sage_font_registered = True + logger.info(f"Police Sage enregistrée: {font_path}") + return True + except Exception as e: + logger.warning(f"Impossible d'enregistrer la police Sage: {e}") + + logger.info("Utilisation de Helvetica comme police de fallback") + return False + + class EmailQueue: def __init__(self): self.queue = queue.Queue() @@ -205,252 +259,604 @@ class EmailQueue: if not doc: raise Exception(f"Document {doc_id} introuvable") - buffer = BytesIO() - pdf = canvas.Canvas(buffer, pagesize=A4) - width, height = A4 + # Générer le PDF avec le nouveau générateur + generator = SagePDFGenerator(doc, type_doc) + return generator.generate() - # Couleurs - green_color = HexColor("#2A6F4F") - gray_400 = HexColor("#9CA3AF") - gray_600 = HexColor("#4B5563") - gray_800 = HexColor("#1F2937") - # Marges - margin = 8 * mm - content_width = width - 2 * margin +class SagePDFGenerator: + # Couleurs Sage + SAGE_GREEN = HexColor("#00D639") + SAGE_GREEN_DARK = HexColor("#00B830") + GRAY_50 = HexColor("#F9FAFB") + GRAY_100 = HexColor("#F3F4F6") + GRAY_200 = HexColor("#E5E7EB") + GRAY_300 = HexColor("#D1D5DB") + GRAY_400 = HexColor("#9CA3AF") + GRAY_500 = HexColor("#6B7280") + GRAY_600 = HexColor("#4B5563") + GRAY_700 = HexColor("#374151") + GRAY_800 = HexColor("#1F2937") + GRAY_900 = HexColor("#111827") - y = height - margin + COMPANY_NAME = "Bijou S.A.S" + COMPANY_ADDRESS_1 = "123 Avenue de la République" + COMPANY_ADDRESS_2 = "75011 Paris, France" + COMPANY_EMAIL = "contact@bijou.com" - # ===== HEADER ===== - y -= 20 * mm + # Labels des types de documents + TYPE_LABELS = { + 0: "Devis", + 10: "Commande", + 30: "Bon de Livraison", + 50: "Avoir", + 60: "Facture", + } - # Logo/Nom entreprise à gauche - pdf.setFont("Helvetica-Bold", 18) - pdf.setFillColor(green_color) - pdf.drawString(margin, y, "Bijou S.A.S") + def __init__(self, doc_data: dict, type_doc: int): + self.doc = doc_data + self.type_doc = type_doc + self.type_label = self.TYPE_LABELS.get(type_doc, "Document") - # Informations document à droite - pdf.setFillColor(gray_800) - pdf.setFont("Helvetica-Bold", 20) - numero = doc.get("numero") or "BROUILLON" - pdf.drawRightString(width - margin, y, numero.upper()) + # Configuration de la page + self.page_width, self.page_height = A4 + self.margin = 15 * mm + self.content_width = self.page_width - 2 * self.margin - y -= 7 * mm - pdf.setFont("Helvetica", 9) - pdf.setFillColor(gray_600) + # État du générateur + self.buffer = BytesIO() + self.pdf = None + self.current_y = 0 + self.page_number = 1 + self.total_pages = 1 # Sera calculé - date_str = doc.get("date") or datetime.now().strftime("%d/%m/%Y") - pdf.drawRightString(width - margin, y, f"Date : {date_str}") + # Initialiser les polices + _register_sage_font() + self.use_sage_font = _sage_font_registered - y -= 5 * mm - date_livraison = ( - doc.get("date_livraison") or doc.get("date_echeance") or date_str + def _get_font(self, bold: bool = False) -> str: + """Retourne le nom de la police à utiliser.""" + if self.use_sage_font: + return "SageText-Bold" if bold else "SageText" + return "Helvetica-Bold" if bold else "Helvetica" + + def _draw_text( + self, + x: float, + y: float, + text: str, + font_size: int = 9, + bold: bool = False, + color: Color = None, + align: str = "left", + ): + self.pdf.setFont(self._get_font(bold), font_size) + + if color: + self.pdf.setFillColor(color) + + if align == "right": + self.pdf.drawRightString(x, y, str(text)) + elif align == "center": + self.pdf.drawCentredString(x, y, str(text)) + else: + self.pdf.drawString(x, y, str(text)) + + def _draw_logo( + self, + x: float, + y: float, + max_width: float = 50 * mm, + max_height: float = 20 * mm, + ): + """Dessine le logo Sage ou le nom de l'entreprise.""" + logo_path = _find_file(LOGO_PATH, LOGO_FALLBACK_PATHS) + + if logo_path: + try: + with Image.open(logo_path) as img: + img_width, img_height = img.size + + ratio = min(max_width / img_width, max_height / img_height) + draw_width = img_width * ratio + draw_height = img_height * ratio + + self.pdf.drawImage( + logo_path, + x, + y - draw_height, + width=draw_width, + height=draw_height, + preserveAspectRatio=True, + mask="auto", + ) + return draw_height + + except Exception as e: + logger.warning(f"Impossible de charger le logo: {e}") + + self._draw_text( + x, y - 8 * mm, "Sage", font_size=24, bold=True, color=self.SAGE_GREEN ) - pdf.drawRightString(width - margin, y, f"Validité : {date_livraison}") + return 10 * mm - y -= 5 * mm - reference = doc.get("reference") or "—" - pdf.drawRightString(width - margin, y, f"Réf : {reference}") + def _new_page(self): + """Crée une nouvelle page.""" + if self.pdf: + self.pdf.showPage() + self.page_number += 1 + self.current_y = self.page_height - self.margin - # ===== ADDRESSES ===== - y -= 20 * mm + def _draw_header(self): + y = self.page_height - self.margin - # Émetteur (gauche) - col1_x = margin - col2_x = margin + content_width / 2 + 6 * mm - col_width = content_width / 2 - 6 * mm + logo_height = self._draw_logo( + self.margin, y, max_width=55 * mm, max_height=22 * mm + ) - pdf.setFont("Helvetica-Bold", 8) - pdf.setFillColor(gray_400) - pdf.drawString(col1_x, y, "ÉMETTEUR") + right_x = self.page_width - self.margin - y_emetteur = y - 5 * mm - pdf.setFont("Helvetica-Bold", 10) - pdf.setFillColor(gray_800) - pdf.drawString(col1_x, y_emetteur, "Bijou S.A.S") + numero = self.doc.get("numero") or "BROUILLON" + self._draw_text( + right_x, + y - 6 * mm, + numero.upper(), + font_size=20, + bold=True, + color=self.GRAY_800, + align="right", + ) + + date_str = self.doc.get("date") or datetime.now().strftime("%d/%m/%Y") + self._draw_text( + right_x, + y - 14 * mm, + f"Date : {date_str}", + font_size=9, + color=self.GRAY_600, + align="right", + ) + + date_validite = ( + self.doc.get("date_livraison") or self.doc.get("date_echeance") or date_str + ) + self._draw_text( + right_x, + y - 20 * mm, + f"Validité : {date_validite}", + font_size=9, + color=self.GRAY_600, + align="right", + ) + + reference = self.doc.get("reference") or "—" + self._draw_text( + right_x, + y - 26 * mm, + f"Réf : {reference}", + font_size=9, + color=self.GRAY_600, + align="right", + ) + + return y - max(logo_height + 10 * mm, 35 * mm) + + def _draw_addresses(self, y: float) -> float: + col1_x = self.margin + col2_x = self.margin + self.content_width / 2 + 8 * mm + col_width = self.content_width / 2 - 8 * mm + + self._draw_text( + col1_x, y, "ÉMETTEUR", font_size=8, bold=True, color=self.GRAY_400 + ) + + y_emetteur = y - 6 * mm + self._draw_text( + col1_x, + y_emetteur, + self.COMPANY_NAME, + font_size=10, + bold=True, + color=self.GRAY_800, + ) y_emetteur -= 5 * mm - pdf.setFont("Helvetica", 9) - pdf.setFillColor(gray_600) - pdf.drawString(col1_x, y_emetteur, "123 Avenue de la République") + self._draw_text( + col1_x, y_emetteur, self.COMPANY_ADDRESS_1, font_size=9, color=self.GRAY_600 + ) y_emetteur -= 4 * mm - pdf.drawString(col1_x, y_emetteur, "75011 Paris, France") - - y_emetteur -= 5 * mm - pdf.drawString(col1_x, y_emetteur, "contact@bijou.com") - - # Destinataire (droite, avec fond gris) - box_y = y - 4 * mm - box_height = 28 * mm - pdf.setFillColorRGB(0.97, 0.97, 0.97) # bg-gray-50 - pdf.roundRect( - col2_x, box_y - box_height, col_width, box_height, 3 * mm, fill=1, stroke=0 + self._draw_text( + col1_x, y_emetteur, self.COMPANY_ADDRESS_2, font_size=9, color=self.GRAY_600 ) - pdf.setFillColor(gray_400) - pdf.setFont("Helvetica-Bold", 8) - pdf.drawString(col2_x + 4 * mm, y, "DESTINATAIRE") + y_emetteur -= 5 * mm + self._draw_text( + col1_x, y_emetteur, self.COMPANY_EMAIL, font_size=9, color=self.GRAY_600 + ) - y_dest = y - 5 * mm - pdf.setFont("Helvetica-Bold", 10) - pdf.setFillColor(gray_800) - client_name = doc.get("client_intitule") or "Client" - pdf.drawString(col2_x + 4 * mm, y_dest, client_name) + box_padding = 4 * mm + box_height = 26 * mm + box_y = y - 3 * mm + + # Fond gris arrondi + self.pdf.setFillColor(self.GRAY_50) + self.pdf.roundRect( + col2_x - box_padding, + box_y - box_height, + col_width + 2 * box_padding, + box_height + box_padding, + 3 * mm, + fill=1, + stroke=0, + ) + + self._draw_text( + col2_x, y, "DESTINATAIRE", font_size=8, bold=True, color=self.GRAY_400 + ) + + y_dest = y - 6 * mm + client_name = ( + self.doc.get("client_intitule") or self.doc.get("client_nom") or "Client" + ) + self._draw_text( + col2_x, y_dest, client_name, font_size=10, bold=True, color=self.GRAY_800 + ) y_dest -= 5 * mm - pdf.setFont("Helvetica", 9) - pdf.setFillColor(gray_600) - pdf.drawString(col2_x + 4 * mm, y_dest, "10 rue des Clients") - - y_dest -= 4 * mm - pdf.drawString(col2_x + 4 * mm, y_dest, "75001 Paris") - - # ===== LIGNES D'ARTICLES ===== - y = min(y_emetteur, y_dest) - 20 * mm - - # En-têtes des colonnes - col_designation = margin - col_quantite = width - margin - 80 * mm - col_prix_unit = width - margin - 64 * mm - col_taux_taxe = width - margin - 40 * mm - col_montant = width - margin - 24 * mm - - pdf.setFont("Helvetica-Bold", 9) - pdf.setFillColor(gray_800) - pdf.drawString(col_designation, y, "Désignation") - pdf.drawRightString(col_quantite, y, "Qté") - pdf.drawRightString(col_prix_unit, y, "Prix Unit. HT") - pdf.drawRightString(col_taux_taxe, y, "TVA") - pdf.drawRightString(col_montant, y, "Montant HT") - - y -= 7 * mm - - # Lignes d'articles - pdf.setFont("Helvetica", 8) - lignes = doc.get("lignes", []) - - for ligne in lignes: - if y < 60 * mm: # Nouvelle page si nécessaire - pdf.showPage() - y = height - margin - 20 * mm - pdf.setFont("Helvetica", 8) - - designation = ( - ligne.get("designation") or ligne.get("designation_article") or "" + client_adresse = ( + self.doc.get("client_adresse") or self.doc.get("adresse_livraison") or "" + ) + if client_adresse: + if len(client_adresse) > 40: + client_adresse = client_adresse[:37] + "..." + self._draw_text( + col2_x, y_dest, client_adresse, font_size=9, color=self.GRAY_600 ) - if len(designation) > 60: - designation = designation[:57] + "..." + y_dest -= 4 * mm - pdf.setFillColor(gray_800) - pdf.setFont("Helvetica-Bold", 8) - pdf.drawString(col_designation, y, designation) + client_cp = self.doc.get("client_cp") or "" + client_ville = self.doc.get("client_ville") or "" + if client_cp or client_ville: + ville_complete = f"{client_cp} {client_ville}".strip() + self._draw_text( + col2_x, y_dest, ville_complete, font_size=9, color=self.GRAY_600 + ) + return min(y_emetteur, box_y - box_height) - 15 * mm + + def _draw_table_header(self, y: float) -> float: + col_des = self.margin + col_qte = self.margin + 95 * mm + col_pu = self.margin + 115 * mm + col_rem = self.margin + 140 * mm + col_tva = self.margin + 157 * mm + col_mt = self.page_width - self.margin + + self.pdf.setStrokeColor(self.GRAY_200) + self.pdf.setLineWidth(0.5) + self.pdf.line( + self.margin, y - 3 * mm, self.page_width - self.margin, y - 3 * mm + ) + + self._draw_text( + col_des, y, "Désignation", font_size=9, bold=True, color=self.GRAY_700 + ) + self._draw_text( + col_qte, + y, + "Qté", + font_size=9, + bold=True, + color=self.GRAY_700, + align="right", + ) + self._draw_text( + col_pu, + y, + "Prix Unit. HT", + font_size=9, + bold=True, + color=self.GRAY_700, + align="right", + ) + self._draw_text( + col_rem, + y, + "Remise", + font_size=9, + bold=True, + color=self.GRAY_700, + align="right", + ) + self._draw_text( + col_tva, + y, + "TVA", + font_size=9, + bold=True, + color=self.GRAY_700, + align="right", + ) + self._draw_text( + col_mt, + y, + "Montant HT", + font_size=9, + bold=True, + color=self.GRAY_700, + align="right", + ) + + return y - 8 * mm + + def _draw_line_item(self, y: float, ligne: dict, alternate: bool = False) -> float: + col_des = self.margin + col_qte = self.margin + 95 * mm + col_pu = self.margin + 115 * mm + col_rem = self.margin + 140 * mm + col_tva = self.margin + 157 * mm + col_mt = self.page_width - self.margin + + if alternate: + self.pdf.setFillColor(self.GRAY_50) + self.pdf.rect( + self.margin - 2 * mm, + y - 5 * mm, + self.content_width + 4 * mm, + 12 * mm, + fill=1, + stroke=0, + ) + + designation = ( + ligne.get("designation") + or ligne.get("designation_article") + or ligne.get("article_designation") + or "" + ) + if len(designation) > 50: + designation = designation[:47] + "..." + self._draw_text( + col_des, y, designation, font_size=9, bold=True, color=self.GRAY_800 + ) + + description = ligne.get("description", "") + line_height = 6 * mm + + if description and description != designation: y -= 4 * mm + if len(description) > 60: + description = description[:57] + "..." + self._draw_text(col_des, y, description, font_size=8, color=self.GRAY_500) + line_height += 4 * mm - # Description (si différente) - description = ligne.get("description", "") - if description and description != designation: - pdf.setFont("Helvetica", 7) - pdf.setFillColor(gray_600) - if len(description) > 70: - description = description[:67] + "..." - pdf.drawString(col_designation, y, description) - y -= 4 * mm + quantite = ligne.get("quantite") or 0 + self._draw_text( + col_qte, + y + (4 * mm if description and description != designation else 0), + str(quantite), + font_size=9, + color=self.GRAY_800, + align="right", + ) - # Valeurs - y += 4 * mm # Remonter pour aligner avec la désignation - pdf.setFont("Helvetica", 8) - pdf.setFillColor(gray_800) + prix_unit = ligne.get("prix_unitaire_ht") or ligne.get("prix_unitaire") or 0 + self._draw_text( + col_pu, + y + (4 * mm if description and description != designation else 0), + f"{prix_unit:.2f} €", + font_size=9, + color=self.GRAY_800, + align="right", + ) - quantite = ligne.get("quantite") or 0 - pdf.drawRightString(col_quantite, y, str(quantite)) + remise = ligne.get("remise_pourcentage") or ligne.get("remise") or 0 + remise_text = f"{remise:.0f}%" if remise > 0 else "—" + remise_color = self.SAGE_GREEN_DARK if remise > 0 else self.GRAY_400 + self._draw_text( + col_rem, + y + (4 * mm if description and description != designation else 0), + remise_text, + font_size=9, + color=remise_color, + align="right", + ) - prix_unit = ligne.get("prix_unitaire_ht") or ligne.get("prix_unitaire", 0) - pdf.drawRightString(col_prix_unit, y, f"{prix_unit:.2f} €") + # TVA + taux_tva = ligne.get("taux_taxe1") or ligne.get("taux_tva") or 20 + self._draw_text( + col_tva, + y + (4 * mm if description and description != designation else 0), + f"{taux_tva:.0f}%", + font_size=9, + color=self.GRAY_600, + align="right", + ) - taux_taxe = ligne.get("taux_taxe1") or 20 - pdf.drawRightString(col_taux_taxe, y, f"{taux_taxe}%") + montant_ht = ligne.get("montant_ligne_ht") or ligne.get("montant_ht") or 0 + self._draw_text( + col_mt, + y + (4 * mm if description and description != designation else 0), + f"{montant_ht:.2f} €", + font_size=9, + bold=True, + color=self.GRAY_800, + align="right", + ) - montant = ligne.get("montant_ligne_ht") or ligne.get("montant_ht", 0) - pdf.setFont("Helvetica-Bold", 8) - pdf.drawRightString(col_montant, y, f"{montant:.2f} €") + return y - line_height - 2 * mm - y -= 8 * mm + def _draw_totals(self, y: float) -> float: + totals_x = self.page_width - self.margin - 60 * mm + right_x = self.page_width - self.margin - # Si aucune ligne - if not lignes: - pdf.setFont("Helvetica-Oblique", 9) - pdf.setFillColor(gray_400) - pdf.drawCentredString(width / 2, y, "Aucune ligne") - y -= 15 * mm + self.pdf.setStrokeColor(self.GRAY_200) + self.pdf.setLineWidth(0.5) + self.pdf.line(totals_x - 5 * mm, y + 5 * mm, right_x, y + 5 * mm) - # ===== TOTAUX ===== - y -= 10 * mm - - totals_x = width - margin - 64 * mm - totals_label_width = 40 * mm - - pdf.setFont("Helvetica", 9) - pdf.setFillColor(gray_600) - - # Total HT - pdf.drawString(totals_x, y, "Total HT") - total_ht = doc.get("total_ht_net") or doc.get("total_ht") or 0 - pdf.drawRightString(width - margin, y, f"{total_ht:.2f} €") + self._draw_text(totals_x, y, "Total HT", font_size=9, color=self.GRAY_600) + total_ht = self.doc.get("total_ht_net") or self.doc.get("total_ht") or 0 + self._draw_text( + right_x, + y, + f"{total_ht:.2f} €", + font_size=9, + color=self.GRAY_800, + align="right", + ) y -= 6 * mm + remise_globale = ( + self.doc.get("remise_globale") or self.doc.get("montant_remise") or 0 + ) + if remise_globale > 0: + self._draw_text(totals_x, y, "Remise", font_size=9, color=self.GRAY_600) + self._draw_text( + right_x, + y, + f"-{remise_globale:.2f} €", + font_size=9, + color=self.SAGE_GREEN_DARK, + align="right", + ) + y -= 6 * mm + # TVA - pdf.drawString(totals_x, y, "TVA") - total_ttc = doc.get("total_ttc") or 0 - tva = total_ttc - total_ht - pdf.drawRightString(width - margin, y, f"{tva:.2f} €") + total_ttc = self.doc.get("total_ttc") or 0 + tva = total_ttc - total_ht + remise_globale + taux_tva_global = self.doc.get("taux_tva_principal") or 20 + self._draw_text( + totals_x, + y, + f"TVA ({taux_tva_global:.0f}%)", + font_size=9, + color=self.GRAY_600, + ) + self._draw_text( + right_x, y, f"{tva:.2f} €", font_size=9, color=self.GRAY_800, align="right" + ) - y -= 8 * mm + y -= 10 * mm - # Ligne de séparation - pdf.setStrokeColor(gray_400) - pdf.line(totals_x, y + 2 * mm, width - margin, y + 2 * mm) + self.pdf.setStrokeColor(self.GRAY_300) + self.pdf.setLineWidth(1) + self.pdf.line(totals_x - 5 * mm, y + 4 * mm, right_x, y + 4 * mm) - # Net à payer - pdf.setFont("Helvetica-Bold", 12) - pdf.setFillColor(green_color) - pdf.drawString(totals_x, y, "Net à payer") - pdf.drawRightString(width - margin, y, f"{total_ttc:.2f} €") + self._draw_text( + totals_x, y, "Net à payer", font_size=12, bold=True, color=self.SAGE_GREEN + ) + self._draw_text( + right_x, + y, + f"{total_ttc:.2f} €", + font_size=12, + bold=True, + color=self.SAGE_GREEN, + align="right", + ) - # ===== NOTES ===== - notes = doc.get("notes_publique") or doc.get("notes") - if notes: - y -= 15 * mm - pdf.setStrokeColor(gray_400) - pdf.line(margin, y + 5 * mm, width - margin, y + 5 * mm) + return y - 15 * mm - y -= 5 * mm - pdf.setFont("Helvetica-Bold", 8) - pdf.setFillColor(gray_400) - pdf.drawString(margin, y, "NOTES & CONDITIONS") + def _draw_notes(self, y: float) -> float: + notes = ( + self.doc.get("notes_publique") + or self.doc.get("notes") + or self.doc.get("commentaire") + ) - y -= 5 * mm - pdf.setFont("Helvetica", 8) - pdf.setFillColor(gray_600) + if not notes: + return y - # Gérer les sauts de ligne dans les notes - for line in notes.split("\n"): - if y < 25 * mm: - break - pdf.drawString(margin, y, line[:100]) + self.pdf.setStrokeColor(self.GRAY_200) + self.pdf.setLineWidth(0.5) + self.pdf.line( + self.margin, y + 5 * mm, self.page_width - self.margin, y + 5 * mm + ) + + self._draw_text( + self.margin, + y, + "NOTES & CONDITIONS", + font_size=8, + bold=True, + color=self.GRAY_400, + ) + + y -= 5 * mm + + for line in notes.split("\n"): + if y < 30 * mm: + break + line = line.strip() + if line: + if len(line) > 90: + line = line[:87] + "..." + self._draw_text(self.margin, y, line, font_size=8, color=self.GRAY_600) y -= 4 * mm - # ===== FOOTER ===== - pdf.setFont("Helvetica", 7) - pdf.setFillColor(gray_400) - pdf.drawCentredString(width / 2, 15 * mm, "Page 1 / 1") + return y - pdf.save() - buffer.seek(0) + def _draw_footer(self): + footer_y = 12 * mm - return buffer.read() + page_text = f"Page {self.page_number} / {self.total_pages}" + self._draw_text( + self.page_width / 2, + footer_y, + page_text, + font_size=8, + color=self.GRAY_400, + align="center", + ) + + def generate(self) -> bytes: + self.pdf = canvas.Canvas(self.buffer, pagesize=A4) + + self.current_y = self._draw_header() + + self.current_y = self._draw_addresses(self.current_y) + + self.current_y = self._draw_table_header(self.current_y) + + lignes = self.doc.get("lignes", []) + + if not lignes: + self.pdf.setFont(self._get_font(), 9) + self.pdf.setFillColor(self.GRAY_400) + self.pdf.drawCentredString( + self.page_width / 2, self.current_y, "Aucune ligne" + ) + self.current_y -= 15 * mm + else: + for idx, ligne in enumerate(lignes): + if self.current_y < 70 * mm: + self._draw_footer() + self._new_page() + self.current_y = self._draw_table_header( + self.page_height - self.margin - 10 * mm + ) + + self.current_y = self._draw_line_item( + self.current_y, ligne, alternate=(idx % 2 == 1) + ) + + if self.current_y < 60 * mm: + self._draw_footer() + self._new_page() + self.current_y = self.page_height - self.margin - 20 * mm + + self.current_y = self._draw_totals(self.current_y) + + self.current_y = self._draw_notes(self.current_y) + + self._draw_footer() + + self.pdf.save() + self.buffer.seek(0) + + return self.buffer.read() email_queue = EmailQueue() diff --git a/sage/pdfs/Sage_Text-Bold.ttf b/sage/pdfs/Sage_Text-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..249ee855da48da24bd1d2a3c906b76e77996c310 GIT binary patch literal 89428 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

5!5%O7(xGI{_H7axcH6=22RCgPTQktt94{@# zVhSTW@!BK)7$Bf}6;+T@{}Gi_nJ8g9-KiAaSn2NE-0(1Z%Py=CkjVm<9qj>sc&tq zkG8gUL~AsQtNN5ubU=1Ft?E$e!?REzzNe{X>Q?m21}DD}AKVBc8n zod=kq#=Ub3pNogRbL2x-nAma4`(&w-2c>yXPcXW)*M1=DDpWiQG-$8K8vlXp&_4fVWt9x%Ekl#YJhGOA4i zkm&QEvBDHD*OHHIRGP2#&K={d`2p`dWQ2&m>OK?Zyu>??7_)&I?>x)s3_RqWXB*9d zPkZM%Jo6pzJlE*7c6=n-+uhp}-7|T5D!Osz!tu$O=$@%dw@sgzx*VOjavFk6uBRS~%D??nmo86V zn2owmyXDEF`sRZ7{#Ou5@$%byX8LmU#MR4JE}V~^x-fesdS>!+^!U`&Y;=Yy&0d~5 z8J)W0#LU&p)3;5{+!?)cK||7c=E{|eE4sRFzy0>k^C!;DT)Fe&ROg8c=e^6Bm%4to zB^VzuqDC*%OD_sEQH<*+*}I$KY@;!QyOHDkpV8N+j7!FC(3=z7z08#fe=mcl}^ZwHv zsptJWQNzC%P2Jm1-j{%2n!IO$Dl_lQ`YnCa&(*(^F7FqIBfs|kaWD9s*7!VOT;+I$ zTAim>r*!SEaCU|klJ+=Gy{B}IXS`OL<+@-#N_q$FHluTxrWL0+zmw~dTN)>wy6vtQ z7mXDx!MbpVCf`oVJ7JvTjVru!k#{@!FHlHJr=PyoQ(d&t|99)a9H~F^?`8lj^HIME z@rN;nAF;F#gH-i7Lc9OELa= zOO3CqGUFS@H;w0vKfzCQg{o9lsD;&__fw~$s@`~7HK<0_M5p*u6*K;fLHL;Qq>8JA z@n+*U@aNj1T2-6zUDd8SRHy2~I;=$69-*vCG)aK;3KXGxj6*KS)f7!^Ta< z5xnV5t1;beewo>5T&<;Ro;T){VO&t_)Oxi6*8VTmM&lwra5u|MY5sCkUxo z)d}Ne#@)tm8h5FaYRY)O@p5$vpW$cNkNLmqtU9M=)Oj_FkK2pJKO6U`Tj7)LGhU%C zsmtn$x~gtdx2rqUo$4;*8TB%vY21x|@b}Szd5`g4;|srFkMUQ=UmJg8 zyutXk@pr~|)GO4z#@`x$k1cy1vwp4dG3N3Qu!8s%<9Cfu8NXwE()hCR6?LDw-}s#I zd5G>u@vyT7ImfHj1L~FPRq8?YYU4|+ihj%ZZFu}_c#EWQvvCVt!~Mn|Apd_2WOfoF z7hzweQN6}^2rYw$)oa;-c_n*d~qw1H`Thv?C+tl0DJJdVXyVSeYdyvgOiy!iTQ}0v1tlqDFMSVd1s`{Y%koq+0j`6UJxNZy5is9%EGehw-24x72T|-%+1bzpFl_eouW`J+3~(KI|W= z&#K>7pHrWQ6Z#k9QR83nULHk@=+{^!*Bie?^z8@K7t|NkAE+;>FRQPpKeV>*o0xE} z&Q5oCcdv71k6*qxd1A^QJAP^Ewkc=q{N#yC7iOKY3#Tv4PMynIdt&<1iL2*N%}m`9 zS$p!rmB|y#s#olFCnkA{!=($8SM2rrU31XWCI&*XL7H6{u+h#W>d-Ij)nUhmlThb4^8TJj@6O$*dUYW8d zG(_IjachEN?CtKY?HRZF2kafXl$;%BuFjsGyma;a%;eQ8&JMRgd$;?_?u=Ik2JJoi zs+;-1`m8;R!07E6w)RpPdvC^TgT4Cs-kvdgpIhR-1tsqDs<_XsVsPK3>DklvK3!4! zfG#k6;Nj4|GE-!+qw`atOK%PA@->I=`K6emnjAcKZ44^zz&3!aUUN9s9lGfOqt8 zfFCZ6i=kof=+$}HdvCbMy*}*WX4u2cu$SMkm*23L->{b-W?4GlVK={?0T;(T1Md4h z1Md4h1Md4h1Md4h1Md4h1Md4h1OEGN8}tmgZPqieR_EU{u+BTK4^LjYbm8`ysZ&=X z`b@9w9DREAqI>h?h1+L?n>#0Gt^{}LbXuopbvh%dG%$zk&MQ|=K^ZTcnV!AEs#u|$ zlBZY4#7|%b&L!O4$*BvME}Wk=%ykoY z{#m1X{u$#P^Utf=`Dax-zYeZ(2MoP~f6n|nGdiA6EOZ^Ex>Hd3BiF zZXyoY5%41=oaOoq*JrtYf$JB!E~ORga;iDL2JZ18))8-Jb@2{he5Wx8o*xFzr@dUi zPp;1b%QNKoB(OZ~<@$YceHOT$A;%}_0}qkgJNYelCiVKhhV~#3fkpCqR?TpJf%99X zUBTcpl>Cg^58OA+e_Ng9cwzqANRjq|H@Ak*QZw+zf464OQlsaMYV!xz|T)UMv%i@hEDN*{Ay!8~NN*x6*spC_WE_D;wo-}glP0!HE6}<7J^e7;z z0HO+TPAhRdO1{$^&+?m**5Y_8*o;ul^OW(du9XX!w9K=*b}m%XBF~B^bgs7RdOWXd ze31Wwb*b$P=V1E($I=a9$*g)>s8IFYb>CvuGYr*x9?hBW&p!(W^X8xD-_Q9o|DpNU z(E8%oxq1FSDfcOQf8P9)^Uvt-WAl%3?aBF1^8NPw(?2~h{OO*1SVJ!Y)KDE^EW0dzX!5in#%>U=Y zg7wvBy*Adjz<7|~&*5`D%t`zHtUo{3^1$pb^s^Fv!2LA(F9`aMOD#-+Fa7gv7K<)uMfGAiAAryuwkpZy%l3qmd525tO2BmMIn(>=q3 zeg4afE5S20zlKSL%{VH|ge|ho?F3<1r3&vdvbpI~6 zf987hC-uThp7=TbJj!D}e?N0AvQbtH&of8Je4FuMu6mxDe3Ro-8T0$kc7C{lUiY)X zq*t+Dba^R!E**`jTf*7>%s)Se@@nBfKS@7%jNT}Glkf_f@6%<;T=Wz_>H?n;lxy@G zxHR`V=_ldXp5kp*nm1ToO@nnFBEw(s;p(C*3vTN_?kK#GC-viS)f}OstV*AUqU6>Z%TQ(PHrncuUqxoGU~bhecf`bIdnz>VIE)Mxhq_(EG-~?MRMi+y!k7X zbCx;bF^=B`r=OH(blv3mxGrB{(miSZUEBfV^AG5!-p1AYHI2G~QOjGhVt5+pzb$X` zNw*At(iBX?rXP?b{ZHfb8Np}zTI#W7PQc$II)|q-Fp?^B{{3KA)@jnhdVIUB>!xmY zLScd6aq4*^ZI~ym&GUkzR5=R(W2EIh+_JjniDwukPxBK> zu(*{3v(m!P$dkJ0>n7mo0rJR$-mU~=Pm-&^>)+gZ>zez3JRgKq& z$XdoZYYM&chO)opNAT~$*r9tNwR7v>K`Zy9f4bw{r{DUj&Rb|aG(+d{l7*4e)66&W zbRPS>jX=BfvlxT&MEY9#Olqm64csl(Fu2DhIZ`HlamnQyy0Cnk33VXPW!h8s1{v=u z+MvhVOO%z)>DrL$x-Q8_-juR*c{fZW7L+G**8lF4?gfk9PuG6Yjm*Eiox-8?c<+h07^%b#SH^L?RoOFzIaV~Fv$^d1nWW`%3CtBi%z$8R%Tr;25JJEIRO z`IH{lLQR(RQ>60Jx|%nWjG+nA-bnET8kvpLA1O~$4VQB0IaOavNglcTF7Nr3jKW1N zsMoid?UKrR`Pu^avNT5OJO65VnerafuZ%^V*TZgJ%cfo~3rlyO^!uuR)Oq=%S6atgVd*wpHghkZr|18|!m=Hi8Jp}zmALVrT`|JmKRG0tU4dF+sS zHAu-g!IYL=rFxRo$)}fo%>}c?!u2f4@%k4;D&l@p_yqF*6z(n6Hj=0RR4O-r#H23V z*h!kwH>PvoOv-~#OqG-_&pXpNpzo&Nx}gHo`7C^#>(|c-Ecg=Pg>PQ}UkZ!Yf9z*= zcNu>EXO_30kwQ1mriCim$9^?C&<`1pU}92^eyQk;j-U~`N^Mqq(Y-vF(z`r^Hsy?~ zNy*NtSnCDRS~QF#dZ8=O3q5CSLF4nIC=7ob-PI2mf6DhO=%t!y2oixC{lPL-W&9U< ztTo09l+yL*>^-**pWereE4aHV|6<^u2uhD0<)V|h;qMg{lRTDkm zYOU#8&Rg=W^p0{a+=~0H)wxx2H~n43c`f<7Uqk0EWx3zR)KN;7uSCW0?@E4dp8lD@ zB;Wefw*d&{tF88db>X)O$mJXJzHzjb<61AdpO)!I?_rpKy_}C~ePz*D?&sP< z^OXDTPo25X%Jcn{PShTqqx;`a{rrZ>a~KT<$)h*pyV^UK@&y9PMLy}${G8Iq0iYB3 z{O=I@)$$d%mws2!^W;0?eOFSKG`||qrCmGeM4P*rZzqq4{!p&g?H2uR|06oz@+(?O zEzt;MySGM_Tgn-QbK9yEk|&>zl6 z`!{Fd13$BWQWyESwMu6zaAWnWzb57ZGCL{YaOhoGe8XT3tt&88#CZwdFi@9KGZ{Sr zJ$9<}h^g131luFN4SF;Lb^os>{|54uzCB29MuP{8b&$^}rH0Wy-%9@b(VY&XO@Er4 z&p>Me(3;!G@pj`bG!0%x0K%a03N*W`(VxB_oIb#J2wmw1!Sk#67DDA-!})9Z4xvl^ z5LX`NJA`)k>%spU&{!@)YyV9=^Jcz9SZqDQ`J;S`&|>~2YW5bsg=kd06|L*H@pX*1 z^9`Z3^A5({JNY`syZDwF?>0UN3?D)(yclZu3Euh*^umkL4F43l{hsmroPUn*5IW{x zApIhCV1>rl`3|A^{|%n`rt#-M^`!AF&i~T*d!GM}@eiDT*Z4;u`6uHUp8pZwA+*~6 z3wVBFJP#xJ0VTW;iw4FR!5t5g-|wW`)=Qc)E(DpkFz$M&s3HE@oN zE$7Xu8Euyq)ne3PMbOGQPU1Nyh>8(|T8r+@pc*F3!wR(m9h;SECFyFlniQ&yUJtPz z(FfY1wxYEo+WlEV!HpU;`S%fuWj|Uw-Dvb5Frv&Y2aRSl`www`SRFQc(eS^?=tRr^ zh(V+$bb4Ba;`8n_IyfEB{j+%SJ*Up`{0zEFEok;*9K)P6YxJSve*ugCi|F|eFhAUC zv}rx}a+x83mKg#_ejT0mA@v(*wP(|>6+c4j1c|?qp)1(0_2)!SFPHl=G7IU+4Vq5$ zLu-<(;3lww@U;L}Yc0UzS_|+&tp)f|I1zbU#z_ushNc)jx(m8CinM1VCQp0x6M6LO z5YM3t#z<&l>~%8&R-*O432TeJ-ZMn=ghG_i*XyA3ZBT+C=8(0Q+oXTl%$R?!)2DR$w>teUuU;~L zpwoZV>3{0<1xW*@PD7V3clQKxby}>`N}Wb^8rNw%X>Xucr^7m3tmzpB%3>hv#k`d2#r`^#4^UJiUur_bp0$2$FqPUj@GtSg|vis&?7r=>cr)@g%I zaic=-bjQez9>rc(-nf41j=bxqcnct(>!+B>^UU>A7jichZb0;ZC6)EhOQq!-q@;MwT9sc;8M^9a{Yg{t9)`noA=H=en6S^%|bhbLPJ zjhTQ_9l`8S3knJHS74KOjo$sh439cbYjHe8Zc`sGBm*8s9U1$az3> vYp>V$a&$^dfb-4NQo&msr5~8UxQ}`pnu8DyHOMF^_TH4c!j%~MY4!gC-r{2^ literal 0 HcmV?d00001 diff --git a/sage/pdfs/Sage_Text-Medium.ttf b/sage/pdfs/Sage_Text-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a83b7a9880656f9667b95ae5016ef5a16d06c5f7 GIT binary patch literal 91840 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�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 R{AC!#(&ChPks0pB{{UHnm@@zX literal 0 HcmV?d00001 diff --git a/services/universign_document.py b/services/universign_document.py index 60e46d3..fa899a9 100644 --- a/services/universign_document.py +++ b/services/universign_document.py @@ -36,7 +36,7 @@ class UniversignDocumentService: data = response.json() documents = data.get("documents", []) - logger.info(f"✅ {len(documents)} document(s) trouvé(s)") + logger.info(f"{len(documents)} document(s) trouvé(s)") # Log détaillé de chaque document for idx, doc in enumerate(documents): @@ -90,7 +90,7 @@ class UniversignDocumentService: content_length = response.headers.get("Content-Length", "unknown") logger.info( - f"✅ Téléchargement réussi: " + f"Téléchargement réussi: " f"Content-Type={content_type}, Size={content_length}" ) @@ -100,7 +100,7 @@ class UniversignDocumentService: and "octet-stream" not in content_type.lower() ): logger.warning( - f"⚠️ Type de contenu inattendu: {content_type}. " + f"Type de contenu inattendu: {content_type}. " f"Tentative de lecture quand même..." ) @@ -146,7 +146,7 @@ class UniversignDocumentService: if not force and transaction.signed_document_path: if os.path.exists(transaction.signed_document_path): logger.debug( - f"✅ Document déjà téléchargé: {transaction.transaction_id}" + f"Document déjà téléchargé: {transaction.transaction_id}" ) return True, None @@ -162,7 +162,7 @@ class UniversignDocumentService: if not documents: error = "Aucun document trouvé dans la transaction Universign" - logger.warning(f"⚠️ {error}") + logger.warning(f"{error}") transaction.download_error = error await session.commit() return False, error @@ -232,7 +232,7 @@ class UniversignDocumentService: await session.commit() logger.info( - f"✅ Document signé téléchargé: {filename} ({file_size / 1024:.1f} KB)" + f"Document signé téléchargé: {filename} ({file_size / 1024:.1f} KB)" ) return True, None diff --git a/services/universign_sync.py b/services/universign_sync.py index 2390023..28e633c 100644 --- a/services/universign_sync.py +++ b/services/universign_sync.py @@ -372,7 +372,7 @@ class UniversignSyncService: # Vérifier la transition if not is_transition_allowed(previous_local_status, new_local_status): logger.warning( - f"⚠️ Transition refusée: {previous_local_status} → {new_local_status}" + f"Transition refusée: {previous_local_status} → {new_local_status}" ) new_local_status = resolve_status_conflict( previous_local_status, new_local_status @@ -392,7 +392,7 @@ class UniversignSyncService: universign_status_raw ) except ValueError: - logger.warning(f"⚠️ Statut Universign inconnu: {universign_status_raw}") + logger.warning(f"Statut Universign inconnu: {universign_status_raw}") if new_local_status == "SIGNE": transaction.universign_status = ( UniversignTransactionStatus.COMPLETED @@ -415,7 +415,7 @@ class UniversignSyncService: if new_local_status == "SIGNE" and not transaction.signed_at: transaction.signed_at = datetime.now() - logger.info("✅ Date de signature mise à jour") + logger.info("Date de signature mise à jour") if new_local_status == "REFUSE" and not transaction.refused_at: transaction.refused_at = datetime.now() @@ -450,9 +450,9 @@ class UniversignSyncService: ) if download_success: - logger.info("✅ Document signé téléchargé et stocké") + logger.info("Document signé téléchargé et stocké") else: - logger.warning(f"⚠️ Échec téléchargement: {download_error}") + logger.warning(f"Échec téléchargement: {download_error}") except Exception as e: logger.error( @@ -499,7 +499,7 @@ class UniversignSyncService: ) logger.info( - f"✅ Sync terminée: {transaction.transaction_id} | " + f"Sync terminée: {transaction.transaction_id} | " f"{previous_local_status} → {new_local_status}" ) @@ -557,9 +557,9 @@ class UniversignSyncService: ) if download_success: - logger.info("✅ Document signé téléchargé avec succès") + logger.info("Document signé téléchargé avec succès") else: - logger.warning(f"⚠️ Échec téléchargement: {download_error}") + logger.warning(f"Échec téléchargement: {download_error}") except Exception as e: logger.error(