Spaces:
Sleeping
Sleeping
| from reportlab.lib.pagesizes import A5 | |
| from reportlab.lib import colors | |
| from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer | |
| from reportlab.lib.styles import getSampleStyleSheet | |
| def create_receipt(text, file_name): | |
| # Nettoyage basique | |
| clean = text.replace('*', '').replace('#', '').replace('Reçu', '') | |
| # Extraction des champs simples | |
| lines = [l.strip() for l in clean.split("\n") if l.strip()] | |
| data_map = {} | |
| description_lines = [] | |
| for l in lines: | |
| if ":" in l: | |
| key, val = l.split(":", 1) | |
| data_map[key.strip()] = val.strip() | |
| else: | |
| description_lines.append(l) | |
| # Données extraites | |
| client = data_map.get("Client", "") | |
| telephone = data_map.get("Téléphone", "") | |
| adresse = data_map.get("Adresse", "") | |
| date_commande = data_map.get("Date de commande", "") | |
| delai = data_map.get("Délai de livraison estimé", "") | |
| # Description brute (ex: "3 iPhone (1 rouge, 2 blancs)") | |
| description = " ".join(description_lines) | |
| # Styles | |
| styles = getSampleStyleSheet() | |
| title_style = styles["Title"] | |
| normal = styles["Normal"] | |
| # Création du document | |
| doc = SimpleDocTemplate(file_name, pagesize=A5, | |
| leftMargin=25, rightMargin=25, topMargin=25, bottomMargin=25) | |
| elements = [] | |
| # Titre | |
| elements.append(Paragraph("FACTURE", title_style)) | |
| elements.append(Spacer(1, 12)) | |
| # Informations client | |
| info_block = ( | |
| f"<b>Client :</b> {client}<br/>" | |
| f"<b>Téléphone :</b> {telephone}<br/>" | |
| f"<b>Adresse :</b> {adresse}<br/>" | |
| f"<b>Date de commande :</b> {date_commande}<br/>" | |
| f"<b>Délai de livraison estimé :</b> {delai}<br/>" | |
| ) | |
| elements.append(Paragraph(info_block, normal)) | |
| elements.append(Spacer(1, 18)) | |
| # Tableau détaillé | |
| table_data = [ | |
| ["Description", "Quantité"], | |
| [description, description.split()[0] if description.split()[0].isdigit() else ""] | |
| ] | |
| table = Table(table_data, colWidths=[200, 60]) | |
| table.setStyle( | |
| TableStyle([ | |
| ("BACKGROUND", (0, 0), (-1, 0), colors.lightgrey), | |
| ("TEXTCOLOR", (0, 0), (-1, 0), colors.black), | |
| ("ALIGN", (1, 1), (-1, -1), "CENTER"), | |
| ("VALIGN", (0, 0), (-1, -1), "MIDDLE"), | |
| ("BOX", (0, 0), (-1, -1), 1, colors.black), | |
| ("GRID", (0, 0), (-1, -1), 0.5, colors.grey), | |
| ("FONTSIZE", (0, 0), (-1, -1), 10), | |
| ]) | |
| ) | |
| elements.append(table) | |
| elements.append(Spacer(1, 24)) | |
| # Mention finale | |
| elements.append(Paragraph("Merci pour votre commande.", normal)) | |
| # Génération du PDF | |
| doc.build(elements) | |