@dainamite/billing 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +172 -0
- package/README.md +14 -0
- package/dist/modules/billing/acl.js +13 -1
- package/dist/modules/billing/acl.js.map +2 -2
- package/dist/modules/billing/api/accounts/[id]/summary/route.js +52 -0
- package/dist/modules/billing/api/accounts/[id]/summary/route.js.map +7 -0
- package/dist/modules/billing/api/accounts/route.js +46 -4
- package/dist/modules/billing/api/accounts/route.js.map +2 -2
- package/dist/modules/billing/api/export/account/[id]/route.js +16 -12
- package/dist/modules/billing/api/export/account/[id]/route.js.map +2 -2
- package/dist/modules/billing/api/invoices/[id]/memos/route.js +54 -0
- package/dist/modules/billing/api/invoices/[id]/memos/route.js.map +7 -0
- package/dist/modules/billing/api/invoices/[id]/pdf/route.js +69 -0
- package/dist/modules/billing/api/invoices/[id]/pdf/route.js.map +7 -0
- package/dist/modules/billing/api/invoices/[id]/route.js +44 -24
- package/dist/modules/billing/api/invoices/[id]/route.js.map +2 -2
- package/dist/modules/billing/api/invoices/[id]/send/route.js +107 -0
- package/dist/modules/billing/api/invoices/[id]/send/route.js.map +7 -0
- package/dist/modules/billing/api/invoices/add-line/route.js +3 -3
- package/dist/modules/billing/api/invoices/add-line/route.js.map +2 -2
- package/dist/modules/billing/api/invoices/delete-draft/route.js +33 -0
- package/dist/modules/billing/api/invoices/delete-draft/route.js.map +7 -0
- package/dist/modules/billing/api/invoices/edit-line/route.js +3 -3
- package/dist/modules/billing/api/invoices/edit-line/route.js.map +2 -2
- package/dist/modules/billing/api/invoices/post/route.js +2 -2
- package/dist/modules/billing/api/invoices/post/route.js.map +2 -2
- package/dist/modules/billing/api/invoices/remove-line/route.js +3 -3
- package/dist/modules/billing/api/invoices/remove-line/route.js.map +2 -2
- package/dist/modules/billing/api/invoices/route.js +45 -46
- package/dist/modules/billing/api/invoices/route.js.map +2 -2
- package/dist/modules/billing/api/items/bulk/route.js +1 -1
- package/dist/modules/billing/api/items/bulk/route.js.map +2 -2
- package/dist/modules/billing/api/items/change-price/route.js +44 -0
- package/dist/modules/billing/api/items/change-price/route.js.map +7 -0
- package/dist/modules/billing/api/items/route.js +19 -7
- package/dist/modules/billing/api/items/route.js.map +2 -2
- package/dist/modules/billing/api/payment-imports/[id]/route.js +49 -0
- package/dist/modules/billing/api/payment-imports/[id]/route.js.map +7 -0
- package/dist/modules/billing/api/payment-imports/route.js +57 -0
- package/dist/modules/billing/api/payment-imports/route.js.map +7 -0
- package/dist/modules/billing/api/payments/[id]/route.js +60 -0
- package/dist/modules/billing/api/payments/[id]/route.js.map +7 -0
- package/dist/modules/billing/api/payments/allocate/route.js +35 -0
- package/dist/modules/billing/api/payments/allocate/route.js.map +7 -0
- package/dist/modules/billing/api/payments/assign/route.js +36 -0
- package/dist/modules/billing/api/payments/assign/route.js.map +7 -0
- package/dist/modules/billing/api/payments/convert-to-topup/route.js +35 -0
- package/dist/modules/billing/api/payments/convert-to-topup/route.js.map +7 -0
- package/dist/modules/billing/api/payments/ignore/route.js +35 -0
- package/dist/modules/billing/api/payments/ignore/route.js.map +7 -0
- package/dist/modules/billing/api/payments/import/route.js +63 -0
- package/dist/modules/billing/api/payments/import/route.js.map +7 -0
- package/dist/modules/billing/api/payments/restore/route.js +35 -0
- package/dist/modules/billing/api/payments/restore/route.js.map +7 -0
- package/dist/modules/billing/api/payments/route.js +114 -0
- package/dist/modules/billing/api/payments/route.js.map +7 -0
- package/dist/modules/billing/api/payments/unallocate/route.js +35 -0
- package/dist/modules/billing/api/payments/unallocate/route.js.map +7 -0
- package/dist/modules/billing/api/payments/unassign/route.js +35 -0
- package/dist/modules/billing/api/payments/unassign/route.js.map +7 -0
- package/dist/modules/billing/api/run-outcomes/route.js +44 -7
- package/dist/modules/billing/api/run-outcomes/route.js.map +2 -2
- package/dist/modules/billing/api/runs/[id]/post-drafts/route.js +61 -0
- package/dist/modules/billing/api/runs/[id]/post-drafts/route.js.map +7 -0
- package/dist/modules/billing/api/runs/[id]/route.js +53 -0
- package/dist/modules/billing/api/runs/[id]/route.js.map +7 -0
- package/dist/modules/billing/api/runs/retry-failed/route.js +3 -3
- package/dist/modules/billing/api/runs/retry-failed/route.js.map +2 -2
- package/dist/modules/billing/api/runs/route.js +11 -5
- package/dist/modules/billing/api/runs/route.js.map +2 -2
- package/dist/modules/billing/api/settings/number-preview/route.js +42 -0
- package/dist/modules/billing/api/settings/number-preview/route.js.map +7 -0
- package/dist/modules/billing/api/settings/route.js +92 -0
- package/dist/modules/billing/api/settings/route.js.map +7 -0
- package/dist/modules/billing/api/statements/route.js +3 -0
- package/dist/modules/billing/api/statements/route.js.map +2 -2
- package/dist/modules/billing/api/test-invoices/wipe/route.js +2 -2
- package/dist/modules/billing/api/test-invoices/wipe/route.js.map +2 -2
- package/dist/modules/billing/backend/billing/accounts/[id]/page.js +121 -232
- package/dist/modules/billing/backend/billing/accounts/[id]/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/accounts/create/page.js +6 -0
- package/dist/modules/billing/backend/billing/accounts/create/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/accounts/page.js +63 -4
- package/dist/modules/billing/backend/billing/accounts/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/invoices/[id]/page.js +297 -65
- package/dist/modules/billing/backend/billing/invoices/[id]/page.js.map +3 -3
- package/dist/modules/billing/backend/billing/invoices/page.js +6 -172
- package/dist/modules/billing/backend/billing/invoices/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/items/[id]/page.js +51 -7
- package/dist/modules/billing/backend/billing/items/[id]/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/items/create/page.js +9 -6
- package/dist/modules/billing/backend/billing/items/create/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/items/page.js +8 -2
- package/dist/modules/billing/backend/billing/items/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/payments/[id]/page.js +297 -0
- package/dist/modules/billing/backend/billing/payments/[id]/page.js.map +7 -0
- package/dist/modules/billing/backend/billing/payments/[id]/page.meta.js +21 -0
- package/dist/modules/billing/backend/billing/payments/[id]/page.meta.js.map +7 -0
- package/dist/modules/billing/backend/billing/payments/imports/[id]/page.js +74 -0
- package/dist/modules/billing/backend/billing/payments/imports/[id]/page.js.map +7 -0
- package/dist/modules/billing/backend/billing/payments/imports/[id]/page.meta.js +21 -0
- package/dist/modules/billing/backend/billing/payments/imports/[id]/page.meta.js.map +7 -0
- package/dist/modules/billing/backend/billing/payments/page.js +58 -0
- package/dist/modules/billing/backend/billing/payments/page.js.map +7 -0
- package/dist/modules/billing/backend/billing/payments/page.meta.js +18 -0
- package/dist/modules/billing/backend/billing/payments/page.meta.js.map +7 -0
- package/dist/modules/billing/backend/billing/runs/[id]/page.js +49 -14
- package/dist/modules/billing/backend/billing/runs/[id]/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/runs/page.js +58 -7
- package/dist/modules/billing/backend/billing/runs/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/statements/[id]/page.js +61 -6
- package/dist/modules/billing/backend/billing/statements/[id]/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/statements/page.js +1 -1
- package/dist/modules/billing/backend/billing/statements/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/topups/page.js +1 -1
- package/dist/modules/billing/backend/billing/topups/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/transactions/page.js +1 -1
- package/dist/modules/billing/backend/billing/transactions/page.js.map +2 -2
- package/dist/modules/billing/backend/billing/usage/create/page.js +3 -2
- package/dist/modules/billing/backend/billing/usage/create/page.js.map +2 -2
- package/dist/modules/billing/backend/config/billing/page.js +472 -0
- package/dist/modules/billing/backend/config/billing/page.js.map +7 -0
- package/dist/modules/billing/backend/config/billing/page.meta.js +19 -0
- package/dist/modules/billing/backend/config/billing/page.meta.js.map +7 -0
- package/dist/modules/billing/ce.js.map +2 -2
- package/dist/modules/billing/cli.js +22 -1
- package/dist/modules/billing/cli.js.map +2 -2
- package/dist/modules/billing/commands/accounts.js +6 -0
- package/dist/modules/billing/commands/accounts.js.map +2 -2
- package/dist/modules/billing/commands/index.js +3 -0
- package/dist/modules/billing/commands/index.js.map +2 -2
- package/dist/modules/billing/commands/invoices.js +272 -170
- package/dist/modules/billing/commands/invoices.js.map +2 -2
- package/dist/modules/billing/commands/items.js +108 -0
- package/dist/modules/billing/commands/items.js.map +2 -2
- package/dist/modules/billing/commands/memos.js +179 -0
- package/dist/modules/billing/commands/memos.js.map +7 -0
- package/dist/modules/billing/commands/payments.js +379 -0
- package/dist/modules/billing/commands/payments.js.map +7 -0
- package/dist/modules/billing/commands/runs.js +154 -7
- package/dist/modules/billing/commands/runs.js.map +2 -2
- package/dist/modules/billing/commands/settings.js +59 -0
- package/dist/modules/billing/commands/settings.js.map +7 -0
- package/dist/modules/billing/commands/topups.js +9 -2
- package/dist/modules/billing/commands/topups.js.map +2 -2
- package/dist/modules/billing/commands/transactions.js +2 -2
- package/dist/modules/billing/commands/transactions.js.map +2 -2
- package/dist/modules/billing/components/AccountForm.js +149 -42
- package/dist/modules/billing/components/AccountForm.js.map +2 -2
- package/dist/modules/billing/components/AccountInvoicesSection.js +64 -0
- package/dist/modules/billing/components/AccountInvoicesSection.js.map +7 -0
- package/dist/modules/billing/components/AccountPaymentsSection.js +43 -0
- package/dist/modules/billing/components/AccountPaymentsSection.js.map +7 -0
- package/dist/modules/billing/components/AccountPicker.js +56 -0
- package/dist/modules/billing/components/AccountPicker.js.map +7 -0
- package/dist/modules/billing/components/AllocatePaymentDialog.js +134 -0
- package/dist/modules/billing/components/AllocatePaymentDialog.js.map +7 -0
- package/dist/modules/billing/components/BillingDataTable.js +21 -0
- package/dist/modules/billing/components/BillingDataTable.js.map +7 -0
- package/dist/modules/billing/components/BillingSettingsLink.js +19 -0
- package/dist/modules/billing/components/BillingSettingsLink.js.map +7 -0
- package/dist/modules/billing/components/ChangeItemPriceDialog.js +158 -0
- package/dist/modules/billing/components/ChangeItemPriceDialog.js.map +7 -0
- package/dist/modules/billing/components/CreateMemoDialog.js +200 -0
- package/dist/modules/billing/components/CreateMemoDialog.js.map +7 -0
- package/dist/modules/billing/components/CustomerLabel.js +33 -0
- package/dist/modules/billing/components/CustomerLabel.js.map +7 -0
- package/dist/modules/billing/components/InvoicesTable.js +270 -0
- package/dist/modules/billing/components/InvoicesTable.js.map +7 -0
- package/dist/modules/billing/components/ItemForm.js +176 -44
- package/dist/modules/billing/components/ItemForm.js.map +2 -2
- package/dist/modules/billing/components/ItemPriceField.js +46 -0
- package/dist/modules/billing/components/ItemPriceField.js.map +7 -0
- package/dist/modules/billing/components/LineFormDialog.js +25 -2
- package/dist/modules/billing/components/LineFormDialog.js.map +2 -2
- package/dist/modules/billing/components/ManualPaymentDialog.js +122 -0
- package/dist/modules/billing/components/ManualPaymentDialog.js.map +7 -0
- package/dist/modules/billing/components/MoneyInput.js +14 -0
- package/dist/modules/billing/components/MoneyInput.js.map +7 -0
- package/dist/modules/billing/components/PaymentUploadDialog.js +115 -0
- package/dist/modules/billing/components/PaymentUploadDialog.js.map +7 -0
- package/dist/modules/billing/components/PaymentsTable.js +171 -0
- package/dist/modules/billing/components/PaymentsTable.js.map +7 -0
- package/dist/modules/billing/components/PostRunDraftsButton.js +105 -0
- package/dist/modules/billing/components/PostRunDraftsButton.js.map +7 -0
- package/dist/modules/billing/components/PrepaidPanel.js +14 -4
- package/dist/modules/billing/components/PrepaidPanel.js.map +2 -2
- package/dist/modules/billing/components/RunCyclesSection.js +209 -0
- package/dist/modules/billing/components/RunCyclesSection.js.map +7 -0
- package/dist/modules/billing/components/TestRunActions.js +127 -0
- package/dist/modules/billing/components/TestRunActions.js.map +7 -0
- package/dist/modules/billing/components/account/AccountItemsTab.js +157 -0
- package/dist/modules/billing/components/account/AccountItemsTab.js.map +7 -0
- package/dist/modules/billing/components/account/AccountRunBillingDialog.js +122 -0
- package/dist/modules/billing/components/account/AccountRunBillingDialog.js.map +7 -0
- package/dist/modules/billing/components/account/AccountRunsTab.js +152 -0
- package/dist/modules/billing/components/account/AccountRunsTab.js.map +7 -0
- package/dist/modules/billing/components/account/AccountStatementsTab.js +98 -0
- package/dist/modules/billing/components/account/AccountStatementsTab.js.map +7 -0
- package/dist/modules/billing/components/account/AccountSummaryCards.js +125 -0
- package/dist/modules/billing/components/account/AccountSummaryCards.js.map +7 -0
- package/dist/modules/billing/components/account/AccountUsageTab.js +91 -0
- package/dist/modules/billing/components/account/AccountUsageTab.js.map +7 -0
- package/dist/modules/billing/components/account/AccountView.js +73 -0
- package/dist/modules/billing/components/account/AccountView.js.map +7 -0
- package/dist/modules/billing/components/account/accountRow.js +39 -0
- package/dist/modules/billing/components/account/accountRow.js.map +7 -0
- package/dist/modules/billing/components/customerNames.js +42 -0
- package/dist/modules/billing/components/customerNames.js.map +7 -0
- package/dist/modules/billing/data/entities.js +615 -59
- package/dist/modules/billing/data/entities.js.map +2 -2
- package/dist/modules/billing/data/entityIds.js +10 -1
- package/dist/modules/billing/data/entityIds.js.map +2 -2
- package/dist/modules/billing/data/validators.js +269 -15
- package/dist/modules/billing/data/validators.js.map +2 -2
- package/dist/modules/billing/events.js +70 -0
- package/dist/modules/billing/events.js.map +2 -2
- package/dist/modules/billing/i18n/en.json +457 -21
- package/dist/modules/billing/i18n/pl.json +457 -21
- package/dist/modules/billing/index.js +6 -2
- package/dist/modules/billing/index.js.map +2 -2
- package/dist/modules/billing/lib/accountFinancials.js +58 -0
- package/dist/modules/billing/lib/accountFinancials.js.map +7 -0
- package/dist/modules/billing/lib/accountLock.js +14 -0
- package/dist/modules/billing/lib/accountLock.js.map +7 -0
- package/dist/modules/billing/lib/accountStatus.js +9 -7
- package/dist/modules/billing/lib/accountStatus.js.map +2 -2
- package/dist/modules/billing/lib/accountSummary.js +106 -0
- package/dist/modules/billing/lib/accountSummary.js.map +7 -0
- package/dist/modules/billing/lib/allocation.js +356 -0
- package/dist/modules/billing/lib/allocation.js.map +7 -0
- package/dist/modules/billing/lib/allocationEvents.js +22 -0
- package/dist/modules/billing/lib/allocationEvents.js.map +7 -0
- package/dist/modules/billing/lib/billPeriod.js +15 -1
- package/dist/modules/billing/lib/billPeriod.js.map +2 -2
- package/dist/modules/billing/lib/billRunEngine.js +241 -106
- package/dist/modules/billing/lib/billRunEngine.js.map +2 -2
- package/dist/modules/billing/lib/billRunLabel.js.map +1 -1
- package/dist/modules/billing/lib/billingSettings.js +116 -0
- package/dist/modules/billing/lib/billingSettings.js.map +7 -0
- package/dist/modules/billing/lib/commandRoute.js +81 -0
- package/dist/modules/billing/lib/commandRoute.js.map +7 -0
- package/dist/modules/billing/lib/customerLookup.js +97 -0
- package/dist/modules/billing/lib/customerLookup.js.map +7 -0
- package/dist/modules/billing/lib/dateOnly.js +13 -0
- package/dist/modules/billing/lib/dateOnly.js.map +7 -0
- package/dist/modules/billing/lib/documentParties.js +16 -0
- package/dist/modules/billing/lib/documentParties.js.map +7 -0
- package/dist/modules/billing/lib/documentTypes.js +27 -0
- package/dist/modules/billing/lib/documentTypes.js.map +7 -0
- package/dist/modules/billing/lib/dueDate.js +18 -0
- package/dist/modules/billing/lib/dueDate.js.map +7 -0
- package/dist/modules/billing/lib/iban.js +29 -0
- package/dist/modules/billing/lib/iban.js.map +7 -0
- package/dist/modules/billing/lib/invoiceDelivery.js +131 -0
- package/dist/modules/billing/lib/invoiceDelivery.js.map +7 -0
- package/dist/modules/billing/lib/invoiceLanguages.js +16 -0
- package/dist/modules/billing/lib/invoiceLanguages.js.map +7 -0
- package/dist/modules/billing/lib/invoiceWriter.js +107 -99
- package/dist/modules/billing/lib/invoiceWriter.js.map +2 -2
- package/dist/modules/billing/lib/itemBillingState.js +27 -0
- package/dist/modules/billing/lib/itemBillingState.js.map +7 -0
- package/dist/modules/billing/lib/itemPriceChange.js +18 -0
- package/dist/modules/billing/lib/itemPriceChange.js.map +7 -0
- package/dist/modules/billing/lib/itemSelector.js.map +2 -2
- package/dist/modules/billing/lib/lineAmounts.js +32 -0
- package/dist/modules/billing/lib/lineAmounts.js.map +7 -0
- package/dist/modules/billing/lib/memoGuards.js +25 -0
- package/dist/modules/billing/lib/memoGuards.js.map +7 -0
- package/dist/modules/billing/lib/navigation.js +48 -0
- package/dist/modules/billing/lib/navigation.js.map +7 -0
- package/dist/modules/billing/lib/numbering.js +120 -0
- package/dist/modules/billing/lib/numbering.js.map +7 -0
- package/dist/modules/billing/lib/overdue.js +36 -0
- package/dist/modules/billing/lib/overdue.js.map +7 -0
- package/dist/modules/billing/lib/paymentCsv.js +125 -0
- package/dist/modules/billing/lib/paymentCsv.js.map +7 -0
- package/dist/modules/billing/lib/paymentGateway.js +15 -0
- package/dist/modules/billing/lib/paymentGateway.js.map +7 -0
- package/dist/modules/billing/lib/paymentImport.js +164 -0
- package/dist/modules/billing/lib/paymentImport.js.map +7 -0
- package/dist/modules/billing/lib/paymentMatcher.js +36 -0
- package/dist/modules/billing/lib/paymentMatcher.js.map +7 -0
- package/dist/modules/billing/lib/pdf/attachmentStore.js +46 -0
- package/dist/modules/billing/lib/pdf/attachmentStore.js.map +7 -0
- package/dist/modules/billing/lib/pdf/fonts/embeddedFonts.js +7 -0
- package/dist/modules/billing/lib/pdf/fonts/embeddedFonts.js.map +7 -0
- package/dist/modules/billing/lib/pdf/invoiceModel.js +194 -0
- package/dist/modules/billing/lib/pdf/invoiceModel.js.map +7 -0
- package/dist/modules/billing/lib/pdf/invoicePdf.js +165 -0
- package/dist/modules/billing/lib/pdf/invoicePdf.js.map +7 -0
- package/dist/modules/billing/lib/pdf/invoiceTemplate.js +274 -0
- package/dist/modules/billing/lib/pdf/invoiceTemplate.js.map +7 -0
- package/dist/modules/billing/lib/prepaidConfig.js +17 -25
- package/dist/modules/billing/lib/prepaidConfig.js.map +2 -2
- package/dist/modules/billing/lib/prepaidConsume.js +26 -7
- package/dist/modules/billing/lib/prepaidConsume.js.map +2 -2
- package/dist/modules/billing/lib/prepaidPeriodClose.js +277 -158
- package/dist/modules/billing/lib/prepaidPeriodClose.js.map +2 -2
- package/dist/modules/billing/lib/prepaidTaxPoint.js +37 -0
- package/dist/modules/billing/lib/prepaidTaxPoint.js.map +7 -0
- package/dist/modules/billing/lib/seeds/demo.js +51 -3
- package/dist/modules/billing/lib/seeds/demo.js.map +2 -2
- package/dist/modules/billing/lib/seeds/paymentsSample.js +93 -0
- package/dist/modules/billing/lib/seeds/paymentsSample.js.map +7 -0
- package/dist/modules/billing/lib/seeds/sellerSettings.js +41 -0
- package/dist/modules/billing/lib/seeds/sellerSettings.js.map +7 -0
- package/dist/modules/billing/lib/servicePeriods.js +121 -0
- package/dist/modules/billing/lib/servicePeriods.js.map +7 -0
- package/dist/modules/billing/lib/tenantLock.js.map +1 -1
- package/dist/modules/billing/lib/testRunCleanup.js +24 -0
- package/dist/modules/billing/lib/testRunCleanup.js.map +7 -0
- package/dist/modules/billing/lib/topupCapture.js +2 -2
- package/dist/modules/billing/lib/topupCapture.js.map +2 -2
- package/dist/modules/billing/lib/topupReceipt.js +58 -79
- package/dist/modules/billing/lib/topupReceipt.js.map +2 -2
- package/dist/modules/billing/lib/usageRater.js.map +1 -1
- package/dist/modules/billing/lib/usageRunner.js +14 -6
- package/dist/modules/billing/lib/usageRunner.js.map +2 -2
- package/dist/modules/billing/lib/vat.js +39 -0
- package/dist/modules/billing/lib/vat.js.map +7 -0
- package/dist/modules/billing/migrations/Migration20261114000000_billing_customer_kind.js +15 -0
- package/dist/modules/billing/migrations/Migration20261114000000_billing_customer_kind.js.map +7 -0
- package/dist/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.js +25 -0
- package/dist/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.js.map +7 -0
- package/dist/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.js +115 -0
- package/dist/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.js.map +7 -0
- package/dist/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.js +47 -0
- package/dist/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.js.map +7 -0
- package/dist/modules/billing/migrations/Migration20261117000000_billing_payments.js +89 -0
- package/dist/modules/billing/migrations/Migration20261117000000_billing_payments.js.map +7 -0
- package/dist/modules/billing/migrations/Migration20261118000000_billing_memos.js +17 -0
- package/dist/modules/billing/migrations/Migration20261118000000_billing_memos.js.map +7 -0
- package/dist/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.js +27 -0
- package/dist/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.js.map +7 -0
- package/dist/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.js +29 -0
- package/dist/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.js.map +7 -0
- package/dist/modules/billing/setup.js +7 -184
- package/dist/modules/billing/setup.js.map +2 -2
- package/dist/modules/billing/subscribers/credit-memo-auto-send.js +16 -0
- package/dist/modules/billing/subscribers/credit-memo-auto-send.js.map +7 -0
- package/dist/modules/billing/subscribers/debit-memo-apply-credit.js +16 -0
- package/dist/modules/billing/subscribers/debit-memo-apply-credit.js.map +7 -0
- package/dist/modules/billing/subscribers/debit-memo-auto-send.js +16 -0
- package/dist/modules/billing/subscribers/debit-memo-auto-send.js.map +7 -0
- package/dist/modules/billing/subscribers/invoice-apply-credit.js +34 -0
- package/dist/modules/billing/subscribers/invoice-apply-credit.js.map +7 -0
- package/dist/modules/billing/subscribers/invoice-auto-send.js +30 -0
- package/dist/modules/billing/subscribers/invoice-auto-send.js.map +7 -0
- package/dist/modules/billing/subscribers/payment-captured-to-paid.js +69 -33
- package/dist/modules/billing/subscribers/payment-captured-to-paid.js.map +2 -2
- package/dist/modules/billing/subscribers/prepaid-topup-captured.js +4 -6
- package/dist/modules/billing/subscribers/prepaid-topup-captured.js.map +2 -2
- package/dist/modules/billing/workers/reap-stale-bill-runs.js +2 -2
- package/dist/modules/billing/workers/reap-stale-bill-runs.js.map +2 -2
- package/generated/entities/billing_account/index.ts +26 -0
- package/generated/entities/billing_account_balance/index.ts +13 -0
- package/generated/entities/billing_account_transaction/index.ts +21 -0
- package/generated/entities/billing_account_usage/index.ts +18 -0
- package/generated/entities/billing_allocation/index.ts +18 -0
- package/generated/entities/billing_document_sequence/index.ts +11 -0
- package/generated/entities/billing_draft_invoice_edit/index.ts +14 -0
- package/generated/entities/billing_invoice/index.ts +38 -0
- package/generated/entities/billing_invoice_line/index.ts +24 -0
- package/generated/entities/billing_item/index.ts +26 -0
- package/generated/entities/billing_payment/index.ts +25 -0
- package/generated/entities/billing_payment_import/index.ts +14 -0
- package/generated/entities/billing_run/index.ts +20 -0
- package/generated/entities/billing_run_outcome/index.ts +18 -0
- package/generated/entities/billing_settings/index.ts +26 -0
- package/generated/entities/billing_statement/index.ts +22 -0
- package/generated/entities/billing_topup/index.ts +20 -0
- package/generated/entities.ids.generated.ts +35 -0
- package/package.json +15 -10
- package/src/modules/billing/__integration__/TC-BILL-004.spec.ts +170 -0
- package/src/modules/billing/__integration__/TC-BILL-005.spec.ts +134 -0
- package/src/modules/billing/__integration__/TC-BILL-006.spec.ts +101 -0
- package/src/modules/billing/__integration__/TC-BILL-007.spec.ts +140 -0
- package/src/modules/billing/__integration__/TC-BILL-008.spec.ts +108 -0
- package/src/modules/billing/__integration__/TC-BILL-009.spec.ts +113 -0
- package/src/modules/billing/__integration__/TC-BILL-010.spec.ts +118 -0
- package/src/modules/billing/__integration__/TC-BILL-011.spec.ts +142 -0
- package/src/modules/billing/__integration__/TC-BILL-012.spec.ts +115 -0
- package/src/modules/billing/__integration__/TC-BILL-013.spec.ts +118 -0
- package/src/modules/billing/__integration__/sellerSettings.ts +24 -0
- package/src/modules/billing/__tests__/commands/invoices.test.ts +437 -355
- package/src/modules/billing/__tests__/commands/itemsBulk.test.ts +33 -0
- package/src/modules/billing/__tests__/commands/memos.test.ts +205 -0
- package/src/modules/billing/__tests__/commands/payments.test.ts +241 -0
- package/src/modules/billing/__tests__/commands/runsDelete.test.ts +146 -0
- package/src/modules/billing/__tests__/commands/runsPostDrafts.test.ts +106 -0
- package/src/modules/billing/__tests__/commands/topups.test.ts +11 -0
- package/src/modules/billing/__tests__/entityRegistry.test.ts +326 -0
- package/src/modules/billing/__tests__/events.test.ts +142 -0
- package/src/modules/billing/__tests__/helpers/prepaidMockEm.ts +28 -11
- package/src/modules/billing/__tests__/lib/accountFinancials.test.ts +53 -0
- package/src/modules/billing/__tests__/lib/accountSummary.test.ts +97 -0
- package/src/modules/billing/__tests__/lib/allocation.test.ts +319 -0
- package/src/modules/billing/__tests__/lib/billRunEngine.test.ts +231 -20
- package/src/modules/billing/__tests__/lib/billingSettings.test.ts +109 -0
- package/src/modules/billing/__tests__/lib/customerLookup.test.ts +156 -0
- package/src/modules/billing/__tests__/lib/dueDate.test.ts +35 -0
- package/src/modules/billing/__tests__/lib/iban.test.ts +38 -0
- package/src/modules/billing/__tests__/lib/invoiceDelivery.test.ts +189 -0
- package/src/modules/billing/__tests__/lib/invoiceWriter.test.ts +212 -10
- package/src/modules/billing/__tests__/lib/itemBillingState.test.ts +42 -0
- package/src/modules/billing/__tests__/lib/itemPriceChange.test.ts +165 -0
- package/src/modules/billing/__tests__/lib/lineAmounts.test.ts +86 -0
- package/src/modules/billing/__tests__/lib/navigation.test.ts +71 -0
- package/src/modules/billing/__tests__/lib/numbering.test.ts +91 -0
- package/src/modules/billing/__tests__/lib/overdue.test.ts +36 -0
- package/src/modules/billing/__tests__/lib/paymentCsv.test.ts +148 -0
- package/src/modules/billing/__tests__/lib/paymentImport.test.ts +113 -0
- package/src/modules/billing/__tests__/lib/paymentsSample.test.ts +73 -0
- package/src/modules/billing/__tests__/lib/pdf/invoicePdf.test.ts +199 -0
- package/src/modules/billing/__tests__/lib/pdf/invoicePdfService.test.ts +147 -0
- package/src/modules/billing/__tests__/lib/prepaidPeriodClose.test.ts +374 -98
- package/src/modules/billing/__tests__/lib/prepaidTaxPoint.test.ts +118 -0
- package/src/modules/billing/__tests__/lib/seedsDemo.test.ts +53 -2
- package/src/modules/billing/__tests__/lib/sellerSettings.test.ts +28 -0
- package/src/modules/billing/__tests__/lib/servicePeriods.test.ts +190 -0
- package/src/modules/billing/__tests__/lib/topupCapture.test.ts +6 -28
- package/src/modules/billing/__tests__/lib/topupReceipt.test.ts +21 -52
- package/src/modules/billing/__tests__/lib/vat.test.ts +51 -0
- package/src/modules/billing/__tests__/package-isolation.test.ts +22 -8
- package/src/modules/billing/__tests__/setup.test.ts +13 -4
- package/src/modules/billing/__tests__/validators.test.ts +193 -3
- package/src/modules/billing/acl.ts +12 -0
- package/src/modules/billing/api/accounts/[id]/summary/route.ts +62 -0
- package/src/modules/billing/api/accounts/route.ts +58 -4
- package/src/modules/billing/api/export/account/[id]/route.ts +20 -18
- package/src/modules/billing/api/invoices/[id]/memos/route.ts +63 -0
- package/src/modules/billing/api/invoices/[id]/pdf/route.ts +79 -0
- package/src/modules/billing/api/invoices/[id]/route.ts +57 -70
- package/src/modules/billing/api/invoices/[id]/send/route.ts +127 -0
- package/src/modules/billing/api/invoices/add-line/route.ts +3 -3
- package/src/modules/billing/api/invoices/delete-draft/route.ts +33 -0
- package/src/modules/billing/api/invoices/edit-line/route.ts +4 -4
- package/src/modules/billing/api/invoices/post/route.ts +7 -6
- package/src/modules/billing/api/invoices/remove-line/route.ts +3 -3
- package/src/modules/billing/api/invoices/route.ts +81 -86
- package/src/modules/billing/api/items/bulk/route.ts +2 -1
- package/src/modules/billing/api/items/change-price/route.ts +54 -0
- package/src/modules/billing/api/items/route.ts +23 -7
- package/src/modules/billing/api/payment-imports/[id]/route.ts +49 -0
- package/src/modules/billing/api/payment-imports/route.ts +57 -0
- package/src/modules/billing/api/payments/[id]/route.ts +63 -0
- package/src/modules/billing/api/payments/allocate/route.ts +35 -0
- package/src/modules/billing/api/payments/assign/route.ts +36 -0
- package/src/modules/billing/api/payments/convert-to-topup/route.ts +35 -0
- package/src/modules/billing/api/payments/ignore/route.ts +35 -0
- package/src/modules/billing/api/payments/import/route.ts +72 -0
- package/src/modules/billing/api/payments/restore/route.ts +35 -0
- package/src/modules/billing/api/payments/route.ts +147 -0
- package/src/modules/billing/api/payments/unallocate/route.ts +35 -0
- package/src/modules/billing/api/payments/unassign/route.ts +35 -0
- package/src/modules/billing/api/run-outcomes/route.ts +50 -7
- package/src/modules/billing/api/runs/[id]/post-drafts/route.ts +71 -0
- package/src/modules/billing/api/runs/[id]/route.ts +59 -0
- package/src/modules/billing/api/runs/retry-failed/route.ts +4 -3
- package/src/modules/billing/api/runs/route.ts +17 -9
- package/src/modules/billing/api/settings/number-preview/route.ts +46 -0
- package/src/modules/billing/api/settings/route.ts +116 -0
- package/src/modules/billing/api/statements/route.ts +5 -0
- package/src/modules/billing/api/test-invoices/wipe/route.ts +2 -2
- package/src/modules/billing/backend/billing/accounts/[id]/page.tsx +151 -372
- package/src/modules/billing/backend/billing/accounts/create/page.tsx +6 -0
- package/src/modules/billing/backend/billing/accounts/page.tsx +71 -5
- package/src/modules/billing/backend/billing/invoices/[id]/page.tsx +445 -96
- package/src/modules/billing/backend/billing/invoices/page.tsx +8 -227
- package/src/modules/billing/backend/billing/items/[id]/page.tsx +75 -6
- package/src/modules/billing/backend/billing/items/create/page.tsx +13 -8
- package/src/modules/billing/backend/billing/items/page.tsx +19 -3
- package/src/modules/billing/backend/billing/payments/[id]/page.meta.ts +19 -0
- package/src/modules/billing/backend/billing/payments/[id]/page.tsx +415 -0
- package/src/modules/billing/backend/billing/payments/imports/[id]/page.meta.ts +19 -0
- package/src/modules/billing/backend/billing/payments/imports/[id]/page.tsx +106 -0
- package/src/modules/billing/backend/billing/payments/page.meta.ts +16 -0
- package/src/modules/billing/backend/billing/payments/page.tsx +56 -0
- package/src/modules/billing/backend/billing/runs/[id]/page.tsx +50 -19
- package/src/modules/billing/backend/billing/runs/page.tsx +60 -9
- package/src/modules/billing/backend/billing/statements/[id]/page.tsx +87 -6
- package/src/modules/billing/backend/billing/statements/page.tsx +2 -2
- package/src/modules/billing/backend/billing/topups/page.tsx +2 -2
- package/src/modules/billing/backend/billing/transactions/page.tsx +2 -2
- package/src/modules/billing/backend/billing/usage/create/page.tsx +3 -2
- package/src/modules/billing/backend/config/billing/page.meta.ts +21 -0
- package/src/modules/billing/backend/config/billing/page.tsx +549 -0
- package/src/modules/billing/ce.ts +8 -7
- package/src/modules/billing/cli.ts +31 -1
- package/src/modules/billing/commands/accounts.ts +6 -0
- package/src/modules/billing/commands/index.ts +3 -0
- package/src/modules/billing/commands/invoices.ts +371 -238
- package/src/modules/billing/commands/items.ts +143 -0
- package/src/modules/billing/commands/memos.ts +218 -0
- package/src/modules/billing/commands/payments.ts +428 -0
- package/src/modules/billing/commands/runs.ts +208 -6
- package/src/modules/billing/commands/settings.ts +77 -0
- package/src/modules/billing/commands/topups.ts +12 -3
- package/src/modules/billing/commands/transactions.ts +2 -2
- package/src/modules/billing/components/AccountForm.tsx +199 -53
- package/src/modules/billing/components/AccountInvoicesSection.tsx +75 -0
- package/src/modules/billing/components/AccountPaymentsSection.tsx +42 -0
- package/src/modules/billing/components/AccountPicker.tsx +70 -0
- package/src/modules/billing/components/AllocatePaymentDialog.tsx +167 -0
- package/src/modules/billing/components/BillingDataTable.tsx +34 -0
- package/src/modules/billing/components/BillingSettingsLink.tsx +25 -0
- package/src/modules/billing/components/ChangeItemPriceDialog.tsx +180 -0
- package/src/modules/billing/components/CreateMemoDialog.tsx +232 -0
- package/src/modules/billing/components/CustomerLabel.tsx +53 -0
- package/src/modules/billing/components/InvoicesTable.tsx +344 -0
- package/src/modules/billing/components/ItemForm.tsx +233 -44
- package/src/modules/billing/components/ItemPriceField.tsx +81 -0
- package/src/modules/billing/components/LineFormDialog.tsx +25 -1
- package/src/modules/billing/components/ManualPaymentDialog.tsx +140 -0
- package/src/modules/billing/components/MoneyInput.tsx +26 -0
- package/src/modules/billing/components/PaymentUploadDialog.tsx +148 -0
- package/src/modules/billing/components/PaymentsTable.tsx +213 -0
- package/src/modules/billing/components/PostRunDraftsButton.tsx +129 -0
- package/src/modules/billing/components/PrepaidPanel.tsx +20 -7
- package/src/modules/billing/components/RunCyclesSection.tsx +298 -0
- package/src/modules/billing/components/TestRunActions.tsx +152 -0
- package/src/modules/billing/components/account/AccountItemsTab.tsx +192 -0
- package/src/modules/billing/components/account/AccountRunBillingDialog.tsx +147 -0
- package/src/modules/billing/components/account/AccountRunsTab.tsx +201 -0
- package/src/modules/billing/components/account/AccountStatementsTab.tsx +120 -0
- package/src/modules/billing/components/account/AccountSummaryCards.tsx +153 -0
- package/src/modules/billing/components/account/AccountUsageTab.tsx +122 -0
- package/src/modules/billing/components/account/AccountView.tsx +101 -0
- package/src/modules/billing/components/account/accountRow.ts +70 -0
- package/src/modules/billing/components/customerNames.ts +62 -0
- package/src/modules/billing/data/entities.ts +685 -15
- package/src/modules/billing/data/entityIds.ts +25 -11
- package/src/modules/billing/data/validators.ts +388 -8
- package/src/modules/billing/events.ts +82 -3
- package/src/modules/billing/i18n/en.json +457 -21
- package/src/modules/billing/i18n/pl.json +457 -21
- package/src/modules/billing/index.ts +6 -2
- package/src/modules/billing/lib/accountFinancials.ts +84 -0
- package/src/modules/billing/lib/accountLock.ts +32 -0
- package/src/modules/billing/lib/accountStatus.ts +11 -9
- package/src/modules/billing/lib/accountSummary.ts +172 -0
- package/src/modules/billing/lib/allocation.ts +515 -0
- package/src/modules/billing/lib/allocationEvents.ts +26 -0
- package/src/modules/billing/lib/billPeriod.ts +19 -0
- package/src/modules/billing/lib/billRunEngine.ts +362 -162
- package/src/modules/billing/lib/billRunLabel.ts +1 -1
- package/src/modules/billing/lib/billingSettings.ts +145 -0
- package/src/modules/billing/lib/commandRoute.ts +112 -0
- package/src/modules/billing/lib/customerLookup.ts +157 -0
- package/src/modules/billing/lib/dateOnly.ts +22 -0
- package/src/modules/billing/lib/documentParties.ts +23 -0
- package/src/modules/billing/lib/documentTypes.ts +37 -0
- package/src/modules/billing/lib/dueDate.ts +26 -0
- package/src/modules/billing/lib/iban.ts +36 -0
- package/src/modules/billing/lib/invoiceDelivery.ts +197 -0
- package/src/modules/billing/lib/invoiceLanguages.ts +34 -0
- package/src/modules/billing/lib/invoiceWriter.ts +162 -148
- package/src/modules/billing/lib/itemBillingState.ts +67 -0
- package/src/modules/billing/lib/itemPriceChange.ts +56 -0
- package/src/modules/billing/lib/itemSelector.ts +4 -1
- package/src/modules/billing/lib/lineAmounts.ts +61 -0
- package/src/modules/billing/lib/memoGuards.ts +41 -0
- package/src/modules/billing/lib/navigation.ts +64 -0
- package/src/modules/billing/lib/numbering.ts +174 -0
- package/src/modules/billing/lib/overdue.ts +60 -0
- package/src/modules/billing/lib/paymentCsv.ts +171 -0
- package/src/modules/billing/lib/paymentGateway.ts +52 -0
- package/src/modules/billing/lib/paymentImport.ts +228 -0
- package/src/modules/billing/lib/paymentMatcher.ts +88 -0
- package/src/modules/billing/lib/pdf/attachmentStore.ts +60 -0
- package/src/modules/billing/lib/pdf/fonts/NotoSans-Bold.ttf +0 -0
- package/src/modules/billing/lib/pdf/fonts/NotoSans-Regular.ttf +0 -0
- package/src/modules/billing/lib/pdf/fonts/OFL.txt +93 -0
- package/src/modules/billing/lib/pdf/fonts/embeddedFonts.ts +9 -0
- package/src/modules/billing/lib/pdf/invoiceModel.ts +328 -0
- package/src/modules/billing/lib/pdf/invoicePdf.ts +216 -0
- package/src/modules/billing/lib/pdf/invoiceTemplate.ts +338 -0
- package/src/modules/billing/lib/prepaidConfig.ts +27 -36
- package/src/modules/billing/lib/prepaidConsume.ts +29 -6
- package/src/modules/billing/lib/prepaidPeriodClose.ts +410 -242
- package/src/modules/billing/lib/prepaidTaxPoint.ts +76 -0
- package/src/modules/billing/lib/seeds/demo.ts +79 -6
- package/src/modules/billing/lib/seeds/paymentsSample.ts +136 -0
- package/src/modules/billing/lib/seeds/sellerSettings.ts +78 -0
- package/src/modules/billing/lib/servicePeriods.ts +226 -0
- package/src/modules/billing/lib/tenantLock.ts +1 -1
- package/src/modules/billing/lib/testRunCleanup.ts +42 -0
- package/src/modules/billing/lib/topupCapture.ts +3 -4
- package/src/modules/billing/lib/topupReceipt.ts +70 -103
- package/src/modules/billing/lib/usageRater.ts +1 -1
- package/src/modules/billing/lib/usageRunner.ts +17 -5
- package/src/modules/billing/lib/vat.ts +56 -0
- package/src/modules/billing/migrations/Migration20261114000000_billing_customer_kind.ts +25 -0
- package/src/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.ts +37 -0
- package/src/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.ts +132 -0
- package/src/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.ts +58 -0
- package/src/modules/billing/migrations/Migration20261117000000_billing_payments.ts +97 -0
- package/src/modules/billing/migrations/Migration20261118000000_billing_memos.ts +21 -0
- package/src/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.ts +39 -0
- package/src/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.ts +35 -0
- package/src/modules/billing/setup.ts +11 -237
- package/src/modules/billing/subscribers/credit-memo-auto-send.ts +15 -0
- package/src/modules/billing/subscribers/debit-memo-apply-credit.ts +15 -0
- package/src/modules/billing/subscribers/debit-memo-auto-send.ts +15 -0
- package/src/modules/billing/subscribers/invoice-apply-credit.ts +39 -0
- package/src/modules/billing/subscribers/invoice-auto-send.ts +46 -0
- package/src/modules/billing/subscribers/payment-captured-to-paid.ts +84 -62
- package/src/modules/billing/subscribers/prepaid-topup-captured.ts +4 -8
- package/src/modules/billing/workers/reap-stale-bill-runs.ts +4 -4
- package/dist/modules/billing/lib/invoiceStatus.js +0 -38
- package/dist/modules/billing/lib/invoiceStatus.js.map +0 -7
- package/src/modules/billing/__tests__/lib/invoiceStatus.test.ts +0 -97
- package/src/modules/billing/lib/invoiceStatus.ts +0 -61
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/latin-greek-cyrillic)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
https://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// GENERATED by scripts/embed-pdf-fonts.mjs — do not edit.
|
|
2
|
+
// Noto Sans (subset: Latin, Latin-1, Latin Extended-A, punctuation, €).
|
|
3
|
+
// Copyright 2022 The Noto Project Authors. SIL Open Font License 1.1 (OFL.txt).
|
|
4
|
+
|
|
5
|
+
export const NOTO_SANS_REGULAR_BASE64 =
|
|
6
|
+
'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A6IADAJKAAQCNgAAAjwAJgFJAFABdAAKAUkAGQI8ACYBvP/+ARkAKAIxAC4CZwBVAeAANwJnADcCNAA3AVgADwJnADcCagBVAQIATgEC/8kCFgBVAQIAVQOnAFUCagBVAl0ANwJnAFUCZwA3AZ0AVQHfADMBaQAQAmoATwH8AAADEgALAhEAEgH+AAEB1gAnAXwAHAInAO8BfAAgAjwAMgEEAAABDQBIAjwAWwI8ACACPAA7AjwADgInAO8CAQA7AkQAlQNAADEBZQAgAf0AKAI8ADIBQgAoA0AAMQH0//0BrAA3AjwAMgFeABgBXgARARkAKAJvAFUCjwA3AQwASADhAA4BXgAlAXgAIAH9ACcC6QAiAwMAFgMNAA8BsgAYAn8AAAJ/AAACfwAAAn8AAAJ/AAACfwAAA3H//wJ4AD0CLABhAiwAYQIsAGECLABhAVMAKAFTACgBUwABAVMAHgLaAB4C+ABhAw0APQMNAD0DDQA9Aw0APQMNAD0CPABAAw0APQLbAFoC2wBaAtsAWgLbAFoCNgAAAl0AYQJ3AFUCMQAuAjEALgIxAC4CMQAuAjEALgIxAC4DYAAuAeAANwI0ADcCNAA3AjQANwI0ADcBAv//AQIATAEC/9gBAv/1Al0ANwJqAFUCXQA3Al0ANwJdADcCXQA3Al0ANwI8ADICXQA3AmoATwJqAE8CagBPAmoATwH+AAECZwBVAf4AAQJ/AAACMQAuAn8AAAIxAC4CfwAAAjEALgJ4AD0B4AA3AngAPQHgADcCeAA9AeAANwJ4AD0B4AA3AtoAYQJnADcC2gAeAmkANwIsAGECNAA3AiwAYQI0ADcCLABhAjQANwIsAGECNAA3AiwAYQI0ADcC2AA9AmcANwLYAD0CZwA3AtgAPQJnADcC2AA9AmcANwLlAGECav/ZAuUAAAJqAAkBU//zAQL/ygFTABUBAv/sAVMADgEC/+UBUwAoAQIAGwFTACgCZAAoAgQATgER/7IBAv/JAmsAYQIWAFUCFgBVAgwAVwECAEwCDABhAQIAQQIMAGEBAgBVAgwAYQEMAFUCDAANAQL/9wL4AGECagBVAvgAYQJqAFUC+ABhAmoAVQKwAAEC+ABhAmoAVQMNAD0CXQA3Aw0APQJdADcDDQA9Al0ANwOgAD0DsgA2Am4AYQGdAFUCbgBhAZ0APgJuAGEBnQBH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AAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAA/+wAAAAAAAD/9gAAAAD/4v/sAAD/7AAAAAAAAAAAAAAAAP+wAAAAAAAAAAAAAAAAAAAAAP/s//b/9v/s/9gAAAAAAAAAAAAAAAAAAP/O//b/9gAAAAAAAAAAAAAAAAAAAAD/4v/2AAAAAP/EAAD/4v/Y/7oAAAAAAAAACgAUAAAAFAAA/+L/4gAAAAAAAAAAAAAAAP+wAAAAAAAAAAAAAP+6/+z/zv+w/7oAAP/sAAAAAAAAAAAAFP/E/7r/xAAAAAD/2AAA/9gAAAAAAAD/xP/iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAA//YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAA/84AAAAAAAD/7AAAAAD/xP/EAAD/ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAP/sAAAAAAAAAAAAAAAAAAAAAP9g//YAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/84AAAAAAAAAAAAAAAAAAP9+AAAAAAAA//YAAAAAAAAAAP/iAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAWgAAAAAAAAAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAA8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4v/2AAD/4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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'
|
|
7
|
+
|
|
8
|
+
export const NOTO_SANS_BOLD_BASE64 =
|
|
9
|
+
'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AnIAAAJDABgBSwBGAZ8ABgFLABkCPAAXAZv//gFtACgCVwAoAngASQIEAC8CeAAvAlUALwGDABQCeAAvAooASQErAEQBKv/LAmwATgEqAEkDzwBJAooASQJxAC8CeABJAngALwG/AEkB9gAuAbIAFwKKAEYCOwAAA1gACgJCAAUCOwAAAe0AHgGKAA8CJwDeAYoAKAI8ACsBBAAAAR4AOQI8AEYCPAAoAjgANAI8AAMCJwDeAeYANAJRAH0DQAAxAX0AGwJmACYCPAArAUAAHANAADEB9P/9AagAKAI8ACsBewAXAXwAGgFtACgCjQBJAogANAEZADYBBwATAXwAIAGCABsCZgAmAz4AFgNqABYDTQAsAd0AFAK0AAACtAAAArQAAAK0AAACtAAAArQAAAO4AAACggA3AjAAWgIwAFoCMABaAjAAWgGFAAsBhQAgAYX/9gGFABAC3AAVAyUAWgMXADcDFwA3AxcANwMXADcDFwA3AjwAPwMXADcC9ABVAvQAVQL0AFUC9ABVAnIAAAJ0AFoCwABJAlcAKAJXACgCVwAoAlcAKAJXACgCVwAoA5UAKgIEAC8CVQAvAlUALwJVAC8CVQAvASv//AErAEUBK//NASv/5QJzADACigBJAnEALwJxAC8CcQAvAnEALwJxAC8CPAArAmsALQKKAEYCigBGAooARgKKAEYCOwAAAngASQI7AAACtAAAAlcAKAK0AAACVwAoArQAAAJXACgCggA3AgQALwKCADcCBAAvAoIANwIEAC8CggA3AgQALwLcAFUCeAAvAtwAFQKFAC8CMABaAlUALwIwAFoCVQAvAjAAWgJVAC8CMABaAk8ALwIwAFoCVQAvAtQAOgJ4AC8C1AA6AngALwLUADoCeAAvAtQAOgJ4AC8C/QBaAor/zgL+AAACkQACAYX/3gEr/9EBhQAcASv/8AGFAAsBK//gAYUAIAErACkBhQAgAtIAIAJiAEQBS/+2ASr/ywKUAFoCbABOAmwATgIvAE0BKgBEAi8AVQEqAEECLwBVASoASQIvAFUBcQBJAjUAAQEx//QDJQBaAooASQMlAFoCigBJAyUAWgKKAEkDB//9Ay0AWgKKAEkDFwA3AnEALwMXADcCcQAvAxcANwJxAC8DzQA6A9IALQKQAFUBvwBJApAAVQG/AEECkABVAb8ALgInAC4B9gAu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AAAAAAAAADIAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAP/sAAAAAAAA//YAAAAA/+L/7AAA/+wAAAAAAAAAAAAAAAD/sAAAAAAAAAAAAAAAAAAAAAD/7P/2//b/7P/YAAAAAAAAAAAAAAAAAAD/zv/2//YAAAAAAAAAAAAAAAAAAAAA/+L/9gAAAAD/xAAA/+L/2P+6AAAAAAAAAAoAFAAAABQAAP/i/+IAAAAAAAAAAAAAAAD/sAAAAAAAAAAAAAD/uv/s/87/sP+6AAD/7AAAAAAAAAAAABT/xP+6/8QAAAAA/9gAAP/YAAAAAAAA/8T/4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAP/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAP/OAAAAAAAA/+wAAAAA/8T/xAAA/7oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAD/7AAAAAAAAAAAAAAAAAAAAAD/YP/2AAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/OAAAAAAAAAAAAAAAAAAD/fgAAAAAAAP/2AAAAAAAAAAD/4gAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAJEAAAAAAAAAAABdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAPAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+L/9gAA/+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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'
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Invoice document model (Spec B) — pure.
|
|
3
|
+
*
|
|
4
|
+
* Turns a billing document + its lines + the frozen seller / buyer blocks
|
|
5
|
+
* into the exact strings the PDF prints, in the document language. The
|
|
6
|
+
* renderer (`invoiceTemplate.ts`) only lays this model out, so everything a
|
|
7
|
+
* reader can check (labels, formatting, VAT summary, payment title) is
|
|
8
|
+
* asserted here without parsing a PDF. Same shape as core forms'
|
|
9
|
+
* "build model, then lay out with pdf-lib" snapshot pipeline.
|
|
10
|
+
*
|
|
11
|
+
* Credit / debit memos (Spec D) reuse it: only the title changes and a
|
|
12
|
+
* "corrects" row is added to the header.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export type DocumentTranslate = (key: string, fallback: string) => string
|
|
16
|
+
|
|
17
|
+
export type PdfAddress = {
|
|
18
|
+
line1?: string | null
|
|
19
|
+
line2?: string | null
|
|
20
|
+
city?: string | null
|
|
21
|
+
postal_code?: string | null
|
|
22
|
+
country?: string | null
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type PdfSeller = {
|
|
26
|
+
legalName: string | null
|
|
27
|
+
address: PdfAddress | null
|
|
28
|
+
taxId: string | null
|
|
29
|
+
bankName: string | null
|
|
30
|
+
iban: string | null
|
|
31
|
+
bic: string | null
|
|
32
|
+
footer: string | null
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export type PdfBuyer = {
|
|
36
|
+
name: string
|
|
37
|
+
address: PdfAddress | null
|
|
38
|
+
taxId: string | null
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type PdfInvoice = {
|
|
42
|
+
number: string
|
|
43
|
+
documentType: 'invoice' | 'credit_memo' | 'debit_memo' | 'receipt'
|
|
44
|
+
status: string
|
|
45
|
+
testRun: boolean
|
|
46
|
+
issueDate: Date | string | null
|
|
47
|
+
dueDate: Date | string | null
|
|
48
|
+
billDate: Date | string | null
|
|
49
|
+
periodStart: Date | string | null
|
|
50
|
+
periodEnd: Date | string | null
|
|
51
|
+
currencyCode: string
|
|
52
|
+
subtotalNet: string
|
|
53
|
+
taxTotal: string
|
|
54
|
+
totalGross: string
|
|
55
|
+
correctsNumber?: string | null
|
|
56
|
+
/** Spec D: issue date of the corrected document and the correction reason. */
|
|
57
|
+
correctsIssueDate?: Date | string | null
|
|
58
|
+
correctionReason?: string | null
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export type PdfLine = {
|
|
62
|
+
description: string
|
|
63
|
+
quantity: string
|
|
64
|
+
unitPriceNet: string
|
|
65
|
+
taxRate: string
|
|
66
|
+
netAmount: string
|
|
67
|
+
taxAmount: string
|
|
68
|
+
grossAmount: string
|
|
69
|
+
servicePeriodStart: Date | string | null
|
|
70
|
+
servicePeriodEnd: Date | string | null
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export type InvoiceDocumentModel = {
|
|
74
|
+
language: string
|
|
75
|
+
title: string
|
|
76
|
+
number: string
|
|
77
|
+
watermark: string | null
|
|
78
|
+
meta: Array<[string, string]>
|
|
79
|
+
seller: { heading: string; lines: string[] }
|
|
80
|
+
buyer: { heading: string; lines: string[] }
|
|
81
|
+
table: {
|
|
82
|
+
headers: string[]
|
|
83
|
+
/** Column alignment: description left, numbers right. */
|
|
84
|
+
align: Array<'left' | 'right'>
|
|
85
|
+
rows: string[][]
|
|
86
|
+
}
|
|
87
|
+
vatSummary: { heading: string; headers: string[]; rows: string[][] }
|
|
88
|
+
totals: Array<[string, string]>
|
|
89
|
+
payment: { heading: string; lines: string[] } | null
|
|
90
|
+
footer: string[]
|
|
91
|
+
pageLabel: (page: number, pages: number) => string
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const LOCALE_BY_LANGUAGE: Record<string, string> = { en: 'en-GB', pl: 'pl-PL' }
|
|
95
|
+
|
|
96
|
+
export function documentLocale(language: string): string {
|
|
97
|
+
return LOCALE_BY_LANGUAGE[language] ?? 'en-GB'
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function toDate(value: Date | string | null | undefined): Date | null {
|
|
101
|
+
if (!value) return null
|
|
102
|
+
const date = typeof value === 'string' ? new Date(value.length === 10 ? `${value}T00:00:00Z` : value) : value
|
|
103
|
+
return Number.isNaN(date.getTime()) ? null : date
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function formatDocumentDate(value: Date | string | null | undefined, locale: string): string {
|
|
107
|
+
const date = toDate(value)
|
|
108
|
+
if (!date) return '—'
|
|
109
|
+
return new Intl.DateTimeFormat(locale, { year: 'numeric', month: '2-digit', day: '2-digit', timeZone: 'UTC' }).format(
|
|
110
|
+
date,
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function formatDocumentMoney(value: string | number, currency: string, locale: string): string {
|
|
115
|
+
const n = typeof value === 'number' ? value : Number.parseFloat(value)
|
|
116
|
+
const safe = Number.isFinite(n) ? n : 0
|
|
117
|
+
try {
|
|
118
|
+
return new Intl.NumberFormat(locale, { style: 'currency', currency, minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(safe)
|
|
119
|
+
} catch {
|
|
120
|
+
return `${safe.toFixed(2)} ${currency}`
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function formatNumber(value: string | number, locale: string, maxFraction = 4): string {
|
|
125
|
+
const n = typeof value === 'number' ? value : Number.parseFloat(value)
|
|
126
|
+
return new Intl.NumberFormat(locale, { minimumFractionDigits: 0, maximumFractionDigits: maxFraction }).format(
|
|
127
|
+
Number.isFinite(n) ? n : 0,
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function formatPercent(rate: string | number, locale: string): string {
|
|
132
|
+
return `${formatNumber(rate, locale, 2)} %`
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Normalizes Intl's narrow / regular no-break spaces to plain ones (safe for any embedded font). */
|
|
136
|
+
function plain(text: string): string {
|
|
137
|
+
return text.replace(/[ ]/g, ' ')
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function addressLines(address: PdfAddress | null | undefined): string[] {
|
|
141
|
+
if (!address) return []
|
|
142
|
+
const cityLine = [address.postal_code, address.city].filter(Boolean).join(' ')
|
|
143
|
+
return [address.line1, address.line2, cityLine, address.country].filter(
|
|
144
|
+
(part): part is string => typeof part === 'string' && part.trim() !== '',
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function titleFor(doc: PdfInvoice, t: DocumentTranslate): string {
|
|
149
|
+
switch (doc.documentType) {
|
|
150
|
+
case 'credit_memo':
|
|
151
|
+
return t('billing.pdf.title.credit_memo', 'Credit memo')
|
|
152
|
+
case 'debit_memo':
|
|
153
|
+
return t('billing.pdf.title.debit_memo', 'Debit memo')
|
|
154
|
+
case 'receipt':
|
|
155
|
+
return t('billing.pdf.title.receipt', 'Receipt')
|
|
156
|
+
default:
|
|
157
|
+
return t('billing.pdf.title.invoice', 'VAT invoice')
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function buildInvoiceDocumentModel(params: {
|
|
162
|
+
invoice: PdfInvoice
|
|
163
|
+
lines: PdfLine[]
|
|
164
|
+
seller: PdfSeller
|
|
165
|
+
buyer: PdfBuyer
|
|
166
|
+
language: string
|
|
167
|
+
translate: DocumentTranslate
|
|
168
|
+
}): InvoiceDocumentModel {
|
|
169
|
+
const { invoice, lines, seller, buyer, translate: t } = params
|
|
170
|
+
const locale = documentLocale(params.language)
|
|
171
|
+
const money = (value: string | number) => plain(formatDocumentMoney(value, invoice.currencyCode, locale))
|
|
172
|
+
const date = (value: Date | string | null | undefined) => plain(formatDocumentDate(value, locale))
|
|
173
|
+
const isDraft = invoice.status === 'draft'
|
|
174
|
+
|
|
175
|
+
const meta: Array<[string, string]> = [
|
|
176
|
+
[t('billing.pdf.meta.number', 'Number'), invoice.number],
|
|
177
|
+
[t('billing.pdf.meta.issue_date', 'Issue date'), isDraft ? '—' : date(invoice.issueDate)],
|
|
178
|
+
]
|
|
179
|
+
if (invoice.documentType !== 'receipt') {
|
|
180
|
+
meta.push([t('billing.pdf.meta.due_date', 'Due date'), isDraft ? '—' : date(invoice.dueDate)])
|
|
181
|
+
}
|
|
182
|
+
if (invoice.periodStart && invoice.periodEnd) {
|
|
183
|
+
meta.push([
|
|
184
|
+
t('billing.pdf.meta.service_period', 'Service period'),
|
|
185
|
+
`${date(invoice.periodStart)} – ${date(invoice.periodEnd)}`,
|
|
186
|
+
])
|
|
187
|
+
}
|
|
188
|
+
if (invoice.correctsNumber) {
|
|
189
|
+
meta.push([
|
|
190
|
+
t('billing.pdf.meta.corrects', 'Corrects'),
|
|
191
|
+
invoice.correctsIssueDate
|
|
192
|
+
? `${invoice.correctsNumber} ${t('billing.pdf.meta.of', 'of')} ${date(invoice.correctsIssueDate)}`
|
|
193
|
+
: invoice.correctsNumber,
|
|
194
|
+
])
|
|
195
|
+
}
|
|
196
|
+
if (invoice.correctionReason) {
|
|
197
|
+
meta.push([t('billing.pdf.meta.reason', 'Reason'), invoice.correctionReason])
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const sellerLines = [
|
|
201
|
+
seller.legalName ?? '',
|
|
202
|
+
...addressLines(seller.address),
|
|
203
|
+
seller.taxId ? `${t('billing.pdf.tax_id', 'Tax ID')}: ${seller.taxId}` : '',
|
|
204
|
+
].filter((line) => line !== '')
|
|
205
|
+
const buyerLines = [
|
|
206
|
+
buyer.name,
|
|
207
|
+
...addressLines(buyer.address),
|
|
208
|
+
buyer.taxId ? `${t('billing.pdf.tax_id', 'Tax ID')}: ${buyer.taxId}` : '',
|
|
209
|
+
].filter((line) => line !== '')
|
|
210
|
+
|
|
211
|
+
const rows = lines.map((line, index) => {
|
|
212
|
+
const start = line.servicePeriodStart
|
|
213
|
+
const end = line.servicePeriodEnd
|
|
214
|
+
const description =
|
|
215
|
+
start && end && !line.description.includes(' – ')
|
|
216
|
+
? `${line.description} (${date(start)} – ${date(end)})`
|
|
217
|
+
: line.description
|
|
218
|
+
return [
|
|
219
|
+
String(index + 1),
|
|
220
|
+
description,
|
|
221
|
+
plain(formatNumber(line.quantity, locale)),
|
|
222
|
+
money(line.unitPriceNet),
|
|
223
|
+
plain(formatPercent(line.taxRate, locale)),
|
|
224
|
+
money(line.netAmount),
|
|
225
|
+
money(line.taxAmount),
|
|
226
|
+
money(line.grossAmount),
|
|
227
|
+
]
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
// VAT summary: sums of the (already rounded) line amounts per rate, so the
|
|
231
|
+
// summary always adds up to the document totals (B-D2).
|
|
232
|
+
const byRate = new Map<number, { net: number; tax: number; gross: number }>()
|
|
233
|
+
for (const line of lines) {
|
|
234
|
+
const rate = Number.parseFloat(line.taxRate) || 0
|
|
235
|
+
const bucket = byRate.get(rate) ?? { net: 0, tax: 0, gross: 0 }
|
|
236
|
+
bucket.net += Number.parseFloat(line.netAmount) || 0
|
|
237
|
+
bucket.tax += Number.parseFloat(line.taxAmount) || 0
|
|
238
|
+
bucket.gross += Number.parseFloat(line.grossAmount) || 0
|
|
239
|
+
byRate.set(rate, bucket)
|
|
240
|
+
}
|
|
241
|
+
const vatRows = [...byRate.entries()]
|
|
242
|
+
.sort(([a], [b]) => b - a)
|
|
243
|
+
.map(([rate, sums]) => [plain(formatPercent(rate, locale)), money(sums.net), money(sums.tax), money(sums.gross)])
|
|
244
|
+
|
|
245
|
+
const isCredit = invoice.documentType === 'credit_memo'
|
|
246
|
+
const totals: Array<[string, string]> = [
|
|
247
|
+
[t('billing.pdf.totals.net', 'Total net'), money(invoice.subtotalNet)],
|
|
248
|
+
[t('billing.pdf.totals.tax', 'Total VAT'), money(invoice.taxTotal)],
|
|
249
|
+
isCredit
|
|
250
|
+
? [t('billing.pdf.totals.credited', 'Total credited'), money(invoice.totalGross)]
|
|
251
|
+
: [t('billing.pdf.totals.gross', 'Total due'), money(invoice.totalGross)],
|
|
252
|
+
]
|
|
253
|
+
|
|
254
|
+
const payable = invoice.documentType === 'invoice' || invoice.documentType === 'debit_memo'
|
|
255
|
+
const payment =
|
|
256
|
+
payable && seller.iban
|
|
257
|
+
? {
|
|
258
|
+
heading: t('billing.pdf.payment.heading', 'Payment'),
|
|
259
|
+
lines: [
|
|
260
|
+
`${t('billing.pdf.payment.amount', 'Amount')}: ${money(invoice.totalGross)}`,
|
|
261
|
+
`${t('billing.pdf.payment.due', 'Due by')}: ${isDraft ? '—' : date(invoice.dueDate)}`,
|
|
262
|
+
seller.bankName ? `${t('billing.pdf.payment.bank', 'Bank')}: ${seller.bankName}` : '',
|
|
263
|
+
`IBAN: ${seller.iban.replace(/(.{4})/g, '$1 ').trim()}`,
|
|
264
|
+
seller.bic ? `BIC: ${seller.bic}` : '',
|
|
265
|
+
// Spec C's matcher finds the invoice number in the transfer title.
|
|
266
|
+
`${t('billing.pdf.payment.title', 'Transfer title')}: ${invoice.number}`,
|
|
267
|
+
].filter((line) => line !== ''),
|
|
268
|
+
}
|
|
269
|
+
: isCredit
|
|
270
|
+
? {
|
|
271
|
+
// A credit memo is not paid: it settles the corrected invoice and
|
|
272
|
+
// any remainder stays as credit on the customer's account (D-D10).
|
|
273
|
+
heading: t('billing.pdf.memo.settlement', 'Settlement'),
|
|
274
|
+
lines: [
|
|
275
|
+
`${t('billing.pdf.memo.amount_credited', 'Amount credited')}: ${money(invoice.totalGross)}`,
|
|
276
|
+
invoice.correctsNumber
|
|
277
|
+
? t('billing.pdf.memo.settled_against', 'Settled against invoice {number}; any remainder is credited to your account.').replace(
|
|
278
|
+
'{number}',
|
|
279
|
+
invoice.correctsNumber,
|
|
280
|
+
)
|
|
281
|
+
: t('billing.pdf.memo.credited_to_account', 'The amount is credited to your account.'),
|
|
282
|
+
],
|
|
283
|
+
}
|
|
284
|
+
: null
|
|
285
|
+
|
|
286
|
+
return {
|
|
287
|
+
language: params.language,
|
|
288
|
+
title: titleFor(invoice, t),
|
|
289
|
+
number: invoice.number,
|
|
290
|
+
watermark: invoice.testRun
|
|
291
|
+
? t('billing.pdf.watermark.test', 'TEST')
|
|
292
|
+
: isDraft
|
|
293
|
+
? t('billing.pdf.watermark.draft', 'DRAFT')
|
|
294
|
+
: null,
|
|
295
|
+
meta,
|
|
296
|
+
seller: { heading: t('billing.pdf.seller', 'Seller'), lines: sellerLines },
|
|
297
|
+
buyer: { heading: t('billing.pdf.buyer', 'Buyer'), lines: buyerLines },
|
|
298
|
+
table: {
|
|
299
|
+
headers: [
|
|
300
|
+
'#',
|
|
301
|
+
t('billing.pdf.columns.description', 'Description'),
|
|
302
|
+
t('billing.pdf.columns.quantity', 'Qty'),
|
|
303
|
+
t('billing.pdf.columns.unit_net', 'Unit net'),
|
|
304
|
+
t('billing.pdf.columns.tax_rate', 'VAT %'),
|
|
305
|
+
t('billing.pdf.columns.net', 'Net'),
|
|
306
|
+
t('billing.pdf.columns.tax', 'VAT'),
|
|
307
|
+
t('billing.pdf.columns.gross', 'Gross'),
|
|
308
|
+
],
|
|
309
|
+
align: ['right', 'left', 'right', 'right', 'right', 'right', 'right', 'right'],
|
|
310
|
+
rows,
|
|
311
|
+
},
|
|
312
|
+
vatSummary: {
|
|
313
|
+
heading: t('billing.pdf.vat_summary', 'VAT summary'),
|
|
314
|
+
headers: [
|
|
315
|
+
t('billing.pdf.columns.tax_rate', 'VAT %'),
|
|
316
|
+
t('billing.pdf.columns.net', 'Net'),
|
|
317
|
+
t('billing.pdf.columns.tax', 'VAT'),
|
|
318
|
+
t('billing.pdf.columns.gross', 'Gross'),
|
|
319
|
+
],
|
|
320
|
+
rows: vatRows,
|
|
321
|
+
},
|
|
322
|
+
totals,
|
|
323
|
+
payment,
|
|
324
|
+
footer: (seller.footer ?? '').split(/\r?\n/).map((line) => line.trim()).filter(Boolean),
|
|
325
|
+
pageLabel: (page, pages) =>
|
|
326
|
+
t('billing.pdf.page', 'Page {page} of {pages}').replace('{page}', String(page)).replace('{pages}', String(pages)),
|
|
327
|
+
}
|
|
328
|
+
}
|