@dangl/angular-ava 1.2.3-beta0010 → 1.2.3-beta0019
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/README.md +4 -1
- package/fesm2022/dangl-angular-ava.mjs +269 -154
- package/fesm2022/dangl-angular-ava.mjs.map +1 -1
- package/lib/ava-tree/components/table-structure/table-structure.component.d.ts +1 -1
- package/lib/ava-tree/constants/defaultTextWords.d.ts +2 -0
- package/lib/ava-tree/model/config-tree.model.d.ts +2 -1
- package/lib/ava-tree/services/configuration-tree.service.d.ts +3 -0
- package/lib/invoice/components/invoice-display/invoice-display.component.d.ts +3 -0
- package/lib/invoice/constants/index.d.ts +2 -1
- package/lib/invoice/constants/language.d.ts +8 -0
- package/lib/invoice/model/configInvoice.model.d.ts +3 -1
- package/lib/invoice/model/index.d.ts +2 -2
- package/lib/invoice/pipes/currency-plus.pipe.d.ts +11 -0
- package/lib/invoice/pipes/number-plus.pipe.d.ts +11 -0
- package/lib/invoice/pipes/percent-plus.pipe.d.ts +11 -0
- package/lib/invoice/services/configuration-invoice.service.d.ts +10 -5
- package/package.json +1 -1
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import { AsyncPipe, NgTemplateOutlet, NgClass, DecimalPipe,
|
|
1
|
+
import { AsyncPipe, NgTemplateOutlet, NgClass, DecimalPipe, registerLocaleData, CurrencyPipe, PercentPipe, DatePipe } from '@angular/common';
|
|
2
|
+
import localeDe from '@angular/common/locales/de';
|
|
3
|
+
import localeEn from '@angular/common/locales/en';
|
|
4
|
+
import localeDeExtra from '@angular/common/locales/extra/de';
|
|
5
|
+
import localeEnExtra from '@angular/common/locales/extra/en';
|
|
2
6
|
import * as i0 from '@angular/core';
|
|
3
7
|
import { Injectable, inject, Directive, Input, HostListener, Pipe, Component, ViewChild, ViewChildren, EventEmitter, ChangeDetectorRef, ViewEncapsulation, ChangeDetectionStrategy, Self, Output, DestroyRef } from '@angular/core';
|
|
4
8
|
import * as i11 from '@angular/forms';
|
|
@@ -13,7 +17,7 @@ import * as i12 from '@angular/material/input';
|
|
|
13
17
|
import { MatInputModule } from '@angular/material/input';
|
|
14
18
|
import * as i10 from '@angular/material/tooltip';
|
|
15
19
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
16
|
-
import { BehaviorSubject, map, distinctUntilChanged, ReplaySubject, of, Subject, takeUntil, combineLatestWith, take, switchMap, debounceTime, filter, tap, fromEvent
|
|
20
|
+
import { BehaviorSubject, map, distinctUntilChanged, ReplaySubject, of, Subject, takeUntil, combineLatestWith, take, switchMap, debounceTime, filter, tap, fromEvent } from 'rxjs';
|
|
17
21
|
import * as i4 from '@angular/material/checkbox';
|
|
18
22
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
19
23
|
import * as i4$1 from '@angular/material/table';
|
|
@@ -239,12 +243,139 @@ var ModeViewType;
|
|
|
239
243
|
|
|
240
244
|
// This file is automatically generated as part of the build process
|
|
241
245
|
const version = {
|
|
242
|
-
version: "1.2.3-
|
|
243
|
-
commitInfo: "Branch.develop.Sha.
|
|
246
|
+
version: "1.2.3-beta0019",
|
|
247
|
+
commitInfo: "Branch.develop.Sha.c47923ae428acb553b4613e509606a4b3aec7206",
|
|
244
248
|
commitDate: "2025-02-05",
|
|
245
|
-
commitHash: "
|
|
246
|
-
informationalVersion: "1.2.3-beta.
|
|
247
|
-
buildDateUtc: new Date(Date.UTC(2025, 1, 5,
|
|
249
|
+
commitHash: "c47923ae428acb553b4613e509606a4b3aec7206",
|
|
250
|
+
informationalVersion: "1.2.3-beta.19+Branch.develop.Sha.c47923ae428acb553b4613e509606a4b3aec7206",
|
|
251
|
+
buildDateUtc: new Date(Date.UTC(2025, 1, 5, 12, 18, 22))
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
const DEFAULT_TEXT_WORD_INVOICE = {
|
|
255
|
+
invoiceTitle: 'Invoice',
|
|
256
|
+
invoiceBuyerTitle: 'Receiver',
|
|
257
|
+
invoiceSellerTitle: 'Sender',
|
|
258
|
+
vatId: 'VAT ID',
|
|
259
|
+
detailsInvoiceNumber: 'Invoice Number',
|
|
260
|
+
detailsInvoiceDate: 'Invoice Date',
|
|
261
|
+
detailsPaymentDueDate: 'Due Date',
|
|
262
|
+
detailsCurrencyCode: 'Currency',
|
|
263
|
+
detailsPaymentTerms: 'Payment Terms',
|
|
264
|
+
referencesTopic: 'References',
|
|
265
|
+
referencesBuyerReference: 'Buyer Reference',
|
|
266
|
+
referencesProjectReference: 'Project Reference',
|
|
267
|
+
referencesContractReference: 'Contract Reference',
|
|
268
|
+
referencesPurchaseOrderReference: 'Purchase Order Reference',
|
|
269
|
+
referencesSalesOrderReference: 'Sales Order Reference',
|
|
270
|
+
referencesReceivingAdviceReference: 'Receiving Advice Reference',
|
|
271
|
+
referencesDispatchAdviceReference: 'Dispatch Advice Reference',
|
|
272
|
+
referencesTenderOrLotReference: 'Tender or Lot Reference',
|
|
273
|
+
referencesInvoicedObjectIdentifier: 'Invoiced Object Identifier',
|
|
274
|
+
tableHeadDescription: 'Description',
|
|
275
|
+
tableHeadQuantity: 'Quantity',
|
|
276
|
+
tableHeadUnit: 'Unit',
|
|
277
|
+
tableHeadNetPrice: 'Net Price',
|
|
278
|
+
tableHeadNetAmount: 'Net Amount',
|
|
279
|
+
totalsTopic: 'Totals',
|
|
280
|
+
totalsTotalNet: 'Total Net',
|
|
281
|
+
totalsTotalAllowances: 'Total Allowances',
|
|
282
|
+
totalsTotalCharges: 'Total Charges',
|
|
283
|
+
totalsTotalAfterDeductions: 'Total After Deductions',
|
|
284
|
+
totalsTotalVatAmount: 'Total VAT Amount',
|
|
285
|
+
totalsTotalGross: 'Total Gross',
|
|
286
|
+
totalsAlreadyPaidTotal: 'Already Paid Total',
|
|
287
|
+
totalsTotalToBePaid: 'Total to be Paid',
|
|
288
|
+
instructionsTopic: 'Payment Instructions',
|
|
289
|
+
instructionsAccountIdentifier: 'Account Identifier',
|
|
290
|
+
instructionsAccountName: 'Account Name',
|
|
291
|
+
instructionsServiceProviderIdentifier: 'Service Provider Identifier',
|
|
292
|
+
notesTopic: 'Notes',
|
|
293
|
+
attachmentsHeading: 'Attachments',
|
|
294
|
+
attachmentsName: 'Name',
|
|
295
|
+
attachmentsDescription: 'Description',
|
|
296
|
+
attachmentsUrl: 'Url',
|
|
297
|
+
attachmentsDataSize: 'Size',
|
|
298
|
+
attachmentsMimeType: 'Mime Type',
|
|
299
|
+
attachmentsFileName: 'File Name',
|
|
300
|
+
attachmentsDownloadButton: 'Download',
|
|
301
|
+
contactPersonName: 'Contact Person Name',
|
|
302
|
+
contactPersonEmail: 'Contact Person Email',
|
|
303
|
+
contactPersonPhone: 'Contact Person Phone',
|
|
304
|
+
vat: 'VAT',
|
|
305
|
+
taxRate: 'Tax Rate',
|
|
306
|
+
deliveryInformationTitle: 'Delivery Information',
|
|
307
|
+
deliverToName: 'Name',
|
|
308
|
+
deliverToLocationIdentifier: 'Location Identifier',
|
|
309
|
+
deliveryDate: 'Date',
|
|
310
|
+
deliveryAddress: 'Address',
|
|
311
|
+
taxesHeading: 'Taxes'
|
|
312
|
+
};
|
|
313
|
+
const germanTextsInvoice = {
|
|
314
|
+
invoiceTitle: 'Rechnung',
|
|
315
|
+
invoiceBuyerTitle: 'Empfänger',
|
|
316
|
+
invoiceSellerTitle: 'Rechnungssteller',
|
|
317
|
+
vatId: 'USt.-ID',
|
|
318
|
+
detailsInvoiceNumber: 'Rechnungsnummer',
|
|
319
|
+
detailsInvoiceDate: 'Rechnungsdatum',
|
|
320
|
+
detailsPaymentDueDate: 'Fälligkeitsdatum',
|
|
321
|
+
detailsCurrencyCode: 'Währung',
|
|
322
|
+
detailsPaymentTerms: 'Zahlungsbedingungen',
|
|
323
|
+
referencesTopic: 'Referenzen',
|
|
324
|
+
referencesBuyerReference: 'Käuferreferenz',
|
|
325
|
+
referencesProjectReference: 'Projektreferenz',
|
|
326
|
+
referencesContractReference: 'Vertragsreferenz',
|
|
327
|
+
referencesPurchaseOrderReference: 'Bestellreferenz',
|
|
328
|
+
referencesSalesOrderReference: 'Auftragsreferenz',
|
|
329
|
+
referencesReceivingAdviceReference: 'Empfangsbestätigungsreferenz',
|
|
330
|
+
referencesDispatchAdviceReference: 'Lieferreferenz',
|
|
331
|
+
referencesTenderOrLotReference: 'Ausschreibungs- oder Losreferenz',
|
|
332
|
+
referencesInvoicedObjectIdentifier: 'Objektreferenz',
|
|
333
|
+
tableHeadDescription: 'Beschreibung',
|
|
334
|
+
tableHeadQuantity: 'Menge',
|
|
335
|
+
tableHeadUnit: 'Einheit',
|
|
336
|
+
tableHeadNetPrice: 'Nettopreis',
|
|
337
|
+
tableHeadNetAmount: 'Nettomenge',
|
|
338
|
+
totalsTopic: 'Gesamt',
|
|
339
|
+
totalsTotalNet: 'Gesamt Netto',
|
|
340
|
+
totalsTotalAllowances: 'Gesamt Rabatt',
|
|
341
|
+
totalsTotalCharges: 'Gesamt Zuschlag',
|
|
342
|
+
totalsTotalAfterDeductions: 'Summe nach Rabatten',
|
|
343
|
+
totalsTotalVatAmount: 'Summe Umsatzsteuer',
|
|
344
|
+
totalsTotalGross: 'Gesamt Brutto',
|
|
345
|
+
totalsAlreadyPaidTotal: 'Bereits bezahlt',
|
|
346
|
+
totalsTotalToBePaid: 'Gesamt zu zahlen',
|
|
347
|
+
instructionsTopic: 'Zahlungsanweisungen',
|
|
348
|
+
instructionsAccountIdentifier: 'Kontonummer',
|
|
349
|
+
instructionsAccountName: 'Kontoname',
|
|
350
|
+
instructionsServiceProviderIdentifier: 'Bank',
|
|
351
|
+
notesTopic: 'Hinweise',
|
|
352
|
+
attachmentsHeading: 'Anhänge',
|
|
353
|
+
attachmentsName: 'Name',
|
|
354
|
+
attachmentsDescription: 'Beschreibung',
|
|
355
|
+
attachmentsUrl: 'Url',
|
|
356
|
+
attachmentsDataSize: 'Größe',
|
|
357
|
+
attachmentsMimeType: 'Typ',
|
|
358
|
+
attachmentsFileName: 'Dateiname',
|
|
359
|
+
attachmentsDownloadButton: 'Download',
|
|
360
|
+
contactPersonName: 'Name der Kontaktperson',
|
|
361
|
+
contactPersonEmail: 'E-Mail der Kontaktperson',
|
|
362
|
+
contactPersonPhone: 'Kontaktperson Telefon',
|
|
363
|
+
vat: 'MwSt.',
|
|
364
|
+
taxRate: 'Steuersatz',
|
|
365
|
+
deliveryInformationTitle: 'Lieferinformationen',
|
|
366
|
+
deliverToName: 'Liefername',
|
|
367
|
+
deliverToLocationIdentifier: 'Lieferort',
|
|
368
|
+
deliveryDate: 'Lieferdatum',
|
|
369
|
+
deliveryAddress: 'Lieferadresse',
|
|
370
|
+
taxesHeading: 'Steuer'
|
|
371
|
+
};
|
|
372
|
+
|
|
373
|
+
const DEFAULT_DIGITS_INFO = '1.3-3';
|
|
374
|
+
const DEFAULT_CURRENCY_CODE = 'USD';
|
|
375
|
+
const DEFAULT_LANGUAGE = 'en';
|
|
376
|
+
const localeTypes = {
|
|
377
|
+
en: 'en-US',
|
|
378
|
+
de: 'de-DE'
|
|
248
379
|
};
|
|
249
380
|
|
|
250
381
|
const DEFAULT_FILTERS = [
|
|
@@ -271,6 +402,7 @@ const DEFAULT_FILTERS = [
|
|
|
271
402
|
];
|
|
272
403
|
|
|
273
404
|
const DEFAULT_TEXT_WORDS = {
|
|
405
|
+
language: 'en',
|
|
274
406
|
textSearch: 'Search',
|
|
275
407
|
textNothing: 'Nothing',
|
|
276
408
|
textNothingFiltered: 'No Filter',
|
|
@@ -285,6 +417,7 @@ const DEFAULT_TEXT_WORDS = {
|
|
|
285
417
|
defaultNamePosition: 'Position'
|
|
286
418
|
};
|
|
287
419
|
const germanTextsAva = {
|
|
420
|
+
language: 'de',
|
|
288
421
|
textSearch: 'Suche',
|
|
289
422
|
textNothing: 'Nichts',
|
|
290
423
|
textNothingFiltered: 'Kein Filter',
|
|
@@ -305,7 +438,8 @@ const defaults = {
|
|
|
305
438
|
|
|
306
439
|
class ConfigurationTreeService {
|
|
307
440
|
constructor() {
|
|
308
|
-
this.
|
|
441
|
+
this._language = DEFAULT_LANGUAGE;
|
|
442
|
+
this._textWords = this.selectTextWords(this._language);
|
|
309
443
|
this._indent = '20px';
|
|
310
444
|
this._functionView = [];
|
|
311
445
|
this._selectedColor = '';
|
|
@@ -327,10 +461,20 @@ class ConfigurationTreeService {
|
|
|
327
461
|
}
|
|
328
462
|
getTextWordsFromConfig() {
|
|
329
463
|
return this.treeConfig$.pipe(map((config) => {
|
|
330
|
-
|
|
331
|
-
|
|
464
|
+
let configTextWords;
|
|
465
|
+
if (typeof config?.textWords === 'string') {
|
|
466
|
+
configTextWords = this.selectTextWords(config.textWords);
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
configTextWords = !config.textWords ? this._textWords : config.textWords;
|
|
470
|
+
}
|
|
471
|
+
this._language = configTextWords.language;
|
|
472
|
+
return { ...configTextWords };
|
|
332
473
|
}), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
|
|
333
474
|
}
|
|
475
|
+
selectTextWords(languageWord) {
|
|
476
|
+
return languageWord === 'de' ? germanTextsAva : DEFAULT_TEXT_WORDS;
|
|
477
|
+
}
|
|
334
478
|
getIndentFromConfig() {
|
|
335
479
|
return this.treeConfig$.pipe(map((config) => config?.indent || ''), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
|
|
336
480
|
}
|
|
@@ -376,6 +520,9 @@ class ConfigurationTreeService {
|
|
|
376
520
|
listFilterFunc: this._listFilterFunc
|
|
377
521
|
};
|
|
378
522
|
}
|
|
523
|
+
get locale() {
|
|
524
|
+
return localeTypes[this._language];
|
|
525
|
+
}
|
|
379
526
|
}
|
|
380
527
|
|
|
381
528
|
class ExpandParentGroupService {
|
|
@@ -1316,7 +1463,7 @@ class TableStructureComponent {
|
|
|
1316
1463
|
});
|
|
1317
1464
|
}
|
|
1318
1465
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TableStructureComponent, deps: [{ token: SelectElementService }, { token: TreeNodeSelectionService }, { token: i0.ChangeDetectorRef }, { token: ConfigurationTreeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1319
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TableStructureComponent, isStandalone: true, selector: "ava-table-structure", inputs: { filteredElementList: "filteredElementList" }, ngImport: i0, template: "<table\n mat-table\n [dataSource]=\"filteredElementList\"\n>\n <ng-container matColumnDef=\"icon\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-cell-small-width\"\n >\n <mat-icon\n class=\"icon-element\"\n saveChangingView=\"icon\"\n [id]=\"row.id\"\n >\n {{ row | elementIconName }}\n </mat-icon>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"checkbox\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"table-cell-small-width\"\n >\n <mat-checkbox\n class=\"checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n </mat-checkbox>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"itemNumber\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n OZ\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [style.width.ch]=\"row?.itemNumber?.stringRepresentation.length\"\n >\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementItemNumber }}\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"text\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n Text\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-text\"\n >\n @if (textWords$ | async; as textWords) {\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementText: textWords }}\n </div>\n }\n </td>\n </ng-container>\n @for (oneColumn of addTableColumns$ | async; track oneColumn.name) {\n <ng-container>\n <ng-container matColumnDef=\"{{ oneColumn.name }}\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n {{ oneColumn.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n >\n <div\n [style.textAlign]=\"oneColumn.align\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{
|
|
1466
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TableStructureComponent, isStandalone: true, selector: "ava-table-structure", inputs: { filteredElementList: "filteredElementList" }, ngImport: i0, template: "<table\n mat-table\n [dataSource]=\"filteredElementList\"\n>\n <ng-container matColumnDef=\"icon\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-cell-small-width\"\n >\n <mat-icon\n class=\"icon-element\"\n saveChangingView=\"icon\"\n [id]=\"row.id\"\n >\n {{ row | elementIconName }}\n </mat-icon>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"checkbox\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"table-cell-small-width\"\n >\n <mat-checkbox\n class=\"checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n </mat-checkbox>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"itemNumber\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n OZ\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [style.width.ch]=\"row?.itemNumber?.stringRepresentation.length\"\n >\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementItemNumber }}\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"text\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n Text\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-text\"\n >\n @if (textWords$ | async; as textWords) {\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementText: textWords }}\n </div>\n }\n </td>\n </ng-container>\n @for (oneColumn of addTableColumns$ | async; track oneColumn.name) {\n <ng-container>\n <ng-container matColumnDef=\"{{ oneColumn.name }}\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n {{ oneColumn.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n >\n <div\n [style.textAlign]=\"oneColumn.align\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{\n !oneColumn.numberFormat\n ? row[oneColumn.name]\n : (row[oneColumn.name] | number: oneColumn.numberFormat : configurationTreeService.locale)\n }}\n </div>\n </td>\n </ng-container>\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns; sticky: true\"\n class=\"mat-header-row\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n (click)=\"select(row)\"\n (dblclick)=\"dblSelect(row)\"\n (contextmenu)=\"openContextMenu($event, row)\"\n [ngClass]=\"{\n choose: !isSelectionMode && row.id === preselectedElement?.id,\n select: !isSelectionMode && row.id === selectedElement?.id,\n }\"\n [style.background]=\"!isSelectionMode && row.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n [id]=\"row.id\"\n ></tr>\n</table>\n", styles: ["table{width:100%}table tr.mat-mdc-row,table tr.mat-mdc-header-row{height:24px}table tr input{box-sizing:border-box;padding:0 3px;outline:none;border:none;height:20px;width:calc(100% - 2px)}table tr input:focus{background:#fff!important}table tr .right{text-align:right}table tr td,table tr th{border-right:1px solid #777;border-bottom:1px solid #777;padding:0}table tr td:first-child,table tr th:first-child{border-left:1px solid #777}table tr td.min-width,table tr th.min-width{width:12ch;min-width:12ch}table tr td div,table tr th div{padding:0 3px}table tr th{border-top:1px solid #777;padding:0 3px}.table-text{overflow-x:hidden;position:relative}.table-text div{position:absolute;top:50%;left:0;white-space:nowrap;transform:translateY(-50%)}.select{background:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}.choose div{color:red!important}::ng-deep .checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}.text-element{-webkit-user-select:none;user-select:none}.table-cell-small-width{width:24px;min-width:24px;position:relative;text-align:center}.table-cell-small-width .icon-element{position:absolute;top:0;left:0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ElementTextPipe, name: "elementText" }, { kind: "pipe", type: ElementItemNumberPipe, name: "elementItemNumber" }, { kind: "pipe", type: ElementIconNamePipe, name: "elementIconName" }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i4$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: SaveChangingViewDirective, selector: "[saveChangingView]", inputs: ["saveChangingView"] }] }); }
|
|
1320
1467
|
}
|
|
1321
1468
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TableStructureComponent, decorators: [{
|
|
1322
1469
|
type: Component,
|
|
@@ -1332,7 +1479,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
|
|
|
1332
1479
|
MatCheckboxModule,
|
|
1333
1480
|
FormsModule,
|
|
1334
1481
|
SaveChangingViewDirective
|
|
1335
|
-
], template: "<table\n mat-table\n [dataSource]=\"filteredElementList\"\n>\n <ng-container matColumnDef=\"icon\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-cell-small-width\"\n >\n <mat-icon\n class=\"icon-element\"\n saveChangingView=\"icon\"\n [id]=\"row.id\"\n >\n {{ row | elementIconName }}\n </mat-icon>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"checkbox\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"table-cell-small-width\"\n >\n <mat-checkbox\n class=\"checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n </mat-checkbox>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"itemNumber\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n OZ\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [style.width.ch]=\"row?.itemNumber?.stringRepresentation.length\"\n >\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementItemNumber }}\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"text\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n Text\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-text\"\n >\n @if (textWords$ | async; as textWords) {\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementText: textWords }}\n </div>\n }\n </td>\n </ng-container>\n @for (oneColumn of addTableColumns$ | async; track oneColumn.name) {\n <ng-container>\n <ng-container matColumnDef=\"{{ oneColumn.name }}\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n {{ oneColumn.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n >\n <div\n [style.textAlign]=\"oneColumn.align\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{
|
|
1482
|
+
], template: "<table\n mat-table\n [dataSource]=\"filteredElementList\"\n>\n <ng-container matColumnDef=\"icon\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-cell-small-width\"\n >\n <mat-icon\n class=\"icon-element\"\n saveChangingView=\"icon\"\n [id]=\"row.id\"\n >\n {{ row | elementIconName }}\n </mat-icon>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"checkbox\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"table-cell-small-width\"\n >\n <mat-checkbox\n class=\"checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n </mat-checkbox>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"itemNumber\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n OZ\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [style.width.ch]=\"row?.itemNumber?.stringRepresentation.length\"\n >\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementItemNumber }}\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"text\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n Text\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-text\"\n >\n @if (textWords$ | async; as textWords) {\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementText: textWords }}\n </div>\n }\n </td>\n </ng-container>\n @for (oneColumn of addTableColumns$ | async; track oneColumn.name) {\n <ng-container>\n <ng-container matColumnDef=\"{{ oneColumn.name }}\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n {{ oneColumn.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n >\n <div\n [style.textAlign]=\"oneColumn.align\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{\n !oneColumn.numberFormat\n ? row[oneColumn.name]\n : (row[oneColumn.name] | number: oneColumn.numberFormat : configurationTreeService.locale)\n }}\n </div>\n </td>\n </ng-container>\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns; sticky: true\"\n class=\"mat-header-row\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n (click)=\"select(row)\"\n (dblclick)=\"dblSelect(row)\"\n (contextmenu)=\"openContextMenu($event, row)\"\n [ngClass]=\"{\n choose: !isSelectionMode && row.id === preselectedElement?.id,\n select: !isSelectionMode && row.id === selectedElement?.id,\n }\"\n [style.background]=\"!isSelectionMode && row.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n [id]=\"row.id\"\n ></tr>\n</table>\n", styles: ["table{width:100%}table tr.mat-mdc-row,table tr.mat-mdc-header-row{height:24px}table tr input{box-sizing:border-box;padding:0 3px;outline:none;border:none;height:20px;width:calc(100% - 2px)}table tr input:focus{background:#fff!important}table tr .right{text-align:right}table tr td,table tr th{border-right:1px solid #777;border-bottom:1px solid #777;padding:0}table tr td:first-child,table tr th:first-child{border-left:1px solid #777}table tr td.min-width,table tr th.min-width{width:12ch;min-width:12ch}table tr td div,table tr th div{padding:0 3px}table tr th{border-top:1px solid #777;padding:0 3px}.table-text{overflow-x:hidden;position:relative}.table-text div{position:absolute;top:50%;left:0;white-space:nowrap;transform:translateY(-50%)}.select{background:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}.choose div{color:red!important}::ng-deep .checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}.text-element{-webkit-user-select:none;user-select:none}.table-cell-small-width{width:24px;min-width:24px;position:relative;text-align:center}.table-cell-small-width .icon-element{position:absolute;top:0;left:0}\n"] }]
|
|
1336
1483
|
}], ctorParameters: () => [{ type: SelectElementService }, { type: TreeNodeSelectionService }, { type: i0.ChangeDetectorRef }, { type: ConfigurationTreeService }], propDecorators: { filteredElementList: [{
|
|
1337
1484
|
type: Input
|
|
1338
1485
|
}] } });
|
|
@@ -1414,6 +1561,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
|
|
|
1414
1561
|
type: Input
|
|
1415
1562
|
}] } });
|
|
1416
1563
|
|
|
1564
|
+
registerLocaleData(localeDe, 'de-DE', localeDeExtra);
|
|
1565
|
+
registerLocaleData(localeEn, 'en-US', localeEnExtra);
|
|
1417
1566
|
class AvaTreeComponent {
|
|
1418
1567
|
/**
|
|
1419
1568
|
* Optionally, you can supply the id of the node that should be selected in the tree initially.
|
|
@@ -1866,165 +2015,120 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
|
|
|
1866
2015
|
args: ['avaTreeFilterInput']
|
|
1867
2016
|
}] } });
|
|
1868
2017
|
|
|
1869
|
-
const DEFAULT_TEXT_WORD_INVOICE = {
|
|
1870
|
-
invoiceTitle: 'Invoice',
|
|
1871
|
-
invoiceBuyerTitle: 'Receiver',
|
|
1872
|
-
invoiceSellerTitle: 'Sender',
|
|
1873
|
-
vatId: 'VAT ID',
|
|
1874
|
-
detailsInvoiceNumber: 'Invoice Number',
|
|
1875
|
-
detailsInvoiceDate: 'Invoice Date',
|
|
1876
|
-
detailsPaymentDueDate: 'Due Date',
|
|
1877
|
-
detailsCurrencyCode: 'Currency',
|
|
1878
|
-
detailsPaymentTerms: 'Payment Terms',
|
|
1879
|
-
referencesTopic: 'References',
|
|
1880
|
-
referencesBuyerReference: 'Buyer Reference',
|
|
1881
|
-
referencesProjectReference: 'Project Reference',
|
|
1882
|
-
referencesContractReference: 'Contract Reference',
|
|
1883
|
-
referencesPurchaseOrderReference: 'Purchase Order Reference',
|
|
1884
|
-
referencesSalesOrderReference: 'Sales Order Reference',
|
|
1885
|
-
referencesReceivingAdviceReference: 'Receiving Advice Reference',
|
|
1886
|
-
referencesDispatchAdviceReference: 'Dispatch Advice Reference',
|
|
1887
|
-
referencesTenderOrLotReference: 'Tender or Lot Reference',
|
|
1888
|
-
referencesInvoicedObjectIdentifier: 'Invoiced Object Identifier',
|
|
1889
|
-
tableHeadDescription: 'Description',
|
|
1890
|
-
tableHeadQuantity: 'Quantity',
|
|
1891
|
-
tableHeadUnit: 'Unit',
|
|
1892
|
-
tableHeadNetPrice: 'Net Price',
|
|
1893
|
-
tableHeadNetAmount: 'Net Amount',
|
|
1894
|
-
totalsTopic: 'Totals',
|
|
1895
|
-
totalsTotalNet: 'Total Net',
|
|
1896
|
-
totalsTotalAllowances: 'Total Allowances',
|
|
1897
|
-
totalsTotalCharges: 'Total Charges',
|
|
1898
|
-
totalsTotalAfterDeductions: 'Total After Deductions',
|
|
1899
|
-
totalsTotalVatAmount: 'Total VAT Amount',
|
|
1900
|
-
totalsTotalGross: 'Total Gross',
|
|
1901
|
-
totalsAlreadyPaidTotal: 'Already Paid Total',
|
|
1902
|
-
totalsTotalToBePaid: 'Total to be Paid',
|
|
1903
|
-
instructionsTopic: 'Payment Instructions',
|
|
1904
|
-
instructionsAccountIdentifier: 'Account Identifier',
|
|
1905
|
-
instructionsAccountName: 'Account Name',
|
|
1906
|
-
instructionsServiceProviderIdentifier: 'Service Provider Identifier',
|
|
1907
|
-
notesTopic: 'Notes',
|
|
1908
|
-
attachmentsHeading: 'Attachments',
|
|
1909
|
-
attachmentsName: 'Name',
|
|
1910
|
-
attachmentsDescription: 'Description',
|
|
1911
|
-
attachmentsUrl: 'Url',
|
|
1912
|
-
attachmentsDataSize: 'Size',
|
|
1913
|
-
attachmentsMimeType: 'Mime Type',
|
|
1914
|
-
attachmentsFileName: 'File Name',
|
|
1915
|
-
attachmentsDownloadButton: 'Download',
|
|
1916
|
-
contactPersonName: 'Contact Person Name',
|
|
1917
|
-
contactPersonEmail: 'Contact Person Email',
|
|
1918
|
-
contactPersonPhone: 'Contact Person Phone',
|
|
1919
|
-
vat: 'VAT',
|
|
1920
|
-
taxRate: 'Tax Rate',
|
|
1921
|
-
deliveryInformationTitle: 'Delivery Information',
|
|
1922
|
-
deliverToName: 'Name',
|
|
1923
|
-
deliverToLocationIdentifier: 'Location Identifier',
|
|
1924
|
-
deliveryDate: 'Date',
|
|
1925
|
-
deliveryAddress: 'Address',
|
|
1926
|
-
taxesHeading: 'Taxes'
|
|
1927
|
-
};
|
|
1928
|
-
const germanTextsInvoice = {
|
|
1929
|
-
invoiceTitle: 'Rechnung',
|
|
1930
|
-
invoiceBuyerTitle: 'Empfänger',
|
|
1931
|
-
invoiceSellerTitle: 'Rechnungssteller',
|
|
1932
|
-
vatId: 'USt.-ID',
|
|
1933
|
-
detailsInvoiceNumber: 'Rechnungsnummer',
|
|
1934
|
-
detailsInvoiceDate: 'Rechnungsdatum',
|
|
1935
|
-
detailsPaymentDueDate: 'Fälligkeitsdatum',
|
|
1936
|
-
detailsCurrencyCode: 'Währung',
|
|
1937
|
-
detailsPaymentTerms: 'Zahlungsbedingungen',
|
|
1938
|
-
referencesTopic: 'Referenzen',
|
|
1939
|
-
referencesBuyerReference: 'Käuferreferenz',
|
|
1940
|
-
referencesProjectReference: 'Projektreferenz',
|
|
1941
|
-
referencesContractReference: 'Vertragsreferenz',
|
|
1942
|
-
referencesPurchaseOrderReference: 'Bestellreferenz',
|
|
1943
|
-
referencesSalesOrderReference: 'Auftragsreferenz',
|
|
1944
|
-
referencesReceivingAdviceReference: 'Empfangsbestätigungsreferenz',
|
|
1945
|
-
referencesDispatchAdviceReference: 'Lieferreferenz',
|
|
1946
|
-
referencesTenderOrLotReference: 'Ausschreibungs- oder Losreferenz',
|
|
1947
|
-
referencesInvoicedObjectIdentifier: 'Objektreferenz',
|
|
1948
|
-
tableHeadDescription: 'Beschreibung',
|
|
1949
|
-
tableHeadQuantity: 'Menge',
|
|
1950
|
-
tableHeadUnit: 'Einheit',
|
|
1951
|
-
tableHeadNetPrice: 'Nettopreis',
|
|
1952
|
-
tableHeadNetAmount: 'Nettomenge',
|
|
1953
|
-
totalsTopic: 'Gesamt',
|
|
1954
|
-
totalsTotalNet: 'Gesamt Netto',
|
|
1955
|
-
totalsTotalAllowances: 'Gesamt Rabatt',
|
|
1956
|
-
totalsTotalCharges: 'Gesamt Zuschlag',
|
|
1957
|
-
totalsTotalAfterDeductions: 'Summe nach Rabatten',
|
|
1958
|
-
totalsTotalVatAmount: 'Summe Umsatzsteuer',
|
|
1959
|
-
totalsTotalGross: 'Gesamt Brutto',
|
|
1960
|
-
totalsAlreadyPaidTotal: 'Bereits bezahlt',
|
|
1961
|
-
totalsTotalToBePaid: 'Gesamt zu zahlen',
|
|
1962
|
-
instructionsTopic: 'Zahlungsanweisungen',
|
|
1963
|
-
instructionsAccountIdentifier: 'Kontonummer',
|
|
1964
|
-
instructionsAccountName: 'Kontoname',
|
|
1965
|
-
instructionsServiceProviderIdentifier: 'Bank',
|
|
1966
|
-
notesTopic: 'Hinweise',
|
|
1967
|
-
attachmentsHeading: 'Anhänge',
|
|
1968
|
-
attachmentsName: 'Name',
|
|
1969
|
-
attachmentsDescription: 'Beschreibung',
|
|
1970
|
-
attachmentsUrl: 'Url',
|
|
1971
|
-
attachmentsDataSize: 'Größe',
|
|
1972
|
-
attachmentsMimeType: 'Typ',
|
|
1973
|
-
attachmentsFileName: 'Dateiname',
|
|
1974
|
-
attachmentsDownloadButton: 'Download',
|
|
1975
|
-
contactPersonName: 'Name der Kontaktperson',
|
|
1976
|
-
contactPersonEmail: 'E-Mail der Kontaktperson',
|
|
1977
|
-
contactPersonPhone: 'Kontaktperson Telefon',
|
|
1978
|
-
vat: 'MwSt.',
|
|
1979
|
-
taxRate: 'Steuersatz',
|
|
1980
|
-
deliveryInformationTitle: 'Lieferinformationen',
|
|
1981
|
-
deliverToName: 'Liefername',
|
|
1982
|
-
deliverToLocationIdentifier: 'Lieferort',
|
|
1983
|
-
deliveryDate: 'Lieferdatum',
|
|
1984
|
-
deliveryAddress: 'Lieferadresse',
|
|
1985
|
-
taxesHeading: 'Steuer'
|
|
1986
|
-
};
|
|
1987
|
-
|
|
1988
2018
|
class ConfigurationInvoiceService {
|
|
1989
2019
|
constructor() {
|
|
1990
|
-
this.
|
|
2020
|
+
this._language = DEFAULT_LANGUAGE;
|
|
2021
|
+
this._textWords = this.getDefaultTextWords(this._language);
|
|
1991
2022
|
this._pdfViewEnabled = false;
|
|
1992
|
-
this.
|
|
2023
|
+
this._quantityDecimalPlaces = DEFAULT_DIGITS_INFO;
|
|
2024
|
+
this._currencyCode = DEFAULT_CURRENCY_CODE;
|
|
1993
2025
|
this.invoiceConfigSource = new BehaviorSubject(this.getDefaultInvoiceConfiguration());
|
|
1994
2026
|
this.invoiceConfig$ = this.invoiceConfigSource.asObservable();
|
|
1995
|
-
this.getLanguageFromConfig()
|
|
1996
|
-
.pipe(skip(1), take(1))
|
|
1997
|
-
.subscribe((language) => {
|
|
1998
|
-
this._textWords = this.getDefaulTextWords(language);
|
|
1999
|
-
this.setInvoiceConfig({ textWords: this._textWords, ...this.getCurrentInvoiceConfig() });
|
|
2000
|
-
});
|
|
2001
2027
|
}
|
|
2002
2028
|
setInvoiceConfig(value) {
|
|
2029
|
+
if (value.quantityDecimalPlaces) {
|
|
2030
|
+
this._quantityDecimalPlaces = value.quantityDecimalPlaces;
|
|
2031
|
+
}
|
|
2032
|
+
if (value.language) {
|
|
2033
|
+
this._language = value.language;
|
|
2034
|
+
}
|
|
2003
2035
|
this.invoiceConfigSource.next(value);
|
|
2004
2036
|
}
|
|
2005
2037
|
getCurrentInvoiceConfig() {
|
|
2006
2038
|
return this.invoiceConfigSource.getValue();
|
|
2007
2039
|
}
|
|
2008
2040
|
getTextWordsFromConfig() {
|
|
2009
|
-
return this.invoiceConfig$.pipe(map((config) => config?.textWords || null), map((textWords) => (textWords === null ? this._textWords : { ...
|
|
2041
|
+
return this.invoiceConfig$.pipe(map((config) => config?.textWords || (config?.language ? this.getDefaultTextWords(config.language) : null)), map((textWords) => (textWords === null ? this._textWords : { ...textWords })), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
|
|
2010
2042
|
}
|
|
2011
2043
|
getPdfViewEnabledFromConfig() {
|
|
2012
2044
|
return this.invoiceConfig$.pipe(map((config) => (config === null ? false : config.pdfViewEnabled || false)), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
|
|
2013
2045
|
}
|
|
2014
|
-
getLanguageFromConfig() {
|
|
2015
|
-
return this.invoiceConfig$.pipe(map((c) => c.language || 'en'));
|
|
2016
|
-
}
|
|
2017
2046
|
getDefaultInvoiceConfiguration() {
|
|
2018
2047
|
return {
|
|
2019
|
-
textWords:
|
|
2048
|
+
textWords: this._textWords,
|
|
2020
2049
|
pdfViewEnabled: this._pdfViewEnabled,
|
|
2021
|
-
language: this._language
|
|
2050
|
+
language: this._language,
|
|
2051
|
+
quantityDecimalPlaces: this._quantityDecimalPlaces
|
|
2022
2052
|
};
|
|
2023
2053
|
}
|
|
2024
|
-
|
|
2025
|
-
return
|
|
2054
|
+
getDefaultTextWords(languageWord) {
|
|
2055
|
+
return languageWord === 'de' ? germanTextsInvoice : DEFAULT_TEXT_WORD_INVOICE;
|
|
2056
|
+
}
|
|
2057
|
+
get locale() {
|
|
2058
|
+
return localeTypes[this._language];
|
|
2059
|
+
}
|
|
2060
|
+
set quantityDecimalPlaces(value) {
|
|
2061
|
+
this._quantityDecimalPlaces = value;
|
|
2026
2062
|
}
|
|
2063
|
+
get quantityDecimalPlaces() {
|
|
2064
|
+
return this._quantityDecimalPlaces;
|
|
2065
|
+
}
|
|
2066
|
+
set currencyCode(value) {
|
|
2067
|
+
this._currencyCode = value;
|
|
2068
|
+
}
|
|
2069
|
+
get currencyCode() {
|
|
2070
|
+
return this._currencyCode;
|
|
2071
|
+
}
|
|
2072
|
+
}
|
|
2073
|
+
|
|
2074
|
+
class CurrencyPlusPipe {
|
|
2075
|
+
constructor() {
|
|
2076
|
+
this.currencyPipe = inject(CurrencyPipe);
|
|
2077
|
+
this.configurationInvoiceService = inject(ConfigurationInvoiceService);
|
|
2078
|
+
}
|
|
2079
|
+
transform(money) {
|
|
2080
|
+
return typeof money === 'number'
|
|
2081
|
+
? this.currencyPipe.transform(money, this.configurationInvoiceService.currencyCode, 'symbol', '', this.configurationInvoiceService.locale)
|
|
2082
|
+
: '';
|
|
2083
|
+
}
|
|
2084
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CurrencyPlusPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2085
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.0.1", ngImport: i0, type: CurrencyPlusPipe, isStandalone: true, name: "currencyPlus" }); }
|
|
2086
|
+
}
|
|
2087
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CurrencyPlusPipe, decorators: [{
|
|
2088
|
+
type: Pipe,
|
|
2089
|
+
args: [{
|
|
2090
|
+
name: 'currencyPlus',
|
|
2091
|
+
standalone: true
|
|
2092
|
+
}]
|
|
2093
|
+
}] });
|
|
2094
|
+
|
|
2095
|
+
class NumberPlusPipe {
|
|
2096
|
+
constructor() {
|
|
2097
|
+
this.currencyPipe = inject(DecimalPipe);
|
|
2098
|
+
this.configurationInvoiceService = inject(ConfigurationInvoiceService);
|
|
2099
|
+
}
|
|
2100
|
+
transform(value) {
|
|
2101
|
+
return typeof value === 'number'
|
|
2102
|
+
? this.currencyPipe.transform(value, this.configurationInvoiceService.quantityDecimalPlaces, this.configurationInvoiceService.locale)
|
|
2103
|
+
: '';
|
|
2104
|
+
}
|
|
2105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: NumberPlusPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2106
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.0.1", ngImport: i0, type: NumberPlusPipe, isStandalone: true, name: "numberPlus" }); }
|
|
2027
2107
|
}
|
|
2108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: NumberPlusPipe, decorators: [{
|
|
2109
|
+
type: Pipe,
|
|
2110
|
+
args: [{
|
|
2111
|
+
name: 'numberPlus'
|
|
2112
|
+
}]
|
|
2113
|
+
}] });
|
|
2114
|
+
|
|
2115
|
+
class PercentPlusPipe {
|
|
2116
|
+
constructor() {
|
|
2117
|
+
this.percentPipe = inject(PercentPipe);
|
|
2118
|
+
this.configurationInvoiceService = inject(ConfigurationInvoiceService);
|
|
2119
|
+
}
|
|
2120
|
+
transform(value, digitsInfo) {
|
|
2121
|
+
return typeof value === 'number' ? this.percentPipe.transform(value, digitsInfo || '', this.configurationInvoiceService.locale) : '';
|
|
2122
|
+
}
|
|
2123
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: PercentPlusPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2124
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.0.1", ngImport: i0, type: PercentPlusPipe, isStandalone: true, name: "percentPlus" }); }
|
|
2125
|
+
}
|
|
2126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: PercentPlusPipe, decorators: [{
|
|
2127
|
+
type: Pipe,
|
|
2128
|
+
args: [{
|
|
2129
|
+
name: 'percentPlus'
|
|
2130
|
+
}]
|
|
2131
|
+
}] });
|
|
2028
2132
|
|
|
2029
2133
|
/** Type of the invoice */
|
|
2030
2134
|
var InvoiceType;
|
|
@@ -2174,6 +2278,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
|
|
|
2174
2278
|
args: ['documentsPanel']
|
|
2175
2279
|
}] } });
|
|
2176
2280
|
|
|
2281
|
+
registerLocaleData(localeDe, 'de-DE', localeDeExtra);
|
|
2282
|
+
registerLocaleData(localeEn, 'en-US', localeEnExtra);
|
|
2177
2283
|
class InvoiceDisplayComponent {
|
|
2178
2284
|
/**
|
|
2179
2285
|
* You can supply a map of strings to be used for the text in the tree. This allows you to translate
|
|
@@ -2227,10 +2333,8 @@ class InvoiceDisplayComponent {
|
|
|
2227
2333
|
* }
|
|
2228
2334
|
*/
|
|
2229
2335
|
set config(configObject) {
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
this.configurationInvoiceService.setInvoiceConfig(config);
|
|
2233
|
-
}
|
|
2336
|
+
const config = { ...this.configurationInvoiceService.getCurrentInvoiceConfig(), ...configObject, textWords: configObject.textWords };
|
|
2337
|
+
this.configurationInvoiceService.setInvoiceConfig(config);
|
|
2234
2338
|
}
|
|
2235
2339
|
constructor(configurationInvoiceService) {
|
|
2236
2340
|
this.configurationInvoiceService = configurationInvoiceService;
|
|
@@ -2245,14 +2349,25 @@ class InvoiceDisplayComponent {
|
|
|
2245
2349
|
*/
|
|
2246
2350
|
if (window['InvoiceGlobalVariable']) {
|
|
2247
2351
|
this.invoice = window['InvoiceGlobalVariable'];
|
|
2352
|
+
this.getCurrencyCode();
|
|
2353
|
+
}
|
|
2354
|
+
}
|
|
2355
|
+
ngOnChanges(change) {
|
|
2356
|
+
if (change['invoice']) {
|
|
2357
|
+
this.getCurrencyCode();
|
|
2358
|
+
}
|
|
2359
|
+
}
|
|
2360
|
+
getCurrencyCode() {
|
|
2361
|
+
if (this.invoice.currencyCode) {
|
|
2362
|
+
this.configurationInvoiceService.currencyCode = this.invoice.currencyCode;
|
|
2248
2363
|
}
|
|
2249
2364
|
}
|
|
2250
2365
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: InvoiceDisplayComponent, deps: [{ token: ConfigurationInvoiceService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2251
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: InvoiceDisplayComponent, isStandalone: true, selector: "ava-invoice-display", inputs: { invoice: "invoice", config: "config" }, providers: [ConfigurationInvoiceService], ngImport: i0, template: "@if (textWords$ | async; as textWords) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\n\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceBuyerTitle }}</h2>\n <p>\n <strong>{{ invoice.buyer?.name }}</strong>\n </p>\n <p>{{ invoice.buyer?.address }}</p>\n <p>{{ invoice.buyer?.city }}, {{ invoice.buyer?.zipCode }}</p>\n <p>{{ invoice.buyer?.countryCode }}</p>\n @if (invoice.buyer?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ invoice.buyer?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice.buyer?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonName }}</span>\n </p>\n }\n @if (invoice.buyer?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice.buyer?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice.invoiceNumber) {\n <p>\n <strong>{{ textWords.detailsInvoiceNumber }}: </strong>\n <span>{{ invoice.invoiceNumber }}</span>\n </p>\n }\n @if (invoice.invoiceDate) {\n <p>\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>{{ invoice.invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice.paymentDueDate) {\n <p>\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>{{ invoice.paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice.currencyCode) {\n <p>\n <strong>{{ textWords.detailsCurrencyCode }}: </strong>\n <span>{{ invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.paymentTerms) {\n <p>\n <strong>{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice.paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"seller-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceSellerTitle }}</h2>\n <p>\n <strong>{{ invoice.seller?.name }}</strong>\n </p>\n <p>{{ invoice.seller?.address }}</p>\n <p>{{ invoice.seller?.city }}, {{ invoice.seller?.zipCode }}</p>\n <p>{{ invoice.seller?.countryCode }}</p>\n @if (invoice.seller?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ invoice.seller?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice.seller?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonName }}</span>\n </p>\n }\n @if (invoice.seller?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice.seller?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n </header>\n <mat-divider></mat-divider>\n <div class=\"invoice-info\">\n <section class=\"invoice-references\">\n @if (textWords.referencesTopic) {\n <h2 class=\"info-title\">{{ textWords.referencesTopic }}</h2>\n }\n @if (invoice.references?.buyerReference) {\n <p>\n <strong>{{ textWords.referencesBuyerReference }}: </strong>\n <br />\n <span>{{ invoice.references?.buyerReference }}</span>\n </p>\n }\n @if (invoice.references?.projectReference) {\n <p>\n <strong>{{ textWords.referencesProjectReference }}: </strong>\n <br />\n <span>{{ invoice.references?.projectReference }}</span>\n </p>\n }\n @if (invoice.references?.contractReference) {\n <p>\n <strong>{{ textWords.referencesContractReference }}: </strong>\n <br />\n <span>{{ invoice.references?.contractReference }}</span>\n </p>\n }\n @if (invoice.references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords.referencesPurchaseOrderReference }}: </strong>\n <br />\n <span>{{ invoice.references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice.references?.salesOrderReference) {\n <p>\n <strong>{{ textWords.referencesSalesOrderReference }}: </strong>\n <br />\n <span>{{ invoice.references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice.references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords.referencesReceivingAdviceReference }}: </strong>\n <br />\n <span>{{ invoice.references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice.references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords.referencesDispatchAdviceReference }}: </strong>\n <br />\n <span> {{ invoice.references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice.references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords.referencesTenderOrLotReference }}: </strong>\n <br />\n <span>{{ invoice.references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice.references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords.referencesInvoicedObjectIdentifier }}: </strong>\n <br />\n <span>{{ invoice.references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n @if (invoice.deliveryInformation) {\n <section class=\"invoice-delivery\">\n <h2 class=\"info-title\">{{ textWords.deliveryInformationTitle }}</h2>\n\n @if (invoice.deliveryInformation.deliverToName) {\n <p>\n <strong>{{ textWords.deliverToName }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliverToName }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliverToLocationIdentifier) {\n <p>\n <strong>{{ textWords.deliverToLocationIdentifier }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliverToLocationIdentifier }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliveryDate) {\n <p>\n <strong>{{ textWords.deliveryDate }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliveryDate | date: 'shortDate' }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliveryAddress) {\n <p>\n <strong>{{ textWords.deliveryAddress }}: </strong>\n <span>\n @if (invoice.deliveryInformation.deliveryAddress.address) {\n <p>{{ invoice.deliveryInformation.deliveryAddress.address }}</p>\n }\n @if (invoice.deliveryInformation.deliveryAddress.city) {\n <span>{{ invoice.deliveryInformation.deliveryAddress.city }},</span>\n }\n @if (invoice.deliveryInformation.deliveryAddress.zipCode) {\n <span>{{ invoice.deliveryInformation.deliveryAddress.zipCode }}</span>\n }\n @if (invoice.deliveryInformation.deliveryAddress.countryCode) {\n <p>{{ invoice.deliveryInformation.deliveryAddress.countryCode }}</p>\n }\n </span>\n </p>\n }\n </section>\n }\n </div>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords.tableHeadDescription }}</th>\n <th class=\"center\">{{ textWords.tableHeadQuantity }}</th>\n <th class=\"center\">{{ textWords.tableHeadUnit }}</th>\n <th class=\"center\">{{ textWords.tableHeadNetPrice }}</th>\n <th class=\"center\">{{ textWords.tableHeadNetAmount }}</th>\n <th class=\"center\">{{ textWords.vat }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice.lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td class=\"currency-table-cell\">{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td class=\"currency-table-cell\">{{ item.priceDetails?.netPrice | currency: invoice.currencyCode }}</td>\n <td class=\"currency-table-cell\">{{ item.netAmount | currency: invoice.currencyCode }}</td>\n <td class=\"currency-table-cell\">{{ item.vatInformation?.[0]?.vatRate | percent: '1.0-2' }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"taxes\">\n <h2 class=\"info-title\">{{ textWords.taxesHeading }}</h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th>{{ textWords.vat }}</th>\n <th>{{ textWords.totalsTotalNet }}</th>\n <th>{{ textWords.totalsTotalVatAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice.vatBreakdown; track tax.taxRate) {\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate) {\n <span>{{ tax.taxRate | percent: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount) {\n <span>{{ tax.netTaxableAmount | currency: invoice.currencyCode }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount) {\n <span>{{ tax.vatAmount | currency: invoice.currencyCode }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </section>\n\n <section class=\"payment-instructions\">\n <h2 class=\"info-title\">{{ textWords.instructionsTopic }}</h2>\n @if (invoice.paymentInstructions?.description) {\n <p>{{ invoice.paymentInstructions?.description }}</p>\n }\n @for (means of invoice.paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <br />\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <br />\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <br />\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n\n <section class=\"invoice-totals\">\n <h2 class=\"info-title\">{{ textWords.totalsTopic }}</h2>\n\n @if (invoice.totals?.totalNet) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalNet | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalAllowances) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalAllowances | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalCharges) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalCharges | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalAfterDeductions | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalVatAmount | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalGross) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalGross | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <br />\n <span>{{ invoice.totals?.alreadyPaidTotal | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <br />\n <strong> {{ invoice.totals?.totalToBePaid | currency: invoice.currencyCode }}</strong>\n </p>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n <h2>{{ textWords.notesTopic }}</h2>\n @for (note of invoice.invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n @if (invoice.documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice.documents ?? []\"></ava-invoice-documents>\n </section>\n }\n </div>\n}\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.invoice-header .header{height:32px}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details{width:30%}.seller-info,.invoice-delivery,.payment-instructions,.invoice-totals{text-align:right}.currency-table-cell{text-align:right!important}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes,.invoice-delivery,.invoice-details{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between;gap:10px}.total{background-color:var(--color-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff;text-wrap:nowrap}.invoice-attachments{padding-bottom:15px}.invoice-info{display:flex;justify-content:space-between;margin-bottom:20px}.info-title{border-bottom:2px solid var(--color-primary);text-align:center}.tax-report-table{width:100%;border-collapse:collapse;margin-top:10px}.tax-report-table th,.tax-report-table td{padding:12px;text-align:center;border:1px solid #ddd}.tax-report-table th{background-color:var(--color-primary);color:#fff;font-weight:700;border:1px solid #000}.tax-report-table td{font-size:14px;color:#333;border:1px solid #000}.center{text-align:center!important}\n"], dependencies: [{ kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i2$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: InvoiceDocumentsComponent, selector: "ava-invoice-documents", inputs: ["documents"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2366
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: InvoiceDisplayComponent, isStandalone: true, selector: "ava-invoice-display", inputs: { invoice: "invoice", config: "config" }, providers: [ConfigurationInvoiceService, CurrencyPipe, DecimalPipe, PercentPipe], usesOnChanges: true, ngImport: i0, template: "@if (textWords$ | async; as textWords) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\n\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceBuyerTitle }}</h2>\n <p>\n <strong>{{ invoice.buyer?.name }}</strong>\n </p>\n <p>{{ invoice.buyer?.address }}</p>\n <p>{{ invoice.buyer?.city }}, {{ invoice.buyer?.zipCode }}</p>\n <p>{{ invoice.buyer?.countryCode }}</p>\n @if (invoice.buyer?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ invoice.buyer?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice.buyer?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonName }}</span>\n </p>\n }\n @if (invoice.buyer?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice.buyer?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice.invoiceNumber) {\n <p>\n <strong>{{ textWords.detailsInvoiceNumber }}: </strong>\n <span>{{ invoice.invoiceNumber }}</span>\n </p>\n }\n @if (invoice.invoiceDate) {\n <p>\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>{{ invoice.invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice.paymentDueDate) {\n <p>\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>{{ invoice.paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice.currencyCode) {\n <p>\n <strong>{{ textWords.detailsCurrencyCode }}: </strong>\n <span>{{ invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.paymentTerms) {\n <p>\n <strong>{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice.paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"seller-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceSellerTitle }}</h2>\n <p>\n <strong>{{ invoice.seller?.name }}</strong>\n </p>\n <p>{{ invoice.seller?.address }}</p>\n <p>{{ invoice.seller?.city }}, {{ invoice.seller?.zipCode }}</p>\n <p>{{ invoice.seller?.countryCode }}</p>\n @if (invoice.seller?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ invoice.seller?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice.seller?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonName }}</span>\n </p>\n }\n @if (invoice.seller?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice.seller?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n </header>\n <mat-divider></mat-divider>\n <div class=\"invoice-info\">\n <section class=\"invoice-references\">\n @if (textWords.referencesTopic) {\n <h2 class=\"info-title\">{{ textWords.referencesTopic }}</h2>\n }\n @if (invoice.references?.buyerReference) {\n <p>\n <strong>{{ textWords.referencesBuyerReference }}: </strong>\n <br />\n <span>{{ invoice.references?.buyerReference }}</span>\n </p>\n }\n @if (invoice.references?.projectReference) {\n <p>\n <strong>{{ textWords.referencesProjectReference }}: </strong>\n <br />\n <span>{{ invoice.references?.projectReference }}</span>\n </p>\n }\n @if (invoice.references?.contractReference) {\n <p>\n <strong>{{ textWords.referencesContractReference }}: </strong>\n <br />\n <span>{{ invoice.references?.contractReference }}</span>\n </p>\n }\n @if (invoice.references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords.referencesPurchaseOrderReference }}: </strong>\n <br />\n <span>{{ invoice.references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice.references?.salesOrderReference) {\n <p>\n <strong>{{ textWords.referencesSalesOrderReference }}: </strong>\n <br />\n <span>{{ invoice.references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice.references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords.referencesReceivingAdviceReference }}: </strong>\n <br />\n <span>{{ invoice.references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice.references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords.referencesDispatchAdviceReference }}: </strong>\n <br />\n <span> {{ invoice.references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice.references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords.referencesTenderOrLotReference }}: </strong>\n <br />\n <span>{{ invoice.references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice.references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords.referencesInvoicedObjectIdentifier }}: </strong>\n <br />\n <span>{{ invoice.references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n @if (invoice.deliveryInformation) {\n <section class=\"invoice-delivery\">\n <h2 class=\"info-title\">{{ textWords.deliveryInformationTitle }}</h2>\n\n @if (invoice.deliveryInformation.deliverToName) {\n <p>\n <strong>{{ textWords.deliverToName }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliverToName }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliverToLocationIdentifier) {\n <p>\n <strong>{{ textWords.deliverToLocationIdentifier }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliverToLocationIdentifier }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliveryDate) {\n <p>\n <strong>{{ textWords.deliveryDate }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliveryDate | date: 'shortDate' }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliveryAddress) {\n <p>\n <strong>{{ textWords.deliveryAddress }}: </strong>\n <span>\n @if (invoice.deliveryInformation.deliveryAddress.address) {\n <p>{{ invoice.deliveryInformation.deliveryAddress.address }}</p>\n }\n @if (invoice.deliveryInformation.deliveryAddress.city) {\n <span>{{ invoice.deliveryInformation.deliveryAddress.city }},</span>\n }\n @if (invoice.deliveryInformation.deliveryAddress.zipCode) {\n <span>{{ invoice.deliveryInformation.deliveryAddress.zipCode }}</span>\n }\n @if (invoice.deliveryInformation.deliveryAddress.countryCode) {\n <p>{{ invoice.deliveryInformation.deliveryAddress.countryCode }}</p>\n }\n </span>\n </p>\n }\n </section>\n }\n </div>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords.tableHeadDescription }}</th>\n <th class=\"center\">{{ textWords.tableHeadQuantity }}</th>\n <th class=\"center\">{{ textWords.tableHeadUnit }}</th>\n <th class=\"center\">{{ textWords.tableHeadNetPrice }}</th>\n <th class=\"center\">{{ textWords.tableHeadNetAmount }}</th>\n <th class=\"center\">{{ textWords.vat }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice.lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td class=\"currency-table-cell\">{{ item.quantity | numberPlus }}</td>\n <td>{{ item.unitCode }}</td>\n <td class=\"currency-table-cell\">{{ item.priceDetails?.netPrice | currencyPlus }}</td>\n <td class=\"currency-table-cell\">{{ item.netAmount | currencyPlus }}</td>\n <td class=\"currency-table-cell\">{{ item.vatInformation?.[0]?.vatRate | percentPlus: '1.0-2' }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"taxes\">\n <h2 class=\"info-title\">{{ textWords.taxesHeading }}</h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th>{{ textWords.vat }}</th>\n <th>{{ textWords.totalsTotalNet }}</th>\n <th>{{ textWords.totalsTotalVatAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice.vatBreakdown; track tax.taxRate) {\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate) {\n <span>{{ tax.taxRate | percentPlus: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount) {\n <span>{{ tax.netTaxableAmount | currencyPlus }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount) {\n <span>{{ tax.vatAmount | currencyPlus }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </section>\n\n <section class=\"payment-instructions\">\n <h2 class=\"info-title\">{{ textWords.instructionsTopic }}</h2>\n @if (invoice.paymentInstructions?.description) {\n <p>{{ invoice.paymentInstructions?.description }}</p>\n }\n @for (means of invoice.paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <br />\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <br />\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <br />\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n\n <section class=\"invoice-totals\">\n <h2 class=\"info-title\">{{ textWords.totalsTopic }}</h2>\n\n @if (invoice.totals?.totalNet) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalNet | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalAllowances) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalAllowances | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalCharges) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalCharges | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalAfterDeductions | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalVatAmount | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalGross) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalGross | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <br />\n <span>{{ invoice.totals?.alreadyPaidTotal | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <br />\n <strong> {{ invoice.totals?.totalToBePaid | currencyPlus }}</strong>\n </p>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n <h2>{{ textWords.notesTopic }}</h2>\n @for (note of invoice.invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n @if (invoice.documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice.documents ?? []\"></ava-invoice-documents>\n </section>\n }\n </div>\n}\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.invoice-header .header{height:32px}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details{width:30%}.seller-info,.invoice-delivery,.payment-instructions,.invoice-totals{text-align:right}.currency-table-cell{text-align:right!important}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes,.invoice-delivery,.invoice-details{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between;gap:10px}.total{background-color:var(--color-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff;text-wrap:nowrap}.invoice-attachments{padding-bottom:15px}.invoice-info{display:flex;justify-content:space-between;margin-bottom:20px}.info-title{border-bottom:2px solid var(--color-primary);text-align:center}.tax-report-table{width:100%;border-collapse:collapse;margin-top:10px}.tax-report-table th,.tax-report-table td{padding:12px;text-align:center;border:1px solid #ddd}.tax-report-table th{background-color:var(--color-primary);color:#fff;font-weight:700;border:1px solid #000}.tax-report-table td{font-size:14px;color:#333;border:1px solid #000}.center{text-align:center!important}\n"], dependencies: [{ kind: "pipe", type: PercentPlusPipe, name: "percentPlus" }, { kind: "pipe", type: NumberPlusPipe, name: "numberPlus" }, { kind: "pipe", type: CurrencyPlusPipe, name: "currencyPlus" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i2$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: InvoiceDocumentsComponent, selector: "ava-invoice-documents", inputs: ["documents"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2252
2367
|
}
|
|
2253
2368
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: InvoiceDisplayComponent, decorators: [{
|
|
2254
2369
|
type: Component,
|
|
2255
|
-
args: [{ selector: 'ava-invoice-display', imports: [CurrencyPipe, DatePipe, PercentPipe, AsyncPipe, MatDividerModule, InvoiceDocumentsComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [ConfigurationInvoiceService], template: "@if (textWords$ | async; as textWords) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\n\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceBuyerTitle }}</h2>\n <p>\n <strong>{{ invoice.buyer?.name }}</strong>\n </p>\n <p>{{ invoice.buyer?.address }}</p>\n <p>{{ invoice.buyer?.city }}, {{ invoice.buyer?.zipCode }}</p>\n <p>{{ invoice.buyer?.countryCode }}</p>\n @if (invoice.buyer?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ invoice.buyer?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice.buyer?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonName }}</span>\n </p>\n }\n @if (invoice.buyer?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice.buyer?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice.invoiceNumber) {\n <p>\n <strong>{{ textWords.detailsInvoiceNumber }}: </strong>\n <span>{{ invoice.invoiceNumber }}</span>\n </p>\n }\n @if (invoice.invoiceDate) {\n <p>\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>{{ invoice.invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice.paymentDueDate) {\n <p>\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>{{ invoice.paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice.currencyCode) {\n <p>\n <strong>{{ textWords.detailsCurrencyCode }}: </strong>\n <span>{{ invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.paymentTerms) {\n <p>\n <strong>{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice.paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"seller-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceSellerTitle }}</h2>\n <p>\n <strong>{{ invoice.seller?.name }}</strong>\n </p>\n <p>{{ invoice.seller?.address }}</p>\n <p>{{ invoice.seller?.city }}, {{ invoice.seller?.zipCode }}</p>\n <p>{{ invoice.seller?.countryCode }}</p>\n @if (invoice.seller?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ invoice.seller?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice.seller?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonName }}</span>\n </p>\n }\n @if (invoice.seller?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice.seller?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n </header>\n <mat-divider></mat-divider>\n <div class=\"invoice-info\">\n <section class=\"invoice-references\">\n @if (textWords.referencesTopic) {\n <h2 class=\"info-title\">{{ textWords.referencesTopic }}</h2>\n }\n @if (invoice.references?.buyerReference) {\n <p>\n <strong>{{ textWords.referencesBuyerReference }}: </strong>\n <br />\n <span>{{ invoice.references?.buyerReference }}</span>\n </p>\n }\n @if (invoice.references?.projectReference) {\n <p>\n <strong>{{ textWords.referencesProjectReference }}: </strong>\n <br />\n <span>{{ invoice.references?.projectReference }}</span>\n </p>\n }\n @if (invoice.references?.contractReference) {\n <p>\n <strong>{{ textWords.referencesContractReference }}: </strong>\n <br />\n <span>{{ invoice.references?.contractReference }}</span>\n </p>\n }\n @if (invoice.references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords.referencesPurchaseOrderReference }}: </strong>\n <br />\n <span>{{ invoice.references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice.references?.salesOrderReference) {\n <p>\n <strong>{{ textWords.referencesSalesOrderReference }}: </strong>\n <br />\n <span>{{ invoice.references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice.references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords.referencesReceivingAdviceReference }}: </strong>\n <br />\n <span>{{ invoice.references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice.references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords.referencesDispatchAdviceReference }}: </strong>\n <br />\n <span> {{ invoice.references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice.references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords.referencesTenderOrLotReference }}: </strong>\n <br />\n <span>{{ invoice.references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice.references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords.referencesInvoicedObjectIdentifier }}: </strong>\n <br />\n <span>{{ invoice.references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n @if (invoice.deliveryInformation) {\n <section class=\"invoice-delivery\">\n <h2 class=\"info-title\">{{ textWords.deliveryInformationTitle }}</h2>\n\n @if (invoice.deliveryInformation.deliverToName) {\n <p>\n <strong>{{ textWords.deliverToName }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliverToName }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliverToLocationIdentifier) {\n <p>\n <strong>{{ textWords.deliverToLocationIdentifier }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliverToLocationIdentifier }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliveryDate) {\n <p>\n <strong>{{ textWords.deliveryDate }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliveryDate | date: 'shortDate' }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliveryAddress) {\n <p>\n <strong>{{ textWords.deliveryAddress }}: </strong>\n <span>\n @if (invoice.deliveryInformation.deliveryAddress.address) {\n <p>{{ invoice.deliveryInformation.deliveryAddress.address }}</p>\n }\n @if (invoice.deliveryInformation.deliveryAddress.city) {\n <span>{{ invoice.deliveryInformation.deliveryAddress.city }},</span>\n }\n @if (invoice.deliveryInformation.deliveryAddress.zipCode) {\n <span>{{ invoice.deliveryInformation.deliveryAddress.zipCode }}</span>\n }\n @if (invoice.deliveryInformation.deliveryAddress.countryCode) {\n <p>{{ invoice.deliveryInformation.deliveryAddress.countryCode }}</p>\n }\n </span>\n </p>\n }\n </section>\n }\n </div>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords.tableHeadDescription }}</th>\n <th class=\"center\">{{ textWords.tableHeadQuantity }}</th>\n <th class=\"center\">{{ textWords.tableHeadUnit }}</th>\n <th class=\"center\">{{ textWords.tableHeadNetPrice }}</th>\n <th class=\"center\">{{ textWords.tableHeadNetAmount }}</th>\n <th class=\"center\">{{ textWords.vat }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice.lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td class=\"currency-table-cell\">{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td class=\"currency-table-cell\">{{ item.priceDetails?.netPrice | currency: invoice.currencyCode }}</td>\n <td class=\"currency-table-cell\">{{ item.netAmount | currency: invoice.currencyCode }}</td>\n <td class=\"currency-table-cell\">{{ item.vatInformation?.[0]?.vatRate | percent: '1.0-2' }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"taxes\">\n <h2 class=\"info-title\">{{ textWords.taxesHeading }}</h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th>{{ textWords.vat }}</th>\n <th>{{ textWords.totalsTotalNet }}</th>\n <th>{{ textWords.totalsTotalVatAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice.vatBreakdown; track tax.taxRate) {\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate) {\n <span>{{ tax.taxRate | percent: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount) {\n <span>{{ tax.netTaxableAmount | currency: invoice.currencyCode }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount) {\n <span>{{ tax.vatAmount | currency: invoice.currencyCode }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </section>\n\n <section class=\"payment-instructions\">\n <h2 class=\"info-title\">{{ textWords.instructionsTopic }}</h2>\n @if (invoice.paymentInstructions?.description) {\n <p>{{ invoice.paymentInstructions?.description }}</p>\n }\n @for (means of invoice.paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <br />\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <br />\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <br />\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n\n <section class=\"invoice-totals\">\n <h2 class=\"info-title\">{{ textWords.totalsTopic }}</h2>\n\n @if (invoice.totals?.totalNet) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalNet | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalAllowances) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalAllowances | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalCharges) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalCharges | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalAfterDeductions | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalVatAmount | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalGross) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalGross | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <br />\n <span>{{ invoice.totals?.alreadyPaidTotal | currency: invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <br />\n <strong> {{ invoice.totals?.totalToBePaid | currency: invoice.currencyCode }}</strong>\n </p>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n <h2>{{ textWords.notesTopic }}</h2>\n @for (note of invoice.invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n @if (invoice.documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice.documents ?? []\"></ava-invoice-documents>\n </section>\n }\n </div>\n}\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.invoice-header .header{height:32px}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details{width:30%}.seller-info,.invoice-delivery,.payment-instructions,.invoice-totals{text-align:right}.currency-table-cell{text-align:right!important}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes,.invoice-delivery,.invoice-details{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between;gap:10px}.total{background-color:var(--color-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff;text-wrap:nowrap}.invoice-attachments{padding-bottom:15px}.invoice-info{display:flex;justify-content:space-between;margin-bottom:20px}.info-title{border-bottom:2px solid var(--color-primary);text-align:center}.tax-report-table{width:100%;border-collapse:collapse;margin-top:10px}.tax-report-table th,.tax-report-table td{padding:12px;text-align:center;border:1px solid #ddd}.tax-report-table th{background-color:var(--color-primary);color:#fff;font-weight:700;border:1px solid #000}.tax-report-table td{font-size:14px;color:#333;border:1px solid #000}.center{text-align:center!important}\n"] }]
|
|
2370
|
+
args: [{ selector: 'ava-invoice-display', imports: [PercentPlusPipe, NumberPlusPipe, CurrencyPlusPipe, DatePipe, AsyncPipe, MatDividerModule, InvoiceDocumentsComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [ConfigurationInvoiceService, CurrencyPipe, DecimalPipe, PercentPipe], template: "@if (textWords$ | async; as textWords) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\n\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceBuyerTitle }}</h2>\n <p>\n <strong>{{ invoice.buyer?.name }}</strong>\n </p>\n <p>{{ invoice.buyer?.address }}</p>\n <p>{{ invoice.buyer?.city }}, {{ invoice.buyer?.zipCode }}</p>\n <p>{{ invoice.buyer?.countryCode }}</p>\n @if (invoice.buyer?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ invoice.buyer?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice.buyer?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonName }}</span>\n </p>\n }\n @if (invoice.buyer?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice.buyer?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ invoice.buyer?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice.invoiceNumber) {\n <p>\n <strong>{{ textWords.detailsInvoiceNumber }}: </strong>\n <span>{{ invoice.invoiceNumber }}</span>\n </p>\n }\n @if (invoice.invoiceDate) {\n <p>\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>{{ invoice.invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice.paymentDueDate) {\n <p>\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>{{ invoice.paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice.currencyCode) {\n <p>\n <strong>{{ textWords.detailsCurrencyCode }}: </strong>\n <span>{{ invoice.currencyCode }}</span>\n </p>\n }\n @if (invoice.paymentTerms) {\n <p>\n <strong>{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice.paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"seller-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceSellerTitle }}</h2>\n <p>\n <strong>{{ invoice.seller?.name }}</strong>\n </p>\n <p>{{ invoice.seller?.address }}</p>\n <p>{{ invoice.seller?.city }}, {{ invoice.seller?.zipCode }}</p>\n <p>{{ invoice.seller?.countryCode }}</p>\n @if (invoice.seller?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ invoice.seller?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice.seller?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonName }}</span>\n </p>\n }\n @if (invoice.seller?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice.seller?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ invoice.seller?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n </header>\n <mat-divider></mat-divider>\n <div class=\"invoice-info\">\n <section class=\"invoice-references\">\n @if (textWords.referencesTopic) {\n <h2 class=\"info-title\">{{ textWords.referencesTopic }}</h2>\n }\n @if (invoice.references?.buyerReference) {\n <p>\n <strong>{{ textWords.referencesBuyerReference }}: </strong>\n <br />\n <span>{{ invoice.references?.buyerReference }}</span>\n </p>\n }\n @if (invoice.references?.projectReference) {\n <p>\n <strong>{{ textWords.referencesProjectReference }}: </strong>\n <br />\n <span>{{ invoice.references?.projectReference }}</span>\n </p>\n }\n @if (invoice.references?.contractReference) {\n <p>\n <strong>{{ textWords.referencesContractReference }}: </strong>\n <br />\n <span>{{ invoice.references?.contractReference }}</span>\n </p>\n }\n @if (invoice.references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords.referencesPurchaseOrderReference }}: </strong>\n <br />\n <span>{{ invoice.references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice.references?.salesOrderReference) {\n <p>\n <strong>{{ textWords.referencesSalesOrderReference }}: </strong>\n <br />\n <span>{{ invoice.references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice.references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords.referencesReceivingAdviceReference }}: </strong>\n <br />\n <span>{{ invoice.references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice.references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords.referencesDispatchAdviceReference }}: </strong>\n <br />\n <span> {{ invoice.references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice.references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords.referencesTenderOrLotReference }}: </strong>\n <br />\n <span>{{ invoice.references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice.references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords.referencesInvoicedObjectIdentifier }}: </strong>\n <br />\n <span>{{ invoice.references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n @if (invoice.deliveryInformation) {\n <section class=\"invoice-delivery\">\n <h2 class=\"info-title\">{{ textWords.deliveryInformationTitle }}</h2>\n\n @if (invoice.deliveryInformation.deliverToName) {\n <p>\n <strong>{{ textWords.deliverToName }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliverToName }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliverToLocationIdentifier) {\n <p>\n <strong>{{ textWords.deliverToLocationIdentifier }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliverToLocationIdentifier }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliveryDate) {\n <p>\n <strong>{{ textWords.deliveryDate }}: </strong>\n <br />\n <span>{{ invoice.deliveryInformation.deliveryDate | date: 'shortDate' }}</span>\n </p>\n }\n @if (invoice.deliveryInformation.deliveryAddress) {\n <p>\n <strong>{{ textWords.deliveryAddress }}: </strong>\n <span>\n @if (invoice.deliveryInformation.deliveryAddress.address) {\n <p>{{ invoice.deliveryInformation.deliveryAddress.address }}</p>\n }\n @if (invoice.deliveryInformation.deliveryAddress.city) {\n <span>{{ invoice.deliveryInformation.deliveryAddress.city }},</span>\n }\n @if (invoice.deliveryInformation.deliveryAddress.zipCode) {\n <span>{{ invoice.deliveryInformation.deliveryAddress.zipCode }}</span>\n }\n @if (invoice.deliveryInformation.deliveryAddress.countryCode) {\n <p>{{ invoice.deliveryInformation.deliveryAddress.countryCode }}</p>\n }\n </span>\n </p>\n }\n </section>\n }\n </div>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords.tableHeadDescription }}</th>\n <th class=\"center\">{{ textWords.tableHeadQuantity }}</th>\n <th class=\"center\">{{ textWords.tableHeadUnit }}</th>\n <th class=\"center\">{{ textWords.tableHeadNetPrice }}</th>\n <th class=\"center\">{{ textWords.tableHeadNetAmount }}</th>\n <th class=\"center\">{{ textWords.vat }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice.lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td class=\"currency-table-cell\">{{ item.quantity | numberPlus }}</td>\n <td>{{ item.unitCode }}</td>\n <td class=\"currency-table-cell\">{{ item.priceDetails?.netPrice | currencyPlus }}</td>\n <td class=\"currency-table-cell\">{{ item.netAmount | currencyPlus }}</td>\n <td class=\"currency-table-cell\">{{ item.vatInformation?.[0]?.vatRate | percentPlus: '1.0-2' }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"taxes\">\n <h2 class=\"info-title\">{{ textWords.taxesHeading }}</h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th>{{ textWords.vat }}</th>\n <th>{{ textWords.totalsTotalNet }}</th>\n <th>{{ textWords.totalsTotalVatAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice.vatBreakdown; track tax.taxRate) {\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate) {\n <span>{{ tax.taxRate | percentPlus: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount) {\n <span>{{ tax.netTaxableAmount | currencyPlus }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount) {\n <span>{{ tax.vatAmount | currencyPlus }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </section>\n\n <section class=\"payment-instructions\">\n <h2 class=\"info-title\">{{ textWords.instructionsTopic }}</h2>\n @if (invoice.paymentInstructions?.description) {\n <p>{{ invoice.paymentInstructions?.description }}</p>\n }\n @for (means of invoice.paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <br />\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <br />\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <br />\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n\n <section class=\"invoice-totals\">\n <h2 class=\"info-title\">{{ textWords.totalsTopic }}</h2>\n\n @if (invoice.totals?.totalNet) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalNet | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalAllowances) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalAllowances | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalCharges) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalCharges | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalAfterDeductions | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <br />\n <span>{{ invoice.totals?.totalVatAmount | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalGross) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <br />\n <span> {{ invoice.totals?.totalGross | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <br />\n <span>{{ invoice.totals?.alreadyPaidTotal | currencyPlus }}</span>\n </p>\n }\n @if (invoice.totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <br />\n <strong> {{ invoice.totals?.totalToBePaid | currencyPlus }}</strong>\n </p>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n <h2>{{ textWords.notesTopic }}</h2>\n @for (note of invoice.invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n @if (invoice.documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice.documents ?? []\"></ava-invoice-documents>\n </section>\n }\n </div>\n}\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.invoice-header .header{height:32px}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details{width:30%}.seller-info,.invoice-delivery,.payment-instructions,.invoice-totals{text-align:right}.currency-table-cell{text-align:right!important}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes,.invoice-delivery,.invoice-details{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between;gap:10px}.total{background-color:var(--color-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff;text-wrap:nowrap}.invoice-attachments{padding-bottom:15px}.invoice-info{display:flex;justify-content:space-between;margin-bottom:20px}.info-title{border-bottom:2px solid var(--color-primary);text-align:center}.tax-report-table{width:100%;border-collapse:collapse;margin-top:10px}.tax-report-table th,.tax-report-table td{padding:12px;text-align:center;border:1px solid #ddd}.tax-report-table th{background-color:var(--color-primary);color:#fff;font-weight:700;border:1px solid #000}.tax-report-table td{font-size:14px;color:#333;border:1px solid #000}.center{text-align:center!important}\n"] }]
|
|
2256
2371
|
}], ctorParameters: () => [{ type: ConfigurationInvoiceService }], propDecorators: { invoice: [{
|
|
2257
2372
|
type: Input
|
|
2258
2373
|
}], config: [{
|
|
@@ -2267,5 +2382,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
|
|
|
2267
2382
|
* Generated bundle index. Do not edit.
|
|
2268
2383
|
*/
|
|
2269
2384
|
|
|
2270
|
-
export { AttachmentMimeType, AvaTreeComponent, DEFAULT_FILTERS, DEFAULT_TEXT_WORDS, DEFAULT_TEXT_WORD_INVOICE, ExchangePhaseDto, InvoiceDisplayComponent, InvoiceType, ItemNumberSchemaTierTypeDto, ItemNumberTypeDto, ModeViewType, OriginDto, PriceRoundingModeDto, PriceTypeDto, VatCategory, defaults, germanTextsAva, germanTextsInvoice, version };
|
|
2385
|
+
export { AttachmentMimeType, AvaTreeComponent, DEFAULT_CURRENCY_CODE, DEFAULT_DIGITS_INFO, DEFAULT_FILTERS, DEFAULT_LANGUAGE, DEFAULT_TEXT_WORDS, DEFAULT_TEXT_WORD_INVOICE, ExchangePhaseDto, InvoiceDisplayComponent, InvoiceType, ItemNumberSchemaTierTypeDto, ItemNumberTypeDto, ModeViewType, OriginDto, PriceRoundingModeDto, PriceTypeDto, VatCategory, defaults, germanTextsAva, germanTextsInvoice, localeTypes, version };
|
|
2271
2386
|
//# sourceMappingURL=dangl-angular-ava.mjs.map
|