#433 App: Invoice Generator (invoice_generator)
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 AllLoading audit history...