Spaces:
Sleeping
Sleeping
| from reportlab.lib.pagesizes import A5 | |
| from reportlab.lib import colors | |
| from reportlab.lib.styles import getSampleStyleSheet | |
| from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer | |
| from reportlab.lib.units import mm | |
| def create_receipt(text, file_name): | |
| # Nettoyage du texte source | |
| text = text.replace('*', '').replace('#', '') | |
| text = text.replace('Reçu', '').strip() | |
| # Extraction des champs | |
| lines = [l.strip() for l in text.split("\n") if l.strip()] | |
| data_dict = {} | |
| for line in lines: | |
| if ":" in line: | |
| key, val = line.split(":", 1) | |
| data_dict[key.strip()] = val.strip() | |
| # Récupération des informations | |
| nom = data_dict.get("Nom", "") | |
| adresse = data_dict.get("Adresse", "") | |
| commande = data_dict.get("Commande", "") | |
| prix_piece = data_dict.get("Prix par pièce", "") | |
| prix_total = data_dict.get("Prix total", "") | |
| date_livraison = data_dict.get("Date de livraison", "") | |
| # Structure du PDF | |
| doc = SimpleDocTemplate( | |
| file_name, | |
| pagesize=A5, | |
| rightMargin=20, | |
| leftMargin=20, | |
| topMargin=20, | |
| bottomMargin=20 | |
| ) | |
| styles = getSampleStyleSheet() | |
| elements = [] | |
| # Titre | |
| titre = Paragraph("<b>FACTURE</b>", styles["Title"]) | |
| elements.append(titre) | |
| elements.append(Spacer(1, 8 * mm)) | |
| # Informations client | |
| info_client = ( | |
| f"<b>Client :</b> {nom}<br/>" | |
| f"<b>Adresse :</b> {adresse}<br/>" | |
| f"<b>Date de livraison :</b> {date_livraison}<br/>" | |
| ) | |
| elements.append(Paragraph(info_client, styles["Normal"])) | |
| elements.append(Spacer(1, 8 * mm)) | |
| # Tableau du détail de commande | |
| table_data = [ | |
| ["Description", "Qté", "Prix unitaire", "Total"], | |
| [commande, "", prix_piece, prix_total] | |
| ] | |
| table = Table(table_data, colWidths=[60*mm, 15*mm, 30*mm, 30*mm]) | |
| table.setStyle(TableStyle([ | |
| ("BACKGROUND", (0,0), (-1,0), colors.lightgrey), | |
| ("TEXTCOLOR", (0,0), (-1,0), colors.black), | |
| ("ALIGN", (1,1), (-1,-1), "CENTER"), | |
| ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), | |
| ("BOTTOMPADDING", (0,0), (-1,0), 8), | |
| ("GRID", (0,0), (-1,-1), 0.5, colors.black), | |
| ])) | |
| elements.append(table) | |
| elements.append(Spacer(1, 12 * mm)) | |
| # Total général | |
| total_paragraph = Paragraph( | |
| f"<b>Total dû : {prix_total}</b>", | |
| styles["Heading3"] | |
| ) | |
| elements.append(total_paragraph) | |
| # Génération PDF | |
| doc.build(elements) | |