@open-nav/invoicing 0.1.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/LICENSE +29 -0
- package/README.md +190 -0
- package/dist/color.d.ts +31 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +150 -0
- package/dist/color.js.map +1 -0
- package/dist/export.d.ts +89 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +115 -0
- package/dist/export.js.map +1 -0
- package/dist/format.d.ts +23 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +52 -0
- package/dist/format.js.map +1 -0
- package/dist/html.d.ts +43 -0
- package/dist/html.d.ts.map +1 -0
- package/dist/html.js +355 -0
- package/dist/html.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/labels.d.ts +8 -0
- package/dist/labels.d.ts.map +1 -0
- package/dist/labels.js +199 -0
- package/dist/labels.js.map +1 -0
- package/dist/markings.d.ts +28 -0
- package/dist/markings.d.ts.map +1 -0
- package/dist/markings.js +69 -0
- package/dist/markings.js.map +1 -0
- package/dist/pdf-native.d.ts +32 -0
- package/dist/pdf-native.d.ts.map +1 -0
- package/dist/pdf-native.js +601 -0
- package/dist/pdf-native.js.map +1 -0
- package/dist/pdf.d.ts +92 -0
- package/dist/pdf.d.ts.map +1 -0
- package/dist/pdf.js +203 -0
- package/dist/pdf.js.map +1 -0
- package/dist/theme.d.ts +85 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +210 -0
- package/dist/theme.js.map +1 -0
- package/package.json +54 -0
- package/src/color.ts +170 -0
- package/src/export.ts +204 -0
- package/src/format.ts +66 -0
- package/src/html.ts +446 -0
- package/src/index.ts +9 -0
- package/src/labels.ts +222 -0
- package/src/markings.ts +102 -0
- package/src/pdf-native.ts +754 -0
- package/src/pdf.ts +302 -0
- package/src/theme.ts +305 -0
package/dist/format.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Decimal } from '@open-nav/core';
|
|
2
|
+
/**
|
|
3
|
+
* Format an exact decimal for display without going through a JavaScript
|
|
4
|
+
* number.
|
|
5
|
+
*
|
|
6
|
+
* The amounts on an invoice are exact decimal strings precisely so they do
|
|
7
|
+
* not lose precision; rendering them through `Number` to get thousands
|
|
8
|
+
* separators would throw that away at the top of NAV's 18 digit range.
|
|
9
|
+
*/
|
|
10
|
+
export function formatAmount(value, language, fractionDigits = 2) {
|
|
11
|
+
const amount = Decimal.from(value).round(fractionDigits);
|
|
12
|
+
const text = amount.abs().toFixed(fractionDigits);
|
|
13
|
+
const [whole = '0', fraction = ''] = text.split('.');
|
|
14
|
+
// A non-breaking space, so a grouped amount never breaks across a line,
|
|
15
|
+
// which is the Hungarian typographic convention for thousands.
|
|
16
|
+
const groupSeparator = language === 'hu' ? '\u00a0' : ',';
|
|
17
|
+
const decimalSeparator = language === 'hu' ? ',' : '.';
|
|
18
|
+
const grouped = whole.replace(/\B(?=(\d{3})+(?!\d))/g, groupSeparator);
|
|
19
|
+
const sign = amount.isNegative() ? '-' : '';
|
|
20
|
+
return fraction === '' ? `${sign}${grouped}` : `${sign}${grouped}${decimalSeparator}${fraction}`;
|
|
21
|
+
}
|
|
22
|
+
/** Format a VAT rate like `0.27` as a percentage. */
|
|
23
|
+
export function formatPercentage(value, language) {
|
|
24
|
+
const percent = Decimal.from(value).multiply('100');
|
|
25
|
+
const trimmed = percent
|
|
26
|
+
.toString()
|
|
27
|
+
.replace(/\.0+$/, '')
|
|
28
|
+
.replace(/(\.\d*?)0+$/, '$1');
|
|
29
|
+
return `${language === 'hu' ? trimmed.replace('.', ',') : trimmed}%`;
|
|
30
|
+
}
|
|
31
|
+
/** Dates are ISO in the data; Hungarian documents write them with dots. */
|
|
32
|
+
export function formatDate(value, language) {
|
|
33
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
34
|
+
return value;
|
|
35
|
+
if (language === 'en')
|
|
36
|
+
return value;
|
|
37
|
+
const [year, month, day] = value.split('-');
|
|
38
|
+
return `${year}. ${month}. ${day}.`;
|
|
39
|
+
}
|
|
40
|
+
/** Compose a tax number from its parts, in the written form. */
|
|
41
|
+
export function formatTaxNumber(parts) {
|
|
42
|
+
return [parts.taxpayerId, parts.vatCode, parts.countyCode].filter(Boolean).join('-');
|
|
43
|
+
}
|
|
44
|
+
/** Escape text for HTML. */
|
|
45
|
+
export function escapeHtml(value) {
|
|
46
|
+
return value
|
|
47
|
+
.replace(/&/g, '&')
|
|
48
|
+
.replace(/</g, '<')
|
|
49
|
+
.replace(/>/g, '>')
|
|
50
|
+
.replace(/"/g, '"');
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAIzC;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,QAA0B,EAC1B,cAAc,GAAG,CAAC;IAElB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAErD,wEAAwE;IACxE,+DAA+D;IAC/D,MAAM,cAAc,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,MAAM,gBAAgB,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAC;IAEvE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,OAAO,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,GAAG,gBAAgB,GAAG,QAAQ,EAAE,CAAC;AACnG,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,QAA0B;IACxE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,OAAO;SACpB,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC;AACvE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,QAA0B;IAClE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,GAAG,IAAI,KAAK,KAAK,KAAK,GAAG,GAAG,CAAC;AACtC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAAC,KAI/B;IACC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvF,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/html.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { InvoiceData } from '@open-nav/core';
|
|
2
|
+
import { type DocumentLanguage } from './format.js';
|
|
3
|
+
import { type InvoiceTheme } from './theme.js';
|
|
4
|
+
export interface RenderOptions {
|
|
5
|
+
/** Document language. Hungarian by default, as the law prescribes. */
|
|
6
|
+
language?: DocumentLanguage;
|
|
7
|
+
/** Extra note printed under the totals, e.g. payment instructions. */
|
|
8
|
+
note?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Branding and layout: logo, colours, fonts, page setup, footer.
|
|
11
|
+
*
|
|
12
|
+
* See {@link InvoiceTheme}. Anything omitted falls back to a restrained
|
|
13
|
+
* default that prints well in black and white.
|
|
14
|
+
*/
|
|
15
|
+
theme?: InvoiceTheme;
|
|
16
|
+
/**
|
|
17
|
+
* State that the document was rendered from reported data.
|
|
18
|
+
*
|
|
19
|
+
* On by default. An invoice's legal original is whatever the issuer issued;
|
|
20
|
+
* this rendering is a faithful presentation of the reported data, and
|
|
21
|
+
* saying so avoids passing it off as something it is not. Can also be set
|
|
22
|
+
* through the theme.
|
|
23
|
+
*/
|
|
24
|
+
provenanceNote?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Render an invoice as a self-contained, printable HTML document.
|
|
28
|
+
*
|
|
29
|
+
* HTML rather than PDF on purpose. A Hungarian invoice needs `ő` and `ű`,
|
|
30
|
+
* which are outside the WinAnsi encoding the PDF core fonts use, so a
|
|
31
|
+
* dependency-free PDF would need a bundled and licensed font to spell the
|
|
32
|
+
* language correctly. HTML gets the typography right, needs nothing bundled,
|
|
33
|
+
* and turns into a PDF with any browser:
|
|
34
|
+
*
|
|
35
|
+
* ```sh
|
|
36
|
+
* chromium --headless --print-to-pdf=invoice.pdf invoice.html
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* The output carries no external references, so it renders identically
|
|
40
|
+
* offline and archives as a single file.
|
|
41
|
+
*/
|
|
42
|
+
export declare function renderInvoiceHtml(document: InvoiceData, options?: RenderOptions): string;
|
|
43
|
+
//# sourceMappingURL=html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,WAAW,EAAsC,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAA6B,KAAK,YAAY,EAAsB,MAAM,YAAY,CAAC;AAE9F,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAuB5F"}
|
package/dist/html.js
ADDED
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { escapeHtml, formatAmount, formatDate, formatPercentage, formatTaxNumber, } from './format.js';
|
|
2
|
+
import { documentTitle, label, paymentMethodLabel, unitLabel } from './labels.js';
|
|
3
|
+
import { deriveMarkings } from './markings.js';
|
|
4
|
+
import { buildStyles, resolveTheme } from './theme.js';
|
|
5
|
+
/**
|
|
6
|
+
* Render an invoice as a self-contained, printable HTML document.
|
|
7
|
+
*
|
|
8
|
+
* HTML rather than PDF on purpose. A Hungarian invoice needs `ő` and `ű`,
|
|
9
|
+
* which are outside the WinAnsi encoding the PDF core fonts use, so a
|
|
10
|
+
* dependency-free PDF would need a bundled and licensed font to spell the
|
|
11
|
+
* language correctly. HTML gets the typography right, needs nothing bundled,
|
|
12
|
+
* and turns into a PDF with any browser:
|
|
13
|
+
*
|
|
14
|
+
* ```sh
|
|
15
|
+
* chromium --headless --print-to-pdf=invoice.pdf invoice.html
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* The output carries no external references, so it renders identically
|
|
19
|
+
* offline and archives as a single file.
|
|
20
|
+
*/
|
|
21
|
+
export function renderInvoiceHtml(document, options = {}) {
|
|
22
|
+
const language = options.language ?? 'hu';
|
|
23
|
+
const theme = resolveTheme(options.theme);
|
|
24
|
+
const invoices = document.invoiceMain.invoice
|
|
25
|
+
? [document.invoiceMain.invoice]
|
|
26
|
+
: (document.invoiceMain.batchInvoice ?? []).map((entry) => entry.invoice);
|
|
27
|
+
const body = invoices
|
|
28
|
+
.map((invoice) => renderInvoice(document, invoice, language, options, theme))
|
|
29
|
+
.join('\n<div class="page-break"></div>\n');
|
|
30
|
+
return `<!doctype html>
|
|
31
|
+
<html lang="${language}">
|
|
32
|
+
<head>
|
|
33
|
+
<meta charset="utf-8">
|
|
34
|
+
<title>${escapeHtml(document.invoiceNumber)}</title>
|
|
35
|
+
${buildStyles(theme)}
|
|
36
|
+
</head>
|
|
37
|
+
<body>
|
|
38
|
+
${body}
|
|
39
|
+
</body>
|
|
40
|
+
</html>
|
|
41
|
+
`;
|
|
42
|
+
}
|
|
43
|
+
function renderInvoice(document, invoice, language, options, theme) {
|
|
44
|
+
const detail = invoice.invoiceHead.invoiceDetail;
|
|
45
|
+
const currency = detail.currencyCode;
|
|
46
|
+
const isModification = invoice.invoiceReference !== undefined;
|
|
47
|
+
const lines = invoice.invoiceLines?.line ?? [];
|
|
48
|
+
const markings = deriveMarkings(invoice, language);
|
|
49
|
+
const metaRows = [
|
|
50
|
+
[label('invoiceNumber', language), document.invoiceNumber],
|
|
51
|
+
[label('issueDate', language), formatDate(document.invoiceIssueDate, language)],
|
|
52
|
+
];
|
|
53
|
+
if (detail.invoiceDeliveryDate) {
|
|
54
|
+
metaRows.push([
|
|
55
|
+
label('deliveryDate', language),
|
|
56
|
+
formatDate(detail.invoiceDeliveryDate, language),
|
|
57
|
+
]);
|
|
58
|
+
}
|
|
59
|
+
if (detail.invoiceDeliveryPeriodStart && detail.invoiceDeliveryPeriodEnd) {
|
|
60
|
+
metaRows.push([
|
|
61
|
+
label('deliveryPeriod', language),
|
|
62
|
+
`${formatDate(detail.invoiceDeliveryPeriodStart, language)} – ${formatDate(detail.invoiceDeliveryPeriodEnd, language)}`,
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
if (detail.paymentDate) {
|
|
66
|
+
metaRows.push([label('paymentDate', language), formatDate(detail.paymentDate, language)]);
|
|
67
|
+
}
|
|
68
|
+
if (detail.paymentMethod) {
|
|
69
|
+
metaRows.push([
|
|
70
|
+
label('paymentMethod', language),
|
|
71
|
+
paymentMethodLabel(detail.paymentMethod, language),
|
|
72
|
+
]);
|
|
73
|
+
}
|
|
74
|
+
metaRows.push([label('currency', language), currency]);
|
|
75
|
+
if (detail.exchangeRate && currency !== 'HUF') {
|
|
76
|
+
metaRows.push([label('exchangeRate', language), `${detail.exchangeRate} HUF/${currency}`]);
|
|
77
|
+
}
|
|
78
|
+
if (invoice.invoiceReference) {
|
|
79
|
+
metaRows.push([
|
|
80
|
+
label('originalInvoiceNumber', language),
|
|
81
|
+
invoice.invoiceReference.originalInvoiceNumber,
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
const logo = theme.logo
|
|
85
|
+
? `<img class="logo" src="${escapeHtml(theme.logo.src)}" alt="${escapeHtml(theme.logo.alt ?? invoice.invoiceHead.supplierInfo.supplierName)}"` +
|
|
86
|
+
`${theme.logo.width ? ` style="width:${escapeHtml(theme.logo.width)}"` : ''}>`
|
|
87
|
+
: '';
|
|
88
|
+
return `<article class="invoice">
|
|
89
|
+
<header>
|
|
90
|
+
<div class="brand">
|
|
91
|
+
${logo}
|
|
92
|
+
<div>
|
|
93
|
+
<h1>${escapeHtml(documentTitle(detail.invoiceCategory, isModification, language))}</h1>
|
|
94
|
+
${markings.length > 0 ? `<div class="subtitle">${markings.map((marking) => escapeHtml(marking.text)).join(' · ')}</div>` : ''}
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
<div class="meta">
|
|
98
|
+
${metaRows
|
|
99
|
+
.map(([name, value]) => `<div>${escapeHtml(name)}: <span class="value">${escapeHtml(value)}</span></div>`)
|
|
100
|
+
.join('\n ')}
|
|
101
|
+
</div>
|
|
102
|
+
</header>
|
|
103
|
+
|
|
104
|
+
<section class="parties">
|
|
105
|
+
${renderParty(label('supplier', language), supplierFields(invoice, language), theme.issuerContact)}
|
|
106
|
+
${renderParty(label('customer', language), customerFields(invoice, language), [])}
|
|
107
|
+
</section>
|
|
108
|
+
|
|
109
|
+
${renderLines(lines, currency, language)}
|
|
110
|
+
${renderTotals(invoice, currency, language)}
|
|
111
|
+
${renderVatSummary(invoice, currency, language)}
|
|
112
|
+
${renderMarkings(markings, language)}
|
|
113
|
+
${options.note ? `<div class="note">${escapeHtml(options.note)}</div>` : ''}
|
|
114
|
+
${renderFooter(theme, options, language)}
|
|
115
|
+
</article>`;
|
|
116
|
+
}
|
|
117
|
+
function renderParty(heading, fields, contact) {
|
|
118
|
+
return `<div class="party">
|
|
119
|
+
<h2>${escapeHtml(heading)}</h2>
|
|
120
|
+
<div class="name">${escapeHtml(fields.name)}</div>
|
|
121
|
+
${fields.address ? `<div class="address">${escapeHtml(fields.address)}</div>` : ''}
|
|
122
|
+
<dl>
|
|
123
|
+
${fields.rows
|
|
124
|
+
.map(([key, value]) => `<dt>${escapeHtml(key)}</dt><dd>${escapeHtml(value)}</dd>`)
|
|
125
|
+
.join('\n ')}
|
|
126
|
+
</dl>
|
|
127
|
+
${contact.length > 0
|
|
128
|
+
? `<div class="contact">${contact.map((line) => escapeHtml(line)).join('<br>')}</div>`
|
|
129
|
+
: ''}
|
|
130
|
+
</div>`;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The footer carries the theme's own lines plus the provenance note.
|
|
134
|
+
*
|
|
135
|
+
* `provenanceNote` can be set on either the options or the theme; the option
|
|
136
|
+
* wins, so a single document can drop it without editing shared branding.
|
|
137
|
+
*/
|
|
138
|
+
function renderFooter(theme, options, language) {
|
|
139
|
+
const showProvenance = options.provenanceNote ?? theme.provenanceNote;
|
|
140
|
+
const lines = [
|
|
141
|
+
...theme.footerLines.map((line) => escapeHtml(line)),
|
|
142
|
+
...(showProvenance ? [escapeHtml(label('notReported', language))] : []),
|
|
143
|
+
];
|
|
144
|
+
if (lines.length === 0)
|
|
145
|
+
return '';
|
|
146
|
+
return `<footer>${lines.map((line) => `<div>${line}</div>`).join('')}</footer>`;
|
|
147
|
+
}
|
|
148
|
+
function formatAddress(address) {
|
|
149
|
+
if (!address)
|
|
150
|
+
return '';
|
|
151
|
+
if ('simpleAddress' in address && address.simpleAddress) {
|
|
152
|
+
const simple = address.simpleAddress;
|
|
153
|
+
return [simple.postalCode, simple.city, simple.additionalAddressDetail, simple.countryCode]
|
|
154
|
+
.filter(Boolean)
|
|
155
|
+
.join(', ');
|
|
156
|
+
}
|
|
157
|
+
if ('detailedAddress' in address && address.detailedAddress) {
|
|
158
|
+
const detailed = address.detailedAddress;
|
|
159
|
+
const street = [
|
|
160
|
+
detailed.streetName,
|
|
161
|
+
detailed.publicPlaceCategory,
|
|
162
|
+
detailed.number,
|
|
163
|
+
detailed.building,
|
|
164
|
+
detailed.floor,
|
|
165
|
+
detailed.door,
|
|
166
|
+
]
|
|
167
|
+
.filter(Boolean)
|
|
168
|
+
.join(' ');
|
|
169
|
+
return [detailed.postalCode, detailed.city, street, detailed.countryCode]
|
|
170
|
+
.filter(Boolean)
|
|
171
|
+
.join(', ');
|
|
172
|
+
}
|
|
173
|
+
return '';
|
|
174
|
+
}
|
|
175
|
+
function supplierFields(invoice, language) {
|
|
176
|
+
const supplier = invoice.invoiceHead.supplierInfo;
|
|
177
|
+
const rows = [];
|
|
178
|
+
rows.push([label('taxNumber', language), formatTaxNumber(supplier.supplierTaxNumber)]);
|
|
179
|
+
if (supplier.groupMemberTaxNumber) {
|
|
180
|
+
rows.push([
|
|
181
|
+
label('groupMemberTaxNumber', language),
|
|
182
|
+
formatTaxNumber(supplier.groupMemberTaxNumber),
|
|
183
|
+
]);
|
|
184
|
+
}
|
|
185
|
+
if (supplier.communityVatNumber) {
|
|
186
|
+
rows.push([label('communityVatNumber', language), supplier.communityVatNumber]);
|
|
187
|
+
}
|
|
188
|
+
if (supplier.supplierBankAccountNumber) {
|
|
189
|
+
rows.push([label('bankAccount', language), supplier.supplierBankAccountNumber]);
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
name: supplier.supplierName,
|
|
193
|
+
address: formatAddress(supplier.supplierAddress),
|
|
194
|
+
rows,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function customerFields(invoice, language) {
|
|
198
|
+
const customer = invoice.invoiceHead.customerInfo;
|
|
199
|
+
if (!customer)
|
|
200
|
+
return { name: '—', address: '', rows: [] };
|
|
201
|
+
const rows = [];
|
|
202
|
+
const vatData = customer.customerVatData;
|
|
203
|
+
if (vatData?.customerTaxNumber) {
|
|
204
|
+
rows.push([label('taxNumber', language), formatTaxNumber(vatData.customerTaxNumber)]);
|
|
205
|
+
}
|
|
206
|
+
if (vatData?.communityVatNumber) {
|
|
207
|
+
rows.push([label('communityVatNumber', language), vatData.communityVatNumber]);
|
|
208
|
+
}
|
|
209
|
+
if (vatData?.thirdStateTaxId) {
|
|
210
|
+
rows.push([label('thirdStateTaxId', language), vatData.thirdStateTaxId]);
|
|
211
|
+
}
|
|
212
|
+
if (customer.customerBankAccountNumber) {
|
|
213
|
+
rows.push([label('bankAccount', language), customer.customerBankAccountNumber]);
|
|
214
|
+
}
|
|
215
|
+
// A private person is deliberately not named on the reported data.
|
|
216
|
+
const name = customer.customerName ?? (customer.customerVatStatus === 'PRIVATE_PERSON' ? '—' : '');
|
|
217
|
+
return { name, address: formatAddress(customer.customerAddress), rows };
|
|
218
|
+
}
|
|
219
|
+
function vatRateText(rate, language) {
|
|
220
|
+
if (!rate)
|
|
221
|
+
return '';
|
|
222
|
+
if (rate.vatPercentage !== undefined)
|
|
223
|
+
return formatPercentage(rate.vatPercentage, language);
|
|
224
|
+
if (rate.vatContent !== undefined)
|
|
225
|
+
return formatPercentage(rate.vatContent, language);
|
|
226
|
+
if (rate.vatExemption)
|
|
227
|
+
return `${label('exempt', language)} (${rate.vatExemption.case})`;
|
|
228
|
+
if (rate.vatOutOfScope)
|
|
229
|
+
return `${label('outOfScope', language)} (${rate.vatOutOfScope.case})`;
|
|
230
|
+
if (rate.vatDomesticReverseCharge)
|
|
231
|
+
return label('reverseCharge', language);
|
|
232
|
+
if (rate.marginSchemeIndicator)
|
|
233
|
+
return label('exempt', language);
|
|
234
|
+
return '';
|
|
235
|
+
}
|
|
236
|
+
function renderLines(lines, currency, language) {
|
|
237
|
+
if (lines.length === 0)
|
|
238
|
+
return '';
|
|
239
|
+
const rows = lines
|
|
240
|
+
.map((line) => {
|
|
241
|
+
const normal = line.lineAmountsNormal;
|
|
242
|
+
const simplified = line.lineAmountsSimplified;
|
|
243
|
+
const rate = normal?.lineVatRate ?? simplified?.lineVatRate;
|
|
244
|
+
const net = normal?.lineNetAmountData.lineNetAmount;
|
|
245
|
+
const vat = normal?.lineVatData?.lineVatAmount;
|
|
246
|
+
const gross = normal?.lineGrossAmountData?.lineGrossAmountNormal ?? simplified?.lineGrossAmountSimplified;
|
|
247
|
+
return `<tr>
|
|
248
|
+
<td class="num">${line.lineNumber}</td>
|
|
249
|
+
<td>${escapeHtml(line.lineDescription ?? '')}</td>
|
|
250
|
+
<td class="num">${line.quantity ? escapeHtml(formatAmount(line.quantity, language, decimalsOf(line.quantity))) : ''}</td>
|
|
251
|
+
<td>${escapeHtml(unitLabel(line.unitOfMeasure, line.unitOfMeasureOwn, language))}</td>
|
|
252
|
+
<td class="num">${line.unitPrice ? escapeHtml(formatAmount(line.unitPrice, language, decimalsOf(line.unitPrice))) : ''}</td>
|
|
253
|
+
<td class="num">${net ? escapeHtml(formatAmount(net, language)) : ''}</td>
|
|
254
|
+
<td class="num">${escapeHtml(vatRateText(rate, language))}</td>
|
|
255
|
+
<td class="num">${vat ? escapeHtml(formatAmount(vat, language)) : ''}</td>
|
|
256
|
+
<td class="num">${gross ? escapeHtml(formatAmount(gross, language)) : ''}</td>
|
|
257
|
+
</tr>`;
|
|
258
|
+
})
|
|
259
|
+
.join('\n ');
|
|
260
|
+
return `<table>
|
|
261
|
+
<thead>
|
|
262
|
+
<tr>
|
|
263
|
+
<th class="num">${escapeHtml(label('lineNumber', language))}</th>
|
|
264
|
+
<th>${escapeHtml(label('description', language))}</th>
|
|
265
|
+
<th class="num">${escapeHtml(label('quantity', language))}</th>
|
|
266
|
+
<th>${escapeHtml(label('unit', language))}</th>
|
|
267
|
+
<th class="num">${escapeHtml(label('unitPrice', language))}</th>
|
|
268
|
+
<th class="num">${escapeHtml(label('netAmount', language))} (${escapeHtml(currency)})</th>
|
|
269
|
+
<th class="num">${escapeHtml(label('vatRate', language))}</th>
|
|
270
|
+
<th class="num">${escapeHtml(label('vatAmount', language))}</th>
|
|
271
|
+
<th class="num">${escapeHtml(label('grossAmount', language))}</th>
|
|
272
|
+
</tr>
|
|
273
|
+
</thead>
|
|
274
|
+
<tbody>
|
|
275
|
+
${rows}
|
|
276
|
+
</tbody>
|
|
277
|
+
</table>`;
|
|
278
|
+
}
|
|
279
|
+
/** Keep a quantity's own precision rather than forcing two decimals. */
|
|
280
|
+
function decimalsOf(value) {
|
|
281
|
+
const fraction = value.split('.')[1];
|
|
282
|
+
if (!fraction)
|
|
283
|
+
return 0;
|
|
284
|
+
return fraction.replace(/0+$/, '').length;
|
|
285
|
+
}
|
|
286
|
+
function renderTotals(invoice, currency, language) {
|
|
287
|
+
const summary = invoice.invoiceSummary;
|
|
288
|
+
const normal = summary.summaryNormal;
|
|
289
|
+
const gross = summary.summaryGrossData;
|
|
290
|
+
const rows = [];
|
|
291
|
+
if (normal) {
|
|
292
|
+
rows.push(row(label('totalNet', language), formatAmount(normal.invoiceNetAmount, language), currency), row(label('totalVat', language), formatAmount(normal.invoiceVatAmount, language), currency));
|
|
293
|
+
}
|
|
294
|
+
if (gross) {
|
|
295
|
+
rows.push(`<tr class="grand"><td>${escapeHtml(label('totalGross', language))}</td>` +
|
|
296
|
+
`<td class="num">${escapeHtml(formatAmount(gross.invoiceGrossAmount, language))}</td>` +
|
|
297
|
+
`<td class="num">${escapeHtml(currency)}</td></tr>`);
|
|
298
|
+
if (currency !== 'HUF') {
|
|
299
|
+
rows.push(row(label('inHuf', language), formatAmount(gross.invoiceGrossAmountHUF, language), 'HUF'));
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (rows.length === 0)
|
|
303
|
+
return '';
|
|
304
|
+
return `<div class="totals"><table><tbody>${rows.join('')}</tbody></table></div>`;
|
|
305
|
+
}
|
|
306
|
+
function row(name, value, currency) {
|
|
307
|
+
return (`<tr><td>${escapeHtml(name)}</td>` +
|
|
308
|
+
`<td class="num">${escapeHtml(value)}</td>` +
|
|
309
|
+
`<td class="num">${escapeHtml(currency)}</td></tr>`);
|
|
310
|
+
}
|
|
311
|
+
function renderVatSummary(invoice, currency, language) {
|
|
312
|
+
const byRate = invoice.invoiceSummary.summaryNormal?.summaryByVatRate ?? [];
|
|
313
|
+
if (byRate.length < 2)
|
|
314
|
+
return '';
|
|
315
|
+
const rows = byRate
|
|
316
|
+
.map((entry) => `<tr>
|
|
317
|
+
<td>${escapeHtml(vatRateText(entry.vatRate, language))}</td>
|
|
318
|
+
<td class="num">${escapeHtml(formatAmount(entry.vatRateNetData.vatRateNetAmount, language))}</td>
|
|
319
|
+
<td class="num">${escapeHtml(formatAmount(entry.vatRateVatData.vatRateVatAmount, language))}</td>
|
|
320
|
+
<td class="num">${entry.vatRateGrossData ? escapeHtml(formatAmount(entry.vatRateGrossData.vatRateGrossAmount, language)) : ''}</td>
|
|
321
|
+
</tr>`)
|
|
322
|
+
.join('\n ');
|
|
323
|
+
return `<section class="vat-summary">
|
|
324
|
+
<h2>${escapeHtml(label('summaryByVatRate', language))} (${escapeHtml(currency)})</h2>
|
|
325
|
+
<table>
|
|
326
|
+
<thead>
|
|
327
|
+
<tr>
|
|
328
|
+
<th>${escapeHtml(label('vatRate', language))}</th>
|
|
329
|
+
<th class="num">${escapeHtml(label('netAmount', language))}</th>
|
|
330
|
+
<th class="num">${escapeHtml(label('vatAmount', language))}</th>
|
|
331
|
+
<th class="num">${escapeHtml(label('grossAmount', language))}</th>
|
|
332
|
+
</tr>
|
|
333
|
+
</thead>
|
|
334
|
+
<tbody>
|
|
335
|
+
${rows}
|
|
336
|
+
</tbody>
|
|
337
|
+
</table>
|
|
338
|
+
</section>`;
|
|
339
|
+
}
|
|
340
|
+
function renderMarkings(markings, language) {
|
|
341
|
+
if (markings.length === 0)
|
|
342
|
+
return '';
|
|
343
|
+
const items = markings
|
|
344
|
+
.map((marking) => `<li>${escapeHtml(marking.text)}` +
|
|
345
|
+
(marking.detail ? ` — ${escapeHtml(marking.detail)}` : '') +
|
|
346
|
+
` <span class="reference">(${escapeHtml(marking.reference)})</span></li>`)
|
|
347
|
+
.join('\n ');
|
|
348
|
+
return `<section class="markings">
|
|
349
|
+
<h2>${escapeHtml(label('markings', language))}</h2>
|
|
350
|
+
<ul>
|
|
351
|
+
${items}
|
|
352
|
+
</ul>
|
|
353
|
+
</section>`;
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=html.js.map
|
package/dist/html.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './format.js';
|
|
2
|
+
export * from './labels.js';
|
|
3
|
+
export * from './markings.js';
|
|
4
|
+
export * from './theme.js';
|
|
5
|
+
export * from './html.js';
|
|
6
|
+
export * from './color.js';
|
|
7
|
+
export * from './pdf-native.js';
|
|
8
|
+
export * from './pdf.js';
|
|
9
|
+
export * from './export.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './format.js';
|
|
2
|
+
export * from './labels.js';
|
|
3
|
+
export * from './markings.js';
|
|
4
|
+
export * from './theme.js';
|
|
5
|
+
export * from './html.js';
|
|
6
|
+
export * from './color.js';
|
|
7
|
+
export * from './pdf-native.js';
|
|
8
|
+
export * from './pdf.js';
|
|
9
|
+
export * from './export.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
package/dist/labels.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { InvoiceCategoryType, MarginSchemeType, PaymentMethodType, UnitOfMeasureType } from '@open-nav/core';
|
|
2
|
+
import type { DocumentLanguage } from './format.js';
|
|
3
|
+
export declare function label(key: string, language: DocumentLanguage): string;
|
|
4
|
+
export declare function unitLabel(unit: UnitOfMeasureType | undefined, own: string | undefined, language: DocumentLanguage): string;
|
|
5
|
+
export declare function paymentMethodLabel(method: PaymentMethodType | undefined, language: DocumentLanguage): string;
|
|
6
|
+
export declare function documentTitle(category: InvoiceCategoryType | undefined, isModification: boolean, language: DocumentLanguage): string;
|
|
7
|
+
export declare function marginSchemeLabel(scheme: MarginSchemeType, language: DocumentLanguage): string;
|
|
8
|
+
//# sourceMappingURL=labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAqHpD,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAErE;AAyCD,wBAAgB,SAAS,CACvB,IAAI,EAAE,iBAAiB,GAAG,SAAS,EACnC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE,gBAAgB,GACzB,MAAM,CAGR;AAmBD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,GAAG,SAAS,EACrC,QAAQ,EAAE,gBAAgB,GACzB,MAAM,CAER;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,mBAAmB,GAAG,SAAS,EACzC,cAAc,EAAE,OAAO,EACvB,QAAQ,EAAE,gBAAgB,GACzB,MAAM,CAKR;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAW9F"}
|