@dangl/angular-ava 1.5.2-beta0093 → 1.5.2-beta0100

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.
@@ -39,12 +39,12 @@ var ModeViewType;
39
39
 
40
40
  // This file is automatically generated as part of the build process
41
41
  const version = {
42
- version: "1.5.2-beta0093",
43
- commitInfo: "Branch.develop.Sha.462a97f9d0e996c2f8fb7695b3a6544d440c04a4",
44
- commitDate: "2026-04-29",
45
- commitHash: "462a97f9d0e996c2f8fb7695b3a6544d440c04a4",
46
- informationalVersion: "1.5.2-beta.93+Branch.develop.Sha.462a97f9d0e996c2f8fb7695b3a6544d440c04a4",
47
- buildDateUtc: new Date(Date.UTC(2026, 4, 3, 15, 58, 24))
42
+ version: "1.5.2-beta0100",
43
+ commitInfo: "Branch.develop.Sha.0d8ab1cf21250a2911b2addc9483e1d5af091123",
44
+ commitDate: "2026-05-05",
45
+ commitHash: "0d8ab1cf21250a2911b2addc9483e1d5af091123",
46
+ informationalVersion: "1.5.2-beta.100+Branch.develop.Sha.0d8ab1cf21250a2911b2addc9483e1d5af091123",
47
+ buildDateUtc: new Date(Date.UTC(2026, 4, 5, 14, 4, 17))
48
48
  };
49
49
 
50
50
  class TreeHoverTooltipService {
@@ -1220,7 +1220,7 @@ class ConfigurationTreeService {
1220
1220
  configTextWords = this.selectTextWords(config.textWords);
1221
1221
  }
1222
1222
  else {
1223
- configTextWords = !config.textWords ? this._textWords : config.textWords;
1223
+ configTextWords = config?.textWords ?? this._textWords;
1224
1224
  }
1225
1225
  this._language = configTextWords.language;
1226
1226
  return { ...configTextWords };
@@ -1230,37 +1230,37 @@ class ConfigurationTreeService {
1230
1230
  return languageWord === 'de' ? germanTextsAva : DEFAULT_TEXT_WORDS;
1231
1231
  }
1232
1232
  getIndentFromConfig() {
1233
- return this.treeConfig$.pipe(map((config) => config?.indent || ''), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1233
+ return this.treeConfig$.pipe(map((config) => config?.indent ?? this._indent), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1234
1234
  }
1235
1235
  getFunctionViewFromConfig() {
1236
- return this.treeConfig$.pipe(map((config) => config?.functionView || []), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1236
+ return this.treeConfig$.pipe(map((config) => config?.functionView ?? this._functionView), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1237
1237
  }
1238
1238
  getSelectedColorFromConfig() {
1239
- return this.treeConfig$.pipe(map((config) => config?.selectedColor || ''), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1239
+ return this.treeConfig$.pipe(map((config) => config?.selectedColor ?? this._selectedColor), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1240
1240
  }
1241
1241
  getAllowDblClickFromConfig() {
1242
- return this.treeConfig$.pipe(map((config) => config?.allowDblClick || false), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1242
+ return this.treeConfig$.pipe(map((config) => config?.allowDblClick ?? this._allowDblClick), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1243
1243
  }
1244
1244
  getAddTableColumnsFromConfig() {
1245
- return this.treeConfig$.pipe(map((config) => config?.addTableColumns || []), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1245
+ return this.treeConfig$.pipe(map((config) => config?.addTableColumns ?? this._addTableColumns), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1246
1246
  }
1247
1247
  getIsSelectionModeFromConfig() {
1248
- return this.treeConfig$.pipe(map((config) => config?.isSelectionMode || false), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1248
+ return this.treeConfig$.pipe(map((config) => config?.isSelectionMode ?? this._isSelectionMode), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1249
1249
  }
1250
1250
  getInitiallySelectedElementsViewFromConfig() {
1251
- return this.treeConfig$.pipe(map((config) => config?.initiallySelectedElements || []), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1251
+ return this.treeConfig$.pipe(map((config) => config?.initiallySelectedElements ?? this._initiallySelectedElements), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1252
1252
  }
1253
1253
  getMouseAwareKeyboardControlFromConfig() {
1254
- return this.treeConfig$.pipe(map((config) => config?.mouseAwareKeyboardControl || false), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1254
+ return this.treeConfig$.pipe(map((config) => config?.mouseAwareKeyboardControl ?? this._mouseAwareKeyboardControl), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1255
1255
  }
1256
1256
  getCustomKeyboardOperationConfigFromConfig() {
1257
- return this.treeConfig$.pipe(map((config) => config?.customKeyboardOperationConfig || null), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1257
+ return this.treeConfig$.pipe(map((config) => config?.customKeyboardOperationConfig ?? this._customKeyboardOperationConfig), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1258
1258
  }
1259
1259
  getListFilterFuncFromConfig() {
1260
- return this.treeConfig$.pipe(map((config) => config?.listFilterFunc || this._listFilterFunc), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1260
+ return this.treeConfig$.pipe(map((config) => config?.listFilterFunc ?? this._listFilterFunc), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1261
1261
  }
1262
1262
  getHideParentItemNumbersFromConfig() {
1263
- return this.treeConfig$.pipe(map((config) => config?.hideParentItemNumbers || false), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1263
+ return this.treeConfig$.pipe(map((config) => config?.hideParentItemNumbers ?? false), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
1264
1264
  }
1265
1265
  getDefaultConfiguration() {
1266
1266
  return {
@@ -2511,10 +2511,8 @@ class AvaTreeComponent {
2511
2511
  .subscribe();
2512
2512
  toObservable(this.config)
2513
2513
  .pipe(tap((config) => {
2514
- const c = {
2515
- ...this.configurationTreeService.getCurrentTreeConfig(),
2516
- ...config
2517
- };
2514
+ const currentConfig = this.configurationTreeService.getCurrentTreeConfig();
2515
+ const c = config === null ? currentConfig : { ...currentConfig, ...config };
2518
2516
  this.configurationTreeService.setTreeConfig(c);
2519
2517
  const elements = this.serviceSpecification()?.elements;
2520
2518
  this.selectingElementsTreeData = this.treeNodeSelectionService.loadSelectingElements(elements);
@@ -2776,10 +2774,10 @@ class ConfigurationInvoiceService {
2776
2774
  this.invoiceConfig$ = this.invoiceConfigSource.asObservable();
2777
2775
  }
2778
2776
  setInvoiceConfig(value) {
2779
- if (value.quantityDecimalPlaces) {
2777
+ if (value.quantityDecimalPlaces != null) {
2780
2778
  this._quantityDecimalPlaces = value.quantityDecimalPlaces;
2781
2779
  }
2782
- if (value.language) {
2780
+ if (value.language != null) {
2783
2781
  this._language = value.language;
2784
2782
  }
2785
2783
  this.invoiceConfigSource.next(value);
@@ -2791,10 +2789,10 @@ class ConfigurationInvoiceService {
2791
2789
  return this.invoiceConfig$.pipe(map((config) => config?.textWords || (config?.language ? this.getDefaultTextWords(config.language) : null)), map((textWords) => (textWords === null ? this._textWords : { ...textWords })), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
2792
2790
  }
2793
2791
  getPdfViewEnabledFromConfig() {
2794
- return this.invoiceConfig$.pipe(map((config) => (config === null ? false : config.pdfViewEnabled || false)), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
2792
+ return this.invoiceConfig$.pipe(map((config) => config?.pdfViewEnabled ?? this._pdfViewEnabled), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
2795
2793
  }
2796
2794
  getAlignmentOptionsFromConfig() {
2797
- return this.invoiceConfig$.pipe(map((config) => config?.alignmentOptions || null), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
2795
+ return this.invoiceConfig$.pipe(map((config) => config?.alignmentOptions ?? this._alignmentOptions), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
2798
2796
  }
2799
2797
  getDefaultInvoiceConfiguration() {
2800
2798
  return {
@@ -2807,7 +2805,7 @@ class ConfigurationInvoiceService {
2807
2805
  };
2808
2806
  }
2809
2807
  getColorSettingsFromConfig() {
2810
- return this.invoiceConfig$.pipe(map((config) => config?.colorSettings || null), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
2808
+ return this.invoiceConfig$.pipe(map((config) => config?.colorSettings ?? this._colorSettings), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));
2811
2809
  }
2812
2810
  getDefaultTextWords(languageWord) {
2813
2811
  return languageWord === 'de' ? germanTextsInvoice : DEFAULT_TEXT_WORD_INVOICE;
@@ -3093,11 +3091,11 @@ class OrganizationInfoComponent {
3093
3091
  this.colorSettings$ = this.configurationInvoiceService.getColorSettingsFromConfig();
3094
3092
  }
3095
3093
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: OrganizationInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3096
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: OrganizationInfoComponent, isStandalone: true, selector: "ava-organization-info", inputs: { organizationInfo: { classPropertyName: "organizationInfo", publicName: "organizationInfo", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (textWords$ | async; as textWords) {\n @if ((colorSettings$ | async) || true; as colorSettings) {\n @if (organizationInfo(); as organizationInfo) {\n <div class=\"buyer-info\">\n <ng-content #header></ng-content>\n\n <p>\n <strong>{{ organizationInfo.name }}</strong>\n </p>\n <p>{{ organizationInfo.address }}</p>\n <p>{{ organizationInfo.city }}, {{ organizationInfo.zipCode }}</p>\n <p>{{ organizationInfo.countryCode }}</p>\n @if (organizationInfo.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ organizationInfo.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (organizationInfo.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonName }}</span>\n </p>\n }\n @if (organizationInfo.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonPhone }}</span>\n </p>\n }\n @if (organizationInfo.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonEmail }}</span>\n </p>\n }\n </div>\n }\n }\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i1$4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
3094
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: OrganizationInfoComponent, isStandalone: true, selector: "ava-organization-info", inputs: { organizationInfo: { classPropertyName: "organizationInfo", publicName: "organizationInfo", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (textWords$ | async; as textWords) {\n @if ((colorSettings$ | async) || true; as colorSettings) {\n @if (organizationInfo(); as organizationInfo) {\n <div class=\"buyer-info\">\n <ng-content #header></ng-content>\n\n <p>\n <strong>{{ organizationInfo.name }}</strong>\n </p>\n <p>{{ organizationInfo.address }}</p>\n <p>{{ organizationInfo.zipCode }} {{ organizationInfo.city }}</p>\n <p>{{ organizationInfo.countryCode }}</p>\n @if (organizationInfo.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ organizationInfo.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (organizationInfo.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonName }}</span>\n </p>\n }\n @if (organizationInfo.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonPhone }}</span>\n </p>\n }\n @if (organizationInfo.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonEmail }}</span>\n </p>\n }\n </div>\n }\n }\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i1$4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
3097
3095
  }
3098
3096
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: OrganizationInfoComponent, decorators: [{
3099
3097
  type: Component,
3100
- args: [{ selector: 'ava-organization-info', imports: [AsyncPipe, MatDividerModule], template: "@if (textWords$ | async; as textWords) {\n @if ((colorSettings$ | async) || true; as colorSettings) {\n @if (organizationInfo(); as organizationInfo) {\n <div class=\"buyer-info\">\n <ng-content #header></ng-content>\n\n <p>\n <strong>{{ organizationInfo.name }}</strong>\n </p>\n <p>{{ organizationInfo.address }}</p>\n <p>{{ organizationInfo.city }}, {{ organizationInfo.zipCode }}</p>\n <p>{{ organizationInfo.countryCode }}</p>\n @if (organizationInfo.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ organizationInfo.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (organizationInfo.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonName }}</span>\n </p>\n }\n @if (organizationInfo.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonPhone }}</span>\n </p>\n }\n @if (organizationInfo.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonEmail }}</span>\n </p>\n }\n </div>\n }\n }\n}\n" }]
3098
+ args: [{ selector: 'ava-organization-info', imports: [AsyncPipe, MatDividerModule], template: "@if (textWords$ | async; as textWords) {\n @if ((colorSettings$ | async) || true; as colorSettings) {\n @if (organizationInfo(); as organizationInfo) {\n <div class=\"buyer-info\">\n <ng-content #header></ng-content>\n\n <p>\n <strong>{{ organizationInfo.name }}</strong>\n </p>\n <p>{{ organizationInfo.address }}</p>\n <p>{{ organizationInfo.zipCode }} {{ organizationInfo.city }}</p>\n <p>{{ organizationInfo.countryCode }}</p>\n @if (organizationInfo.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <br />\n <span>{{ organizationInfo.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (organizationInfo.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonName }}</span>\n </p>\n }\n @if (organizationInfo.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonPhone }}</span>\n </p>\n }\n @if (organizationInfo.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <br />\n <span>{{ organizationInfo.contactPersonEmail }}</span>\n </p>\n }\n </div>\n }\n }\n}\n" }]
3101
3099
  }], propDecorators: { organizationInfo: [{ type: i0.Input, args: [{ isSignal: true, alias: "organizationInfo", required: false }] }] } });
3102
3100
 
3103
3101
  class ReferenceAndDeliveryInformationComponent {
@@ -3245,7 +3243,7 @@ class InvoiceDisplayComponent {
3245
3243
  useFactory: (configurationInvoiceService) => configurationInvoiceService.locale,
3246
3244
  deps: [ConfigurationInvoiceService]
3247
3245
  }
3248
- ], ngImport: i0, template: "@if (textWords$ | async; as textWords) {\n @if ((colorSettings$ | async) || true; as colorSettings) {\n @if (invoice() !== null) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ invoiceTitle() }}</h1>\n\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <ava-organization-info [organizationInfo]=\"invoice()?.buyer || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceBuyerTitle }}\n </h2>\n </ava-organization-info>\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 <div class=\"invoice-date\">\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()?.invoiceDate | date: 'dd.MM.yyyy')\n : (invoice()?.invoiceDate | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\n @if (invoice()?.paymentDueDate) {\n <div class=\"invoice-date\">\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()?.paymentDueDate | date: 'dd.MM.yyyy')\n : (invoice()?.paymentDueDate | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\n @if (invoice()?.invoicePeriod && (invoice()?.invoicePeriod?.start || invoice()?.invoicePeriod?.end)) {\n @if (invoice()!.invoicePeriod!.start && invoice()!.invoicePeriod!.end) {\n <p>\n <strong class=\"line-break-after\">{{ textWords.detailsInvoicePeriod }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()!.invoicePeriod!.start | date: 'dd.MM.yyyy')\n : (invoice()!.invoicePeriod!.start | date: 'dd/MM/yyyy')\n }}\n -\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()!.invoicePeriod!.end | date: 'dd.MM.yyyy')\n : (invoice()!.invoicePeriod!.end | date: 'dd/MM/yyyy')\n }}\n </span>\n </p>\n } @else {\n <div class=\"invoice-date\">\n <strong>{{ textWords.detailsInvoicePeriodSingle }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? ((invoice()?.invoicePeriod)!.start || (invoice()?.invoicePeriod)!.end | date: 'dd.MM.yyyy')\n : ((invoice()?.invoicePeriod)!.start || (invoice()?.invoicePeriod)!.end | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\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 class=\"line-break-after\">{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice()?.paymentTerms }}</span>\n </p>\n }\n </div>\n\n <div class=\"seller-tax-representive\">\n <ava-organization-info [organizationInfo]=\"invoice()?.sellerTaxRepresentative || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceSellerTaxRepresentativeTitle }}\n </h2>\n </ava-organization-info>\n </div>\n <div class=\"seller-info\">\n <ava-organization-info [organizationInfo]=\"invoice()?.seller || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceSellerTitle }}\n </h2>\n </ava-organization-info>\n </div>\n </header>\n <mat-divider></mat-divider>\n\n <ava-reference-and-delivery-information\n [deliveryInformation]=\"invoice()?.deliveryInformation || null\"\n [references]=\"invoice()?.references || null\"\n ></ava-reference-and-delivery-information>\n <ava-invoice-line-items-table [lineItems]=\"invoice()?.lineItems || []\"></ava-invoice-line-items-table>\n\n <div class=\"addition-info\">\n <section class=\"taxes-and-allowances\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.taxesHeading }}\n </h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.vat }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.totalsTotalNet }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.totalsTotalVatAmount }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice()?.vatBreakdown; track tax.taxRate) {\n @if (tax.vatExemptionReasonText || tax.vatExemptionReasonCode) {\n <tr>\n <td colspan=\"3\">\n <span>{{ tax.vatExemptionReasonText }} / {{ tax.vatExemptionReasonCode }}</span>\n </td>\n </tr>\n }\n\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate != null) {\n <span>{{ tax.taxRate | percentPlus: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount != null) {\n <span>{{ tax.netTaxableAmount | currencyPlus }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount != null) {\n <span>{{ tax.vatAmount | currencyPlus }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n @if (invoice()?.allowances && (invoice()?.allowances?.length || 0) > 0) {\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.invoiceAllowancesHeader }}\n </h2>\n\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderSum }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderVatRate }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderAllowance }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderBase }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (allowance of invoice()?.allowances; track allowance) {\n <tr>\n <td colspan=\"4\">\n @if (allowance.reason && allowance.reasonCode) {\n <span>{{ allowance.reason }} / {{ allowance.reasonCode }}</span>\n }\n @if (allowance.reason && !allowance.reasonCode) {\n <span>{{ allowance.reason }}</span>\n }\n\n @if (!allowance.reason && allowance.reasonCode) {\n <span>{{ allowance.reasonCode }}</span>\n }\n </td>\n </tr>\n <tr>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.netAmount | currencyPlus }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.vatRate | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.relativeAllowancePercentage | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.relativeAllowanceBaseAmount | currencyPlus }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (invoice()?.charges && (invoice()?.charges?.length || 0) > 0) {\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.invoiceChargesHeader }}\n </h2>\n\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderSum }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderVatRate }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderCharge }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderBase }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (charge of invoice()?.charges; track charge) {\n <tr>\n <td colspan=\"4\">\n @if (charge.reason && charge.reasonCode) {\n <span>{{ charge.reason }} / {{ charge.reasonCode }}</span>\n }\n @if (charge.reason && !charge.reasonCode) {\n <span>{{ charge.reason }}</span>\n }\n\n @if (!charge.reason && charge.reasonCode) {\n <span>{{ charge.reasonCode }}</span>\n }\n </td>\n </tr>\n <tr>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.netAmount | currencyPlus }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.vatRate | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.relativeChargePercentage | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.relativeChargeBaseAmount | currencyPlus }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </section>\n\n <section class=\"payment-instructions\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.instructionsTopic }}\n </h2>\n @if (invoice()?.paymentInstructions?.description) {\n <p>{{ invoice()?.paymentInstructions?.description }}</p>\n }\n @for (means of invoice()?.paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <br />\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <br />\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <br />\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n\n <section class=\"invoice-totals\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.totalsTopic }}\n </h2>\n\n @if (invoice()?.totals?.totalNet != null) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalNet | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalAllowances != null) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalAllowances | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalCharges != null) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalCharges | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalAfterDeductions != null) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalAfterDeductions | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalVatAmount != null) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalVatAmount | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalGross != null) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalGross | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.alreadyPaidTotal != null) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.alreadyPaidTotal | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalToBePaid != null) {\n <p\n class=\"total\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <br />\n <strong> {{ invoice()?.totals?.totalToBePaid | currencyPlus }}</strong>\n </p>\n }\n </section>\n </div>\n @if (invoice()?.previousInvoices && invoice()?.previousInvoices?.length) {\n <section\n class=\"previous-invoices\"\n [style]=\"{\n justifyContent: (alignmentOptions$ | async)?.previousInvoiceAlignment || '',\n }\"\n >\n <div class=\"previous-invoices-wrapper\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.previousInvoicesTopic }}\n </h2>\n\n <table class=\"previous-invoices-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.previousInvoiceNumber }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.previousInvoiceDate }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (prevInvoice of invoice()?.previousInvoices; track prevInvoice) {\n <tr>\n <td>\n {{ prevInvoice.invoiceNumber }}\n </td>\n <td>\n {{ prevInvoice.invoiceDate | date: 'shortDate' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </section>\n }\n\n @if (invoice()?.invoiceNotes?.length) {\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>\n @for (line of note.longText! | lineSplit; track line; let isLast = $last) {\n {{ line }}\n\n @if (!isLast) {\n <br />\n }\n }\n </p>\n }\n </div>\n }\n </section>\n }\n @if (invoice()?.documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice()?.documents || []\"></ava-invoice-documents>\n </section>\n }\n </div>\n } @else if (invoice() === null && (pdfViewEnabled$ | async)) {\n <div class=\"error-container\">\n <div class=\"error-message\">\n <mat-icon>error_outline</mat-icon>\n <h2>Oops! Something went wrong.</h2>\n <p>We couldn't retrieve the invoice data. Please try again later.</p>\n </div>\n </div>\n } @else {\n <div></div>\n }\n }\n}\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px;gap:10px}.invoice-header .header{height:32px}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details .seller-tax-representive{width:25%}.seller-info,.payment-instructions,.invoice-totals{text-align:right}.currency-table-cell{text-align:right!important}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes-and-allowances,.invoice-delivery,.invoice-details{margin:20px 0}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between;gap:10px}.total{background-color:var(--color-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff;text-wrap:nowrap}.invoice-attachments{padding-bottom:15px}.info-title{border-bottom:2px solid var(--color-primary);text-align:center}.previous-invoices{width:100%;display:flex}.previous-invoices-wrapper{width:400px}.tax-report-table,.previous-invoices-table{width:100%;border-collapse:collapse;margin-top:10px}.tax-report-table th,.previous-invoices-table th,.tax-report-table td,.previous-invoices-table td{padding:6px;text-align:center;border:1px solid #ddd}.tax-report-table th,.previous-invoices-table th{background-color:var(--color-primary);color:#fff;font-weight:700;border:1px solid #000}.tax-report-table td,.previous-invoices-table td{font-size:14px;color:#333;border:1px solid #000}.center{text-align:center!important}.error-container{display:flex;justify-content:center;align-items:center;height:100vh}.error-message{text-align:center;background-color:#fff3f3;border:1px solid #d32f2f;padding:20px;border-radius:8px;box-shadow:0 4px 6px #0000001a;color:#d32f2f;max-width:400px;width:100%}.error-message h2{font-size:1.5em;margin:0 0 10px;font-weight:700}.error-message p{font-size:1em;margin-top:0;color:#555}.invoice-date{margin-bottom:12px;display:flex;gap:5px}.line-break-after{display:block}\n"], dependencies: [{ kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i1$4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: InvoiceDocumentsComponent, selector: "ava-invoice-documents", inputs: ["documents"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: InvoiceLineItemsTableComponent, selector: "ava-invoice-line-items-table", inputs: ["lineItems"] }, { kind: "component", type: ReferenceAndDeliveryInformationComponent, selector: "ava-reference-and-delivery-information", inputs: ["deliveryInformation", "references"] }, { kind: "component", type: OrganizationInfoComponent, selector: "ava-organization-info", inputs: ["organizationInfo"] }, { kind: "pipe", type: PercentPlusPipe, name: "percentPlus" }, { kind: "pipe", type: CurrencyPlusPipe, name: "currencyPlus" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: LineSplitPipe, name: "lineSplit" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3246
+ ], ngImport: i0, template: "@if (textWords$ | async; as textWords) {\n @if ((colorSettings$ | async) || true; as colorSettings) {\n @if (invoice() !== null) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ invoiceTitle() }}</h1>\n\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <ava-organization-info [organizationInfo]=\"invoice()?.buyer || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceBuyerTitle }}\n </h2>\n </ava-organization-info>\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 <div class=\"invoice-date\">\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()?.invoiceDate | date: 'dd.MM.yyyy')\n : (invoice()?.invoiceDate | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\n @if (invoice()?.paymentDueDate) {\n <div class=\"invoice-date\">\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()?.paymentDueDate | date: 'dd.MM.yyyy')\n : (invoice()?.paymentDueDate | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\n @if (invoice()?.invoicePeriod && (invoice()?.invoicePeriod?.start || invoice()?.invoicePeriod?.end)) {\n @if (invoice()!.invoicePeriod!.start && invoice()!.invoicePeriod!.end) {\n <p>\n <strong class=\"line-break-after\">{{ textWords.detailsInvoicePeriod }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()!.invoicePeriod!.start | date: 'dd.MM.yyyy')\n : (invoice()!.invoicePeriod!.start | date: 'dd/MM/yyyy')\n }}\n -\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()!.invoicePeriod!.end | date: 'dd.MM.yyyy')\n : (invoice()!.invoicePeriod!.end | date: 'dd/MM/yyyy')\n }}\n </span>\n </p>\n } @else {\n <div class=\"invoice-date\">\n <strong>{{ textWords.detailsInvoicePeriodSingle }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? ((invoice()?.invoicePeriod)!.start || (invoice()?.invoicePeriod)!.end | date: 'dd.MM.yyyy')\n : ((invoice()?.invoicePeriod)!.start || (invoice()?.invoicePeriod)!.end | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\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 class=\"line-break-after\">{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice()?.paymentTerms }}</span>\n </p>\n }\n </div>\n\n <div class=\"seller-tax-representive\">\n <ava-organization-info [organizationInfo]=\"invoice()?.sellerTaxRepresentative || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceSellerTaxRepresentativeTitle }}\n </h2>\n </ava-organization-info>\n </div>\n <div class=\"seller-info\">\n <ava-organization-info [organizationInfo]=\"invoice()?.seller || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceSellerTitle }}\n </h2>\n </ava-organization-info>\n </div>\n </header>\n <mat-divider></mat-divider>\n\n <ava-reference-and-delivery-information\n [deliveryInformation]=\"invoice()?.deliveryInformation || null\"\n [references]=\"invoice()?.references || null\"\n ></ava-reference-and-delivery-information>\n <ava-invoice-line-items-table [lineItems]=\"invoice()?.lineItems || []\"></ava-invoice-line-items-table>\n\n <div class=\"addition-info\">\n <section class=\"taxes-and-allowances\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.taxesHeading }}\n </h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.vat }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.totalsTotalNet }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.totalsTotalVatAmount }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice()?.vatBreakdown; track tax.taxRate) {\n @if (tax.vatExemptionReasonText || tax.vatExemptionReasonCode) {\n <tr>\n <td colspan=\"3\">\n <span>{{ tax.vatExemptionReasonText }} / {{ tax.vatExemptionReasonCode }}</span>\n </td>\n </tr>\n }\n\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate != null) {\n <span>{{ tax.taxRate | percentPlus: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount != null) {\n <span>{{ tax.netTaxableAmount | currencyPlus }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount != null) {\n <span>{{ tax.vatAmount | currencyPlus }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n @if (invoice()?.allowances && (invoice()?.allowances?.length || 0) > 0) {\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.invoiceAllowancesHeader }}\n </h2>\n\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderSum }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderVatRate }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderAllowance }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderBase }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (allowance of invoice()?.allowances; track allowance) {\n <tr>\n <td colspan=\"4\">\n @if (allowance.reason && allowance.reasonCode) {\n <span>{{ allowance.reason }} / {{ allowance.reasonCode }}</span>\n }\n @if (allowance.reason && !allowance.reasonCode) {\n <span>{{ allowance.reason }}</span>\n }\n\n @if (!allowance.reason && allowance.reasonCode) {\n <span>{{ allowance.reasonCode }}</span>\n }\n </td>\n </tr>\n <tr>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.netAmount | currencyPlus }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.vatRate | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.relativeAllowancePercentage | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.relativeAllowanceBaseAmount | currencyPlus }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (invoice()?.charges && (invoice()?.charges?.length || 0) > 0) {\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.invoiceChargesHeader }}\n </h2>\n\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderSum }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderVatRate }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderCharge }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderBase }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (charge of invoice()?.charges; track charge) {\n <tr>\n <td colspan=\"4\">\n @if (charge.reason && charge.reasonCode) {\n <span>{{ charge.reason }} / {{ charge.reasonCode }}</span>\n }\n @if (charge.reason && !charge.reasonCode) {\n <span>{{ charge.reason }}</span>\n }\n\n @if (!charge.reason && charge.reasonCode) {\n <span>{{ charge.reasonCode }}</span>\n }\n </td>\n </tr>\n <tr>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.netAmount | currencyPlus }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.vatRate | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.relativeChargePercentage | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.relativeChargeBaseAmount | currencyPlus }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </section>\n\n <section class=\"payment-instructions\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.instructionsTopic }}\n </h2>\n @if (invoice()?.paymentInstructions?.description) {\n <p>{{ invoice()?.paymentInstructions?.description }}</p>\n }\n @for (means of invoice()?.paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <br />\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <br />\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <br />\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n\n <section class=\"invoice-totals\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.totalsTopic }}\n </h2>\n\n @if (invoice()?.totals?.totalNet != null) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalNet | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalAllowances != null) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalAllowances | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalCharges != null) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalCharges | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalAfterDeductions != null) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalAfterDeductions | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalVatAmount != null) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalVatAmount | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalGross != null) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalGross | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.alreadyPaidTotal != null) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.alreadyPaidTotal | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalToBePaid != null) {\n <p\n class=\"total\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <br />\n <strong> {{ invoice()?.totals?.totalToBePaid | currencyPlus }}</strong>\n </p>\n }\n </section>\n </div>\n @if (invoice()?.previousInvoices && invoice()?.previousInvoices?.length) {\n <section\n class=\"previous-invoices\"\n [style]=\"{\n justifyContent: (alignmentOptions$ | async)?.previousInvoiceAlignment || '',\n }\"\n >\n <div class=\"previous-invoices-wrapper\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.previousInvoicesTopic }}\n </h2>\n\n <table class=\"previous-invoices-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.previousInvoiceNumber }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.previousInvoiceDate }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (prevInvoice of invoice()?.previousInvoices; track prevInvoice) {\n <tr>\n <td>\n {{ prevInvoice.invoiceNumber }}\n </td>\n <td>\n {{ prevInvoice.invoiceDate | date: 'shortDate' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </section>\n }\n\n @if (invoice()?.invoiceNotes?.length) {\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>\n @for (line of note.longText! | lineSplit; track line; let isLast = $last) {\n {{ line }}\n\n @if (!isLast) {\n <br />\n }\n }\n </p>\n }\n </div>\n }\n </section>\n }\n @if (invoice()?.documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice()?.documents || []\"></ava-invoice-documents>\n </section>\n }\n </div>\n } @else if (invoice() === null && (pdfViewEnabled$ | async)) {\n <div class=\"error-container\">\n <div class=\"error-message\">\n <mat-icon>error_outline</mat-icon>\n <h2>Oops! Something went wrong.</h2>\n <p>We couldn't retrieve the invoice data. Please try again later.</p>\n </div>\n </div>\n } @else {\n <div></div>\n }\n }\n}\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px;gap:10px;font-size:calc(1em - 1pt)}.invoice-header .header{height:32px}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details .seller-tax-representive{width:25%}.seller-info,.payment-instructions,.invoice-totals{text-align:right}.currency-table-cell{text-align:right!important}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes-and-allowances,.invoice-delivery,.invoice-details{margin:20px 0}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between;gap:10px}.total{background-color:var(--color-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff;text-wrap:nowrap}.invoice-attachments{padding-bottom:15px}.info-title{border-bottom:2px solid var(--color-primary);text-align:center}.previous-invoices{width:100%;display:flex}.previous-invoices-wrapper{width:400px}.tax-report-table,.previous-invoices-table{width:100%;border-collapse:collapse;margin-top:10px}.tax-report-table th,.previous-invoices-table th,.tax-report-table td,.previous-invoices-table td{padding:6px;text-align:center;border:1px solid #ddd}.tax-report-table th,.previous-invoices-table th{background-color:var(--color-primary);color:#fff;font-weight:700;border:1px solid #000}.tax-report-table td,.previous-invoices-table td{font-size:14px;color:#333;border:1px solid #000}.center{text-align:center!important}.error-container{display:flex;justify-content:center;align-items:center;height:100vh}.error-message{text-align:center;background-color:#fff3f3;border:1px solid #d32f2f;padding:20px;border-radius:8px;box-shadow:0 4px 6px #0000001a;color:#d32f2f;max-width:400px;width:100%}.error-message h2{font-size:1.5em;margin:0 0 10px;font-weight:700}.error-message p{font-size:1em;margin-top:0;color:#555}.invoice-date{margin-bottom:12px;display:flex;gap:5px}.line-break-after{display:block}\n"], dependencies: [{ kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i1$4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: InvoiceDocumentsComponent, selector: "ava-invoice-documents", inputs: ["documents"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: InvoiceLineItemsTableComponent, selector: "ava-invoice-line-items-table", inputs: ["lineItems"] }, { kind: "component", type: ReferenceAndDeliveryInformationComponent, selector: "ava-reference-and-delivery-information", inputs: ["deliveryInformation", "references"] }, { kind: "component", type: OrganizationInfoComponent, selector: "ava-organization-info", inputs: ["organizationInfo"] }, { kind: "pipe", type: PercentPlusPipe, name: "percentPlus" }, { kind: "pipe", type: CurrencyPlusPipe, name: "currencyPlus" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: LineSplitPipe, name: "lineSplit" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3249
3247
  }
3250
3248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InvoiceDisplayComponent, decorators: [{
3251
3249
  type: Component,
@@ -3271,7 +3269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
3271
3269
  useFactory: (configurationInvoiceService) => configurationInvoiceService.locale,
3272
3270
  deps: [ConfigurationInvoiceService]
3273
3271
  }
3274
- ], template: "@if (textWords$ | async; as textWords) {\n @if ((colorSettings$ | async) || true; as colorSettings) {\n @if (invoice() !== null) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ invoiceTitle() }}</h1>\n\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <ava-organization-info [organizationInfo]=\"invoice()?.buyer || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceBuyerTitle }}\n </h2>\n </ava-organization-info>\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 <div class=\"invoice-date\">\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()?.invoiceDate | date: 'dd.MM.yyyy')\n : (invoice()?.invoiceDate | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\n @if (invoice()?.paymentDueDate) {\n <div class=\"invoice-date\">\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()?.paymentDueDate | date: 'dd.MM.yyyy')\n : (invoice()?.paymentDueDate | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\n @if (invoice()?.invoicePeriod && (invoice()?.invoicePeriod?.start || invoice()?.invoicePeriod?.end)) {\n @if (invoice()!.invoicePeriod!.start && invoice()!.invoicePeriod!.end) {\n <p>\n <strong class=\"line-break-after\">{{ textWords.detailsInvoicePeriod }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()!.invoicePeriod!.start | date: 'dd.MM.yyyy')\n : (invoice()!.invoicePeriod!.start | date: 'dd/MM/yyyy')\n }}\n -\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()!.invoicePeriod!.end | date: 'dd.MM.yyyy')\n : (invoice()!.invoicePeriod!.end | date: 'dd/MM/yyyy')\n }}\n </span>\n </p>\n } @else {\n <div class=\"invoice-date\">\n <strong>{{ textWords.detailsInvoicePeriodSingle }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? ((invoice()?.invoicePeriod)!.start || (invoice()?.invoicePeriod)!.end | date: 'dd.MM.yyyy')\n : ((invoice()?.invoicePeriod)!.start || (invoice()?.invoicePeriod)!.end | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\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 class=\"line-break-after\">{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice()?.paymentTerms }}</span>\n </p>\n }\n </div>\n\n <div class=\"seller-tax-representive\">\n <ava-organization-info [organizationInfo]=\"invoice()?.sellerTaxRepresentative || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceSellerTaxRepresentativeTitle }}\n </h2>\n </ava-organization-info>\n </div>\n <div class=\"seller-info\">\n <ava-organization-info [organizationInfo]=\"invoice()?.seller || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceSellerTitle }}\n </h2>\n </ava-organization-info>\n </div>\n </header>\n <mat-divider></mat-divider>\n\n <ava-reference-and-delivery-information\n [deliveryInformation]=\"invoice()?.deliveryInformation || null\"\n [references]=\"invoice()?.references || null\"\n ></ava-reference-and-delivery-information>\n <ava-invoice-line-items-table [lineItems]=\"invoice()?.lineItems || []\"></ava-invoice-line-items-table>\n\n <div class=\"addition-info\">\n <section class=\"taxes-and-allowances\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.taxesHeading }}\n </h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.vat }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.totalsTotalNet }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.totalsTotalVatAmount }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice()?.vatBreakdown; track tax.taxRate) {\n @if (tax.vatExemptionReasonText || tax.vatExemptionReasonCode) {\n <tr>\n <td colspan=\"3\">\n <span>{{ tax.vatExemptionReasonText }} / {{ tax.vatExemptionReasonCode }}</span>\n </td>\n </tr>\n }\n\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate != null) {\n <span>{{ tax.taxRate | percentPlus: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount != null) {\n <span>{{ tax.netTaxableAmount | currencyPlus }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount != null) {\n <span>{{ tax.vatAmount | currencyPlus }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n @if (invoice()?.allowances && (invoice()?.allowances?.length || 0) > 0) {\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.invoiceAllowancesHeader }}\n </h2>\n\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderSum }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderVatRate }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderAllowance }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderBase }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (allowance of invoice()?.allowances; track allowance) {\n <tr>\n <td colspan=\"4\">\n @if (allowance.reason && allowance.reasonCode) {\n <span>{{ allowance.reason }} / {{ allowance.reasonCode }}</span>\n }\n @if (allowance.reason && !allowance.reasonCode) {\n <span>{{ allowance.reason }}</span>\n }\n\n @if (!allowance.reason && allowance.reasonCode) {\n <span>{{ allowance.reasonCode }}</span>\n }\n </td>\n </tr>\n <tr>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.netAmount | currencyPlus }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.vatRate | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.relativeAllowancePercentage | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.relativeAllowanceBaseAmount | currencyPlus }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (invoice()?.charges && (invoice()?.charges?.length || 0) > 0) {\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.invoiceChargesHeader }}\n </h2>\n\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderSum }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderVatRate }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderCharge }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderBase }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (charge of invoice()?.charges; track charge) {\n <tr>\n <td colspan=\"4\">\n @if (charge.reason && charge.reasonCode) {\n <span>{{ charge.reason }} / {{ charge.reasonCode }}</span>\n }\n @if (charge.reason && !charge.reasonCode) {\n <span>{{ charge.reason }}</span>\n }\n\n @if (!charge.reason && charge.reasonCode) {\n <span>{{ charge.reasonCode }}</span>\n }\n </td>\n </tr>\n <tr>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.netAmount | currencyPlus }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.vatRate | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.relativeChargePercentage | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.relativeChargeBaseAmount | currencyPlus }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </section>\n\n <section class=\"payment-instructions\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.instructionsTopic }}\n </h2>\n @if (invoice()?.paymentInstructions?.description) {\n <p>{{ invoice()?.paymentInstructions?.description }}</p>\n }\n @for (means of invoice()?.paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <br />\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <br />\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <br />\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n\n <section class=\"invoice-totals\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.totalsTopic }}\n </h2>\n\n @if (invoice()?.totals?.totalNet != null) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalNet | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalAllowances != null) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalAllowances | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalCharges != null) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalCharges | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalAfterDeductions != null) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalAfterDeductions | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalVatAmount != null) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalVatAmount | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalGross != null) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalGross | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.alreadyPaidTotal != null) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.alreadyPaidTotal | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalToBePaid != null) {\n <p\n class=\"total\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <br />\n <strong> {{ invoice()?.totals?.totalToBePaid | currencyPlus }}</strong>\n </p>\n }\n </section>\n </div>\n @if (invoice()?.previousInvoices && invoice()?.previousInvoices?.length) {\n <section\n class=\"previous-invoices\"\n [style]=\"{\n justifyContent: (alignmentOptions$ | async)?.previousInvoiceAlignment || '',\n }\"\n >\n <div class=\"previous-invoices-wrapper\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.previousInvoicesTopic }}\n </h2>\n\n <table class=\"previous-invoices-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.previousInvoiceNumber }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.previousInvoiceDate }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (prevInvoice of invoice()?.previousInvoices; track prevInvoice) {\n <tr>\n <td>\n {{ prevInvoice.invoiceNumber }}\n </td>\n <td>\n {{ prevInvoice.invoiceDate | date: 'shortDate' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </section>\n }\n\n @if (invoice()?.invoiceNotes?.length) {\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>\n @for (line of note.longText! | lineSplit; track line; let isLast = $last) {\n {{ line }}\n\n @if (!isLast) {\n <br />\n }\n }\n </p>\n }\n </div>\n }\n </section>\n }\n @if (invoice()?.documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice()?.documents || []\"></ava-invoice-documents>\n </section>\n }\n </div>\n } @else if (invoice() === null && (pdfViewEnabled$ | async)) {\n <div class=\"error-container\">\n <div class=\"error-message\">\n <mat-icon>error_outline</mat-icon>\n <h2>Oops! Something went wrong.</h2>\n <p>We couldn't retrieve the invoice data. Please try again later.</p>\n </div>\n </div>\n } @else {\n <div></div>\n }\n }\n}\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px;gap:10px}.invoice-header .header{height:32px}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details .seller-tax-representive{width:25%}.seller-info,.payment-instructions,.invoice-totals{text-align:right}.currency-table-cell{text-align:right!important}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes-and-allowances,.invoice-delivery,.invoice-details{margin:20px 0}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between;gap:10px}.total{background-color:var(--color-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff;text-wrap:nowrap}.invoice-attachments{padding-bottom:15px}.info-title{border-bottom:2px solid var(--color-primary);text-align:center}.previous-invoices{width:100%;display:flex}.previous-invoices-wrapper{width:400px}.tax-report-table,.previous-invoices-table{width:100%;border-collapse:collapse;margin-top:10px}.tax-report-table th,.previous-invoices-table th,.tax-report-table td,.previous-invoices-table td{padding:6px;text-align:center;border:1px solid #ddd}.tax-report-table th,.previous-invoices-table th{background-color:var(--color-primary);color:#fff;font-weight:700;border:1px solid #000}.tax-report-table td,.previous-invoices-table td{font-size:14px;color:#333;border:1px solid #000}.center{text-align:center!important}.error-container{display:flex;justify-content:center;align-items:center;height:100vh}.error-message{text-align:center;background-color:#fff3f3;border:1px solid #d32f2f;padding:20px;border-radius:8px;box-shadow:0 4px 6px #0000001a;color:#d32f2f;max-width:400px;width:100%}.error-message h2{font-size:1.5em;margin:0 0 10px;font-weight:700}.error-message p{font-size:1em;margin-top:0;color:#555}.invoice-date{margin-bottom:12px;display:flex;gap:5px}.line-break-after{display:block}\n"] }]
3272
+ ], template: "@if (textWords$ | async; as textWords) {\n @if ((colorSettings$ | async) || true; as colorSettings) {\n @if (invoice() !== null) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ invoiceTitle() }}</h1>\n\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <ava-organization-info [organizationInfo]=\"invoice()?.buyer || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceBuyerTitle }}\n </h2>\n </ava-organization-info>\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 <div class=\"invoice-date\">\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()?.invoiceDate | date: 'dd.MM.yyyy')\n : (invoice()?.invoiceDate | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\n @if (invoice()?.paymentDueDate) {\n <div class=\"invoice-date\">\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()?.paymentDueDate | date: 'dd.MM.yyyy')\n : (invoice()?.paymentDueDate | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\n @if (invoice()?.invoicePeriod && (invoice()?.invoicePeriod?.start || invoice()?.invoicePeriod?.end)) {\n @if (invoice()!.invoicePeriod!.start && invoice()!.invoicePeriod!.end) {\n <p>\n <strong class=\"line-break-after\">{{ textWords.detailsInvoicePeriod }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()!.invoicePeriod!.start | date: 'dd.MM.yyyy')\n : (invoice()!.invoicePeriod!.start | date: 'dd/MM/yyyy')\n }}\n -\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? (invoice()!.invoicePeriod!.end | date: 'dd.MM.yyyy')\n : (invoice()!.invoicePeriod!.end | date: 'dd/MM/yyyy')\n }}\n </span>\n </p>\n } @else {\n <div class=\"invoice-date\">\n <strong>{{ textWords.detailsInvoicePeriodSingle }}: </strong>\n <span>\n {{\n configurationInvoiceService.locale === 'de-DE'\n ? ((invoice()?.invoicePeriod)!.start || (invoice()?.invoicePeriod)!.end | date: 'dd.MM.yyyy')\n : ((invoice()?.invoicePeriod)!.start || (invoice()?.invoicePeriod)!.end | date: 'dd/MM/yyyy')\n }}</span\n >\n </div>\n }\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 class=\"line-break-after\">{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice()?.paymentTerms }}</span>\n </p>\n }\n </div>\n\n <div class=\"seller-tax-representive\">\n <ava-organization-info [organizationInfo]=\"invoice()?.sellerTaxRepresentative || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceSellerTaxRepresentativeTitle }}\n </h2>\n </ava-organization-info>\n </div>\n <div class=\"seller-info\">\n <ava-organization-info [organizationInfo]=\"invoice()?.seller || null\">\n <h2\n class=\"header-title\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceSellerTitle }}\n </h2>\n </ava-organization-info>\n </div>\n </header>\n <mat-divider></mat-divider>\n\n <ava-reference-and-delivery-information\n [deliveryInformation]=\"invoice()?.deliveryInformation || null\"\n [references]=\"invoice()?.references || null\"\n ></ava-reference-and-delivery-information>\n <ava-invoice-line-items-table [lineItems]=\"invoice()?.lineItems || []\"></ava-invoice-line-items-table>\n\n <div class=\"addition-info\">\n <section class=\"taxes-and-allowances\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.taxesHeading }}\n </h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.vat }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.totalsTotalNet }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.totalsTotalVatAmount }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice()?.vatBreakdown; track tax.taxRate) {\n @if (tax.vatExemptionReasonText || tax.vatExemptionReasonCode) {\n <tr>\n <td colspan=\"3\">\n <span>{{ tax.vatExemptionReasonText }} / {{ tax.vatExemptionReasonCode }}</span>\n </td>\n </tr>\n }\n\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate != null) {\n <span>{{ tax.taxRate | percentPlus: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount != null) {\n <span>{{ tax.netTaxableAmount | currencyPlus }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount != null) {\n <span>{{ tax.vatAmount | currencyPlus }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n @if (invoice()?.allowances && (invoice()?.allowances?.length || 0) > 0) {\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.invoiceAllowancesHeader }}\n </h2>\n\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderSum }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderVatRate }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderAllowance }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceAllowancesTableHeaderBase }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (allowance of invoice()?.allowances; track allowance) {\n <tr>\n <td colspan=\"4\">\n @if (allowance.reason && allowance.reasonCode) {\n <span>{{ allowance.reason }} / {{ allowance.reasonCode }}</span>\n }\n @if (allowance.reason && !allowance.reasonCode) {\n <span>{{ allowance.reason }}</span>\n }\n\n @if (!allowance.reason && allowance.reasonCode) {\n <span>{{ allowance.reasonCode }}</span>\n }\n </td>\n </tr>\n <tr>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.netAmount | currencyPlus }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.vatRate | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.relativeAllowancePercentage | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ allowance.relativeAllowanceBaseAmount | currencyPlus }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (invoice()?.charges && (invoice()?.charges?.length || 0) > 0) {\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.invoiceChargesHeader }}\n </h2>\n\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderSum }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderVatRate }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderCharge }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.invoiceChargesTableHeaderBase }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (charge of invoice()?.charges; track charge) {\n <tr>\n <td colspan=\"4\">\n @if (charge.reason && charge.reasonCode) {\n <span>{{ charge.reason }} / {{ charge.reasonCode }}</span>\n }\n @if (charge.reason && !charge.reasonCode) {\n <span>{{ charge.reason }}</span>\n }\n\n @if (!charge.reason && charge.reasonCode) {\n <span>{{ charge.reasonCode }}</span>\n }\n </td>\n </tr>\n <tr>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.netAmount | currencyPlus }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.vatRate | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.relativeChargePercentage | percentPlus: '1.0-2' }}\n </span>\n </td>\n <td class=\"currency-table-cell\">\n <span>\n {{ charge.relativeChargeBaseAmount | currencyPlus }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </section>\n\n <section class=\"payment-instructions\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.instructionsTopic }}\n </h2>\n @if (invoice()?.paymentInstructions?.description) {\n <p>{{ invoice()?.paymentInstructions?.description }}</p>\n }\n @for (means of invoice()?.paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <br />\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <br />\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <br />\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n\n <section class=\"invoice-totals\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.totalsTopic }}\n </h2>\n\n @if (invoice()?.totals?.totalNet != null) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalNet | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalAllowances != null) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalAllowances | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalCharges != null) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalCharges | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalAfterDeductions != null) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalAfterDeductions | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalVatAmount != null) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.totalVatAmount | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalGross != null) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <br />\n <span> {{ invoice()?.totals?.totalGross | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.alreadyPaidTotal != null) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <br />\n <span>{{ invoice()?.totals?.alreadyPaidTotal | currencyPlus }}</span>\n </p>\n }\n @if (invoice()?.totals?.totalToBePaid != null) {\n <p\n class=\"total\"\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <br />\n <strong> {{ invoice()?.totals?.totalToBePaid | currencyPlus }}</strong>\n </p>\n }\n </section>\n </div>\n @if (invoice()?.previousInvoices && invoice()?.previousInvoices?.length) {\n <section\n class=\"previous-invoices\"\n [style]=\"{\n justifyContent: (alignmentOptions$ | async)?.previousInvoiceAlignment || '',\n }\"\n >\n <div class=\"previous-invoices-wrapper\">\n <h2\n class=\"info-title\"\n [style.borderBottomColor]=\"colorSettings === true ? null : colorSettings?.backgroundColor\"\n >\n {{ textWords.previousInvoicesTopic }}\n </h2>\n\n <table class=\"previous-invoices-table\">\n <thead>\n <tr>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.previousInvoiceNumber }}\n </th>\n <th\n [style]=\"{\n backgroundColor: colorSettings === true ? null : colorSettings?.backgroundColor,\n color: colorSettings === true ? null : colorSettings?.textColor,\n }\"\n >\n {{ textWords.previousInvoiceDate }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (prevInvoice of invoice()?.previousInvoices; track prevInvoice) {\n <tr>\n <td>\n {{ prevInvoice.invoiceNumber }}\n </td>\n <td>\n {{ prevInvoice.invoiceDate | date: 'shortDate' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </section>\n }\n\n @if (invoice()?.invoiceNotes?.length) {\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>\n @for (line of note.longText! | lineSplit; track line; let isLast = $last) {\n {{ line }}\n\n @if (!isLast) {\n <br />\n }\n }\n </p>\n }\n </div>\n }\n </section>\n }\n @if (invoice()?.documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice()?.documents || []\"></ava-invoice-documents>\n </section>\n }\n </div>\n } @else if (invoice() === null && (pdfViewEnabled$ | async)) {\n <div class=\"error-container\">\n <div class=\"error-message\">\n <mat-icon>error_outline</mat-icon>\n <h2>Oops! Something went wrong.</h2>\n <p>We couldn't retrieve the invoice data. Please try again later.</p>\n </div>\n </div>\n } @else {\n <div></div>\n }\n }\n}\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px;gap:10px;font-size:calc(1em - 1pt)}.invoice-header .header{height:32px}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.seller-info,.buyer-info,.invoice-details .seller-tax-representive{width:25%}.seller-info,.payment-instructions,.invoice-totals{text-align:right}.currency-table-cell{text-align:right!important}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes,.taxes-and-allowances,.invoice-delivery,.invoice-details{margin:20px 0}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between;gap:10px}.total{background-color:var(--color-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff;text-wrap:nowrap}.invoice-attachments{padding-bottom:15px}.info-title{border-bottom:2px solid var(--color-primary);text-align:center}.previous-invoices{width:100%;display:flex}.previous-invoices-wrapper{width:400px}.tax-report-table,.previous-invoices-table{width:100%;border-collapse:collapse;margin-top:10px}.tax-report-table th,.previous-invoices-table th,.tax-report-table td,.previous-invoices-table td{padding:6px;text-align:center;border:1px solid #ddd}.tax-report-table th,.previous-invoices-table th{background-color:var(--color-primary);color:#fff;font-weight:700;border:1px solid #000}.tax-report-table td,.previous-invoices-table td{font-size:14px;color:#333;border:1px solid #000}.center{text-align:center!important}.error-container{display:flex;justify-content:center;align-items:center;height:100vh}.error-message{text-align:center;background-color:#fff3f3;border:1px solid #d32f2f;padding:20px;border-radius:8px;box-shadow:0 4px 6px #0000001a;color:#d32f2f;max-width:400px;width:100%}.error-message h2{font-size:1.5em;margin:0 0 10px;font-weight:700}.error-message p{font-size:1em;margin-top:0;color:#555}.invoice-date{margin-bottom:12px;display:flex;gap:5px}.line-break-after{display:block}\n"] }]
3275
3273
  }], ctorParameters: () => [], propDecorators: { invoice: [{ type: i0.Input, args: [{ isSignal: true, alias: "invoice", required: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }] } });
3276
3274
 
3277
3275
  /*