elegantly/laravel-invoices
Manage invoices in Laravel with database storage, serial numbering, and PDF generation. Create, render, store, and download invoices as PDFs or views, add taxes/discounts and payment instructions (QR codes), and customize templates.
Invoice) and the standalone PdfInvoice class, allowing flexibility in adoption. A TPM could leverage this to integrate only the PDF generation (if no database storage is needed) or both (for full invoice lifecycle management).PPYYCCCC).InvoiceDiscount class.brick/money (via elegantly/laravel-money), ensuring robust currency/tax calculations.Key Fit for TPM:
dompdf/dompdf, elegantly/laravel-money.invoice_items table). A TPM should validate if the schema aligns with existing data models (e.g., custom fields, relationships).PdfInvoice::getPdfOutput() in a job).Key Questions for TPM:
invoices/invoice_items tables? If so, how to merge or extend?PPYYCCCC) could conflict if not properly scoped (e.g., per InvoiceType). Validate with high-volume use cases.brick/money is robust but may introduce complexity if the team isn’t familiar with its API (e.g., Money::of(), rounding modes).gd or cairo extensions for PDF rendering. Verify server compatibility.elegantly/laravel-money: Ensures consistent monetary operations. If already using brick/money, no additional overhead.TPM Recommendation:
PdfInvoice standalone for PDF generation (no database).PdfInvoice class.PdfInvoice.
// Before
$pdf = PDF::loadView('invoices.pdf', $data)->stream();
// After
$pdfInvoice = new PdfInvoice(...);
return $pdfInvoice->stream();
Sequencing:
dompdf and brick/money compatibility).brick/money versions or polyfills.model_invoice) for future-proofing.resources/views/vendor/invoices/default.layout or specify a custom path.SerialNumberGenerator class for complex logic.config('invoices.pdf.options').TPM Checklist:
chroot setting if using custom storage paths.dompdf, brick/money, and elegantly/laravel-money to the stack.PdfInvoice constructor parameters.How can I help you explore Laravel packages today?