Aarya2004's picture
Deploy Quillwright (stub Docker Space): bespoke gr.Server app + sample data
76a2f92 verified
Raw
History Blame Contribute Delete
1.48 kB
from reportlab.lib.pagesizes import LETTER
from reportlab.lib.units import inch
from reportlab.pdfgen import canvas
from quillwright.models import Estimate
def estimate_to_pdf(est: Estimate, path: str) -> None:
c = canvas.Canvas(path, pagesize=LETTER)
width, height = LETTER
y = height - inch
c.setFont("Helvetica-Bold", 16)
c.drawString(inch, y, f"Estimate — {est.job_title}")
c.setFont("Helvetica-Oblique", 8)
c.drawString(inch, y - 14, "AI-generated draft — review before sending. Sample pricing.")
y -= 48
c.setFont("Helvetica-Bold", 10)
c.drawString(inch, y, "Description")
c.drawString(4.2 * inch, y, "Qty")
c.drawString(4.9 * inch, y, "Rate")
c.drawString(5.9 * inch, y, "Subtotal")
y -= 16
c.setFont("Helvetica", 10)
for li in est.line_items:
c.drawString(inch, y, li.description[:40])
c.drawString(4.2 * inch, y, f"{li.quantity:g} {li.unit}")
c.drawString(4.9 * inch, y, f"${li.rate:.2f}")
c.drawString(5.9 * inch, y, f"${li.subtotal:.2f}")
y -= 14
y -= 8
c.setFont("Helvetica-Bold", 10)
c.drawString(4.9 * inch, y, "Subtotal:")
c.drawString(5.9 * inch, y, f"${est.subtotal:.2f}")
y -= 14
c.drawString(4.9 * inch, y, f"Tax ({est.tax_rate:.0%}):")
c.drawString(5.9 * inch, y, f"${est.tax:.2f}")
y -= 14
c.drawString(4.9 * inch, y, "Total:")
c.drawString(5.9 * inch, y, f"${est.total:.2f}")
c.showPage()
c.save()