@design.estate/dees-document 3.2.0 → 3.4.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/dist_bundle/bundle.js +594 -339
- package/dist_bundle/bundle.js.map +1 -1
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.pdfservice.d.ts +3 -0
- package/dist_ts/classes.pdfservice.js +5 -1
- package/dist_ts_shared/index.d.ts +3 -0
- package/dist_ts_shared/index.js +4 -1
- package/dist_ts_shared/paidamount.d.ts +42 -0
- package/dist_ts_shared/paidamount.js +141 -0
- package/dist_ts_shared/paymentreminder.d.ts +28 -0
- package/dist_ts_shared/paymentreminder.js +33 -0
- package/dist_ts_shared/translation.d.ts +51 -0
- package/dist_ts_shared/translation.js +106 -1
- package/dist_ts_shared/unitnames.d.ts +44 -0
- package/dist_ts_shared/unitnames.js +103 -0
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/contentinvoice.d.ts +101 -1
- package/dist_ts_web/elements/contentinvoice.js +654 -44
- package/dist_ts_web/elements/document.js +13 -1
- package/dist_ts_web/elements/letterheader.d.ts +2 -0
- package/dist_ts_web/elements/letterheader.js +20 -1
- package/package.json +2 -2
- package/readme.md +117 -5
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.pdfservice.ts +4 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/contentinvoice.ts +802 -49
- package/ts_web/elements/document.ts +11 -0
- package/ts_web/elements/letterheader.ts +28 -0
|
@@ -63,6 +63,14 @@ const accountingDocContents = {
|
|
|
63
63
|
requestsPayment: true,
|
|
64
64
|
printsRelatedDocuments: false,
|
|
65
65
|
},
|
|
66
|
+
// a complete invoice in place of one that lacked a detail or stated one
|
|
67
|
+
// incorrectly (§ 31 Abs. 5 UStDV); it names that invoice in its own block,
|
|
68
|
+
// renderCorrection(), not among the related documents
|
|
69
|
+
"corrected-invoice": {
|
|
70
|
+
introStatement: "invoice@@introStatement",
|
|
71
|
+
requestsPayment: true,
|
|
72
|
+
printsRelatedDocuments: false,
|
|
73
|
+
},
|
|
66
74
|
// reduces what the recipient owes: nothing to pay, and it names the document it corrects
|
|
67
75
|
creditnote: {
|
|
68
76
|
introStatement: "creditnote@@introStatement",
|
|
@@ -93,6 +101,115 @@ const relatedDocumentLabels = {
|
|
|
93
101
|
replaces: "relatedDocument.replaces",
|
|
94
102
|
references: "relatedDocument.references",
|
|
95
103
|
};
|
|
104
|
+
/**
|
|
105
|
+
* The positions: number 40 px and VAT rate 50 px fixed, the description
|
|
106
|
+
* flexible with at least 120 px (as the grid in the styles declares); the
|
|
107
|
+
* last column is the one the sums line up with.
|
|
108
|
+
*/
|
|
109
|
+
const positionColumns = {
|
|
110
|
+
columns: [
|
|
111
|
+
{ cellSelector: ".quantityCell", widthProperty: "--quantity-column-width", minWidth: 50 },
|
|
112
|
+
{ cellSelector: ".unitCell", widthProperty: "--unit-column-width", minWidth: 50 },
|
|
113
|
+
{ cellSelector: ".unitPriceCell", widthProperty: "--unit-price-column-width", minWidth: 100 },
|
|
114
|
+
{ cellSelector: ".amountCell", widthProperty: "--amount-column-width", minWidth: 100 },
|
|
115
|
+
],
|
|
116
|
+
fixedWidth: 90,
|
|
117
|
+
flexibleMinWidth: 120,
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* A reminder's claims, and its charges and sums, which share the last column;
|
|
121
|
+
* the document label is flexible with at least 150 px (as the grid in the
|
|
122
|
+
* styles declares).
|
|
123
|
+
*/
|
|
124
|
+
const reminderColumns = {
|
|
125
|
+
columns: [
|
|
126
|
+
{ cellSelector: ".issueDateCell", widthProperty: "--issue-date-column-width", minWidth: 80 },
|
|
127
|
+
{ cellSelector: ".dueDateCell", widthProperty: "--due-date-column-width", minWidth: 80 },
|
|
128
|
+
{ cellSelector: ".grossCell", widthProperty: "--gross-column-width", minWidth: 100 },
|
|
129
|
+
{ cellSelector: ".amountCell", widthProperty: "--amount-column-width", minWidth: 100 },
|
|
130
|
+
],
|
|
131
|
+
fixedWidth: 0,
|
|
132
|
+
flexibleMinWidth: 150,
|
|
133
|
+
};
|
|
134
|
+
/** The smallest font a cell is set in to fit its column, in px. */
|
|
135
|
+
const MIN_FITTED_FONT_SIZE = 8;
|
|
136
|
+
/**
|
|
137
|
+
* The width a cell's text needs, its padding included, measured on the text
|
|
138
|
+
* itself, so it is the same whether the text fits its column or overflows it.
|
|
139
|
+
*/
|
|
140
|
+
const neededWidth = (cellArg) => {
|
|
141
|
+
const range = document.createRange();
|
|
142
|
+
range.selectNodeContents(cellArg);
|
|
143
|
+
const style = getComputedStyle(cellArg);
|
|
144
|
+
return Math.ceil(range.getBoundingClientRect().width +
|
|
145
|
+
parseFloat(style.paddingLeft) +
|
|
146
|
+
parseFloat(style.paddingRight));
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Widths for columns that want `wantedArg` and get at least `minimumsArg`,
|
|
150
|
+
* within `availableArg`: what is left above the minimums is granted in equal
|
|
151
|
+
* shares, a column never getting more than it wants.
|
|
152
|
+
*/
|
|
153
|
+
const shareWidth = (wantedArg, minimumsArg, availableArg) => {
|
|
154
|
+
const widths = [...minimumsArg];
|
|
155
|
+
let remaining = availableArg - minimumsArg.reduce((sumArg, widthArg) => sumArg + widthArg, 0);
|
|
156
|
+
let open = widths.map((_, index) => index).filter((index) => wantedArg[index] > widths[index]);
|
|
157
|
+
while (open.length > 0 && remaining >= 1) {
|
|
158
|
+
const share = remaining / open.length;
|
|
159
|
+
for (const index of open) {
|
|
160
|
+
const grant = Math.min(share, wantedArg[index] - widths[index]);
|
|
161
|
+
widths[index] += grant;
|
|
162
|
+
remaining -= grant;
|
|
163
|
+
}
|
|
164
|
+
open = open.filter((index) => wantedArg[index] - widths[index] >= 1);
|
|
165
|
+
}
|
|
166
|
+
return widths.map((widthArg) => Math.floor(widthArg));
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Sets a cell whose text is wider than its column in a smaller font, down to
|
|
170
|
+
* `MIN_FITTED_FONT_SIZE`, and lets it wrap within the column when even that
|
|
171
|
+
* is too wide.
|
|
172
|
+
*/
|
|
173
|
+
const fitCellText = (cellArg, columnWidthArg) => {
|
|
174
|
+
const needed = neededWidth(cellArg);
|
|
175
|
+
if (needed <= columnWidthArg) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const style = getComputedStyle(cellArg);
|
|
179
|
+
const padding = parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
|
|
180
|
+
const fontSize = (parseFloat(style.fontSize) * (columnWidthArg - padding)) / (needed - padding);
|
|
181
|
+
if (fontSize >= MIN_FITTED_FONT_SIZE) {
|
|
182
|
+
cellArg.style.fontSize = `${Math.floor(fontSize * 10) / 10}px`;
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
cellArg.style.fontSize = `${MIN_FITTED_FONT_SIZE}px`;
|
|
186
|
+
cellArg.style.whiteSpace = "normal";
|
|
187
|
+
cellArg.style.overflowWrap = "anywhere";
|
|
188
|
+
};
|
|
189
|
+
/** The kind of a reminded document, as the claims table names it. */
|
|
190
|
+
const claimDocumentLabels = {
|
|
191
|
+
invoice: "paymentReminder@@claim.invoice",
|
|
192
|
+
"corrected-invoice": "paymentReminder@@claim.correctedInvoice",
|
|
193
|
+
debitnote: "paymentReminder@@claim.debitnote",
|
|
194
|
+
};
|
|
195
|
+
/** The words for a detail of § 14 Abs. 4 Satz 1 UStG a corrected invoice supplies or corrects. */
|
|
196
|
+
const correctionDetailLabels = {
|
|
197
|
+
parties: "correctedInvoice.detail.parties",
|
|
198
|
+
"supplier-tax-number": "correctedInvoice.detail.supplierTaxNumber",
|
|
199
|
+
"issue-date": "correctedInvoice.detail.issueDate",
|
|
200
|
+
"invoice-number": "correctedInvoice.detail.invoiceNumber",
|
|
201
|
+
"supply-description": "correctedInvoice.detail.supplyDescription",
|
|
202
|
+
"supply-date": "correctedInvoice.detail.supplyDate",
|
|
203
|
+
"net-amount": "correctedInvoice.detail.netAmount",
|
|
204
|
+
tax: "correctedInvoice.detail.tax",
|
|
205
|
+
"retention-note": "correctedInvoice.detail.retentionNote",
|
|
206
|
+
"special-case-detail": "correctedInvoice.detail.specialCaseDetail",
|
|
207
|
+
};
|
|
208
|
+
/** What was done with a detail: supplied when it was missing, corrected when it was incorrect. */
|
|
209
|
+
const correctionDefectLabels = {
|
|
210
|
+
missing: "correctedInvoice.defect.missing",
|
|
211
|
+
incorrect: "correctedInvoice.defect.incorrect",
|
|
212
|
+
};
|
|
96
213
|
let DeContentInvoice = (() => {
|
|
97
214
|
let _classDecorators = [customElement("dedocument-contentinvoice")];
|
|
98
215
|
let _classDescriptor;
|
|
@@ -161,6 +278,16 @@ let DeContentInvoice = (() => {
|
|
|
161
278
|
? this.letterData
|
|
162
279
|
: null;
|
|
163
280
|
}
|
|
281
|
+
/** The payment reminder this content prints, or null. */
|
|
282
|
+
get paymentReminder() {
|
|
283
|
+
return plugins.shared.isPaymentReminder(this.letterData)
|
|
284
|
+
? this.letterData
|
|
285
|
+
: null;
|
|
286
|
+
}
|
|
287
|
+
/** The currency of the letter's amounts: an accounting document's or a reminder's. */
|
|
288
|
+
get currency() {
|
|
289
|
+
return this.accountingDoc?.currency ?? this.paymentReminder?.currency;
|
|
290
|
+
}
|
|
164
291
|
/**
|
|
165
292
|
* The document builds this element for every letter; one that is no
|
|
166
293
|
* accounting document, and one of a type this version does not know, keep
|
|
@@ -196,7 +323,7 @@ let DeContentInvoice = (() => {
|
|
|
196
323
|
|
|
197
324
|
.grid {
|
|
198
325
|
display: grid;
|
|
199
|
-
grid-template-columns: 40px
|
|
326
|
+
grid-template-columns: 40px minmax(120px, 1fr) var(--quantity-column-width, 50px) var(--unit-column-width, 50px) var(--unit-price-column-width, 100px) 50px var(--amount-column-width, 100px);
|
|
200
327
|
}
|
|
201
328
|
|
|
202
329
|
.topLine {
|
|
@@ -216,6 +343,16 @@ let DeContentInvoice = (() => {
|
|
|
216
343
|
border-right: none;
|
|
217
344
|
}
|
|
218
345
|
|
|
346
|
+
/*
|
|
347
|
+
* the description takes the room the other columns leave, at least its
|
|
348
|
+
* minimum, and wraps within it, so a long one never widens the table
|
|
349
|
+
* beyond the page
|
|
350
|
+
*/
|
|
351
|
+
.lineItem.descriptionCell {
|
|
352
|
+
white-space: normal;
|
|
353
|
+
overflow-wrap: anywhere;
|
|
354
|
+
}
|
|
355
|
+
|
|
219
356
|
.value.rightAlign,
|
|
220
357
|
.lineItem.rightAlign {
|
|
221
358
|
text-align: right;
|
|
@@ -233,6 +370,36 @@ let DeContentInvoice = (() => {
|
|
|
233
370
|
box-sizing: content-box;
|
|
234
371
|
}
|
|
235
372
|
|
|
373
|
+
.claimGrid {
|
|
374
|
+
display: grid;
|
|
375
|
+
grid-template-columns: minmax(150px, 1fr) var(--issue-date-column-width, 80px) var(--due-date-column-width, 80px) var(--gross-column-width, 100px) var(--amount-column-width, 100px);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.chargeGrid {
|
|
379
|
+
display: grid;
|
|
380
|
+
grid-template-columns: auto var(--amount-column-width, 100px);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.chargeGrid.dataHeader {
|
|
384
|
+
margin-top: 12px;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/* a charge's description and basis wrap: the basis of default interest is longer than a line */
|
|
388
|
+
.lineItem.chargeText {
|
|
389
|
+
white-space: normal;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.chargeBasis {
|
|
393
|
+
margin-top: 2px;
|
|
394
|
+
font-size: 11px;
|
|
395
|
+
color: #555;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/* a provision is not split across lines */
|
|
399
|
+
.citation {
|
|
400
|
+
white-space: nowrap;
|
|
401
|
+
}
|
|
402
|
+
|
|
236
403
|
.sums {
|
|
237
404
|
margin-top: 5px;
|
|
238
405
|
font-size: 12px;
|
|
@@ -242,7 +409,7 @@ let DeContentInvoice = (() => {
|
|
|
242
409
|
.sums .sumline {
|
|
243
410
|
margin-top: 3px;
|
|
244
411
|
display: grid;
|
|
245
|
-
grid-template-columns: auto 100px;
|
|
412
|
+
grid-template-columns: auto var(--amount-column-width, 100px);
|
|
246
413
|
}
|
|
247
414
|
|
|
248
415
|
.sums .sumline .label {
|
|
@@ -260,6 +427,21 @@ let DeContentInvoice = (() => {
|
|
|
260
427
|
font-weight: bold;
|
|
261
428
|
}
|
|
262
429
|
|
|
430
|
+
/* the tax an advance payment contains is stated, not added up */
|
|
431
|
+
.sums .sumline--contained .label,
|
|
432
|
+
.sums .sumline--contained .value {
|
|
433
|
+
font-weight: normal;
|
|
434
|
+
font-size: 11px;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
.advancePayment {
|
|
438
|
+
margin-top: 2px;
|
|
439
|
+
padding-left: 20%;
|
|
440
|
+
font-size: 11px;
|
|
441
|
+
text-align: right;
|
|
442
|
+
color: #555;
|
|
443
|
+
}
|
|
444
|
+
|
|
263
445
|
.divider {
|
|
264
446
|
margin-top: 8px;
|
|
265
447
|
border-top: 1px dotted #ccc;
|
|
@@ -286,6 +468,19 @@ let DeContentInvoice = (() => {
|
|
|
286
468
|
margin-top: 4px;
|
|
287
469
|
}
|
|
288
470
|
|
|
471
|
+
.correction {
|
|
472
|
+
margin-bottom: 12px;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.correctionTitle {
|
|
476
|
+
font-weight: bold;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.correctionDetails ul {
|
|
480
|
+
margin: 2px 0 0 0;
|
|
481
|
+
padding-left: 18px;
|
|
482
|
+
}
|
|
483
|
+
|
|
289
484
|
.relatedDocuments .label {
|
|
290
485
|
font-weight: bold;
|
|
291
486
|
}
|
|
@@ -314,7 +509,7 @@ let DeContentInvoice = (() => {
|
|
|
314
509
|
* an unknown or missing currency falls back to a plain decimal number.
|
|
315
510
|
*/
|
|
316
511
|
formatPrice(value) {
|
|
317
|
-
const currency = this.
|
|
512
|
+
const currency = this.currency;
|
|
318
513
|
const locale = localeForLanguage(this.documentSettings?.languageCode);
|
|
319
514
|
if (currency) {
|
|
320
515
|
try {
|
|
@@ -326,6 +521,30 @@ let DeContentInvoice = (() => {
|
|
|
326
521
|
}
|
|
327
522
|
return new Intl.NumberFormat(locale, { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(value);
|
|
328
523
|
}
|
|
524
|
+
/**
|
|
525
|
+
* Formats a quantity in the document's language with every decimal it
|
|
526
|
+
* carries: 12.5 prints as "12,5" in German and "12.5" in English, and no
|
|
527
|
+
* stated quantity is rounded. The decimals are those of the shortest
|
|
528
|
+
* representation of the number, the one `String()` gives, as the unit name
|
|
529
|
+
* counts them for its singular or plural.
|
|
530
|
+
*/
|
|
531
|
+
formatQuantity(quantityArg) {
|
|
532
|
+
const fractionDigits = plugins.shared.quantityFractionDigits(quantityArg);
|
|
533
|
+
return new Intl.NumberFormat(localeForLanguage(this.documentSettings?.languageCode), {
|
|
534
|
+
minimumFractionDigits: fractionDigits,
|
|
535
|
+
maximumFractionDigits: fractionDigits,
|
|
536
|
+
}).format(quantityArg);
|
|
537
|
+
}
|
|
538
|
+
/** Formats a rate in percent, with as many decimals as it states, up to four. */
|
|
539
|
+
formatPercent(percentArg) {
|
|
540
|
+
return new Intl.NumberFormat(localeForLanguage(this.documentSettings?.languageCode), { style: "percent", maximumFractionDigits: 4 }).format(percentArg / 100);
|
|
541
|
+
}
|
|
542
|
+
/** Formats a day in the document's language and date style. */
|
|
543
|
+
formatDay(timestampArg) {
|
|
544
|
+
return new Intl.DateTimeFormat(this.documentSettings.languageCode, {
|
|
545
|
+
dateStyle: this.documentSettings.dateStyle,
|
|
546
|
+
}).format(new Date(timestampArg));
|
|
547
|
+
}
|
|
329
548
|
getTotalNet = (__runInitializers(this, _renderContentLength_extraInitializers), () => {
|
|
330
549
|
let totalNet = 0;
|
|
331
550
|
const accountingDoc = this.accountingDoc;
|
|
@@ -470,20 +689,24 @@ let DeContentInvoice = (() => {
|
|
|
470
689
|
currentLength = await this.getContentLength();
|
|
471
690
|
}
|
|
472
691
|
}
|
|
473
|
-
/**
|
|
474
|
-
|
|
692
|
+
/**
|
|
693
|
+
* The due date, which only an accounting document and a payment reminder
|
|
694
|
+
* have: it counts `dueInDays` from the letter's date. A document that
|
|
695
|
+
* states a paid amount names the amount due, since the total is not what
|
|
696
|
+
* remains to be paid.
|
|
697
|
+
*/
|
|
698
|
+
renderPaymentTerms(optionsArg) {
|
|
475
699
|
return html `<div class="infoBox">
|
|
476
700
|
<div>
|
|
477
701
|
<div>
|
|
478
|
-
<div class="label">
|
|
479
|
-
${this.translateKey("invoice@@payment.terms")}
|
|
480
|
-
</div>
|
|
702
|
+
<div class="label">${this.translateKey(optionsArg.labelKey)}</div>
|
|
481
703
|
<span>
|
|
482
|
-
${
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
704
|
+
${optionsArg.amountDue === undefined
|
|
705
|
+
? this.translateKey(optionsArg.textKey)
|
|
706
|
+
: html `${this.translateKey("payment.amountDue")}:
|
|
707
|
+
${this.formatPrice(optionsArg.amountDue)}
|
|
708
|
+
${this.translateKey("payment.terms.amountDue")}`}
|
|
709
|
+
${this.formatDay(new Date(optionsArg.date).setDate(new Date(optionsArg.date).getDate() + optionsArg.dueInDays))}
|
|
487
710
|
</span>
|
|
488
711
|
</div>
|
|
489
712
|
</div>
|
|
@@ -494,13 +717,13 @@ let DeContentInvoice = (() => {
|
|
|
494
717
|
* code: a euro amount to the sender's IBAN, which a document in another
|
|
495
718
|
* currency or without the sender's IBAN does not have.
|
|
496
719
|
*/
|
|
497
|
-
renderPaymentInfo(
|
|
498
|
-
const bic =
|
|
499
|
-
const name =
|
|
500
|
-
const iban =
|
|
501
|
-
const currency =
|
|
502
|
-
const totalGross =
|
|
503
|
-
const reference =
|
|
720
|
+
renderPaymentInfo(optionsArg) {
|
|
721
|
+
const bic = optionsArg.from.sepaConnection?.bic;
|
|
722
|
+
const name = optionsArg.from.name;
|
|
723
|
+
const iban = optionsArg.from.sepaConnection?.iban;
|
|
724
|
+
const currency = optionsArg.currency;
|
|
725
|
+
const totalGross = optionsArg.amount;
|
|
726
|
+
const reference = optionsArg.reference;
|
|
504
727
|
if (typeof iban !== "string" ||
|
|
505
728
|
plugins.shared.buildEpcQrPayload({
|
|
506
729
|
bic,
|
|
@@ -528,6 +751,99 @@ let DeContentInvoice = (() => {
|
|
|
528
751
|
/>
|
|
529
752
|
</div>
|
|
530
753
|
</div>`;
|
|
754
|
+
}
|
|
755
|
+
/**
|
|
756
|
+
* The paid amount and the amount due, below the gross total, when the
|
|
757
|
+
* document states a paid amount (EN 16931 BT-113 and BT-115). The advance
|
|
758
|
+
* payments a final invoice deducts are deducted as the gross total received,
|
|
759
|
+
* with the tax it contains stated per rate, as Abschnitt 14.8 Abs. 7 Satz 3
|
|
760
|
+
* UStAE allows: "Statt der vorausgezahlten Entgelte oder Teilentgelte und
|
|
761
|
+
* der Steuerbeträge können auch die Gesamtbeträge der Voraus- oder
|
|
762
|
+
* Anzahlungen abgesetzt und die darin enthaltenen Steuerbeträge zusätzlich
|
|
763
|
+
* angegeben werden." More paid than the total prints as a credit balance.
|
|
764
|
+
*/
|
|
765
|
+
renderPaidAmountSums(summaryArg) {
|
|
766
|
+
return html `<div class="sumline">
|
|
767
|
+
<div class="label">${this.translateKey("payment.paid")}</div>
|
|
768
|
+
<div class="value rightAlign amountCell">
|
|
769
|
+
${this.formatPrice(summaryArg.paidAmount)}
|
|
770
|
+
</div>
|
|
771
|
+
</div>
|
|
772
|
+
${summaryArg.advancePaymentTaxes.map((taxArg) => html `<div class="sumline sumline--contained">
|
|
773
|
+
<div class="label">
|
|
774
|
+
${this.translateKey("advancePayment.vat")} ${taxArg.percentage}%
|
|
775
|
+
</div>
|
|
776
|
+
<div class="value rightAlign amountCell">
|
|
777
|
+
${this.formatPrice(taxArg.vat)}
|
|
778
|
+
</div>
|
|
779
|
+
</div>`)}
|
|
780
|
+
<div class="sumline">
|
|
781
|
+
<div class="label">
|
|
782
|
+
${this.translateKey(summaryArg.amountDue < 0 ? "payment.creditBalance" : "payment.amountDue")}
|
|
783
|
+
</div>
|
|
784
|
+
<div class="value value--total rightAlign amountCell">
|
|
785
|
+
${this.formatPrice(Math.abs(summaryArg.amountDue))}
|
|
786
|
+
</div>
|
|
787
|
+
</div>`;
|
|
788
|
+
}
|
|
789
|
+
/**
|
|
790
|
+
* The advance payments the paid amount deducts, one line each, by the
|
|
791
|
+
* advance invoice's number and date and the day the payment was received,
|
|
792
|
+
* as far as the document states them. Each line is its own block, so a long
|
|
793
|
+
* list flows across pages.
|
|
794
|
+
*/
|
|
795
|
+
renderAdvancePayments(summaryArg) {
|
|
796
|
+
return summaryArg.advancePayments.map((paymentArg) => html `<div class="advancePayment">
|
|
797
|
+
${this.translateKey("advancePayment.title")}${paymentArg.invoice
|
|
798
|
+
? html ` ${this.translateKey("advancePayment.invoice")}
|
|
799
|
+
${paymentArg.invoice.documentId}${paymentArg.invoice.issueDate !== undefined
|
|
800
|
+
? html ` ${this.translateKey("advancePayment.invoiceDate")}
|
|
801
|
+
${this.formatDay(paymentArg.invoice.issueDate)}`
|
|
802
|
+
: null}`
|
|
803
|
+
: null}${paymentArg.receivedOn !== undefined
|
|
804
|
+
? html `, ${this.translateKey("advancePayment.received")}
|
|
805
|
+
${this.formatDay(paymentArg.receivedOn)}`
|
|
806
|
+
: null}
|
|
807
|
+
</div>`);
|
|
808
|
+
}
|
|
809
|
+
/**
|
|
810
|
+
* What the document asks to be paid: the payment terms and the QR pay box
|
|
811
|
+
* for the gross total, or for the amount due when the document states a
|
|
812
|
+
* paid amount. When nothing is due, it says so, and names the credit
|
|
813
|
+
* balance when more was paid than the total; there are no terms and no QR
|
|
814
|
+
* pay box then.
|
|
815
|
+
*/
|
|
816
|
+
renderPaymentRequest(accountingDocArg, summaryArg) {
|
|
817
|
+
if (summaryArg && summaryArg.amountDue <= 0) {
|
|
818
|
+
return html `<div class="infoBox">
|
|
819
|
+
<div>
|
|
820
|
+
<div>
|
|
821
|
+
<div class="label">${this.translateKey("invoice@@payment.terms")}</div>
|
|
822
|
+
<span>
|
|
823
|
+
${summaryArg.amountDue === 0
|
|
824
|
+
? this.translateKey("payment.nothingDue")
|
|
825
|
+
: html `${this.translateKey("payment.nothingDue.creditBalance")}
|
|
826
|
+
${this.formatPrice(-summaryArg.amountDue)}.`}
|
|
827
|
+
</span>
|
|
828
|
+
</div>
|
|
829
|
+
</div>
|
|
830
|
+
</div>`;
|
|
831
|
+
}
|
|
832
|
+
return html `
|
|
833
|
+
${this.renderPaymentTerms({
|
|
834
|
+
date: accountingDocArg.date,
|
|
835
|
+
dueInDays: accountingDocArg.dueInDays,
|
|
836
|
+
labelKey: "invoice@@payment.terms",
|
|
837
|
+
textKey: "invoice@@payment.terms.direct",
|
|
838
|
+
amountDue: summaryArg?.amountDue,
|
|
839
|
+
})}
|
|
840
|
+
${this.renderPaymentInfo({
|
|
841
|
+
from: accountingDocArg.from,
|
|
842
|
+
currency: accountingDocArg.currency,
|
|
843
|
+
amount: summaryArg ? summaryArg.amountDue : this.getTotalGross(),
|
|
844
|
+
reference: accountingDocArg.id,
|
|
845
|
+
})}
|
|
846
|
+
`;
|
|
531
847
|
}
|
|
532
848
|
/**
|
|
533
849
|
* The reverse-charge statement. § 14a UStG requires the words
|
|
@@ -546,6 +862,43 @@ let DeContentInvoice = (() => {
|
|
|
546
862
|
${localizedLine === plugins.shared.translation.REVERSE_CHARGE_STATUTORY_PHRASE_DE
|
|
547
863
|
? null
|
|
548
864
|
: html `<div>${localizedLine}</div>`}
|
|
865
|
+
</div>`;
|
|
866
|
+
}
|
|
867
|
+
/**
|
|
868
|
+
* What makes a corrected invoice a correction (§ 31 Abs. 5 UStDV): its
|
|
869
|
+
* title, the invoice it corrects by number and issue date when the document
|
|
870
|
+
* states them ("spezifisch und eindeutig", Satz 2), and the details it
|
|
871
|
+
* supplies or corrects, in words. A received corrected invoice may name
|
|
872
|
+
* neither; then only the title is printed, and no reference is made up.
|
|
873
|
+
*/
|
|
874
|
+
renderCorrection() {
|
|
875
|
+
const accountingDoc = this.accountingDoc;
|
|
876
|
+
if (accountingDoc?.accountingDocType !== "corrected-invoice") {
|
|
877
|
+
return null;
|
|
878
|
+
}
|
|
879
|
+
const reference = accountingDoc.correctedInvoice;
|
|
880
|
+
const corrections = accountingDoc.corrections ?? [];
|
|
881
|
+
return html `<div class="correction">
|
|
882
|
+
<div class="correctionTitle">
|
|
883
|
+
${this.translateKey("correctedInvoice.title")}${reference
|
|
884
|
+
? html ` ${this.translateKey("correctedInvoice.reference")}
|
|
885
|
+
${reference.documentId}${reference.issueDate !== undefined
|
|
886
|
+
? html ` ${this.translateKey("correctedInvoice.referenceDate")}
|
|
887
|
+
${this.formatDay(reference.issueDate)}`
|
|
888
|
+
: null}`
|
|
889
|
+
: null}
|
|
890
|
+
</div>
|
|
891
|
+
${corrections.length > 0
|
|
892
|
+
? html `<div class="correctionDetails">
|
|
893
|
+
<div>${this.translateKey("correctedInvoice.corrections")}:</div>
|
|
894
|
+
<ul>
|
|
895
|
+
${corrections.map((correctionArg) => html `<li>
|
|
896
|
+
${this.translateKey(correctionDetailLabels[correctionArg.detail])}:
|
|
897
|
+
${this.translateKey(correctionDefectLabels[correctionArg.defect])}
|
|
898
|
+
</li>`)}
|
|
899
|
+
</ul>
|
|
900
|
+
</div>`
|
|
901
|
+
: null}
|
|
549
902
|
</div>`;
|
|
550
903
|
}
|
|
551
904
|
/** The earlier documents a correction answers, by number and, when known, by date. */
|
|
@@ -573,8 +926,8 @@ let DeContentInvoice = (() => {
|
|
|
573
926
|
* pages and cannot split one, so a note is handed over token by token: a
|
|
574
927
|
* paragraph in one piece could be taller than a page and would never fit.
|
|
575
928
|
*/
|
|
576
|
-
renderNotes() {
|
|
577
|
-
const notes = (
|
|
929
|
+
renderNotes(notesArg) {
|
|
930
|
+
const notes = (notesArg ?? [])
|
|
578
931
|
.filter((noteArg) => typeof noteArg === "string")
|
|
579
932
|
.map((noteArg) => noteArg.replace(/\r\n?/g, "\n").trim())
|
|
580
933
|
.filter((noteArg) => noteArg.length > 0);
|
|
@@ -584,6 +937,210 @@ let DeContentInvoice = (() => {
|
|
|
584
937
|
// no whitespace between the elements: a text node would stay behind when its neighbours move to another page
|
|
585
938
|
return html `${notes.map((noteArg) => html `<div class="noteStart"></div>${(noteArg.match(noteTokenPattern) ?? []).map((tokenArg) => html `<span class="noteText">${tokenArg}</span>`)}`)}`;
|
|
586
939
|
}
|
|
940
|
+
/**
|
|
941
|
+
* The document a reminder claims, as the claims table and the charges name
|
|
942
|
+
* it: its kind and its number.
|
|
943
|
+
*/
|
|
944
|
+
claimLabel(reminderArg, documentIdArg) {
|
|
945
|
+
const claim = reminderArg.claims.find((claimArg) => claimArg.documentId === documentIdArg);
|
|
946
|
+
if (!claim) {
|
|
947
|
+
return documentIdArg;
|
|
948
|
+
}
|
|
949
|
+
// a kind this version does not know is named as an invoice, as the letterhead and the content do
|
|
950
|
+
const label = claimDocumentLabels[claim.documentType] ?? claimDocumentLabels.invoice;
|
|
951
|
+
return `${this.translateKey(label)} ${documentIdArg}`;
|
|
952
|
+
}
|
|
953
|
+
/**
|
|
954
|
+
* The ground of the claim: every reminded document with its number, its
|
|
955
|
+
* date, the date it fell due when it stated one, its gross total and what is
|
|
956
|
+
* still open on it.
|
|
957
|
+
*/
|
|
958
|
+
renderReminderClaims(reminderArg) {
|
|
959
|
+
return html `<div class="claimGrid topLine dataHeader">
|
|
960
|
+
<div class="lineItem descriptionCell">
|
|
961
|
+
${this.translateKey("paymentReminder@@claim.document")}
|
|
962
|
+
</div>
|
|
963
|
+
<div class="lineItem rightAlign issueDateCell">
|
|
964
|
+
${this.translateKey("paymentReminder@@claim.issueDate")}
|
|
965
|
+
</div>
|
|
966
|
+
<div class="lineItem rightAlign dueDateCell">
|
|
967
|
+
${this.translateKey("paymentReminder@@claim.dueDate")}
|
|
968
|
+
</div>
|
|
969
|
+
<div class="lineItem rightAlign grossCell">
|
|
970
|
+
${this.translateKey("paymentReminder@@claim.totalGross")}
|
|
971
|
+
</div>
|
|
972
|
+
<div class="lineItem rightAlign amountCell">
|
|
973
|
+
${this.translateKey("paymentReminder@@claim.outstanding")}
|
|
974
|
+
</div>
|
|
975
|
+
</div>
|
|
976
|
+
${reminderArg.claims.map((claimArg) => html `<div class="claimGrid needsDataHeader">
|
|
977
|
+
<div class="lineItem descriptionCell">
|
|
978
|
+
${this.claimLabel(reminderArg, claimArg.documentId)}
|
|
979
|
+
</div>
|
|
980
|
+
<div class="lineItem rightAlign issueDateCell">
|
|
981
|
+
${this.formatDay(claimArg.issueDate)}
|
|
982
|
+
</div>
|
|
983
|
+
<div class="lineItem rightAlign dueDateCell">
|
|
984
|
+
${claimArg.dueDate !== undefined
|
|
985
|
+
? this.formatDay(claimArg.dueDate)
|
|
986
|
+
: "–"}
|
|
987
|
+
</div>
|
|
988
|
+
<div class="lineItem rightAlign grossCell">
|
|
989
|
+
${this.formatPrice(claimArg.totalGross)}
|
|
990
|
+
</div>
|
|
991
|
+
<div class="lineItem rightAlign amountCell">
|
|
992
|
+
${this.formatPrice(claimArg.outstandingAmount)}
|
|
993
|
+
</div>
|
|
994
|
+
</div>`)}`;
|
|
995
|
+
}
|
|
996
|
+
/**
|
|
997
|
+
* What a charge rests on, as the reminder states it: default interest its
|
|
998
|
+
* computation (principal, rate a year with the base rate and the surcharge
|
|
999
|
+
* points of § 288 Abs. 1 or 2 BGB, first and last day), the default lump sum
|
|
1000
|
+
* its provision, and every charge the claim it accrues on. A cost with lump
|
|
1001
|
+
* sums credited against it lists them (§ 288 Abs. 5 Satz 3 BGB); its amount
|
|
1002
|
+
* is already the cost less them.
|
|
1003
|
+
*/
|
|
1004
|
+
renderChargeBasis(reminderArg, chargeArg) {
|
|
1005
|
+
switch (chargeArg.chargeType) {
|
|
1006
|
+
case "default-interest": {
|
|
1007
|
+
const interest = chargeArg.interest;
|
|
1008
|
+
return html `<div class="chargeBasis">
|
|
1009
|
+
${this.claimLabel(reminderArg, chargeArg.claimDocumentId)}:
|
|
1010
|
+
${this.formatPrice(interest.principal)} ×
|
|
1011
|
+
${this.formatPercent(interest.ratePercent)}
|
|
1012
|
+
${this.translateKey("paymentReminder@@interest.perYear")}
|
|
1013
|
+
(${this.translateKey("paymentReminder@@interest.baseRate")}
|
|
1014
|
+
${this.formatPercent(interest.baseRatePercent)}
|
|
1015
|
+
${this.translateKey("paymentReminder@@interest.plus")}
|
|
1016
|
+
${interest.surchargePoints}
|
|
1017
|
+
${this.translateKey("paymentReminder@@interest.points")},
|
|
1018
|
+
<span class="citation"
|
|
1019
|
+
>${plugins.shared.defaultInterestCitations[interest.legalBasis]}</span
|
|
1020
|
+
>),
|
|
1021
|
+
${this.formatDay(interest.from)} – ${this.formatDay(interest.to)}
|
|
1022
|
+
</div>`;
|
|
1023
|
+
}
|
|
1024
|
+
case "default-lump-sum":
|
|
1025
|
+
return html `<div class="chargeBasis">
|
|
1026
|
+
${this.claimLabel(reminderArg, chargeArg.claimDocumentId)},
|
|
1027
|
+
<span class="citation"
|
|
1028
|
+
>${plugins.shared.DEFAULT_LUMP_SUM_CITATION}</span
|
|
1029
|
+
>
|
|
1030
|
+
</div>`;
|
|
1031
|
+
case "reminder-fee":
|
|
1032
|
+
case "other-cost": {
|
|
1033
|
+
const offsets = chargeArg.lumpSumOffsets ?? [];
|
|
1034
|
+
if (chargeArg.claimDocumentId === undefined && offsets.length === 0) {
|
|
1035
|
+
return null;
|
|
1036
|
+
}
|
|
1037
|
+
return html `${chargeArg.claimDocumentId !== undefined
|
|
1038
|
+
? html `<div class="chargeBasis">
|
|
1039
|
+
${this.claimLabel(reminderArg, chargeArg.claimDocumentId)}
|
|
1040
|
+
</div>`
|
|
1041
|
+
: null}
|
|
1042
|
+
${offsets.map((offsetArg) => html `<div class="chargeBasis">
|
|
1043
|
+
${this.translateKey("paymentReminder@@charge.lumpSumOffset")}
|
|
1044
|
+
${this.claimLabel(reminderArg, offsetArg.claimDocumentId)}:
|
|
1045
|
+
${this.formatPrice(offsetArg.amount)}
|
|
1046
|
+
(<span class="citation"
|
|
1047
|
+
>${plugins.shared.LUMP_SUM_OFFSET_CITATION}</span
|
|
1048
|
+
>)
|
|
1049
|
+
</div>`)}`;
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
/** One row per charge: its description, what it rests on, and its amount. */
|
|
1054
|
+
renderReminderCharges(reminderArg) {
|
|
1055
|
+
if (reminderArg.charges.length === 0) {
|
|
1056
|
+
return null;
|
|
1057
|
+
}
|
|
1058
|
+
return html `<div class="chargeGrid topLine dataHeader">
|
|
1059
|
+
<div class="lineItem">
|
|
1060
|
+
${this.translateKey("paymentReminder@@charge.description")}
|
|
1061
|
+
</div>
|
|
1062
|
+
<div class="lineItem rightAlign amountCell">
|
|
1063
|
+
${this.translateKey("paymentReminder@@charge.amount")}
|
|
1064
|
+
</div>
|
|
1065
|
+
</div>
|
|
1066
|
+
${reminderArg.charges.map((chargeArg) => html `<div class="chargeGrid needsDataHeader">
|
|
1067
|
+
<div class="lineItem chargeText">
|
|
1068
|
+
<div>${chargeArg.description}</div>
|
|
1069
|
+
${this.renderChargeBasis(reminderArg, chargeArg)}
|
|
1070
|
+
</div>
|
|
1071
|
+
<div class="lineItem rightAlign amountCell">
|
|
1072
|
+
${this.formatPrice(chargeArg.amount)}
|
|
1073
|
+
</div>
|
|
1074
|
+
</div>`)}`;
|
|
1075
|
+
}
|
|
1076
|
+
/** The sums of a reminder: the open claims, the charges and the total payable, without VAT. */
|
|
1077
|
+
renderReminderSums(totalsArg, hasChargesArg) {
|
|
1078
|
+
return html `<div class="sums">
|
|
1079
|
+
<div class="sumline">
|
|
1080
|
+
<div class="label">
|
|
1081
|
+
${this.translateKey("paymentReminder@@paymentReminder.sum.claims")}
|
|
1082
|
+
</div>
|
|
1083
|
+
<div class="value rightAlign amountCell">
|
|
1084
|
+
${this.formatPrice(totalsArg.claimsOutstanding)}
|
|
1085
|
+
</div>
|
|
1086
|
+
</div>
|
|
1087
|
+
${hasChargesArg
|
|
1088
|
+
? html `<div class="sumline">
|
|
1089
|
+
<div class="label">
|
|
1090
|
+
${this.translateKey("paymentReminder@@paymentReminder.sum.charges")}
|
|
1091
|
+
</div>
|
|
1092
|
+
<div class="value rightAlign amountCell">
|
|
1093
|
+
${this.formatPrice(totalsArg.charges)}
|
|
1094
|
+
</div>
|
|
1095
|
+
</div>`
|
|
1096
|
+
: null}
|
|
1097
|
+
<div class="sumline">
|
|
1098
|
+
<div class="label">
|
|
1099
|
+
${this.translateKey("paymentReminder@@paymentReminder.sum.payable")}
|
|
1100
|
+
</div>
|
|
1101
|
+
<div class="value value--total rightAlign amountCell">
|
|
1102
|
+
${this.formatPrice(totalsArg.payable)}
|
|
1103
|
+
</div>
|
|
1104
|
+
</div>
|
|
1105
|
+
</div>`;
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* A payment reminder: the issuer's intro or the standard one, the reminded
|
|
1109
|
+
* documents, the charges, the sums, the notes, the new payment deadline and
|
|
1110
|
+
* the QR pay box for the total payable with the reminder's number.
|
|
1111
|
+
*/
|
|
1112
|
+
renderPaymentReminder(reminderArg) {
|
|
1113
|
+
const totals = plugins.shared.getPaymentReminderTotals(reminderArg);
|
|
1114
|
+
return html `
|
|
1115
|
+
<div>
|
|
1116
|
+
${reminderArg.topText ??
|
|
1117
|
+
this.translateKey("paymentReminder@@introStatement")}
|
|
1118
|
+
</div>
|
|
1119
|
+
${this.renderReminderClaims(reminderArg)}
|
|
1120
|
+
${this.renderReminderCharges(reminderArg)}
|
|
1121
|
+
${this.renderReminderSums(totals, reminderArg.charges.length > 0)}
|
|
1122
|
+
<div class="divider"></div>
|
|
1123
|
+
|
|
1124
|
+
<!-- NOTES -->
|
|
1125
|
+
${this.renderNotes(reminderArg.notes)}
|
|
1126
|
+
|
|
1127
|
+
<!-- PAYMENT DEADLINE -->
|
|
1128
|
+
${this.renderPaymentTerms({
|
|
1129
|
+
date: reminderArg.date,
|
|
1130
|
+
dueInDays: reminderArg.dueInDays,
|
|
1131
|
+
labelKey: "paymentReminder@@paymentReminder.deadline",
|
|
1132
|
+
textKey: "paymentReminder@@paymentReminder.deadline.text",
|
|
1133
|
+
})}
|
|
1134
|
+
|
|
1135
|
+
<!-- PAYMENT INFO -->
|
|
1136
|
+
${this.renderPaymentInfo({
|
|
1137
|
+
from: reminderArg.from,
|
|
1138
|
+
currency: reminderArg.currency,
|
|
1139
|
+
amount: totals.payable,
|
|
1140
|
+
reference: reminderArg.id,
|
|
1141
|
+
})}
|
|
1142
|
+
`;
|
|
1143
|
+
}
|
|
587
1144
|
renderReferencedContract() {
|
|
588
1145
|
return null;
|
|
589
1146
|
// return this.documentSettings.enableInvoiceContractRefSection &&
|
|
@@ -605,44 +1162,61 @@ let DeContentInvoice = (() => {
|
|
|
605
1162
|
}
|
|
606
1163
|
async attachInvoiceDom() {
|
|
607
1164
|
const contentNodes = await this.getContentNodes();
|
|
1165
|
+
const paymentReminder = this.paymentReminder;
|
|
1166
|
+
if (paymentReminder) {
|
|
1167
|
+
render(this.renderPaymentReminder(paymentReminder), contentNodes.currentContent);
|
|
1168
|
+
this.fitColumns(contentNodes.currentContent, ".claimGrid.dataHeader", reminderColumns);
|
|
1169
|
+
return;
|
|
1170
|
+
}
|
|
608
1171
|
const accountingDoc = this.accountingDoc;
|
|
1172
|
+
// throws when the advance payments do not add up to the paid amount
|
|
1173
|
+
const paidAmountSummary = accountingDoc
|
|
1174
|
+
? plugins.shared.getPaidAmountSummary(accountingDoc, this.getTotalGross())
|
|
1175
|
+
: null;
|
|
609
1176
|
render(html `
|
|
1177
|
+
${this.renderCorrection()}
|
|
610
1178
|
<div>${this.translateKey(this.docContent.introStatement)}</div>
|
|
611
1179
|
${this.renderRelatedDocuments()}
|
|
612
1180
|
<div class="grid topLine dataHeader">
|
|
613
1181
|
<div class="lineItem rightAlign">
|
|
614
1182
|
${this.translateKey("invoice@@item.position")}
|
|
615
1183
|
</div>
|
|
616
|
-
<div class="lineItem">
|
|
1184
|
+
<div class="lineItem descriptionCell">
|
|
617
1185
|
${this.translateKey("invoice@@description")}
|
|
618
1186
|
</div>
|
|
619
|
-
<div class="lineItem rightAlign">
|
|
1187
|
+
<div class="lineItem rightAlign quantityCell">
|
|
620
1188
|
${this.translateKey("invoice@@quantity")}
|
|
621
1189
|
</div>
|
|
622
|
-
<div class="lineItem"
|
|
623
|
-
|
|
1190
|
+
<div class="lineItem unitCell">
|
|
1191
|
+
${this.translateKey("invoice@@unit.type")}
|
|
1192
|
+
</div>
|
|
1193
|
+
<div class="lineItem rightAlign unitPriceCell">
|
|
624
1194
|
${this.translateKey("invoice@@price.unit.net")}
|
|
625
1195
|
</div>
|
|
626
1196
|
<div class="lineItem rightAlign">
|
|
627
1197
|
${this.translateKey("invoice@@vat.short")}
|
|
628
1198
|
</div>
|
|
629
|
-
<div class="lineItem rightAlign">
|
|
1199
|
+
<div class="lineItem rightAlign amountCell">
|
|
630
1200
|
${this.translateKey("invoice@@price.total.net")}
|
|
631
1201
|
</div>
|
|
632
1202
|
</div>
|
|
633
1203
|
${accountingDoc?.items?.map((invoiceItem, index) => html `
|
|
634
1204
|
<div class="grid needsDataHeader">
|
|
635
1205
|
<div class="lineItem rightAlign">${index + 1}</div>
|
|
636
|
-
<div class="lineItem">${invoiceItem.name}</div>
|
|
637
|
-
<div class="lineItem rightAlign"
|
|
638
|
-
|
|
639
|
-
|
|
1206
|
+
<div class="lineItem descriptionCell">${invoiceItem.name}</div>
|
|
1207
|
+
<div class="lineItem rightAlign quantityCell">
|
|
1208
|
+
${this.formatQuantity(invoiceItem.unitQuantity)}
|
|
1209
|
+
</div>
|
|
1210
|
+
<div class="lineItem unitCell">
|
|
1211
|
+
${plugins.shared.unitName(this.documentSettings.languageCode, invoiceItem.unitType, invoiceItem.unitQuantity)}
|
|
1212
|
+
</div>
|
|
1213
|
+
<div class="lineItem rightAlign unitPriceCell">
|
|
640
1214
|
${this.formatPrice(invoiceItem.unitNetPrice)}
|
|
641
1215
|
</div>
|
|
642
1216
|
<div class="lineItem rightAlign">
|
|
643
1217
|
${invoiceItem.vatPercentage}%
|
|
644
1218
|
</div>
|
|
645
|
-
<div class="lineItem rightAlign">
|
|
1219
|
+
<div class="lineItem rightAlign amountCell">
|
|
646
1220
|
${this.formatPrice(invoiceItem.unitQuantity * invoiceItem.unitNetPrice)}
|
|
647
1221
|
</div>
|
|
648
1222
|
</div>
|
|
@@ -652,7 +1226,7 @@ let DeContentInvoice = (() => {
|
|
|
652
1226
|
<div class="label">
|
|
653
1227
|
${this.translateKey("invoice@@sum.total.net")}
|
|
654
1228
|
</div>
|
|
655
|
-
<div class="value value--total rightAlign">
|
|
1229
|
+
<div class="value value--total rightAlign amountCell">
|
|
656
1230
|
${this.formatPrice(this.getTotalNet())}
|
|
657
1231
|
</div>
|
|
658
1232
|
</div>
|
|
@@ -674,7 +1248,7 @@ let DeContentInvoice = (() => {
|
|
|
674
1248
|
`
|
|
675
1249
|
: html ``}
|
|
676
1250
|
</div>
|
|
677
|
-
<div class="value rightAlign">
|
|
1251
|
+
<div class="value rightAlign amountCell">
|
|
678
1252
|
${this.formatPrice(vatGroupArg.vatAmountSum)}
|
|
679
1253
|
</div>
|
|
680
1254
|
</div>
|
|
@@ -682,11 +1256,13 @@ let DeContentInvoice = (() => {
|
|
|
682
1256
|
})}
|
|
683
1257
|
<div class="sumline">
|
|
684
1258
|
<div class="label">${this.translateKey("invoice@@totalGross")}</div>
|
|
685
|
-
<div class="value value--total rightAlign">
|
|
1259
|
+
<div class="value value--total rightAlign amountCell">
|
|
686
1260
|
${this.formatPrice(this.getTotalGross())}
|
|
687
1261
|
</div>
|
|
688
1262
|
</div>
|
|
1263
|
+
${paidAmountSummary ? this.renderPaidAmountSums(paidAmountSummary) : null}
|
|
689
1264
|
</div>
|
|
1265
|
+
${paidAmountSummary ? this.renderAdvancePayments(paidAmountSummary) : null}
|
|
690
1266
|
<div class="divider"></div>
|
|
691
1267
|
|
|
692
1268
|
${accountingDoc?.reverseCharge ? this.renderReverseChargeNote() : ``}
|
|
@@ -695,18 +1271,52 @@ let DeContentInvoice = (() => {
|
|
|
695
1271
|
${this.renderReferencedContract()}
|
|
696
1272
|
|
|
697
1273
|
<!-- NOTES -->
|
|
698
|
-
${this.renderNotes()}
|
|
1274
|
+
${this.renderNotes(accountingDoc?.notes)}
|
|
699
1275
|
|
|
700
|
-
<!-- PAYMENT TERMS -->
|
|
1276
|
+
<!-- PAYMENT TERMS AND PAYMENT INFO -->
|
|
701
1277
|
${accountingDoc && this.docContent.requestsPayment
|
|
702
|
-
? this.
|
|
703
|
-
: null}
|
|
704
|
-
|
|
705
|
-
<!-- PAYMENT INFO -->
|
|
706
|
-
${accountingDoc && this.docContent.requestsPayment
|
|
707
|
-
? this.renderPaymentInfo(accountingDoc)
|
|
1278
|
+
? this.renderPaymentRequest(accountingDoc, paidAmountSummary)
|
|
708
1279
|
: null}
|
|
709
1280
|
`, contentNodes.currentContent);
|
|
1281
|
+
this.fitColumns(contentNodes.currentContent, ".grid.dataHeader", positionColumns);
|
|
1282
|
+
}
|
|
1283
|
+
/**
|
|
1284
|
+
* Sizes the columns of a table to their widest cell. Every row is a grid of
|
|
1285
|
+
* its own, so the rows only line up when a column has one width for all of
|
|
1286
|
+
* them; each page renders every row before it is trimmed, so every page
|
|
1287
|
+
* measures the same widths.
|
|
1288
|
+
*
|
|
1289
|
+
* A column is never narrower than its minimum. The widths the columns ask
|
|
1290
|
+
* for beyond their minimums are granted out of the row's width less its
|
|
1291
|
+
* fixed columns and the minimum of its flexible column (the description),
|
|
1292
|
+
* in equal shares, so the table always fits the page. A cell whose text is
|
|
1293
|
+
* still wider than its column, such as an amount beyond hundreds of
|
|
1294
|
+
* billions, is set in a smaller font, down to 8 px, and wraps inside its
|
|
1295
|
+
* column once that is not enough, so it never runs into its neighbour.
|
|
1296
|
+
*/
|
|
1297
|
+
fitColumns(containerArg, headerRowSelectorArg, layoutArg) {
|
|
1298
|
+
const cellsOf = (columnArg) => Array.from(containerArg.querySelectorAll(columnArg.cellSelector));
|
|
1299
|
+
for (const column of layoutArg.columns) {
|
|
1300
|
+
this.style.removeProperty(column.widthProperty);
|
|
1301
|
+
for (const cell of cellsOf(column)) {
|
|
1302
|
+
cell.style.removeProperty("font-size");
|
|
1303
|
+
cell.style.removeProperty("white-space");
|
|
1304
|
+
cell.style.removeProperty("overflow-wrap");
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
const headerRow = containerArg.querySelector(headerRowSelectorArg);
|
|
1308
|
+
if (!headerRow || headerRow.clientWidth === 0) {
|
|
1309
|
+
// not laid out: the columns keep their minimums
|
|
1310
|
+
return;
|
|
1311
|
+
}
|
|
1312
|
+
const wanted = layoutArg.columns.map((columnArg) => cellsOf(columnArg).reduce((widestArg, cellArg) => Math.max(widestArg, neededWidth(cellArg)), columnArg.minWidth));
|
|
1313
|
+
const widths = shareWidth(wanted, layoutArg.columns.map((columnArg) => columnArg.minWidth), headerRow.clientWidth - layoutArg.fixedWidth - layoutArg.flexibleMinWidth);
|
|
1314
|
+
layoutArg.columns.forEach((columnArg, index) => {
|
|
1315
|
+
this.style.setProperty(columnArg.widthProperty, `${widths[index]}px`);
|
|
1316
|
+
for (const cell of cellsOf(columnArg)) {
|
|
1317
|
+
fitCellText(cell, widths[index]);
|
|
1318
|
+
}
|
|
1319
|
+
});
|
|
710
1320
|
}
|
|
711
1321
|
static {
|
|
712
1322
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
@@ -715,4 +1325,4 @@ let DeContentInvoice = (() => {
|
|
|
715
1325
|
return DeContentInvoice = _classThis;
|
|
716
1326
|
})();
|
|
717
1327
|
export { DeContentInvoice };
|
|
718
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGludm9pY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvY29udGVudGludm9pY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVFwRCw4RUFBOEU7QUFDOUUsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLGVBQXdCLEVBQVUsRUFBRTtJQUM3RCxRQUFRLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDaEQsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakI7WUFDRSxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBWUYsTUFBTSxxQkFBcUIsR0FHdkI7SUFDRixPQUFPLEVBQUU7UUFDUCxjQUFjLEVBQUUseUJBQXlCO1FBQ3pDLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLHNCQUFzQixFQUFFLEtBQUs7S0FDOUI7SUFDRCx5RkFBeUY7SUFDekYsVUFBVSxFQUFFO1FBQ1YsY0FBYyxFQUFFLDRC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
|
|
1328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGludm9pY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvY29udGVudGludm9pY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVFwRCw4RUFBOEU7QUFDOUUsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLGVBQXdCLEVBQVUsRUFBRTtJQUM3RCxRQUFRLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDaEQsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxJQUFJO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakI7WUFDRSxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBWUYsTUFBTSxxQkFBcUIsR0FHdkI7SUFDRixPQUFPLEVBQUU7UUFDUCxjQUFjLEVBQUUseUJBQXlCO1FBQ3pDLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLHNCQUFzQixFQUFFLEtBQUs7S0FDOUI7SUFDRCx3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLHNEQUFzRDtJQUN0RCxt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
|