Invoices
Invoices stored in SQL Server (invoice + invoice_line). Open one to print it as an A4 PDF with
VAT, QR code, barcode and signature lines - or create a new one below.
| Invoice No | Customer | Issue date | Due date | Items | Total (THB) | Status | |
|---|---|---|---|---|---|---|---|
| INV-202610-005 | Green Valley International School | 21 Oct 2026 | 20 Nov 2026 | 6 | 8,448.72 | DRAFT | Open PDF |
| INV-202610-004 | Northstar Logistics Co., Ltd. | 16 Oct 2026 | 15 Nov 2026 | 4 | 34,903.40 | SENT | Open PDF |
| INV-202610-003 | Riverside Hotel Bangkok | 11 Oct 2026 | 10 Nov 2026 | 2 | 166.92 | SENT | Open PDF |
| INV-202610-002 | Lanna Craft Studio | 6 Oct 2026 | 5 Nov 2026 | 5 | 39,108.50 | SENT | Open PDF |
| INV-202610-001 | Bangkok Smile Dental Clinic | 1 Oct 2026 | 31 Oct 2026 | 7 | 26,105.86 | SENT | Open PDF |
| INV-202609-006 | Andaman Dive Resort | 26 Sep 2026 | 26 Oct 2026 | 5 | 2,747.76 | SENT | Open PDF |
| INV-202609-005 | Chiang Mai Coffee House | 21 Sep 2026 | 21 Oct 2026 | 3 | 4,964.80 | OVERDUE | Open PDF |
| INV-202609-004 | Siam Fresh Market Co., Ltd. | 16 Sep 2026 | 16 Oct 2026 | 5 | 49,423.30 | OVERDUE | Open PDF |
| INV-202609-003 | Green Valley International School | 11 Sep 2026 | 11 Oct 2026 | 6 | 46,421.95 | PAID | Open PDF |
| INV-202609-002 | Northstar Logistics Co., Ltd. | 6 Sep 2026 | 6 Oct 2026 | 6 | 36,760.92 | PAID | Open PDF |
| INV-202609-001 | Riverside Hotel Bangkok | 1 Sep 2026 | 1 Oct 2026 | 4 | 16,376.35 | OVERDUE | Open PDF |
| INV-202608-005 | Lanna Craft Studio | 27 Aug 2026 | 26 Sep 2026 | 7 | 25,487.40 | PAID | Open PDF |
| INV-202608-004 | Bangkok Smile Dental Clinic | 22 Aug 2026 | 21 Sep 2026 | 10 | 78,414.95 | PAID | Open PDF |
| INV-202608-003 | Andaman Dive Resort | 17 Aug 2026 | 16 Sep 2026 | 2 | 5,371.40 | OVERDUE | Open PDF |
| INV-202608-002 | Chiang Mai Coffee House | 12 Aug 2026 | 11 Sep 2026 | 6 | 17,580.10 | PAID | Open PDF |
| INV-202608-001 | Siam Fresh Market Co., Ltd. | 7 Aug 2026 | 6 Sep 2026 | 4 | 14,113.30 | PAID | Open PDF |
How it works
- One query loads invoice + customer + lines:
@EntityGraph(attributePaths = {"customer", "lines"})inInvoiceRepository- no lazy-loading errors while the PDF is built after the transaction. - Money is
BigDecimal(SQLDECIMAL(12,2)); VAT =(subtotal - discount) x 7 / 100, rounded HALF_UP. - The PDF is in
InvoicePdfService: header block, bill-to, line table withsetHeaderRows(1), totals, QR + Code 128, signatures.
SELECT i.invoice_no, c.name, i.status, COUNT(l.id) AS lines
FROM invoice i JOIN customer c ON c.id = i.customer_id
LEFT JOIN invoice_line l ON l.invoice_id = i.id
GROUP BY i.invoice_no, c.name, i.status ORDER BY i.invoice_no DESC;