38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { jsPDF } from 'jspdf'
|
|
import type { Invoice } from '../stores/invoices'
|
|
import type { Client } from '../stores/clients'
|
|
import { renderInvoicePdf, type BusinessInfo } from './invoicePdfRenderer'
|
|
import { getTemplateById } from './invoiceTemplates'
|
|
|
|
/**
|
|
* Invoice item interface for line items on the invoice
|
|
*/
|
|
export interface InvoiceItem {
|
|
id?: number
|
|
description: string
|
|
quantity: number
|
|
rate: number
|
|
amount: number
|
|
}
|
|
|
|
/**
|
|
* Generate a PDF invoice using a template
|
|
* @param invoice - The invoice data
|
|
* @param client - The client data
|
|
* @param items - The invoice line items
|
|
* @param templateId - Template ID to use (defaults to 'clean-minimal')
|
|
* @param businessInfo - Optional business identity info
|
|
* @returns The generated jsPDF document
|
|
*/
|
|
export function generateInvoicePdf(
|
|
invoice: Invoice,
|
|
client: Client,
|
|
items: InvoiceItem[],
|
|
templateId: string = 'clean',
|
|
businessInfo?: BusinessInfo,
|
|
): jsPDF {
|
|
const config = getTemplateById(templateId)
|
|
const info: BusinessInfo = businessInfo || { name: '', address: '', email: '', phone: '', logo: '' }
|
|
return renderInvoicePdf(config, invoice, client, items, info)
|
|
}
|