diff options
| author | mihna123 <mihailonvojinovic@gmail.com> | 2026-05-24 20:58:33 +0200 |
|---|---|---|
| committer | mihna123 <mihailonvojinovic@gmail.com> | 2026-05-24 20:58:33 +0200 |
| commit | 4aca1f6f1664d819cc4c6cf1c52f6a57c189f509 (patch) | |
| tree | 2a0842e67c74a13eda85d7bde1b20f5ee4090586 /src | |
| parent | a147d3966538fa0c30cc85fa6152e1bea6180b34 (diff) | |
| download | invoice-4aca1f6f1664d819cc4c6cf1c52f6a57c189f509.tar.gz invoice-4aca1f6f1664d819cc4c6cf1c52f6a57c189f509.zip | |
feat: add notes and terms to invoice form and generator
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/invoice-generator.tsx | 38 | ||||
| -rw-r--r-- | src/lib/generate.ts | 16 |
2 files changed, 44 insertions, 10 deletions
diff --git a/src/components/invoice-generator.tsx b/src/components/invoice-generator.tsx index da97184..f2a0eee 100644 --- a/src/components/invoice-generator.tsx +++ b/src/components/invoice-generator.tsx @@ -156,16 +156,34 @@ export const InvoiceGenerator = () => { + Item </Button> </section> - <section className="pr-6 text-right text-xl"> - Subtotal:{' '} - <b> - {lineItems - .reduce( - (acc, cur) => acc + (cur.rate ?? 0) * (cur.quantity ?? 0), - 0, - ) - .toLocaleString(undefined, { style: 'currency', currency })} - </b> + <section className="mt-2 grid grid-cols-2"> + <div className="flex flex-col"> + <label>Notes</label> + <textarea + {...register('notes')} + rows={1} + placeholder="Notes - any relevant information not provided before" + className="rounded-sm border p-2" + /> + <label>Terms</label> + <textarea + {...register('terms')} + rows={1} + placeholder="Terms and conditions" + className="rounded-sm border p-2" + /> + </div> + <div className="pr-6 text-right text-xl"> + Total:{' '} + <b> + {lineItems + .reduce( + (acc, cur) => acc + (cur.rate ?? 0) * (cur.quantity ?? 0), + 0, + ) + .toLocaleString(undefined, { style: 'currency', currency })} + </b> + </div> </section> <section className={cn('mt-4 flex flex-row-reverse')}> <Button diff --git a/src/lib/generate.ts b/src/lib/generate.ts index 80b5e16..51d7b91 100644 --- a/src/lib/generate.ts +++ b/src/lib/generate.ts @@ -163,6 +163,22 @@ export async function generateInvoice(invoice: Invoice): Promise<Blob> { doc.page.width - MARGIN - T_PADDING - doc.widthOfString(totalText), ); + // Notes + if (invoice.notes) { + doc.fontSize(10); + doc.moveDown(); + doc.text('NOTES', MARGIN, doc.y + 10); + doc.text(invoice.notes, MARGIN, doc.y); + } + + // Terms + if (invoice.terms) { + doc.fontSize(10); + doc.moveDown(); + doc.text('TERMS', MARGIN, doc.y + 10); + doc.text(invoice.terms, MARGIN, doc.y); + } + doc.end(); return new Promise((resolve, reject) => { stream.on('finish', () => { |
