@endora-commerce/mod-invoices 0.105.0 → 0.107.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.
Files changed (144) hide show
  1. package/README.md +7 -8
  2. package/dist/admin/components/InvoiceSectionTabs.d.ts +8 -0
  3. package/dist/admin/components/InvoiceSectionTabs.d.ts.map +1 -1
  4. package/dist/admin/components/InvoiceSectionTabs.js +13 -2
  5. package/dist/admin/components/InvoiceSectionTabs.js.map +1 -1
  6. package/dist/admin/document-blocks/InvoiceDivider.d.ts +5 -0
  7. package/dist/admin/document-blocks/InvoiceDivider.d.ts.map +1 -0
  8. package/dist/admin/document-blocks/InvoiceDivider.js +5 -0
  9. package/dist/admin/document-blocks/InvoiceDivider.js.map +1 -0
  10. package/dist/admin/document-blocks/InvoiceFooter.d.ts +5 -0
  11. package/dist/admin/document-blocks/InvoiceFooter.d.ts.map +1 -0
  12. package/dist/admin/document-blocks/InvoiceFooter.js +5 -0
  13. package/dist/admin/document-blocks/InvoiceFooter.js.map +1 -0
  14. package/dist/admin/document-blocks/InvoiceHeader.d.ts +5 -0
  15. package/dist/admin/document-blocks/InvoiceHeader.d.ts.map +1 -0
  16. package/dist/admin/document-blocks/InvoiceHeader.js +5 -0
  17. package/dist/admin/document-blocks/InvoiceHeader.js.map +1 -0
  18. package/dist/admin/document-blocks/InvoiceLineItems.d.ts +5 -0
  19. package/dist/admin/document-blocks/InvoiceLineItems.d.ts.map +1 -0
  20. package/dist/admin/document-blocks/InvoiceLineItems.js +5 -0
  21. package/dist/admin/document-blocks/InvoiceLineItems.js.map +1 -0
  22. package/dist/admin/document-blocks/InvoiceLogo.d.ts +5 -0
  23. package/dist/admin/document-blocks/InvoiceLogo.d.ts.map +1 -0
  24. package/dist/admin/document-blocks/InvoiceLogo.js +5 -0
  25. package/dist/admin/document-blocks/InvoiceLogo.js.map +1 -0
  26. package/dist/admin/document-blocks/InvoiceNotes.d.ts +5 -0
  27. package/dist/admin/document-blocks/InvoiceNotes.d.ts.map +1 -0
  28. package/dist/admin/document-blocks/InvoiceNotes.js +5 -0
  29. package/dist/admin/document-blocks/InvoiceNotes.js.map +1 -0
  30. package/dist/admin/document-blocks/InvoiceParties.d.ts +5 -0
  31. package/dist/admin/document-blocks/InvoiceParties.d.ts.map +1 -0
  32. package/dist/admin/document-blocks/InvoiceParties.js +5 -0
  33. package/dist/admin/document-blocks/InvoiceParties.js.map +1 -0
  34. package/dist/admin/document-blocks/InvoiceSpacer.d.ts +5 -0
  35. package/dist/admin/document-blocks/InvoiceSpacer.d.ts.map +1 -0
  36. package/dist/admin/document-blocks/InvoiceSpacer.js +5 -0
  37. package/dist/admin/document-blocks/InvoiceSpacer.js.map +1 -0
  38. package/dist/admin/document-blocks/InvoiceTotals.d.ts +5 -0
  39. package/dist/admin/document-blocks/InvoiceTotals.d.ts.map +1 -0
  40. package/dist/admin/document-blocks/InvoiceTotals.js +5 -0
  41. package/dist/admin/document-blocks/InvoiceTotals.js.map +1 -0
  42. package/dist/admin/document-blocks/InvoiceVatSummary.d.ts +5 -0
  43. package/dist/admin/document-blocks/InvoiceVatSummary.d.ts.map +1 -0
  44. package/dist/admin/document-blocks/InvoiceVatSummary.js +5 -0
  45. package/dist/admin/document-blocks/InvoiceVatSummary.js.map +1 -0
  46. package/dist/admin/index.d.ts +3 -1
  47. package/dist/admin/index.d.ts.map +1 -1
  48. package/dist/admin/index.js +62 -2
  49. package/dist/admin/index.js.map +1 -1
  50. package/dist/admin/pages/InvoiceTemplatesRedirect.d.ts +10 -0
  51. package/dist/admin/pages/InvoiceTemplatesRedirect.d.ts.map +1 -0
  52. package/dist/admin/pages/InvoiceTemplatesRedirect.js +14 -0
  53. package/dist/admin/pages/InvoiceTemplatesRedirect.js.map +1 -0
  54. package/dist/admin/templates/invoice-puck-config.d.ts +7 -21
  55. package/dist/admin/templates/invoice-puck-config.d.ts.map +1 -1
  56. package/dist/admin/templates/invoice-puck-config.js +7 -26
  57. package/dist/admin/templates/invoice-puck-config.js.map +1 -1
  58. package/dist/backend/document/block-descriptions.d.ts +22 -0
  59. package/dist/backend/document/block-descriptions.d.ts.map +1 -0
  60. package/dist/backend/{pdf-components/descriptor.js → document/block-descriptions.js} +8 -24
  61. package/dist/backend/document/block-descriptions.js.map +1 -0
  62. package/dist/backend/document/document-templates-grant.d.ts +29 -0
  63. package/dist/backend/document/document-templates-grant.d.ts.map +1 -0
  64. package/dist/backend/document/document-templates-grant.js +45 -0
  65. package/dist/backend/document/document-templates-grant.js.map +1 -0
  66. package/dist/backend/document/invoice-document-type.d.ts +38 -0
  67. package/dist/backend/document/invoice-document-type.d.ts.map +1 -0
  68. package/dist/backend/document/invoice-document-type.js +108 -0
  69. package/dist/backend/document/invoice-document-type.js.map +1 -0
  70. package/dist/backend/document/render-invoice.d.ts +14 -0
  71. package/dist/backend/document/render-invoice.d.ts.map +1 -0
  72. package/dist/backend/document/render-invoice.js +24 -0
  73. package/dist/backend/document/render-invoice.js.map +1 -0
  74. package/dist/backend/index.d.ts +1 -3
  75. package/dist/backend/index.d.ts.map +1 -1
  76. package/dist/backend/index.js +48 -6
  77. package/dist/backend/index.js.map +1 -1
  78. package/dist/backend/pdf-components/tree-mapper.d.ts +5 -21
  79. package/dist/backend/pdf-components/tree-mapper.d.ts.map +1 -1
  80. package/dist/backend/pdf-components/tree-mapper.js +8 -44
  81. package/dist/backend/pdf-components/tree-mapper.js.map +1 -1
  82. package/dist/backend/plugin.d.ts +9 -12
  83. package/dist/backend/plugin.d.ts.map +1 -1
  84. package/dist/backend/plugin.js +3 -16
  85. package/dist/backend/plugin.js.map +1 -1
  86. package/dist/backend/routes.admin.d.ts +3 -5
  87. package/dist/backend/routes.admin.d.ts.map +1 -1
  88. package/dist/backend/routes.admin.js +8 -53
  89. package/dist/backend/routes.admin.js.map +1 -1
  90. package/dist/backend/routes.customer.d.ts +3 -5
  91. package/dist/backend/routes.customer.d.ts.map +1 -1
  92. package/dist/backend/routes.customer.js +3 -3
  93. package/dist/backend/routes.customer.js.map +1 -1
  94. package/dist/backend/services/invoice-email-dispatch.d.ts +7 -3
  95. package/dist/backend/services/invoice-email-dispatch.d.ts.map +1 -1
  96. package/dist/backend/services/invoice-email-dispatch.js +2 -1
  97. package/dist/backend/services/invoice-email-dispatch.js.map +1 -1
  98. package/dist/manifest.d.ts +9 -3
  99. package/dist/manifest.d.ts.map +1 -1
  100. package/dist/manifest.js +25 -14
  101. package/dist/manifest.js.map +1 -1
  102. package/dist/migrations/20261017T075839_invoices_drop_invoice_templates.d.ts +20 -0
  103. package/dist/migrations/20261017T075839_invoices_drop_invoice_templates.d.ts.map +1 -0
  104. package/dist/migrations/20261017T075839_invoices_drop_invoice_templates.js +43 -0
  105. package/dist/migrations/20261017T075839_invoices_drop_invoice_templates.js.map +1 -0
  106. package/dist/migrations/index.d.ts +2 -1
  107. package/dist/migrations/index.d.ts.map +1 -1
  108. package/dist/migrations/index.js +3 -1
  109. package/dist/migrations/index.js.map +1 -1
  110. package/docs/invoices.md +21 -14
  111. package/i18n/en.json +3 -3
  112. package/i18n/pl.json +3 -3
  113. package/package.json +13 -13
  114. package/dist/admin/pages/InvoiceTemplateEditor.d.ts +0 -11
  115. package/dist/admin/pages/InvoiceTemplateEditor.d.ts.map +0 -1
  116. package/dist/admin/pages/InvoiceTemplateEditor.js +0 -189
  117. package/dist/admin/pages/InvoiceTemplateEditor.js.map +0 -1
  118. package/dist/admin/pages/InvoiceTemplatesPage.d.ts +0 -10
  119. package/dist/admin/pages/InvoiceTemplatesPage.d.ts.map +0 -1
  120. package/dist/admin/pages/InvoiceTemplatesPage.js +0 -60
  121. package/dist/admin/pages/InvoiceTemplatesPage.js.map +0 -1
  122. package/dist/admin/templates/described-blocks.d.ts +0 -67
  123. package/dist/admin/templates/described-blocks.d.ts.map +0 -1
  124. package/dist/admin/templates/described-blocks.js +0 -83
  125. package/dist/admin/templates/described-blocks.js.map +0 -1
  126. package/dist/admin/templates/invoice-builder-plugin.d.ts +0 -4
  127. package/dist/admin/templates/invoice-builder-plugin.d.ts.map +0 -1
  128. package/dist/admin/templates/invoice-builder-plugin.js +0 -12
  129. package/dist/admin/templates/invoice-builder-plugin.js.map +0 -1
  130. package/dist/backend/entities/invoice-template.entity.d.ts +0 -22
  131. package/dist/backend/entities/invoice-template.entity.d.ts.map +0 -1
  132. package/dist/backend/entities/invoice-template.entity.js +0 -84
  133. package/dist/backend/entities/invoice-template.entity.js.map +0 -1
  134. package/dist/backend/pdf-components/descriptor.d.ts +0 -29
  135. package/dist/backend/pdf-components/descriptor.d.ts.map +0 -1
  136. package/dist/backend/pdf-components/descriptor.js.map +0 -1
  137. package/dist/backend/services/invoice-pdf-renderer.d.ts +0 -57
  138. package/dist/backend/services/invoice-pdf-renderer.d.ts.map +0 -1
  139. package/dist/backend/services/invoice-pdf-renderer.js +0 -158
  140. package/dist/backend/services/invoice-pdf-renderer.js.map +0 -1
  141. package/dist/backend/services/invoice-template-service.d.ts +0 -43
  142. package/dist/backend/services/invoice-template-service.d.ts.map +0 -1
  143. package/dist/backend/services/invoice-template-service.js +0 -147
  144. package/dist/backend/services/invoice-template-service.js.map +0 -1
@@ -1,29 +0,0 @@
1
- import type { InvoiceTemplateBlockField } from '@endora-commerce/contracts';
2
- import type { InvoicePdfBlockRegistry } from '../services/invoice-pdf-block-registry.js';
3
- /**
4
- * Page-builder descriptor for the invoice template WYSIWYG palette (US6).
5
- * Served to the admin editor so it can offer the bounded invoice component set.
6
- *
7
- * The field shape is the published contract's, because a contributed block
8
- * describes its own fields (`specs/134-paid-module-extraction/` T063).
9
- */
10
- export type InvoiceComponentField = InvoiceTemplateBlockField;
11
- export interface InvoiceComponentDescriptor {
12
- name: string;
13
- ownerModule: string;
14
- label: string;
15
- fields: Record<string, InvoiceComponentField>;
16
- }
17
- /**
18
- * The descriptor `GET /api/v1/admin/invoice-templates/page-builder/config`
19
- * serves: this module's ten blocks, then every present contributor's.
20
- *
21
- * Built per request rather than held as a constant, because a contributor's
22
- * presence is read on every call — switching one off removes its block from
23
- * the palette description without a restart, and switching it on restores it.
24
- */
25
- export declare function invoicePageBuilderDescriptor(blocks: InvoicePdfBlockRegistry): {
26
- schemaVersion: 1;
27
- components: InvoiceComponentDescriptor[];
28
- };
29
- //# sourceMappingURL=descriptor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/backend/pdf-components/descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAGzF;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAE9D,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CAC/C;AA+MD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,uBAAuB,GAAG;IAC7E,aAAa,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,0BAA0B,EAAE,CAAC;CAC1C,CAkBA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../../src/backend/pdf-components/descriptor.ts"],"names":[],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- import type { Content } from 'pdfmake/interfaces.js';
2
- import type { InvoiceDetail } from '@endora-commerce/contracts';
3
- import type { AmountToWordsLocale } from './amount-to-words.js';
4
- import { InvoicePdfBlockRegistry } from './invoice-pdf-block-registry.js';
5
- import { type LoadAssetImage } from '../pdf-components/embed-logo-images.js';
6
- export type InvoicePdfRendererOptions = {
7
- /** Load library asset bytes for InvoiceLogo (avoids pdfmake self-HTTP). */
8
- loadAssetImage?: LoadAssetImage;
9
- /**
10
- * The blocks other modules render (T063/T126). Defaults to an empty,
11
- * always-present registry, so a renderer a unit test builds renders this
12
- * module's own blocks and nothing else.
13
- */
14
- blocks?: InvoicePdfBlockRegistry;
15
- };
16
- /**
17
- * Renders an invoice to a PDF Buffer using pdfmake (feature 047, R1/R2/US6).
18
- *
19
- * When a WYSIWYG (Puck) template tree is supplied and yields renderable invoice
20
- * components, the PDF follows that layout; otherwise it falls back to the
21
- * built-in generic layout (FR-016). Both paths share the same section builders.
22
- */
23
- export declare class InvoicePdfRenderer {
24
- #private;
25
- /**
26
- * The contributed-block seam — the generalisation of the
27
- * `setKsefVerificationResolver` this class carried from feature 059 to 134.
28
- *
29
- * That setter was one vendor's contribution point: a composition root had to
30
- * call it after building both modules, which only this repository's
31
- * reference root did, so on an instance composed through the platform the
32
- * PDF carried no KSeF verification block while `ksef` was installed and on
33
- * (`research.md` D16 §1 item 7). A contributor now registers the whole block —
34
- * renderer, description and the per-render data it needs — from its own
35
- * composition, and every render path reads it here.
36
- */
37
- readonly blocks: InvoicePdfBlockRegistry;
38
- constructor(opts?: InvoicePdfRendererOptions);
39
- render(invoice: InvoiceDetail, locale?: AmountToWordsLocale, templateTree?: unknown): Promise<Buffer>;
40
- /**
41
- * The pdfmake content an invoice renders to — the template's blocks, or the
42
- * built-in layout when the template places none this module or a present
43
- * contributor renders (FR-016).
44
- *
45
- * Public because it is the one place every render path meets, which makes it
46
- * the place a test asserts what a PDF carries without parsing one.
47
- */
48
- content(invoice: InvoiceDetail, locale?: AmountToWordsLocale, templateTree?: unknown): Promise<Content[]>;
49
- /**
50
- * Each block's per-render data, read once. A rejection is the block's `null`:
51
- * the data is an enrichment, and an invoice — a legal document — never fails
52
- * to render on it. The `catch` is around a contributed callback, not a port.
53
- */
54
- private resolveContributed;
55
- private buildDoc;
56
- }
57
- //# sourceMappingURL=invoice-pdf-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoice-pdf-renderer.d.ts","sourceRoot":"","sources":["../../../src/backend/services/invoice-pdf-renderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAyC,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAA+B,MAAM,4BAA4B,CAAC;AAC7F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAchE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,wCAAwC,CAAC;AA+DhD,MAAM,MAAM,yBAAyB,GAAG;IACtC,2EAA2E;IAC3E,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;OAIG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;CAClC,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,kBAAkB;;IAG7B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;gBAE7B,IAAI,GAAE,yBAA8B;IAK1C,MAAM,CACV,OAAO,EAAE,aAAa,EACtB,MAAM,GAAE,mBAA0B,EAClC,YAAY,CAAC,EAAE,OAAO,GACrB,OAAO,CAAC,MAAM,CAAC;IAWlB;;;;;;;OAOG;IACG,OAAO,CACX,OAAO,EAAE,aAAa,EACtB,MAAM,GAAE,mBAA0B,EAClC,YAAY,CAAC,EAAE,OAAO,GACrB,OAAO,CAAC,OAAO,EAAE,CAAC;IAgDrB;;;;OAIG;YACW,kBAAkB;IAgBhC,OAAO,CAAC,QAAQ;CASjB"}
@@ -1,158 +0,0 @@
1
- import path from 'node:path';
2
- import { createRequire } from 'node:module';
3
- import { headerSection, partiesSection, lineItemsSection, vatSummarySection, totalsSection, } from '../pdf-components/sections.js';
4
- import { INVOICE_COMPONENT_NAMES, placedBlockNames, treeToContent, } from '../pdf-components/tree-mapper.js';
5
- import { InvoicePdfBlockRegistry } from './invoice-pdf-block-registry.js';
6
- import { embedInvoiceLogoImages, } from '../pdf-components/embed-logo-images.js';
7
- const requireFromHere = createRequire(import.meta.url);
8
- const pdfMake = requireFromHere('pdfmake');
9
- function buildFontDictionary() {
10
- const fontsDir = requireFromHere
11
- .resolve('pdfmake/package.json')
12
- .replace(/package\.json$/, `fonts${path.sep}Roboto${path.sep}`);
13
- return {
14
- Roboto: {
15
- normal: `${fontsDir}Roboto-Regular.ttf`,
16
- bold: `${fontsDir}Roboto-Medium.ttf`,
17
- italics: `${fontsDir}Roboto-Italic.ttf`,
18
- bolditalics: `${fontsDir}Roboto-MediumItalic.ttf`,
19
- },
20
- };
21
- }
22
- let fontsRegistered = false;
23
- /**
24
- * Built-in generic layout — the FR-016 fallback when no valid template exists.
25
- *
26
- * Its last entries are the present contributors' blocks, with their default
27
- * props. That is where `ksefSection(inv)` used to be written out: a use of the
28
- * KSeF block the E4 ruling's table did not list, generalised with the other
29
- * four rather than kept (`specs/134-paid-module-extraction/` T063).
30
- */
31
- function builtinLayout(inv, locale, contributed, suppressKsefNumber) {
32
- return [
33
- headerSection(inv, {}, { suppressKsefNumber }),
34
- partiesSection(inv),
35
- lineItemsSection(inv),
36
- {
37
- columns: [
38
- { width: '55%', stack: [vatSummarySection(inv)] },
39
- { width: '45%', stack: [totalsSection(inv, locale)] },
40
- ],
41
- margin: [0, 0, 0, 16],
42
- },
43
- ...(inv.kind === 'correction' && inv.originalInvoiceId
44
- ? [{ text: 'Dokument korygujący do faktury pierwotnej.', italics: true, margin: [0, 0, 0, 8] }]
45
- : []),
46
- ...contributed,
47
- ];
48
- }
49
- const OWN_BLOCKS = new Set(INVOICE_COMPONENT_NAMES);
50
- /**
51
- * Renders an invoice to a PDF Buffer using pdfmake (feature 047, R1/R2/US6).
52
- *
53
- * When a WYSIWYG (Puck) template tree is supplied and yields renderable invoice
54
- * components, the PDF follows that layout; otherwise it falls back to the
55
- * built-in generic layout (FR-016). Both paths share the same section builders.
56
- */
57
- export class InvoicePdfRenderer {
58
- #loadAssetImage;
59
- /**
60
- * The contributed-block seam — the generalisation of the
61
- * `setKsefVerificationResolver` this class carried from feature 059 to 134.
62
- *
63
- * That setter was one vendor's contribution point: a composition root had to
64
- * call it after building both modules, which only this repository's
65
- * reference root did, so on an instance composed through the platform the
66
- * PDF carried no KSeF verification block while `ksef` was installed and on
67
- * (`research.md` D16 §1 item 7). A contributor now registers the whole block —
68
- * renderer, description and the per-render data it needs — from its own
69
- * composition, and every render path reads it here.
70
- */
71
- blocks;
72
- constructor(opts = {}) {
73
- this.#loadAssetImage = opts.loadAssetImage;
74
- this.blocks = opts.blocks ?? new InvoicePdfBlockRegistry();
75
- }
76
- async render(invoice, locale = 'pl', templateTree) {
77
- if (!fontsRegistered) {
78
- pdfMake.setFonts(buildFontDictionary());
79
- // Images are inlined as data URIs by embedInvoiceLogoImages — deny network.
80
- pdfMake.setUrlAccessPolicy(() => false);
81
- fontsRegistered = true;
82
- }
83
- const content = await this.content(invoice, locale, templateTree);
84
- return pdfMake.createPdf(this.buildDoc(content)).getBuffer();
85
- }
86
- /**
87
- * The pdfmake content an invoice renders to — the template's blocks, or the
88
- * built-in layout when the template places none this module or a present
89
- * contributor renders (FR-016).
90
- *
91
- * Public because it is the one place every render path meets, which makes it
92
- * the place a test asserts what a PDF carries without parsing one.
93
- */
94
- async content(invoice, locale = 'pl', templateTree) {
95
- const tree = templateTree
96
- ? await embedInvoiceLogoImages(templateTree, this.#loadAssetImage)
97
- : undefined;
98
- const present = this.blocks.present();
99
- const placed = tree ? new Set(placedBlockNames(tree)) : null;
100
- const resolved = await this.resolveContributed(invoice.id, present.filter((block) => placed === null || placed.has(block.name)));
101
- const contributed = (name) => {
102
- if (OWN_BLOCKS.has(name))
103
- return undefined;
104
- const block = this.blocks.find(name);
105
- if (!block)
106
- return undefined;
107
- return (props) => block.render({ props, invoice, locale, resolved: resolved.get(name) ?? null });
108
- };
109
- // T137 (D22 §3(a)): the KSeF number is printed exactly once. The header
110
- // stands down only while a block that prints it is present **and placed**
111
- // in this tree; otherwise the header prints it, whatever any module's state.
112
- const printsNumber = present.filter((block) => block.printsKsefReferenceNumber === true);
113
- const suppressInTree = placed !== null && printsNumber.some((block) => placed.has(block.name));
114
- const fromTemplate = tree
115
- ? treeToContent(tree, invoice, locale, contributed, { suppressKsefNumber: suppressInTree })
116
- : null;
117
- if (fromTemplate)
118
- return fromTemplate;
119
- const fallbackResolved = placed === null ? resolved : await this.resolveContributed(invoice.id, present);
120
- return builtinLayout(invoice, locale, present.map((block) => block.render({
121
- props: {},
122
- invoice,
123
- locale,
124
- resolved: fallbackResolved.get(block.name) ?? null,
125
- })),
126
- // The built-in layout places every present contributor's block.
127
- printsNumber.length > 0);
128
- }
129
- /**
130
- * Each block's per-render data, read once. A rejection is the block's `null`:
131
- * the data is an enrichment, and an invoice — a legal document — never fails
132
- * to render on it. The `catch` is around a contributed callback, not a port.
133
- */
134
- async resolveContributed(invoiceId, blocks) {
135
- const out = new Map();
136
- for (const block of blocks) {
137
- if (!block.resolve)
138
- continue;
139
- try {
140
- out.set(block.name, (await block.resolve(invoiceId)) ?? null);
141
- }
142
- catch {
143
- out.set(block.name, null);
144
- }
145
- }
146
- return out;
147
- }
148
- buildDoc(content) {
149
- return {
150
- pageSize: 'A4',
151
- pageMargins: [40, 40, 40, 48],
152
- defaultStyle: { fontSize: 10, font: 'Roboto' },
153
- styles: { docTitle: { fontSize: 14, bold: true } },
154
- content,
155
- };
156
- }
157
- }
158
- //# sourceMappingURL=invoice-pdf-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoice-pdf-renderer.js","sourceRoot":"","sources":["../../../src/backend/services/invoice-pdf-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,GAEd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EACL,sBAAsB,GAEvB,MAAM,wCAAwC,CAAC;AAUhD,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAqB,CAAC;AAE/D,SAAS,mBAAmB;IAC1B,MAAM,QAAQ,GAAG,eAAe;SAC7B,OAAO,CAAC,sBAAsB,CAAC;SAC/B,OAAO,CAAC,gBAAgB,EAAE,QAAQ,IAAI,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClE,OAAO;QACL,MAAM,EAAE;YACN,MAAM,EAAE,GAAG,QAAQ,oBAAoB;YACvC,IAAI,EAAE,GAAG,QAAQ,mBAAmB;YACpC,OAAO,EAAE,GAAG,QAAQ,mBAAmB;YACvC,WAAW,EAAE,GAAG,QAAQ,yBAAyB;SAClD;KACF,CAAC;AACJ,CAAC;AAED,IAAI,eAAe,GAAG,KAAK,CAAC;AAE5B;;;;;;;GAOG;AACH,SAAS,aAAa,CACpB,GAAkB,EAClB,MAA2B,EAC3B,WAA+B,EAC/B,kBAA2B;IAE3B,OAAO;QACL,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC;QAC9C,cAAc,CAAC,GAAG,CAAC;QACnB,gBAAgB,CAAC,GAAG,CAAC;QACrB;YACE,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;gBACjD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE;aACtD;YACD,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;SACtB;QACD,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,iBAAiB;YACpD,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,4CAA4C,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAa,CAAC;YAC1G,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,WAAW;KACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAazE;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IACpB,eAAe,CAA6B;IAErD;;;;;;;;;;;OAWG;IACM,MAAM,CAA0B;IAEzC,YAAY,OAAkC,EAAE;QAC9C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,uBAAuB,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAsB,EACtB,SAA8B,IAAI,EAClC,YAAsB;QAEtB,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACxC,4EAA4E;YAC5E,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YACxC,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QAClE,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC/D,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CACX,OAAsB,EACtB,SAA8B,IAAI,EAClC,YAAsB;QAEtB,MAAM,IAAI,GAAG,YAAY;YACvB,CAAC,CAAC,MAAM,sBAAsB,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC;YAClE,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC5C,OAAO,CAAC,EAAE,EACV,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACrE,CAAC;QACF,MAAM,WAAW,GAA6B,CAAC,IAAI,EAAE,EAAE;YACrD,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK;gBAAE,OAAO,SAAS,CAAC;YAC7B,OAAO,CAAC,KAAK,EAAE,EAAE,CACf,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAY,CAAC;QAC9F,CAAC,CAAC;QAEF,wEAAwE;QACxE,0EAA0E;QAC1E,6EAA6E;QAC7E,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,yBAAyB,KAAK,IAAI,CAAC,CAAC;QACzF,MAAM,cAAc,GAClB,MAAM,KAAK,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,IAAI;YACvB,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC;YAC3F,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC;QACtC,MAAM,gBAAgB,GACpB,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAClF,OAAO,aAAa,CAClB,OAAO,EACP,MAAM,EACN,OAAO,CAAC,GAAG,CACT,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,MAAM,CAAC;YACX,KAAK,EAAE,EAAE;YACT,OAAO;YACP,MAAM;YACN,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI;SACnD,CAAY,CAChB;QACD,gEAAgE;QAChE,YAAY,CAAC,MAAM,GAAG,CAAC,CACxB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAC9B,SAAiB,EACjB,MAA8C;QAE9C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,SAAS;YAC7B,IAAI,CAAC;gBACH,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,QAAQ,CAAC,OAAkB;QACjC,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAC7B,YAAY,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9C,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAClD,OAAO;SACR,CAAC;IACJ,CAAC;CACF"}
@@ -1,43 +0,0 @@
1
- import type { EntityManager } from '@mikro-orm/postgresql';
2
- import type { AuditPort } from '@endora-commerce/platform/kernel';
3
- export interface InvoiceTemplateSummary {
4
- id: string;
5
- code: string;
6
- name: string;
7
- salesChannelId: string | null;
8
- languages: string[];
9
- active: boolean;
10
- isSystem: boolean;
11
- version: number;
12
- }
13
- /**
14
- * Invoice template CRUD + resolution (feature 047, US6). One seeded global
15
- * generic template (system); optional per-channel overrides. Resolution:
16
- * per-channel active → global active → seeded generic (FR-015/016).
17
- */
18
- export declare class InvoiceTemplateService {
19
- #private;
20
- private readonly emFactory;
21
- private readonly auditLog?;
22
- constructor(emFactory: () => EntityManager, auditLog?: AuditPort | undefined);
23
- /**
24
- * Install or refresh the system generic template (lifecycle / boot).
25
- * When the on-disk seed revision advances, existing `generic` system rows
26
- * are rewritten so admin editors see the current default props/layout.
27
- */
28
- ensureGenericSeed(): Promise<void>;
29
- list(): Promise<InvoiceTemplateSummary[]>;
30
- get(id: string): Promise<InvoiceTemplateSummary & {
31
- content: Record<string, unknown>;
32
- }>;
33
- create(input: {
34
- code: string;
35
- name: string;
36
- salesChannelId?: string | null;
37
- }): Promise<InvoiceTemplateSummary>;
38
- /** Save the Puck tree for one language with optimistic concurrency. */
39
- saveContent(id: string, language: string, data: unknown, version: number): Promise<InvoiceTemplateSummary>;
40
- /** Resolve the active template's Puck tree for a channel + language. */
41
- resolveTree(salesChannelId: string | null, language: string): Promise<unknown | null>;
42
- }
43
- //# sourceMappingURL=invoice-template-service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoice-template-service.d.ts","sourceRoot":"","sources":["../../../src/backend/services/invoice-template-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAM3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAQlE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAeD;;;;GAIG;AACH,qBAAa,sBAAsB;;IAE/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBADT,SAAS,EAAE,MAAM,aAAa,EAC9B,QAAQ,CAAC,EAAE,SAAS,YAAA;IAevC;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BlC,IAAI,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAMzC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAOvF,MAAM,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAsBpH,uEAAuE;IACjE,WAAW,CACf,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,sBAAsB,CAAC;IAoBlC,wEAAwE;IAClE,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAW5F"}
@@ -1,147 +0,0 @@
1
- import { HttpError } from '@endora-commerce/platform/http';
2
- import { ERROR_CODES } from '@endora-commerce/contracts';
3
- import { InvoiceTemplate } from '../entities/invoice-template.entity.js';
4
- import { pickLanguageTree } from '../pdf-components/tree-mapper.js';
5
- import { recordAuditFromContext } from '@endora-commerce/platform/commands';
6
- import { GENERIC_INVOICE_TEMPLATE_CODE, GENERIC_INVOICE_TEMPLATE_CONTENT, GENERIC_INVOICE_TEMPLATE_LANGUAGES, GENERIC_INVOICE_TEMPLATE_SEED_REVISION, } from '../seeds/generic-invoice-template.js';
7
- function summary(t) {
8
- return {
9
- id: t.id,
10
- code: t.code,
11
- name: t.name,
12
- salesChannelId: t.salesChannelId ?? null,
13
- languages: t.languages,
14
- active: t.active,
15
- isSystem: t.isSystem,
16
- version: t.version,
17
- };
18
- }
19
- /**
20
- * Invoice template CRUD + resolution (feature 047, US6). One seeded global
21
- * generic template (system); optional per-channel overrides. Resolution:
22
- * per-channel active → global active → seeded generic (FR-015/016).
23
- */
24
- export class InvoiceTemplateService {
25
- emFactory;
26
- auditLog;
27
- constructor(emFactory, auditLog) {
28
- this.emFactory = emFactory;
29
- this.auditLog = auditLog;
30
- }
31
- #audit(em, action, objectId, stateAfter) {
32
- if (this.auditLog) {
33
- recordAuditFromContext(this.auditLog, em, {
34
- action,
35
- objectType: 'invoice_template',
36
- objectId,
37
- stateBefore: null,
38
- stateAfter,
39
- });
40
- }
41
- }
42
- /**
43
- * Install or refresh the system generic template (lifecycle / boot).
44
- * When the on-disk seed revision advances, existing `generic` system rows
45
- * are rewritten so admin editors see the current default props/layout.
46
- */
47
- async ensureGenericSeed() {
48
- // command-coverage-ignore: idempotent boot seed of the system generic invoice
49
- // template — a bootstrap, not an operator-initiated write.
50
- const em = this.emFactory();
51
- const existing = await em.findOne(InvoiceTemplate, { code: GENERIC_INVOICE_TEMPLATE_CODE, isSystem: true });
52
- if (existing) {
53
- const rev = Number(existing.content?.schema_version ?? 0);
54
- if (rev >= GENERIC_INVOICE_TEMPLATE_SEED_REVISION)
55
- return;
56
- existing.content = structuredClone(GENERIC_INVOICE_TEMPLATE_CONTENT);
57
- existing.languages = [...GENERIC_INVOICE_TEMPLATE_LANGUAGES];
58
- existing.version += 1;
59
- await em.flush();
60
- return;
61
- }
62
- // Only seed if no global template occupies the active-global slot.
63
- const globalActive = await em.findOne(InvoiceTemplate, { salesChannelId: null, active: true });
64
- const tpl = em.create(InvoiceTemplate, {
65
- code: GENERIC_INVOICE_TEMPLATE_CODE,
66
- name: 'Generic invoice template',
67
- salesChannelId: null,
68
- content: structuredClone(GENERIC_INVOICE_TEMPLATE_CONTENT),
69
- languages: [...GENERIC_INVOICE_TEMPLATE_LANGUAGES],
70
- active: !globalActive,
71
- isSystem: true,
72
- version: 1,
73
- });
74
- await em.persistAndFlush(tpl);
75
- }
76
- async list() {
77
- const em = this.emFactory();
78
- const rows = await em.find(InvoiceTemplate, {}, { orderBy: { isSystem: 'desc', name: 'asc' } });
79
- return rows.map(summary);
80
- }
81
- async get(id) {
82
- const em = this.emFactory();
83
- const t = await em.findOne(InvoiceTemplate, { id });
84
- if (!t)
85
- throw new HttpError(404, ERROR_CODES.NOT_FOUND, 'Invoice template not found.');
86
- return { ...summary(t), content: t.content };
87
- }
88
- async create(input) {
89
- const em = this.emFactory();
90
- const channelId = input.salesChannelId ?? null;
91
- // Deactivate any currently-active template in the same scope so the new one
92
- // can become the single active template (partial-unique index).
93
- await em.nativeUpdate(InvoiceTemplate, { salesChannelId: channelId, active: true }, { active: false });
94
- const tpl = em.create(InvoiceTemplate, {
95
- code: input.code,
96
- name: input.name,
97
- salesChannelId: channelId,
98
- content: structuredClone(GENERIC_INVOICE_TEMPLATE_CONTENT),
99
- languages: GENERIC_INVOICE_TEMPLATE_LANGUAGES,
100
- active: true,
101
- isSystem: false,
102
- version: 1,
103
- });
104
- em.persist(tpl);
105
- this.#audit(em, 'invoice_template.create', tpl.id, { code: tpl.code, name: tpl.name });
106
- await em.flush();
107
- return summary(tpl);
108
- }
109
- /** Save the Puck tree for one language with optimistic concurrency. */
110
- async saveContent(id, language, data, version) {
111
- const em = this.emFactory();
112
- const t = await em.findOne(InvoiceTemplate, { id });
113
- if (!t)
114
- throw new HttpError(404, ERROR_CODES.NOT_FOUND, 'Invoice template not found.');
115
- if (t.version !== version) {
116
- throw new HttpError(409, ERROR_CODES.VERSION_CONFLICT, 'Template was modified by someone else.');
117
- }
118
- const content = { ...t.content };
119
- const languages = content['languages'] ?? {};
120
- languages[language] = data;
121
- content['languages'] = languages;
122
- content['schema_version'] = content['schema_version'] ?? 1;
123
- t.content = content;
124
- if (!t.languages.includes(language))
125
- t.languages = [...t.languages, language];
126
- t.version += 1;
127
- this.#audit(em, 'invoice_template.save_content', t.id, { language, version: t.version });
128
- await em.persistAndFlush(t);
129
- return summary(t);
130
- }
131
- /** Resolve the active template's Puck tree for a channel + language. */
132
- async resolveTree(salesChannelId, language) {
133
- const em = this.emFactory();
134
- let t = null;
135
- if (salesChannelId) {
136
- t = await em.findOne(InvoiceTemplate, { salesChannelId, active: true });
137
- }
138
- if (!t)
139
- t = await em.findOne(InvoiceTemplate, { salesChannelId: null, active: true });
140
- if (!t)
141
- t = await em.findOne(InvoiceTemplate, { code: GENERIC_INVOICE_TEMPLATE_CODE });
142
- if (!t)
143
- return null;
144
- return pickLanguageTree(t.content, language);
145
- }
146
- }
147
- //# sourceMappingURL=invoice-template-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoice-template-service.js","sourceRoot":"","sources":["../../../src/backend/services/invoice-template-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,kCAAkC,EAClC,sCAAsC,GACvC,MAAM,sCAAsC,CAAC;AAa9C,SAAS,OAAO,CAAC,CAAkB;IACjC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,IAAI;QACxC,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAEd;IACA;IAFnB,YACmB,SAA8B,EAC9B,QAAoB;QADpB,cAAS,GAAT,SAAS,CAAqB;QAC9B,aAAQ,GAAR,QAAQ,CAAY;IACpC,CAAC;IAEJ,MAAM,CAAC,EAAiB,EAAE,MAAc,EAAE,QAAgB,EAAE,UAAmC;QAC7F,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE;gBACxC,MAAM;gBACN,UAAU,EAAE,kBAAkB;gBAC9B,QAAQ;gBACR,WAAW,EAAE,IAAI;gBACjB,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB;QACrB,8EAA8E;QAC9E,2DAA2D;QAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5G,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,CAAE,QAAQ,CAAC,OAA8C,EAAE,cAAc,IAAI,CAAC,CAAC,CAAC;YAClG,IAAI,GAAG,IAAI,sCAAsC;gBAAE,OAAO;YAC1D,QAAQ,CAAC,OAAO,GAAG,eAAe,CAAC,gCAAgC,CAA4B,CAAC;YAChG,QAAQ,CAAC,SAAS,GAAG,CAAC,GAAG,kCAAkC,CAAC,CAAC;YAC7D,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;YACtB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,mEAAmE;QACnE,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/F,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE;YACrC,IAAI,EAAE,6BAA6B;YACnC,IAAI,EAAE,0BAA0B;YAChC,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,eAAe,CAAC,gCAAgC,CAA4B;YACrF,SAAS,EAAE,CAAC,GAAG,kCAAkC,CAAC;YAClD,MAAM,EAAE,CAAC,YAAY;YACrB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;QACvF,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAqE;QAChF,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC;QAC/C,4EAA4E;QAC5E,gEAAgE;QAChE,MAAM,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACvG,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE;YACrC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,cAAc,EAAE,SAAS;YACzB,OAAO,EAAE,eAAe,CAAC,gCAAgC,CAAC;YAC1D,SAAS,EAAE,kCAAkC;YAC7C,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,yBAAyB,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACvF,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,WAAW,CACf,EAAU,EACV,QAAgB,EAChB,IAAa,EACb,OAAe;QAEf,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;QACvF,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,gBAAgB,EAAE,wCAAwC,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,GAAI,CAAC,CAAC,OAAmC,EAAE,CAAC;QAC9D,MAAM,SAAS,GAAI,OAAO,CAAC,WAAW,CAA6B,IAAI,EAAE,CAAC;QAC1E,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;QACjC,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9E,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,+BAA+B,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,WAAW,CAAC,cAA6B,EAAE,QAAgB;QAC/D,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,GAA2B,IAAI,CAAC;QACrC,IAAI,cAAc,EAAE,CAAC;YACnB,CAAC,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,CAAC;YAAE,CAAC,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,CAAC;YAAE,CAAC,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,OAAO,gBAAgB,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;CACF"}