Spaces:
Sleeping
Sleeping
| import json | |
| from reportlab.lib.pagesizes import A4 | |
| from reportlab.lib import colors | |
| from reportlab.lib.styles import getSampleStyleSheet | |
| from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle | |
| def export_json(payload, path): | |
| with open(path, "w", encoding="utf-8") as f: | |
| json.dump(payload, f, ensure_ascii=False, indent=2) | |
| return path | |
| def export_pdf(payload, path): | |
| doc = SimpleDocTemplate(path, pagesize=A4) | |
| styles = getSampleStyleSheet() | |
| story = [] | |
| story.append(Paragraph("<b>Car Analysis Advisor Report</b>", styles["Title"])) | |
| story.append(Spacer(1, 8)) | |
| story.append(Paragraph(f"<b>Region:</b> {payload['pricing']['region']} | <b>Currency:</b> {payload['pricing']['currency']}", styles["Normal"])) | |
| story.append(Spacer(1, 8)) | |
| story.append(Paragraph(f"<b>Model:</b> {payload['vehicle']['model']} | <b>Color:</b> {payload['vehicle']['color']['name']} ({payload['vehicle']['color']['hex']})", styles["Normal"])) | |
| story.append(Spacer(1, 10)) | |
| story.append(Paragraph("<b>Issues & Solutions</b>", styles["Heading2"])) | |
| data = [["Issue","Solution","Labor (hrs)","Labor","Parts","Line Total"]] | |
| for it in payload["pricing"]["items"]: | |
| parts_cost = f"{payload['pricing']['currency']} {it['parts_cost']:.2f}" | |
| data.append([it["issue"].replace('_',' '), it["solution"], f"{it['labor_hours']:.2f}", | |
| f"{payload['pricing']['currency']} {it['labor_cost']:.2f}", parts_cost, | |
| f"{payload['pricing']['currency']} {it['line_total']:.2f}"]) | |
| table = Table(data, hAlign="LEFT", colWidths=[90,220,70,70,70,80]) | |
| table.setStyle(TableStyle([ | |
| ('BACKGROUND',(0,0),(-1,0),colors.darkblue), | |
| ('TEXTCOLOR',(0,0),(-1,0),colors.whitesmoke), | |
| ('GRID',(0,0),(-1,-1),0.25,colors.grey), | |
| ('ALIGN',(2,1),(-1,-1),'CENTER') | |
| ])) | |
| story.append(table) | |
| story.append(Spacer(1, 8)) | |
| story.append(Paragraph(f"<b>Subtotal:</b> {payload['pricing']['currency']} {payload['pricing']['subtotal']:.2f}", styles["Normal"])) | |
| story.append(Paragraph(f"<b>Tax:</b> {payload['pricing']['currency']} {payload['pricing']['tax']:.2f}", styles["Normal"])) | |
| story.append(Paragraph(f"<b>Grand Total:</b> {payload['pricing']['currency']} {payload['pricing']['grand_total']:.2f}", styles["Heading3"])) | |
| doc.build(story) | |
| return path | |