@dangl/angular-ava 1.1.2-beta0113 → 1.1.2-beta0125

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/fesm2022/dangl-angular-ava.mjs +242 -216
  2. package/fesm2022/dangl-angular-ava.mjs.map +1 -1
  3. package/lib/ava-tree/{tree/components → components}/ava-tree/ava-tree.component.d.ts +3 -3
  4. package/lib/ava-tree/constants/index.d.ts +4 -0
  5. package/lib/ava-tree/{tree/directives → directives}/save-changing-view.directive.d.ts +2 -2
  6. package/lib/ava-tree/model/config-tree.model.d.ts +25 -0
  7. package/lib/ava-tree/model/index.d.ts +8 -0
  8. package/lib/{ava-tree/invoice → invoice/components}/invoice-display/invoice-display.component.d.ts +4 -4
  9. package/lib/invoice/constants/index.d.ts +2 -0
  10. package/lib/invoice/model/configInvoice.model.d.ts +4 -0
  11. package/lib/invoice/model/index.d.ts +4 -0
  12. package/lib/{ava-tree/tree → invoice}/model/invoice-models.d.ts +1 -1
  13. package/package.json +1 -1
  14. package/public-api.d.ts +6 -4
  15. package/lib/ava-tree/tree/constants/index.d.ts +0 -5
  16. package/lib/ava-tree/tree/model/index.d.ts +0 -9
  17. /package/lib/ava-tree/{tree/components → components}/list-structure/list-structure.component.d.ts +0 -0
  18. /package/lib/ava-tree/{tree/components → components}/table-structure/table-structure.component.d.ts +0 -0
  19. /package/lib/ava-tree/{tree/components → components}/tree-hover-tooltip/tree-hover-tooltip.component.d.ts +0 -0
  20. /package/lib/ava-tree/{tree/components → components}/tree-item/tree-item.component.d.ts +0 -0
  21. /package/lib/ava-tree/{tree/components → components}/tree-node/tree-node.component.d.ts +0 -0
  22. /package/lib/ava-tree/{tree/components → components}/tree-structure/tree-structure.component.d.ts +0 -0
  23. /package/lib/ava-tree/{tree/constants → constants}/defaultFilters.d.ts +0 -0
  24. /package/lib/ava-tree/{tree/constants → constants}/defaultTextWords.d.ts +0 -0
  25. /package/lib/ava-tree/{tree/constants → constants}/defaults.d.ts +0 -0
  26. /package/lib/ava-tree/{tree/model → model}/ava-models.d.ts +0 -0
  27. /package/lib/ava-tree/{tree/model → model}/context-menu-data.model.d.ts +0 -0
  28. /package/lib/ava-tree/{tree/model → model}/function-view-line.model.d.ts +0 -0
  29. /package/lib/ava-tree/{tree/model → model}/selecting.model.d.ts +0 -0
  30. /package/lib/ava-tree/{tree/model → model}/tableColumnType.d.ts +0 -0
  31. /package/lib/ava-tree/{tree/model → model}/tree-mode.model.d.ts +0 -0
  32. /package/lib/ava-tree/{tree/pipes → pipes}/element-icon-name.pipe.d.ts +0 -0
  33. /package/lib/ava-tree/{tree/pipes → pipes}/element-item-number.pipe.d.ts +0 -0
  34. /package/lib/ava-tree/{tree/pipes → pipes}/element-text.pipe.d.ts +0 -0
  35. /package/lib/ava-tree/{tree/pipes → pipes}/group-child-elements.pipe.d.ts +0 -0
  36. /package/lib/ava-tree/{tree/services → services}/dynamic-component.service.d.ts +0 -0
  37. /package/lib/ava-tree/{tree/services → services}/expand-parent-group.service.d.ts +0 -0
  38. /package/lib/ava-tree/{tree/services → services}/flat-elements.service.d.ts +0 -0
  39. /package/lib/ava-tree/{tree/services → services}/keyboard-operation.service.d.ts +0 -0
  40. /package/lib/ava-tree/{tree/services → services}/select-element.service.d.ts +0 -0
  41. /package/lib/ava-tree/{tree/services → services}/tree-hover-tooltip.service.d.ts +0 -0
  42. /package/lib/ava-tree/{tree/services → services}/tree-node-selection.service.d.ts +0 -0
  43. /package/lib/ava-tree/{tree/services → services}/tree-words.service.d.ts +0 -0
  44. /package/lib/{ava-tree/tree → invoice}/constants/defaultTextWordInvoice.d.ts +0 -0
  45. /package/lib/{ava-tree/tree → invoice}/model/invoice-words.model.d.ts +0 -0
  46. /package/lib/{ava-tree/tree → invoice}/pipes/invoice-attachment-mime-type.pipe.d.ts +0 -0
@@ -231,51 +231,6 @@ var CommerceInquiryTypeDto;
231
231
  CommerceInquiryTypeDto["Exhibition"] = "Exhibition";
232
232
  })(CommerceInquiryTypeDto || (CommerceInquiryTypeDto = {}));
233
233
 
234
- /** Type of the invoice */
235
- var InvoiceType;
236
- (function (InvoiceType) {
237
- InvoiceType[InvoiceType["PartialInvoice"] = 326] = "PartialInvoice";
238
- InvoiceType[InvoiceType["CommercialInvoice"] = 380] = "CommercialInvoice";
239
- InvoiceType[InvoiceType["CreditNote"] = 381] = "CreditNote";
240
- InvoiceType[InvoiceType["CorrectedInvoice"] = 384] = "CorrectedInvoice";
241
- InvoiceType[InvoiceType["SelfBilledInvoice"] = 389] = "SelfBilledInvoice";
242
- InvoiceType[InvoiceType["PartialConstructionInvoice"] = 875] = "PartialConstructionInvoice";
243
- InvoiceType[InvoiceType["PartialFinalConstructionInvoice"] = 876] = "PartialFinalConstructionInvoice";
244
- InvoiceType[InvoiceType["FinalConstructionInvoice"] = 877] = "FinalConstructionInvoice";
245
- })(InvoiceType || (InvoiceType = {}));
246
- /** Describes a mime type of a document */
247
- var AttachmentMimeType;
248
- (function (AttachmentMimeType) {
249
- AttachmentMimeType[AttachmentMimeType["Unknown"] = 0] = "Unknown";
250
- AttachmentMimeType[AttachmentMimeType["Pdf"] = 1] = "Pdf";
251
- AttachmentMimeType[AttachmentMimeType["Png"] = 2] = "Png";
252
- AttachmentMimeType[AttachmentMimeType["Jpeg"] = 3] = "Jpeg";
253
- AttachmentMimeType[AttachmentMimeType["Csv"] = 4] = "Csv";
254
- AttachmentMimeType[AttachmentMimeType["Excel"] = 5] = "Excel";
255
- AttachmentMimeType[AttachmentMimeType["OpenOfficeSpreadsheet"] = 6] = "OpenOfficeSpreadsheet";
256
- })(AttachmentMimeType || (AttachmentMimeType = {}));
257
- /** The category used in a VatBreakdown"/> */
258
- var VatCategory;
259
- (function (VatCategory) {
260
- VatCategory[VatCategory["Unknown"] = 0] = "Unknown";
261
- VatCategory[VatCategory["StandardRate"] = 1] = "StandardRate";
262
- VatCategory[VatCategory["ZeroRatedGoods"] = 2] = "ZeroRatedGoods";
263
- VatCategory[VatCategory["ExemptFromTax"] = 3] = "ExemptFromTax";
264
- VatCategory[VatCategory["VatReverseCharge"] = 4] = "VatReverseCharge";
265
- VatCategory[VatCategory["VatExemptReverseCharge"] = 5] = "VatExemptReverseCharge";
266
- VatCategory[VatCategory["FreeExportItem"] = 6] = "FreeExportItem";
267
- VatCategory[VatCategory["ServicesOutsideScopeOfTaxation"] = 7] = "ServicesOutsideScopeOfTaxation";
268
- VatCategory[VatCategory["CanaryIslandsGeneralIndirectTax"] = 8] = "CanaryIslandsGeneralIndirectTax";
269
- VatCategory[VatCategory["TaxInCeutaAndMelilla"] = 9] = "TaxInCeutaAndMelilla";
270
- })(VatCategory || (VatCategory = {}));
271
- /** This enum represents the source of an invoice, e.g. from which format it was imported */
272
- var SourceType;
273
- (function (SourceType) {
274
- SourceType[SourceType["Self"] = 0] = "Self";
275
- SourceType[SourceType["Ubl"] = 1] = "Ubl";
276
- SourceType[SourceType["Cii"] = 2] = "Cii";
277
- })(SourceType || (SourceType = {}));
278
-
279
234
  var ModeViewType;
280
235
  (function (ModeViewType) {
281
236
  ModeViewType["Tree"] = "Tree";
@@ -285,12 +240,12 @@ var ModeViewType;
285
240
 
286
241
  // This file is automatically generated as part of the build process
287
242
  const version = {
288
- version: "1.1.2-beta0113",
289
- commitInfo: "Branch.develop.Sha.f8f05cef511dd8341b9c868d5cf6bf08ccabad40",
290
- commitDate: "2024-12-23",
291
- commitHash: "f8f05cef511dd8341b9c868d5cf6bf08ccabad40",
292
- informationalVersion: "1.1.2-beta.113+Branch.develop.Sha.f8f05cef511dd8341b9c868d5cf6bf08ccabad40",
293
- buildDateUtc: new Date(Date.UTC(2024, 11, 23, 20, 6, 40))
243
+ version: "1.1.2-beta0125",
244
+ commitInfo: "Branch.develop.Sha.365c7228809bc400dfed8790f6137f898193e111",
245
+ commitDate: "2025-01-03",
246
+ commitHash: "365c7228809bc400dfed8790f6137f898193e111",
247
+ informationalVersion: "1.1.2-beta.125+Branch.develop.Sha.365c7228809bc400dfed8790f6137f898193e111",
248
+ buildDateUtc: new Date(Date.UTC(2025, 0, 3, 13, 15, 38))
294
249
  };
295
250
 
296
251
  const DEFAULT_FILTERS = [
@@ -316,125 +271,6 @@ const DEFAULT_FILTERS = [
316
271
  }
317
272
  ];
318
273
 
319
- const DEFAULT_TEXT_WORD_INVOICE = {
320
- invoiceTitle: 'Invoice',
321
- invoiceBuyerTitle: 'Receiver',
322
- invoiceSellerTitle: 'Sender',
323
- vatId: 'VAT ID',
324
- detailsInvoiceNumber: 'Invoice Number',
325
- detailsInvoiceDate: 'Invoice Date',
326
- detailsPaymentDueDate: 'Due Date',
327
- detailsCurrencyCode: 'Currency',
328
- detailsPaymentTerms: 'Payment Terms',
329
- referencesTopic: 'References',
330
- referencesBuyerReference: 'Buyer Reference',
331
- referencesProjectReference: 'Project Reference',
332
- referencesContractReference: 'Contract Reference',
333
- referencesPurchaseOrderReference: 'Purchase Order Reference',
334
- referencesSalesOrderReference: 'Sales Order Reference',
335
- referencesReceivingAdviceReference: 'Receiving Advice Reference',
336
- referencesDispatchAdviceReference: 'Dispatch Advice Reference',
337
- referencesTenderOrLotReference: 'Tender or Lot Reference',
338
- referencesInvoicedObjectIdentifier: 'Invoiced Object Identifier',
339
- tableHeadDescription: 'Description',
340
- tableHeadQuantity: 'Quantity',
341
- tableHeadUnit: 'Unit',
342
- tableHeadNetPrice: 'Net Price',
343
- tableHeadNetAmount: 'Net Amount',
344
- totalsTopic: 'Totals',
345
- totalsTotalNet: 'Total Net',
346
- totalsTotalAllowances: 'Total Allowances',
347
- totalsTotalCharges: 'Total Charges',
348
- totalsTotalAfterDeductions: 'Total After Deductions',
349
- totalsTotalVatAmount: 'Total VAT Amount',
350
- totalsTotalGross: 'Total Gross',
351
- totalsAlreadyPaidTotal: 'Already Paid Total',
352
- totalsTotalToBePaid: 'Total to be Paid',
353
- instructionsTopic: 'Payment Instructions',
354
- instructionsAccountIdentifier: 'Account Identifier',
355
- instructionsAccountName: 'Account Name',
356
- instructionsServiceProviderIdentifier: 'Service Provider Identifier',
357
- notesTopic: 'Notes',
358
- attachmentsHeading: 'Attachments',
359
- attachmentsName: 'Name',
360
- attachmentsDescription: 'Description',
361
- attachmentsUrl: 'Url',
362
- attachmentsDataSize: 'Size',
363
- attachmentsMimeType: 'Mime Type',
364
- attachmentsFileName: 'File Name',
365
- attachmentsDownloadButton: 'Download',
366
- contactPersonName: 'Contact Person Name',
367
- contactPersonEmail: 'Contact Person Email',
368
- contactPersonPhone: 'Contact Person Phone',
369
- vat: 'VAT',
370
- taxRate: 'Tax Rate',
371
- deliveryInformationTitle: 'Delivery Information',
372
- deliverToName: 'Name',
373
- deliverToLocationIdentifier: 'Location Identifier',
374
- deliveryDate: 'Date',
375
- deliveryAddress: 'Address',
376
- taxesHeading: 'Taxes'
377
- };
378
- const germanTextsInvoice = {
379
- invoiceTitle: 'Rechnung',
380
- invoiceBuyerTitle: 'Empfänger',
381
- invoiceSellerTitle: 'Rechnungssteller',
382
- vatId: 'USt.-ID',
383
- detailsInvoiceNumber: 'Rechnungsnummer',
384
- detailsInvoiceDate: 'Rechnungsdatum',
385
- detailsPaymentDueDate: 'Fälligkeitsdatum',
386
- detailsCurrencyCode: 'Währung',
387
- detailsPaymentTerms: 'Zahlungsbedingungen',
388
- referencesTopic: 'Referenzen',
389
- referencesBuyerReference: 'Käuferreferenz',
390
- referencesProjectReference: 'Projektreferenz',
391
- referencesContractReference: 'Vertragsreferenz',
392
- referencesPurchaseOrderReference: 'Bestellreferenz',
393
- referencesSalesOrderReference: 'Auftragsreferenz',
394
- referencesReceivingAdviceReference: 'Empfangsbestätigungsreferenz',
395
- referencesDispatchAdviceReference: 'Lieferreferenz',
396
- referencesTenderOrLotReference: 'Ausschreibungs- oder Losreferenz',
397
- referencesInvoicedObjectIdentifier: 'Objektreferenz',
398
- tableHeadDescription: 'Beschreibung',
399
- tableHeadQuantity: 'Menge',
400
- tableHeadUnit: 'Einheit',
401
- tableHeadNetPrice: 'Nettopreis',
402
- tableHeadNetAmount: 'Nettomenge',
403
- totalsTopic: 'Gesamt',
404
- totalsTotalNet: 'Gesamt Netto',
405
- totalsTotalAllowances: 'Gesamt Rabatt',
406
- totalsTotalCharges: 'Gesamt Zuschlag',
407
- totalsTotalAfterDeductions: 'Summe nach Rabatten',
408
- totalsTotalVatAmount: 'Summe Umsatzsteuer',
409
- totalsTotalGross: 'Gesamt Brutto',
410
- totalsAlreadyPaidTotal: 'Bereits bezahlt',
411
- totalsTotalToBePaid: 'Gesamt zu zahlen',
412
- instructionsTopic: 'Zahlungsanweisungen',
413
- instructionsAccountIdentifier: 'Kontonummer',
414
- instructionsAccountName: 'Kontoname',
415
- instructionsServiceProviderIdentifier: 'Bank',
416
- notesTopic: 'Hinweise',
417
- attachmentsHeading: 'Anhänge',
418
- attachmentsName: 'Name',
419
- attachmentsDescription: 'Beschreibung',
420
- attachmentsUrl: 'Url',
421
- attachmentsDataSize: 'Größe',
422
- attachmentsMimeType: 'Typ',
423
- attachmentsFileName: 'Dateiname',
424
- attachmentsDownloadButton: 'Download',
425
- contactPersonName: 'Name der Kontaktperson',
426
- contactPersonEmail: 'E-Mail der Kontaktperson',
427
- contactPersonPhone: 'Kontaktperson Telefon',
428
- vat: 'MwSt.',
429
- taxRate: 'Steuersatz',
430
- deliveryInformationTitle: 'Lieferinformationen',
431
- deliverToName: 'Liefername',
432
- deliverToLocationIdentifier: 'Lieferort',
433
- deliveryDate: 'Lieferdatum',
434
- deliveryAddress: 'Lieferadresse',
435
- taxesHeading: 'Steuer'
436
- };
437
-
438
274
  const DEFAULT_TEXT_WORDS = {
439
275
  textSearch: 'Search',
440
276
  textNothing: 'Nothing',
@@ -992,14 +828,14 @@ class SaveChangingViewDirective {
992
828
  this.el = el;
993
829
  this.renderer = renderer;
994
830
  this.flatElementsService = flatElementsService;
995
- this.attributeValue = 'text';
831
+ this.saveChangingView = 'text';
996
832
  }
997
833
  ngAfterViewInit() {
998
834
  const el = this.el?.nativeElement;
999
835
  const id = el?.id;
1000
836
  if (id) {
1001
837
  const view = this.flatElementsService?.getChangedView(id);
1002
- switch (this.attributeValue) {
838
+ switch (this.saveChangingView) {
1003
839
  case 'icon':
1004
840
  if (view?.iconName) {
1005
841
  el.textContent = view.iconName;
@@ -1020,14 +856,14 @@ class SaveChangingViewDirective {
1020
856
  }
1021
857
  }
1022
858
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: SaveChangingViewDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: FlatElementsService }], target: i0.ɵɵFactoryTarget.Directive }); }
1023
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.1", type: SaveChangingViewDirective, isStandalone: true, selector: "[saveChangingView]", inputs: { attributeValue: "attributeValue" }, ngImport: i0 }); }
859
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.1", type: SaveChangingViewDirective, isStandalone: true, selector: "[saveChangingView]", inputs: { saveChangingView: "saveChangingView" }, ngImport: i0 }); }
1024
860
  }
1025
861
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: SaveChangingViewDirective, decorators: [{
1026
862
  type: Directive,
1027
863
  args: [{
1028
864
  selector: '[saveChangingView]'
1029
865
  }]
1030
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: FlatElementsService }], propDecorators: { attributeValue: [{
866
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: FlatElementsService }], propDecorators: { saveChangingView: [{
1031
867
  type: Input
1032
868
  }] } });
1033
869
 
@@ -1184,7 +1020,7 @@ class TreeItemComponent {
1184
1020
  this.treeNodeSelectionService.changeSelecting(isSelected, element.id);
1185
1021
  }
1186
1022
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TreeItemComponent, deps: [{ token: SelectElementService }, { token: TreeNodeSelectionService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1187
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TreeItemComponent, isStandalone: true, selector: "ava-tree-item", inputs: { element: "element", expansionState: "expansionState", isSelectionMode: "isSelectionMode", allowDblClick: "allowDblClick" }, ngImport: i0, template: "@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [attributeValue]=\"'icon'\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__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 <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText }}</ng-container>\n }\n</ng-template>\n", styles: ["::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}::ng-deep .ava-tree-item__checkbox .mat-mdc-checkbox-touch-target{width:16px!important;height:16px!important}.ava-tree-item{display:flex;align-items:center}.ava-tree-item__icon,.ava-tree-item__checkbox{flex-shrink:0}.ava-tree-item__text{flex-grow:1;-webkit-user-select:none;user-select:none;white-space:nowrap;display:flex;align-items:center;min-height:24px}.ava-tree-item__text.choose{color:red!important}\n"], dependencies: [{ kind: "directive", type: SaveChangingViewDirective, selector: "[saveChangingView]", inputs: ["attributeValue"] }, { kind: "pipe", type: ElementItemNumberPipe, name: "elementItemNumber" }, { kind: "pipe", type: ElementTextPipe, name: "elementText" }, { kind: "pipe", type: ElementIconNamePipe, name: "elementIconName" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.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: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
1023
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TreeItemComponent, isStandalone: true, selector: "ava-tree-item", inputs: { element: "element", expansionState: "expansionState", isSelectionMode: "isSelectionMode", allowDblClick: "allowDblClick" }, ngImport: i0, template: "@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__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 <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText }}</ng-container>\n }\n</ng-template>\n", styles: ["::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}::ng-deep .ava-tree-item__checkbox .mat-mdc-checkbox-touch-target{width:16px!important;height:16px!important}.ava-tree-item{display:flex;align-items:center}.ava-tree-item__icon,.ava-tree-item__checkbox{flex-shrink:0}.ava-tree-item__text{flex-grow:1;-webkit-user-select:none;user-select:none;white-space:nowrap;display:flex;align-items:center;min-height:24px}.ava-tree-item__text.choose{color:red!important}\n"], dependencies: [{ kind: "directive", type: SaveChangingViewDirective, selector: "[saveChangingView]", inputs: ["saveChangingView"] }, { kind: "pipe", type: ElementItemNumberPipe, name: "elementItemNumber" }, { kind: "pipe", type: ElementTextPipe, name: "elementText" }, { kind: "pipe", type: ElementIconNamePipe, name: "elementIconName" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.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: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
1188
1024
  }
1189
1025
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TreeItemComponent, decorators: [{
1190
1026
  type: Component,
@@ -1197,7 +1033,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
1197
1033
  MatCheckboxModule,
1198
1034
  FormsModule,
1199
1035
  MatIconModule
1200
- ], template: "@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [attributeValue]=\"'icon'\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__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 <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText }}</ng-container>\n }\n</ng-template>\n", styles: ["::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}::ng-deep .ava-tree-item__checkbox .mat-mdc-checkbox-touch-target{width:16px!important;height:16px!important}.ava-tree-item{display:flex;align-items:center}.ava-tree-item__icon,.ava-tree-item__checkbox{flex-shrink:0}.ava-tree-item__text{flex-grow:1;-webkit-user-select:none;user-select:none;white-space:nowrap;display:flex;align-items:center;min-height:24px}.ava-tree-item__text.choose{color:red!important}\n"] }]
1036
+ ], template: "@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__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 <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText }}</ng-container>\n }\n</ng-template>\n", styles: ["::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}::ng-deep .ava-tree-item__checkbox .mat-mdc-checkbox-touch-target{width:16px!important;height:16px!important}.ava-tree-item{display:flex;align-items:center}.ava-tree-item__icon,.ava-tree-item__checkbox{flex-shrink:0}.ava-tree-item__text{flex-grow:1;-webkit-user-select:none;user-select:none;white-space:nowrap;display:flex;align-items:center;min-height:24px}.ava-tree-item__text.choose{color:red!important}\n"] }]
1201
1037
  }], ctorParameters: () => [{ type: SelectElementService }, { type: TreeNodeSelectionService }, { type: i0.ChangeDetectorRef }], propDecorators: { element: [{
1202
1038
  type: Input
1203
1039
  }], expansionState: [{
@@ -1361,7 +1197,7 @@ class TableStructureComponent {
1361
1197
  this.treeNodeSelectionService.changeSelecting(event, element.id);
1362
1198
  }
1363
1199
  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 }], target: i0.ɵɵFactoryTarget.Component }); }
1364
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TableStructureComponent, isStandalone: true, selector: "ava-table-structure", inputs: { filteredElementList: "filteredElementList", isSelectionMode: "isSelectionMode", addTableColumns: "addTableColumns", selectedColor: "selectedColor", allowDblClick: "allowDblClick" }, 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 @if (checkedElements[element.id]) {\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 }\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 <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementText }}\n </div>\n </td>\n </ng-container>\n @for (oneColumn of addTableColumns; track oneColumn) {\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 || '' : ''\"\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: 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: i3$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.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: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
1200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TableStructureComponent, isStandalone: true, selector: "ava-table-structure", inputs: { filteredElementList: "filteredElementList", isSelectionMode: "isSelectionMode", addTableColumns: "addTableColumns", selectedColor: "selectedColor", allowDblClick: "allowDblClick" }, 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 @if (checkedElements[element.id]) {\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 }\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 <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementText }}\n </div>\n </td>\n </ng-container>\n @for (oneColumn of addTableColumns; track oneColumn) {\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 || '' : ''\"\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: 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: i3$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.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: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: SaveChangingViewDirective, selector: "[saveChangingView]", inputs: ["saveChangingView"] }] }); }
1365
1201
  }
1366
1202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TableStructureComponent, decorators: [{
1367
1203
  type: Component,
@@ -1374,7 +1210,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
1374
1210
  MatTableModule,
1375
1211
  MatIconModule,
1376
1212
  MatCheckboxModule,
1377
- FormsModule
1213
+ FormsModule,
1214
+ SaveChangingViewDirective
1378
1215
  ], 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 @if (checkedElements[element.id]) {\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 }\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 <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementText }}\n </div>\n </td>\n </ng-container>\n @for (oneColumn of addTableColumns; track oneColumn) {\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 || '' : ''\"\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"] }]
1379
1216
  }], ctorParameters: () => [{ type: SelectElementService }, { type: TreeNodeSelectionService }, { type: i0.ChangeDetectorRef }], propDecorators: { filteredElementList: [{
1380
1217
  type: Input
@@ -1600,6 +1437,57 @@ class AvaTreeComponent {
1600
1437
  set customKeyboardOperationConfig(config) {
1601
1438
  this.keyboardOperationService.mergeConfigOperation(config);
1602
1439
  }
1440
+ set config(configObject) {
1441
+ if (configObject?.expansionState) {
1442
+ this.expansionState = configObject.expansionState;
1443
+ }
1444
+ if (configObject?.selectedNodeId) {
1445
+ this.selectedNodeId = configObject.selectedNodeId;
1446
+ this.flatElementsService.getOneElementById(this.selectedNodeId).subscribe((e) => {
1447
+ if (e) {
1448
+ this.selectElementService.setClickElement(e);
1449
+ }
1450
+ });
1451
+ }
1452
+ if (configObject?.indent) {
1453
+ this.indent = configObject.indent;
1454
+ }
1455
+ if (configObject?.selectedColor) {
1456
+ this.selectedColor = configObject.selectedColor;
1457
+ }
1458
+ if (configObject?.modeView) {
1459
+ this.modeView = configObject.modeView;
1460
+ }
1461
+ if (configObject && 'allowDblClick' in configObject) {
1462
+ this.allowDblClick = !!configObject.allowDblClick;
1463
+ }
1464
+ if (configObject?.isSelectionMode) {
1465
+ this.isSelectionMode = configObject.isSelectionMode;
1466
+ if (configObject?.initiallySelectedElements) {
1467
+ this.initiallySelectedElements = configObject.initiallySelectedElements;
1468
+ this.formSelectingList();
1469
+ }
1470
+ }
1471
+ if (configObject?.textWords) {
1472
+ this.textWords = configObject.textWords;
1473
+ }
1474
+ if (configObject?.mouseAwareKeyboardControl) {
1475
+ this.mouseAwareKeyboardControl = configObject.mouseAwareKeyboardControl;
1476
+ }
1477
+ if (configObject?.customKeyboardOperationConfig) {
1478
+ this.customKeyboardOperationConfig = configObject.customKeyboardOperationConfig;
1479
+ }
1480
+ if (configObject?.listFilterFunc) {
1481
+ this.flatElementsService.listFilterFunc = configObject.listFilterFunc;
1482
+ }
1483
+ if (configObject?.addTableColumns) {
1484
+ this.addTableColumns = configObject.addTableColumns;
1485
+ }
1486
+ if (configObject?.functionView) {
1487
+ this.functionView = configObject.functionView;
1488
+ this.flatElementsService.functionView = this.functionView;
1489
+ }
1490
+ }
1603
1491
  constructor(flatElementsService, selectElementService, treeNodeSelectionService, expandParentGroupService, keyboardOperationService, ngZone, treeWordsService, dynamicComponentService, appRef) {
1604
1492
  this.flatElementsService = flatElementsService;
1605
1493
  this.selectElementService = selectElementService;
@@ -1666,7 +1554,6 @@ class AvaTreeComponent {
1666
1554
  * You can supply custom filters that are processed when the filter input is changed. Default filters are used
1667
1555
  * that check for short text and item number matches, and you can either add custom filters or replace the default ones.
1668
1556
  */
1669
- this.listFilterFunc = DEFAULT_FILTERS;
1670
1557
  /**
1671
1558
  * Optional. For table views, this allows you to add custom columns to the table.
1672
1559
  * addTableColumns: Array of objects
@@ -1753,8 +1640,6 @@ class AvaTreeComponent {
1753
1640
  this.initializeEventListeners();
1754
1641
  }
1755
1642
  ngOnChanges(changes) {
1756
- this.flatElementsService.listFilterFunc = this.listFilterFunc;
1757
- this.flatElementsService.functionView = this.functionView;
1758
1643
  if (changes['project'] && this.project?.serviceSpecifications?.[0]) {
1759
1644
  this.serviceSpecification = this.project.serviceSpecifications[0];
1760
1645
  this.flatElementsService.setElementsDto(this.serviceSpecification);
@@ -1770,14 +1655,14 @@ class AvaTreeComponent {
1770
1655
  });
1771
1656
  }
1772
1657
  }
1773
- if ((changes['selectedNodeId'] && this.project) || changes['project']) {
1658
+ if (changes['project'] && this.selectedNodeId) {
1774
1659
  this.flatElementsService.getOneElementById(this.selectedNodeId).subscribe((e) => {
1775
1660
  if (e) {
1776
1661
  this.selectElementService.setClickElement(e);
1777
1662
  }
1778
1663
  });
1779
1664
  }
1780
- if (this.isSelectionMode && (changes['initiallySelectedElements'] || changes['project'])) {
1665
+ if (changes['project'] && this.isSelectionMode && this.initiallySelectedElements) {
1781
1666
  this.formSelectingList();
1782
1667
  }
1783
1668
  }
@@ -1894,6 +1779,7 @@ class AvaTreeComponent {
1894
1779
  this.filteredElementList = this.flatElements.filter((item) => this.flatElementsService.checkFilterValue(item, this.filter));
1895
1780
  }
1896
1781
  }
1782
+ this.cdr.detectChanges();
1897
1783
  }
1898
1784
  initializeEventListeners() {
1899
1785
  this.ngZone.runOutsideAngular(() => {
@@ -1918,7 +1804,7 @@ class AvaTreeComponent {
1918
1804
  });
1919
1805
  }
1920
1806
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: AvaTreeComponent, deps: [{ token: FlatElementsService, self: true }, { token: SelectElementService, self: true }, { token: TreeNodeSelectionService, self: true }, { token: ExpandParentGroupService, self: true }, { token: KeyboardOperationService, self: true }, { token: i0.NgZone }, { token: TreeWordsService }, { token: DynamicComponentService }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Component }); }
1921
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: AvaTreeComponent, isStandalone: true, selector: "ava-tree", inputs: { project: "project", expansionState: "expansionState", selectedNodeId: "selectedNodeId", indent: "indent", selectedColor: "selectedColor", modeView: "modeView", allowDblClick: "allowDblClick", isSelectionMode: "isSelectionMode", initiallySelectedElements: "initiallySelectedElements", textWords: "textWords", mouseAwareKeyboardControl: "mouseAwareKeyboardControl", customKeyboardOperationConfig: "customKeyboardOperationConfig", listFilterFunc: "listFilterFunc", addTableColumns: "addTableColumns", functionView: "functionView" }, outputs: { selectClick: "selectClick", selectDblClick: "selectDblClick", contextMenuEvent: "contextMenuEvent", selectedElementsChanged: "selectedElementsChanged" }, providers: [
1807
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: AvaTreeComponent, isStandalone: true, selector: "ava-tree", inputs: { project: "project", config: "config" }, outputs: { selectClick: "selectClick", selectDblClick: "selectDblClick", contextMenuEvent: "contextMenuEvent", selectedElementsChanged: "selectedElementsChanged" }, providers: [
1922
1808
  FlatElementsService,
1923
1809
  SelectElementService,
1924
1810
  TreeNodeSelectionService,
@@ -1961,33 +1847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
1961
1847
  type: Self
1962
1848
  }] }, { type: i0.NgZone }, { type: TreeWordsService }, { type: DynamicComponentService }, { type: i0.ApplicationRef }], propDecorators: { project: [{
1963
1849
  type: Input
1964
- }], expansionState: [{
1965
- type: Input
1966
- }], selectedNodeId: [{
1967
- type: Input
1968
- }], indent: [{
1969
- type: Input
1970
- }], selectedColor: [{
1971
- type: Input
1972
- }], modeView: [{
1973
- type: Input
1974
- }], allowDblClick: [{
1975
- type: Input
1976
- }], isSelectionMode: [{
1977
- type: Input
1978
- }], initiallySelectedElements: [{
1979
- type: Input
1980
- }], textWords: [{
1981
- type: Input
1982
- }], mouseAwareKeyboardControl: [{
1983
- type: Input
1984
- }], customKeyboardOperationConfig: [{
1985
- type: Input
1986
- }], listFilterFunc: [{
1987
- type: Input
1988
- }], addTableColumns: [{
1989
- type: Input
1990
- }], functionView: [{
1850
+ }], config: [{
1991
1851
  type: Input
1992
1852
  }], selectClick: [{
1993
1853
  type: Output
@@ -2008,6 +1868,170 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
2008
1868
  args: ['avaTreeFilterInput']
2009
1869
  }] } });
2010
1870
 
1871
+ const DEFAULT_TEXT_WORD_INVOICE = {
1872
+ invoiceTitle: 'Invoice',
1873
+ invoiceBuyerTitle: 'Receiver',
1874
+ invoiceSellerTitle: 'Sender',
1875
+ vatId: 'VAT ID',
1876
+ detailsInvoiceNumber: 'Invoice Number',
1877
+ detailsInvoiceDate: 'Invoice Date',
1878
+ detailsPaymentDueDate: 'Due Date',
1879
+ detailsCurrencyCode: 'Currency',
1880
+ detailsPaymentTerms: 'Payment Terms',
1881
+ referencesTopic: 'References',
1882
+ referencesBuyerReference: 'Buyer Reference',
1883
+ referencesProjectReference: 'Project Reference',
1884
+ referencesContractReference: 'Contract Reference',
1885
+ referencesPurchaseOrderReference: 'Purchase Order Reference',
1886
+ referencesSalesOrderReference: 'Sales Order Reference',
1887
+ referencesReceivingAdviceReference: 'Receiving Advice Reference',
1888
+ referencesDispatchAdviceReference: 'Dispatch Advice Reference',
1889
+ referencesTenderOrLotReference: 'Tender or Lot Reference',
1890
+ referencesInvoicedObjectIdentifier: 'Invoiced Object Identifier',
1891
+ tableHeadDescription: 'Description',
1892
+ tableHeadQuantity: 'Quantity',
1893
+ tableHeadUnit: 'Unit',
1894
+ tableHeadNetPrice: 'Net Price',
1895
+ tableHeadNetAmount: 'Net Amount',
1896
+ totalsTopic: 'Totals',
1897
+ totalsTotalNet: 'Total Net',
1898
+ totalsTotalAllowances: 'Total Allowances',
1899
+ totalsTotalCharges: 'Total Charges',
1900
+ totalsTotalAfterDeductions: 'Total After Deductions',
1901
+ totalsTotalVatAmount: 'Total VAT Amount',
1902
+ totalsTotalGross: 'Total Gross',
1903
+ totalsAlreadyPaidTotal: 'Already Paid Total',
1904
+ totalsTotalToBePaid: 'Total to be Paid',
1905
+ instructionsTopic: 'Payment Instructions',
1906
+ instructionsAccountIdentifier: 'Account Identifier',
1907
+ instructionsAccountName: 'Account Name',
1908
+ instructionsServiceProviderIdentifier: 'Service Provider Identifier',
1909
+ notesTopic: 'Notes',
1910
+ attachmentsHeading: 'Attachments',
1911
+ attachmentsName: 'Name',
1912
+ attachmentsDescription: 'Description',
1913
+ attachmentsUrl: 'Url',
1914
+ attachmentsDataSize: 'Size',
1915
+ attachmentsMimeType: 'Mime Type',
1916
+ attachmentsFileName: 'File Name',
1917
+ attachmentsDownloadButton: 'Download',
1918
+ contactPersonName: 'Contact Person Name',
1919
+ contactPersonEmail: 'Contact Person Email',
1920
+ contactPersonPhone: 'Contact Person Phone',
1921
+ vat: 'VAT',
1922
+ taxRate: 'Tax Rate',
1923
+ deliveryInformationTitle: 'Delivery Information',
1924
+ deliverToName: 'Name',
1925
+ deliverToLocationIdentifier: 'Location Identifier',
1926
+ deliveryDate: 'Date',
1927
+ deliveryAddress: 'Address',
1928
+ taxesHeading: 'Taxes'
1929
+ };
1930
+ const germanTextsInvoice = {
1931
+ invoiceTitle: 'Rechnung',
1932
+ invoiceBuyerTitle: 'Empfänger',
1933
+ invoiceSellerTitle: 'Rechnungssteller',
1934
+ vatId: 'USt.-ID',
1935
+ detailsInvoiceNumber: 'Rechnungsnummer',
1936
+ detailsInvoiceDate: 'Rechnungsdatum',
1937
+ detailsPaymentDueDate: 'Fälligkeitsdatum',
1938
+ detailsCurrencyCode: 'Währung',
1939
+ detailsPaymentTerms: 'Zahlungsbedingungen',
1940
+ referencesTopic: 'Referenzen',
1941
+ referencesBuyerReference: 'Käuferreferenz',
1942
+ referencesProjectReference: 'Projektreferenz',
1943
+ referencesContractReference: 'Vertragsreferenz',
1944
+ referencesPurchaseOrderReference: 'Bestellreferenz',
1945
+ referencesSalesOrderReference: 'Auftragsreferenz',
1946
+ referencesReceivingAdviceReference: 'Empfangsbestätigungsreferenz',
1947
+ referencesDispatchAdviceReference: 'Lieferreferenz',
1948
+ referencesTenderOrLotReference: 'Ausschreibungs- oder Losreferenz',
1949
+ referencesInvoicedObjectIdentifier: 'Objektreferenz',
1950
+ tableHeadDescription: 'Beschreibung',
1951
+ tableHeadQuantity: 'Menge',
1952
+ tableHeadUnit: 'Einheit',
1953
+ tableHeadNetPrice: 'Nettopreis',
1954
+ tableHeadNetAmount: 'Nettomenge',
1955
+ totalsTopic: 'Gesamt',
1956
+ totalsTotalNet: 'Gesamt Netto',
1957
+ totalsTotalAllowances: 'Gesamt Rabatt',
1958
+ totalsTotalCharges: 'Gesamt Zuschlag',
1959
+ totalsTotalAfterDeductions: 'Summe nach Rabatten',
1960
+ totalsTotalVatAmount: 'Summe Umsatzsteuer',
1961
+ totalsTotalGross: 'Gesamt Brutto',
1962
+ totalsAlreadyPaidTotal: 'Bereits bezahlt',
1963
+ totalsTotalToBePaid: 'Gesamt zu zahlen',
1964
+ instructionsTopic: 'Zahlungsanweisungen',
1965
+ instructionsAccountIdentifier: 'Kontonummer',
1966
+ instructionsAccountName: 'Kontoname',
1967
+ instructionsServiceProviderIdentifier: 'Bank',
1968
+ notesTopic: 'Hinweise',
1969
+ attachmentsHeading: 'Anhänge',
1970
+ attachmentsName: 'Name',
1971
+ attachmentsDescription: 'Beschreibung',
1972
+ attachmentsUrl: 'Url',
1973
+ attachmentsDataSize: 'Größe',
1974
+ attachmentsMimeType: 'Typ',
1975
+ attachmentsFileName: 'Dateiname',
1976
+ attachmentsDownloadButton: 'Download',
1977
+ contactPersonName: 'Name der Kontaktperson',
1978
+ contactPersonEmail: 'E-Mail der Kontaktperson',
1979
+ contactPersonPhone: 'Kontaktperson Telefon',
1980
+ vat: 'MwSt.',
1981
+ taxRate: 'Steuersatz',
1982
+ deliveryInformationTitle: 'Lieferinformationen',
1983
+ deliverToName: 'Liefername',
1984
+ deliverToLocationIdentifier: 'Lieferort',
1985
+ deliveryDate: 'Lieferdatum',
1986
+ deliveryAddress: 'Lieferadresse',
1987
+ taxesHeading: 'Steuer'
1988
+ };
1989
+
1990
+ /** Type of the invoice */
1991
+ var InvoiceType;
1992
+ (function (InvoiceType) {
1993
+ InvoiceType[InvoiceType["PartialInvoice"] = 326] = "PartialInvoice";
1994
+ InvoiceType[InvoiceType["CommercialInvoice"] = 380] = "CommercialInvoice";
1995
+ InvoiceType[InvoiceType["CreditNote"] = 381] = "CreditNote";
1996
+ InvoiceType[InvoiceType["CorrectedInvoice"] = 384] = "CorrectedInvoice";
1997
+ InvoiceType[InvoiceType["SelfBilledInvoice"] = 389] = "SelfBilledInvoice";
1998
+ InvoiceType[InvoiceType["PartialConstructionInvoice"] = 875] = "PartialConstructionInvoice";
1999
+ InvoiceType[InvoiceType["PartialFinalConstructionInvoice"] = 876] = "PartialFinalConstructionInvoice";
2000
+ InvoiceType[InvoiceType["FinalConstructionInvoice"] = 877] = "FinalConstructionInvoice";
2001
+ })(InvoiceType || (InvoiceType = {}));
2002
+ /** Describes a mime type of a document */
2003
+ var AttachmentMimeType;
2004
+ (function (AttachmentMimeType) {
2005
+ AttachmentMimeType[AttachmentMimeType["Unknown"] = 0] = "Unknown";
2006
+ AttachmentMimeType[AttachmentMimeType["Pdf"] = 1] = "Pdf";
2007
+ AttachmentMimeType[AttachmentMimeType["Png"] = 2] = "Png";
2008
+ AttachmentMimeType[AttachmentMimeType["Jpeg"] = 3] = "Jpeg";
2009
+ AttachmentMimeType[AttachmentMimeType["Csv"] = 4] = "Csv";
2010
+ AttachmentMimeType[AttachmentMimeType["Excel"] = 5] = "Excel";
2011
+ AttachmentMimeType[AttachmentMimeType["OpenOfficeSpreadsheet"] = 6] = "OpenOfficeSpreadsheet";
2012
+ })(AttachmentMimeType || (AttachmentMimeType = {}));
2013
+ /** The category used in a VatBreakdown"/> */
2014
+ var VatCategory;
2015
+ (function (VatCategory) {
2016
+ VatCategory[VatCategory["Unknown"] = 0] = "Unknown";
2017
+ VatCategory[VatCategory["StandardRate"] = 1] = "StandardRate";
2018
+ VatCategory[VatCategory["ZeroRatedGoods"] = 2] = "ZeroRatedGoods";
2019
+ VatCategory[VatCategory["ExemptFromTax"] = 3] = "ExemptFromTax";
2020
+ VatCategory[VatCategory["VatReverseCharge"] = 4] = "VatReverseCharge";
2021
+ VatCategory[VatCategory["VatExemptReverseCharge"] = 5] = "VatExemptReverseCharge";
2022
+ VatCategory[VatCategory["FreeExportItem"] = 6] = "FreeExportItem";
2023
+ VatCategory[VatCategory["ServicesOutsideScopeOfTaxation"] = 7] = "ServicesOutsideScopeOfTaxation";
2024
+ VatCategory[VatCategory["CanaryIslandsGeneralIndirectTax"] = 8] = "CanaryIslandsGeneralIndirectTax";
2025
+ VatCategory[VatCategory["TaxInCeutaAndMelilla"] = 9] = "TaxInCeutaAndMelilla";
2026
+ })(VatCategory || (VatCategory = {}));
2027
+ /** This enum represents the source of an invoice, e.g. from which format it was imported */
2028
+ var SourceType;
2029
+ (function (SourceType) {
2030
+ SourceType[SourceType["Self"] = 0] = "Self";
2031
+ SourceType[SourceType["Ubl"] = 1] = "Ubl";
2032
+ SourceType[SourceType["Cii"] = 2] = "Cii";
2033
+ })(SourceType || (SourceType = {}));
2034
+
2011
2035
  class InvoiceAttachmentMimeTypePipe {
2012
2036
  transform(attachmentMimeType) {
2013
2037
  switch (attachmentMimeType) {
@@ -2091,12 +2115,14 @@ class InvoiceDisplayComponent {
2091
2115
  *
2092
2116
  * }
2093
2117
  */
2094
- set textWords(words) {
2095
- this._textWords = { ...words };
2096
- } // allow to translate all texts to other language
2097
2118
  get textWords() {
2098
2119
  return this._textWords;
2099
2120
  }
2121
+ set config(configObject) {
2122
+ if (configObject?.textWords) {
2123
+ this._textWords = { ...configObject?.textWords };
2124
+ }
2125
+ }
2100
2126
  constructor() {
2101
2127
  // TODO remove type any after TODO under will be resolved
2102
2128
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -2155,12 +2181,12 @@ class InvoiceDisplayComponent {
2155
2181
  link.click();
2156
2182
  }
2157
2183
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: InvoiceDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: InvoiceDisplayComponent, isStandalone: true, selector: "ava-invoice-display", inputs: { invoice: { classPropertyName: "invoice", publicName: "invoice", isSignal: true, isRequired: true, transformFunction: null }, textWords: { classPropertyName: "textWords", publicName: "textWords", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\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 <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 <span>{{ invoice().buyer?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().buyer?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\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 <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 <span>{{ invoice().seller?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().seller?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\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 <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords.referencesProjectReference }}: </strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords.referencesContractReference }}: </strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords.referencesPurchaseOrderReference }}: </strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords.referencesSalesOrderReference }}: </strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords.referencesReceivingAdviceReference }}: </strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords.referencesDispatchAdviceReference }}: </strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords.referencesTenderOrLotReference }}: </strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords.referencesInvoicedObjectIdentifier }}: </strong>\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 <span>{{ invoice().deliveryInformation?.deliverToName }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliverToLocationIdentifier) {\n <p>\n <strong>{{ textWords.deliverToLocationIdentifier }}: </strong>\n <span>{{ invoice().deliveryInformation?.deliverToLocationIdentifier }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliveryDate) {\n <p>\n <strong>{{ textWords.deliveryDate }}: </strong>\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>{{ textWords.tableHeadQuantity }}</th>\n <th>{{ textWords.tableHeadUnit }}</th>\n <th>{{ textWords.tableHeadNetPrice }}</th>\n <th>{{ textWords.tableHeadNetAmount }}</th>\n <th>{{ 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>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n <td>{{ 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=\"invoice-totals\">\n <h2 class=\"info-title\">{{ textWords.totalsTopic }}</h2>\n\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\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 <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\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 <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\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 <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\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 <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\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>\n @if (tax.taxRate) {\n <span>{{ tax.taxRate | percent: '1.0-2' }}</span>\n }\n </td>\n <td>\n @if (tax.netTaxableAmount) {\n <span>{{ tax.netTaxableAmount | currency: invoice().currencyCode }}</span>\n }\n </td>\n <td>\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 <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\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\n @if (invoice().documents?.length) {\n <section class=\"invoice-attachments\">\n <mat-accordion>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ textWords.attachmentsHeading }}</mat-panel-title>\n </mat-expansion-panel-header>\n @for (document of invoice().documents; track document) {\n <div class=\"document\">\n @if (document.documentReference) {\n <div>\n <strong>{{ textWords.attachmentsName }}: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>{{ textWords.attachmentsDescription }}: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>{{ textWords.attachmentsUrl }}: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>{{ textWords.attachmentsDataSize }}: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>{{ textWords.attachmentsMimeType }}: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>{{ textWords.attachmentsFileName }}: </strong>\n <span>{{ document.fileName }}</span>\n </div>\n }\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"download(document)\"\n [disabled]=\"!document.externalDocumentUrl && !document.documentBase64\"\n >\n {{ textWords.attachmentsDownloadButton }}\n </button>\n </div>\n }\n <pre id=\"fileContent\"></pre>\n </mat-expansion-panel>\n </mat-accordion>\n </section>\n }\n</div>\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-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details{width:30%}.seller-info,.invoice-delivery,.payment-instructions{text-align:right}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes,.invoice-delivery{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,.document{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}\n"], dependencies: [{ kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i2.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "pipe", type: InvoiceAttachmentMimeTypePipe, name: "invoiceAttachmentMimeType" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2184
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: InvoiceDisplayComponent, isStandalone: true, selector: "ava-invoice-display", inputs: { invoice: { classPropertyName: "invoice", publicName: "invoice", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\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 <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 <span>{{ invoice().buyer?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().buyer?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\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 <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 <span>{{ invoice().seller?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().seller?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\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 <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords.referencesProjectReference }}: </strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords.referencesContractReference }}: </strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords.referencesPurchaseOrderReference }}: </strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords.referencesSalesOrderReference }}: </strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords.referencesReceivingAdviceReference }}: </strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords.referencesDispatchAdviceReference }}: </strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords.referencesTenderOrLotReference }}: </strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords.referencesInvoicedObjectIdentifier }}: </strong>\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 <span>{{ invoice().deliveryInformation?.deliverToName }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliverToLocationIdentifier) {\n <p>\n <strong>{{ textWords.deliverToLocationIdentifier }}: </strong>\n <span>{{ invoice().deliveryInformation?.deliverToLocationIdentifier }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliveryDate) {\n <p>\n <strong>{{ textWords.deliveryDate }}: </strong>\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>{{ textWords.tableHeadQuantity }}</th>\n <th>{{ textWords.tableHeadUnit }}</th>\n <th>{{ textWords.tableHeadNetPrice }}</th>\n <th>{{ textWords.tableHeadNetAmount }}</th>\n <th>{{ 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>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n <td>{{ 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=\"invoice-totals\">\n <h2 class=\"info-title\">{{ textWords.totalsTopic }}</h2>\n\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\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 <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\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 <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\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 <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\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 <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\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>\n @if (tax.taxRate) {\n <span>{{ tax.taxRate | percent: '1.0-2' }}</span>\n }\n </td>\n <td>\n @if (tax.netTaxableAmount) {\n <span>{{ tax.netTaxableAmount | currency: invoice().currencyCode }}</span>\n }\n </td>\n <td>\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 <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\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\n @if (invoice().documents?.length) {\n <section class=\"invoice-attachments\">\n <mat-accordion>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ textWords.attachmentsHeading }}</mat-panel-title>\n </mat-expansion-panel-header>\n @for (document of invoice().documents; track document) {\n <div class=\"document\">\n @if (document.documentReference) {\n <div>\n <strong>{{ textWords.attachmentsName }}: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>{{ textWords.attachmentsDescription }}: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>{{ textWords.attachmentsUrl }}: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>{{ textWords.attachmentsDataSize }}: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>{{ textWords.attachmentsMimeType }}: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>{{ textWords.attachmentsFileName }}: </strong>\n <span>{{ document.fileName }}</span>\n </div>\n }\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"download(document)\"\n [disabled]=\"!document.externalDocumentUrl && !document.documentBase64\"\n >\n {{ textWords.attachmentsDownloadButton }}\n </button>\n </div>\n }\n <pre id=\"fileContent\"></pre>\n </mat-expansion-panel>\n </mat-accordion>\n </section>\n }\n</div>\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-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details{width:30%}.seller-info,.invoice-delivery,.payment-instructions{text-align:right}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes,.invoice-delivery{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,.document{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}\n"], dependencies: [{ kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i2.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "pipe", type: InvoiceAttachmentMimeTypePipe, name: "invoiceAttachmentMimeType" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2159
2185
  }
2160
2186
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: InvoiceDisplayComponent, decorators: [{
2161
2187
  type: Component,
2162
2188
  args: [{ selector: 'ava-invoice-display', imports: [CurrencyPipe, DatePipe, PercentPipe, MatButtonModule, MatExpansionModule, InvoiceAttachmentMimeTypePipe, MatDividerModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\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 <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 <span>{{ invoice().buyer?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().buyer?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\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 <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 <span>{{ invoice().seller?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().seller?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\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 <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords.referencesProjectReference }}: </strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords.referencesContractReference }}: </strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords.referencesPurchaseOrderReference }}: </strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords.referencesSalesOrderReference }}: </strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords.referencesReceivingAdviceReference }}: </strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords.referencesDispatchAdviceReference }}: </strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords.referencesTenderOrLotReference }}: </strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords.referencesInvoicedObjectIdentifier }}: </strong>\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 <span>{{ invoice().deliveryInformation?.deliverToName }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliverToLocationIdentifier) {\n <p>\n <strong>{{ textWords.deliverToLocationIdentifier }}: </strong>\n <span>{{ invoice().deliveryInformation?.deliverToLocationIdentifier }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliveryDate) {\n <p>\n <strong>{{ textWords.deliveryDate }}: </strong>\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>{{ textWords.tableHeadQuantity }}</th>\n <th>{{ textWords.tableHeadUnit }}</th>\n <th>{{ textWords.tableHeadNetPrice }}</th>\n <th>{{ textWords.tableHeadNetAmount }}</th>\n <th>{{ 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>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n <td>{{ 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=\"invoice-totals\">\n <h2 class=\"info-title\">{{ textWords.totalsTopic }}</h2>\n\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\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 <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\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 <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\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 <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\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 <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\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>\n @if (tax.taxRate) {\n <span>{{ tax.taxRate | percent: '1.0-2' }}</span>\n }\n </td>\n <td>\n @if (tax.netTaxableAmount) {\n <span>{{ tax.netTaxableAmount | currency: invoice().currencyCode }}</span>\n }\n </td>\n <td>\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 <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\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\n @if (invoice().documents?.length) {\n <section class=\"invoice-attachments\">\n <mat-accordion>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ textWords.attachmentsHeading }}</mat-panel-title>\n </mat-expansion-panel-header>\n @for (document of invoice().documents; track document) {\n <div class=\"document\">\n @if (document.documentReference) {\n <div>\n <strong>{{ textWords.attachmentsName }}: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>{{ textWords.attachmentsDescription }}: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>{{ textWords.attachmentsUrl }}: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>{{ textWords.attachmentsDataSize }}: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>{{ textWords.attachmentsMimeType }}: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>{{ textWords.attachmentsFileName }}: </strong>\n <span>{{ document.fileName }}</span>\n </div>\n }\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"download(document)\"\n [disabled]=\"!document.externalDocumentUrl && !document.documentBase64\"\n >\n {{ textWords.attachmentsDownloadButton }}\n </button>\n </div>\n }\n <pre id=\"fileContent\"></pre>\n </mat-expansion-panel>\n </mat-accordion>\n </section>\n }\n</div>\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-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details{width:30%}.seller-info,.invoice-delivery,.payment-instructions{text-align:right}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes,.invoice-delivery{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,.document{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}\n"] }]
2163
- }], ctorParameters: () => [], propDecorators: { textWords: [{
2189
+ }], ctorParameters: () => [], propDecorators: { config: [{
2164
2190
  type: Input
2165
2191
  }] } });
2166
2192