#433 App: Invoice Generator (invoice_generator)

closed low Created 2025-12-14 20:17 · Updated 2026-01-02 06:26

Description

Edit
## Overview Generate professional PDF invoices from structured data with email delivery and S3 archival. ## App Metadata - **App Name:** invoice_generator - **Publisher:** platform - **Version:** 1.0.0 - **Priority:** Low - **Complexity:** High - **Phase:** 3 (Advanced) ## Actions ### 1. create_invoice **Description:** Generate PDF invoice from line items and details **Parameters:** - invoice_number (str, required): Unique invoice number - customer (dict, required): Customer details - name (str): Customer/company name - email (str): Customer email - address (str): Billing address - tax_id (str, optional): Tax/VAT ID - line_items (list, required): Invoice items - description (str): Item description - quantity (float): Quantity - unit_price (float): Price per unit - tax_rate (float, optional): Tax rate percentage - currency (str, default='USD'): Currency code - due_date (str, required): Payment due date (YYYY-MM-DD) - notes (str, optional): Additional notes - payment_instructions (str, optional): How to pay - template (str, default='standard'): Invoice template name **Returns:** { "invoice_id": "INV-2025-001", "pdf_url": "s3://bucket/invoices/INV-2025-001.pdf", "subtotal": 1000.00, "tax_total": 200.00, "total": 1200.00, "generated_at": "2025-01-01T00:00:00Z" } ### 2. send_invoice **Description:** Email invoice to customer **Parameters:** - invoice_id (str, required): Invoice ID to send - pdf_url (str, required): S3 URL of PDF - recipient_email (str, required): Customer email - cc_emails (list, optional): CC recipients - subject_template (str, default='Invoice {{invoice_number}} from {{company}}'): Subject - body_template (str, optional): Custom email body - attach_pdf (bool, default=True): Attach PDF to email **Returns:** {"sent": true, "recipient": "...", "invoice_id": "..."} ### 3. store_invoice **Description:** Archive invoice to S3 with metadata **Parameters:** - invoice_id (str, required): Invoice ID - pdf_content (bytes, required): PDF binary content - metadata (dict, required): Invoice metadata for search - s3_prefix (str, default='invoices/'): S3 key prefix **Returns:** {"s3_key": "invoices/2025/01/INV-001.pdf", "size_bytes": 50000} ### 4. generate_and_send **Description:** Convenience action - create, store, and send in one step **Parameters:** - invoice_data (dict, required): Full invoice data (same as create_invoice) - send_to (str, required): Recipient email - store (bool, default=True): Archive to S3 **Returns:** Combined result of all operations ## Example Workflow - Send Customer Invoice builder = WorkflowBuilder(name='send_invoice', version='1.0.0') builder.task( task_id='create_and_send', function='apps.platform.invoice_generator.generate_and_send', kwargs={ 'invoice_data': { 'invoice_number': '{{invoice_number}}', 'customer': { 'name': '{{customer_name}}', 'email': '{{customer_email}}', 'address': '{{customer_address}}' }, 'line_items': '{{line_items}}', 'due_date': '{{due_date}}', 'currency': 'GBP' }, 'send_to': '{{customer_email}}' } ) ## PDF Generation Options 1. **WeasyPrint** (Python, recommended): HTML/CSS to PDF 2. **wkhtmltopdf**: CLI tool, needs container 3. **ReportLab**: Pure Python, more complex ## Implementation Notes - Use WeasyPrint for PDF generation (pip install weasyprint) - Create HTML templates with Jinja2 - Support multiple templates (standard, detailed, minimal) - Store PDFs in S3 with organized folder structure - Add QR code with payment link (optional) - Support multiple currencies and locales ## HTML Invoice Template Structure templates/ invoices/ standard.html detailed.html minimal.html _base.html (shared styles) ## Configuration Schema { "company_details": { "name": "Company Name", "address": "...", "logo_url": "...", "tax_id": "..." }, "default_currency": "USD", "default_template": "standard", "pdf_options": { "page_size": "A4", "margin": "1cm" } } ## Secrets Config { "s3_access_key": "vault:shared/s3:access_key", "s3_secret_key": "vault:shared/s3:secret_key" } ## Dependencies - weasyprint for PDF generation (requires system libs: libpango, libcairo) - Jinja2 for HTML templates - boto3 for S3 - Email sending (SMTP) - May need container with system dependencies ## Container Requirements WeasyPrint needs system libraries. Either: 1. Add to main Dockerfile: apt-get install libpango-1.0-0 libcairo2 2. Create separate PDF generator container

Comments

Loading comments...

Context

Loading context...

Audit History

View All
Loading audit history...