serviceadvisor / car_core /exporter.py
viswanani's picture
Upload 16 files
94332c9 verified
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