|
tests / pest (push) Failing after 7m49s
Details
tests / assets (push) Successful in 21s
Details
tests / release (push) Has been skipped
Details
An invoice is a tax document, so two things drive the shape of this. It is frozen at issue. Everything the finished document says — issuer address, VAT number, bank details, customer address, every line, the rate, the totals — is copied into the invoice row when the number is assigned. The PDF is rendered from that and never stored, which is what was asked for; rendering it from today's settings instead would have been simpler and wrong, because an address changed in 2028 would rewrite an invoice from 2026. The width of this table IS the feature. Numbers are gapless and ascending, which is a legal requirement rather than a preference, and that is why none of it is derived from the invoices table. "Highest number plus one" hands the same number to two sales that land together and hands a used number back out after a row is removed — a number already printed on a document somebody holds. The counter is a column, read and advanced under a row lock inside the caller's transaction, and taking one outside a transaction throws rather than quietly working. Four Rechnungskreise seeded — Rechnung, Gutschrift, Storno, Anzahlung — each with its own prefix and its own counter, because a credit note is not an invoice with a minus sign in front of it. Seeded rather than left to the operator: an installation with no series cannot issue anything, and discovering that at the first sale is the worst possible moment. TCPDF added, for the renderer that comes next. There is deliberately no test for the outside-a-transaction guard, and a note where it would have been: RefreshDatabase opens a transaction around every test, so the guard cannot fire and a green test for it would be green for a reason that has nothing to do with the guard. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| Builders | ||
| Concerns | ||
| Backup.php | ||
| Customer.php | ||
| Datacenter.php | ||
| DnsRecord.php | ||
| Host.php | ||
| Instance.php | ||
| InstanceMetric.php | ||
| InstanceTraffic.php | ||
| Invoice.php | ||
| InvoiceSeries.php | ||
| LoginSession.php | ||
| Mailbox.php | ||
| MaintenanceNotification.php | ||
| MaintenanceWindow.php | ||
| MonitoringTarget.php | ||
| OnboardingTask.php | ||
| Operator.php | ||
| Order.php | ||
| PlanFamily.php | ||
| PlanPrice.php | ||
| PlanVersion.php | ||
| ProvisioningRun.php | ||
| ProvisioningStepEvent.php | ||
| RunResource.php | ||
| Seat.php | ||
| StripePendingEvent.php | ||
| Subscription.php | ||
| SubscriptionAddon.php | ||
| SubscriptionRecord.php | ||
| SupportRequest.php | ||
| User.php | ||
| UserDevice.php | ||
| VpnPeer.php | ||