@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.
@@ -1,4 +1,8 @@
1
- import { AsyncPipe, NgTemplateOutlet, NgClass, DecimalPipe, CurrencyPipe, DatePipe, PercentPipe } from '@angular/common';
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, skip } from 'rxjs';
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-beta0010",
243
- commitInfo: "Branch.develop.Sha.217e0b82ca2c38b2f0e1b6083afc08f94e5ff572",
246
+ version: "1.2.3-beta0019",
247
+ commitInfo: "Branch.develop.Sha.c47923ae428acb553b4613e509606a4b3aec7206",
244
248
  commitDate: "2025-02-05",
245
- commitHash: "217e0b82ca2c38b2f0e1b6083afc08f94e5ff572",
246
- informationalVersion: "1.2.3-beta.10+Branch.develop.Sha.217e0b82ca2c38b2f0e1b6083afc08f94e5ff572",
247
- buildDateUtc: new Date(Date.UTC(2025, 1, 5, 11, 37, 54))
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._textWords = { ...DEFAULT_TEXT_WORDS };
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
- const configTextWords = config?.textWords === 'en' ? DEFAULT_TEXT_WORDS : config?.textWords === 'de' ? germanTextsAva : config?.textWords;
331
- return { ...this._textWords, ...configTextWords };
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 {{ !oneColumn.numberFormat ? row[oneColumn.name] : (row[oneColumn.name] | number: oneColumn.numberFormat) }}\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"] }] }); }
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 {{ !oneColumn.numberFormat ? row[oneColumn.name] : (row[oneColumn.name] | number: oneColumn.numberFormat) }}\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"] }]
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._textWords = null;
2020
+ this._language = DEFAULT_LANGUAGE;
2021
+ this._textWords = this.getDefaultTextWords(this._language);
1991
2022
  this._pdfViewEnabled = false;
1992
- this._language = 'en';
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 : { ...this._textWords, ...textWords })), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
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: null,
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
- getDefaulTextWords(language) {
2025
- return language === 'en' ? { ...DEFAULT_TEXT_WORD_INVOICE } : { ...germanTextsInvoice };
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
- if (this.configurationInvoiceService.getCurrentInvoiceConfig()) {
2231
- const config = { ...this.configurationInvoiceService.getCurrentInvoiceConfig(), ...configObject };
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