@design.estate/dees-document 2.0.2 → 2.0.4

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 (77) hide show
  1. package/dist_ts_web/00_commitinfo_data.js +2 -2
  2. package/dist_ts_web/elements/contentinvoice.d.ts +12 -6
  3. package/dist_ts_web/elements/contentinvoice.js +382 -298
  4. package/dist_ts_web/elements/document.d.ts +10 -10
  5. package/dist_ts_web/elements/document.demo.js +7 -4
  6. package/dist_ts_web/elements/document.js +280 -236
  7. package/dist_ts_web/elements/index.d.ts +10 -9
  8. package/dist_ts_web/elements/index.js +11 -10
  9. package/dist_ts_web/elements/letterheader.d.ts +8 -6
  10. package/dist_ts_web/elements/letterheader.js +183 -76
  11. package/dist_ts_web/elements/page.d.ts +12 -12
  12. package/dist_ts_web/elements/page.js +257 -129
  13. package/dist_ts_web/elements/pagecontainer.d.ts +4 -4
  14. package/dist_ts_web/elements/pagecontainer.js +97 -44
  15. package/dist_ts_web/elements/pagecontent.d.ts +7 -6
  16. package/dist_ts_web/elements/pagecontent.js +141 -100
  17. package/dist_ts_web/elements/pagefooter.d.ts +7 -7
  18. package/dist_ts_web/elements/pagefooter.js +187 -83
  19. package/dist_ts_web/elements/pageheader.d.ts +7 -7
  20. package/dist_ts_web/elements/pageheader.js +121 -57
  21. package/dist_ts_web/elements/viewer.d.ts +5 -5
  22. package/dist_ts_web/elements/viewer.demo.js +7 -4
  23. package/dist_ts_web/elements/viewer.js +109 -55
  24. package/dist_ts_web/index.js +1 -1
  25. package/dist_ts_web/pages/index.js +1 -1
  26. package/dist_ts_web/pages/page1.js +11 -7
  27. package/dist_ts_web/pages/page2.js +1 -1
  28. package/dist_ts_web/plugins.js +1 -1
  29. package/dist_ts_web/style.js +34 -3
  30. package/package.json +1 -1
  31. package/dist_ts_shared/interfaces/translation.d.ts +0 -19
  32. package/dist_ts_shared/interfaces/translation.js +0 -2
  33. package/dist_ts_web/ts_shared/translation.d.ts +0 -82
  34. package/dist_ts_web/ts_shared/translation.js +0 -134
  35. package/dist_ts_web/ts_web/00_commitinfo_data.d.ts +0 -8
  36. package/dist_ts_web/ts_web/00_commitinfo_data.js +0 -9
  37. package/dist_ts_web/ts_web/elements/contentinvoice.d.ts +0 -41
  38. package/dist_ts_web/ts_web/elements/contentinvoice.js +0 -466
  39. package/dist_ts_web/ts_web/elements/document.d.ts +0 -27
  40. package/dist_ts_web/ts_web/elements/document.demo.d.ts +0 -1
  41. package/dist_ts_web/ts_web/elements/document.demo.js +0 -9
  42. package/dist_ts_web/ts_web/elements/document.js +0 -306
  43. package/dist_ts_web/ts_web/elements/index.d.ts +0 -10
  44. package/dist_ts_web/ts_web/elements/index.js +0 -11
  45. package/dist_ts_web/ts_web/elements/letterheader.d.ts +0 -18
  46. package/dist_ts_web/ts_web/elements/letterheader.js +0 -224
  47. package/dist_ts_web/ts_web/elements/page.d.ts +0 -25
  48. package/dist_ts_web/ts_web/elements/page.js +0 -335
  49. package/dist_ts_web/ts_web/elements/pagecontainer.d.ts +0 -14
  50. package/dist_ts_web/ts_web/elements/pagecontainer.js +0 -114
  51. package/dist_ts_web/ts_web/elements/pagecontent.d.ts +0 -19
  52. package/dist_ts_web/ts_web/elements/pagecontent.js +0 -177
  53. package/dist_ts_web/ts_web/elements/pagefooter.d.ts +0 -17
  54. package/dist_ts_web/ts_web/elements/pagefooter.js +0 -234
  55. package/dist_ts_web/ts_web/elements/pageheader.d.ts +0 -17
  56. package/dist_ts_web/ts_web/elements/pageheader.js +0 -165
  57. package/dist_ts_web/ts_web/elements/viewer.d.ts +0 -15
  58. package/dist_ts_web/ts_web/elements/viewer.demo.d.ts +0 -1
  59. package/dist_ts_web/ts_web/elements/viewer.demo.js +0 -9
  60. package/dist_ts_web/ts_web/elements/viewer.js +0 -150
  61. package/dist_ts_web/ts_web/index.d.ts +0 -1
  62. package/dist_ts_web/ts_web/index.js +0 -2
  63. package/dist_ts_web/ts_web/pages/index.d.ts +0 -2
  64. package/dist_ts_web/ts_web/pages/index.js +0 -3
  65. package/dist_ts_web/ts_web/pages/page1.d.ts +0 -1
  66. package/dist_ts_web/ts_web/pages/page1.js +0 -21
  67. package/dist_ts_web/ts_web/pages/page2.d.ts +0 -1
  68. package/dist_ts_web/ts_web/pages/page2.js +0 -18
  69. package/dist_ts_web/ts_web/plugins.d.ts +0 -9
  70. package/dist_ts_web/ts_web/plugins.js +0 -14
  71. package/dist_ts_web/ts_web/style.d.ts +0 -1
  72. package/dist_ts_web/ts_web/style.js +0 -38
  73. package/dist_watch/bundle.js +0 -47955
  74. package/dist_watch/bundle.js.map +0 -7
  75. package/dist_watch/index.html +0 -25
  76. /package/dist_ts_web/{ts_web/elements → elements}/paymentcode.d.ts +0 -0
  77. /package/dist_ts_web/{ts_web/elements → elements}/paymentcode.js +0 -0
@@ -1,17 +1,74 @@
1
1
  /**
2
2
  * content for invoices
3
3
  */
4
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
- return c > 3 && r && Object.defineProperty(target, key, r), r;
4
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
5
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
6
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
7
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
8
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
9
+ var _, done = false;
10
+ for (var i = decorators.length - 1; i >= 0; i--) {
11
+ var context = {};
12
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
13
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
14
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
15
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
16
+ if (kind === "accessor") {
17
+ if (result === void 0) continue;
18
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
19
+ if (_ = accept(result.get)) descriptor.get = _;
20
+ if (_ = accept(result.set)) descriptor.set = _;
21
+ if (_ = accept(result.init)) initializers.unshift(_);
22
+ }
23
+ else if (_ = accept(result)) {
24
+ if (kind === "field") initializers.unshift(_);
25
+ else descriptor[key] = _;
26
+ }
27
+ }
28
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
29
+ done = true;
30
+ };
31
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
32
+ var useValue = arguments.length > 2;
33
+ for (var i = 0; i < initializers.length; i++) {
34
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
35
+ }
36
+ return useValue ? value : void 0;
9
37
  };
10
- import { DeesElement, property, html, customElement, css, cssManager, unsafeCSS, render, domtools, } from '@design.estate/dees-element';
11
- import * as plugins from '../plugins.js';
12
- import { dedocumentSharedStyle } from '../style.js';
13
- let DeContentInvoice = class DeContentInvoice extends DeesElement {
14
- static { this.demo = () => html `
38
+ import { DeesElement, property, html, customElement, css, render, domtools, } from "@design.estate/dees-element";
39
+ import * as plugins from "../plugins.js";
40
+ import { dedocumentSharedStyle } from "../style.js";
41
+ let DeContentInvoice = (() => {
42
+ let _classDecorators = [customElement("dedocument-contentinvoice")];
43
+ let _classDescriptor;
44
+ let _classExtraInitializers = [];
45
+ let _classThis;
46
+ let _classSuper = DeesElement;
47
+ let _letterData_decorators;
48
+ let _letterData_initializers = [];
49
+ let _letterData_extraInitializers = [];
50
+ let _documentSettings_decorators;
51
+ let _documentSettings_initializers = [];
52
+ let _documentSettings_extraInitializers = [];
53
+ var DeContentInvoice = class extends _classSuper {
54
+ static { _classThis = this; }
55
+ static {
56
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
57
+ _letterData_decorators = [property({
58
+ type: Object,
59
+ reflect: true,
60
+ })];
61
+ _documentSettings_decorators = [property({
62
+ type: Object,
63
+ reflect: true,
64
+ })];
65
+ __esDecorate(this, null, _letterData_decorators, { kind: "accessor", name: "letterData", static: false, private: false, access: { has: obj => "letterData" in obj, get: obj => obj.letterData, set: (obj, value) => { obj.letterData = value; } }, metadata: _metadata }, _letterData_initializers, _letterData_extraInitializers);
66
+ __esDecorate(this, null, _documentSettings_decorators, { kind: "accessor", name: "documentSettings", static: false, private: false, access: { has: obj => "documentSettings" in obj, get: obj => obj.documentSettings, set: (obj, value) => { obj.documentSettings = value; } }, metadata: _metadata }, _documentSettings_initializers, _documentSettings_extraInitializers);
67
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
68
+ DeContentInvoice = _classThis = _classDescriptor.value;
69
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
70
+ }
71
+ static demo = () => html `
15
72
  <style>
16
73
  .demoContainer {
17
74
  background: white;
@@ -21,20 +78,138 @@ let DeContentInvoice = class DeContentInvoice extends DeesElement {
21
78
  <div class="demoContainer">
22
79
  <dedocument-contentinvoice></dedocument-contentinvoice>
23
80
  </div>
24
- `; }
25
- constructor() {
26
- super();
27
- this.getTotalNet = () => {
81
+ `;
82
+ #letterData_accessor_storage = __runInitializers(this, _letterData_initializers, void 0);
83
+ get letterData() { return this.#letterData_accessor_storage; }
84
+ set letterData(value) { this.#letterData_accessor_storage = value; }
85
+ #documentSettings_accessor_storage = (__runInitializers(this, _letterData_extraInitializers), __runInitializers(this, _documentSettings_initializers, void 0));
86
+ get documentSettings() { return this.#documentSettings_accessor_storage; }
87
+ set documentSettings(value) { this.#documentSettings_accessor_storage = value; }
88
+ constructor() {
89
+ super();
90
+ domtools.DomTools.setupDomTools();
91
+ }
92
+ static styles = [
93
+ domtools.elementBasic.staticStyles,
94
+ dedocumentSharedStyle,
95
+ css `
96
+ .trimmedContent {
97
+ display: none;
98
+ }
99
+
100
+ .grid {
101
+ display: grid;
102
+ grid-template-columns: 40px auto 50px 50px 100px 50px 100px;
103
+ }
104
+
105
+ .topLine {
106
+ margin-top: 5px;
107
+ background: #e7e7e7;
108
+ font-weight: bold;
109
+ }
110
+
111
+ .lineItem {
112
+ font-size: 12px;
113
+ padding: 5px;
114
+ border-right: 1px dashed #ccc;
115
+ white-space: nowrap;
116
+ }
117
+
118
+ .lineItem:last-child {
119
+ border-right: none;
120
+ }
121
+
122
+ .value.rightAlign,
123
+ .lineItem.rightAlign {
124
+ text-align: right;
125
+ }
126
+
127
+ .invoiceLine {
128
+ background: #ffffff00;
129
+ border-bottom: 1px dotted #ccc;
130
+ }
131
+
132
+ .invoiceLine.highlighted {
133
+ transition: background 0.2s;
134
+ background: #ffc18f;
135
+ border: 1px solid #ff9d4d;
136
+ box-sizing: content-box;
137
+ }
138
+
139
+ .sums {
140
+ margin-top: 5px;
141
+ font-size: 12px;
142
+ padding-left: 50%;
143
+ }
144
+
145
+ .sums .sumline {
146
+ margin-top: 3px;
147
+ display: grid;
148
+ grid-template-columns: auto 100px;
149
+ }
150
+
151
+ .sums .sumline .label {
152
+ padding: 2px 5px;
153
+ border-right: 1px solid #ccc;
154
+ text-align: right;
155
+ font-weight: bold;
156
+ }
157
+
158
+ .sums .sumline .value {
159
+ padding: 2px 5px;
160
+ }
161
+
162
+ .sums .sumline .value--total {
163
+ font-weight: bold;
164
+ }
165
+
166
+ .divider {
167
+ margin-top: 8px;
168
+ border-top: 1px dotted #ccc;
169
+ }
170
+
171
+ .taxNote {
172
+ font-size: 12px;
173
+ padding: 4px;
174
+ background: #eeeeeb;
175
+ text-align: center;
176
+ }
177
+
178
+ .infoBox {
179
+ margin-top: 22px;
180
+ line-height: 1.4em;
181
+ }
182
+
183
+ .infoBox .label {
184
+ padding-bottom: 2px;
185
+ font-weight: bold;
186
+ }
187
+ `,
188
+ ];
189
+ render() {
190
+ return html `
191
+ <div class="trimmedContent"></div>
192
+ <div class="repeatedContent"></div>
193
+ <div class="currentContent"></div>
194
+ `;
195
+ }
196
+ formatPrice(value, currency = "EUR", lang = "de-DE") {
197
+ return new Intl.NumberFormat(lang, {
198
+ style: "currency",
199
+ currency,
200
+ }).format(value);
201
+ }
202
+ getTotalNet = (__runInitializers(this, _documentSettings_extraInitializers), () => {
28
203
  let totalNet = 0;
29
204
  if (!this.letterData) {
30
205
  return totalNet;
31
206
  }
32
- for (const item of this.letterData.content.invoiceData.items) {
207
+ for (const item of this.letterData.items) {
33
208
  totalNet += item.unitNetPrice * item.unitQuantity;
34
209
  }
35
210
  return totalNet;
36
- };
37
- this.getTotalGross = () => {
211
+ });
212
+ getTotalGross = () => {
38
213
  let totalVat = 0;
39
214
  if (!this.letterData) {
40
215
  return totalVat;
@@ -44,20 +219,25 @@ let DeContentInvoice = class DeContentInvoice extends DeesElement {
44
219
  }
45
220
  return this.getTotalNet() + totalVat;
46
221
  };
47
- this.getVatGroups = () => {
222
+ getVatGroups = () => {
48
223
  const vatGroups = [];
49
224
  if (!this.letterData) {
50
225
  return vatGroups;
51
226
  }
52
227
  const taxAmounts = [];
53
- for (const item of this.letterData.content.invoiceData.items) {
54
- taxAmounts.includes(item.vatPercentage) ? null : taxAmounts.push(item.vatPercentage);
228
+ for (const item of this.letterData.items) {
229
+ taxAmounts.includes(item.vatPercentage)
230
+ ? null
231
+ : taxAmounts.push(item.vatPercentage);
55
232
  }
56
233
  for (const taxAmount of taxAmounts) {
57
- const matchingItems = this.letterData.content.invoiceData.items.filter((itemArg) => itemArg.vatPercentage === taxAmount);
234
+ const matchingItems = this.letterData.items.filter((itemArg) => itemArg.vatPercentage === taxAmount);
58
235
  let sum = 0;
59
236
  for (const matchingItem of matchingItems) {
60
- sum += matchingItem.unitNetPrice * matchingItem.unitQuantity * (taxAmount / 100);
237
+ sum +=
238
+ matchingItem.unitNetPrice *
239
+ matchingItem.unitQuantity *
240
+ (taxAmount / 100);
61
241
  }
62
242
  vatGroups.push({
63
243
  items: matchingItems,
@@ -65,318 +245,222 @@ let DeContentInvoice = class DeContentInvoice extends DeesElement {
65
245
  vatAmountSum: Math.round(sum * 100) / 100,
66
246
  });
67
247
  }
68
- return vatGroups;
248
+ return vatGroups.sort((a, b) => b.vatPercentage - a.vatPercentage);
69
249
  };
70
- domtools.DomTools.setupDomTools();
71
- }
72
- static { this.styles = [
73
- domtools.elementBasic.staticStyles,
74
- dedocumentSharedStyle,
75
- css `
76
- :host {
77
- color: #333;
78
- }
79
-
80
- .trimmedContent {
81
- display: none;
82
- }
83
-
84
- .repeatedContent {
85
- }
86
- `,
87
- ]; }
88
- render() {
89
- return html `
90
- <div class="trimmedContent"></div>
91
- <div class="repeatedContent"></div>
92
- <div class="currentContent"></div>
93
- `;
94
- }
95
- async getContentNodes() {
96
- await this.elementDomReady;
97
- return {
98
- currentContent: this.shadowRoot.querySelector('.currentContent'),
99
- trimmedContent: this.shadowRoot.querySelector('.trimmedContent'),
100
- repeatedContent: this.shadowRoot.querySelector('.repeatedContent'),
101
- };
102
- }
103
- async getContentLength() {
104
- await this.elementDomReady;
105
- return (await this.getContentNodes()).currentContent.children.length;
106
- }
107
- async trimEndByOne() {
108
- await this.elementDomReady;
109
- this.shadowRoot
110
- .querySelector('.trimmedContent')
111
- .append((await this.getContentNodes()).currentContent.children.item((await this.getContentNodes()).currentContent.children.length - 1));
112
- }
113
- async trimStartToOffset(contentOffsetArg) {
114
- await this.elementDomReady;
115
- const beginningLength = (await this.getContentNodes()).currentContent.children.length;
116
- while ((await this.getContentNodes()).currentContent.children.length !==
117
- beginningLength - contentOffsetArg) {
118
- (await this.getContentNodes()).trimmedContent.append((await this.getContentNodes()).currentContent.children.item(0));
250
+ async getContentNodes() {
251
+ await this.elementDomReady;
252
+ return {
253
+ currentContent: this.shadowRoot.querySelector(".currentContent"),
254
+ trimmedContent: this.shadowRoot.querySelector(".trimmedContent"),
255
+ repeatedContent: this.shadowRoot.querySelector(".repeatedContent"),
256
+ };
257
+ }
258
+ async getContentLength() {
259
+ await this.elementDomReady;
260
+ return (await this.getContentNodes()).currentContent.children.length;
119
261
  }
120
- if ((await this.getContentNodes()).currentContent.children
121
- .item(0)
122
- .classList.contains('needsDataHeader')) {
123
- const trimmedContent = (await this.getContentNodes()).trimmedContent;
124
- let startPoint = trimmedContent.children.length;
125
- while (startPoint > 0) {
126
- const element = trimmedContent.children.item(startPoint - 1);
127
- if (element.classList.contains('dataHeader')) {
128
- (await this.getContentNodes()).repeatedContent.append(element);
129
- break;
262
+ async trimEndByOne() {
263
+ await this.elementDomReady;
264
+ this.shadowRoot
265
+ .querySelector(".trimmedContent")
266
+ .append((await this.getContentNodes()).currentContent.children.item((await this.getContentNodes()).currentContent.children.length - 1));
267
+ }
268
+ async trimStartToOffset(contentOffsetArg) {
269
+ await this.elementDomReady;
270
+ const beginningLength = (await this.getContentNodes()).currentContent
271
+ .children.length;
272
+ while ((await this.getContentNodes()).currentContent.children.length !==
273
+ beginningLength - contentOffsetArg) {
274
+ (await this.getContentNodes()).trimmedContent.append((await this.getContentNodes()).currentContent.children.item(0));
275
+ }
276
+ if ((await this.getContentNodes()).currentContent.children
277
+ .item(0)
278
+ .classList.contains("needsDataHeader")) {
279
+ const trimmedContent = (await this.getContentNodes()).trimmedContent;
280
+ let startPoint = trimmedContent.children.length;
281
+ while (startPoint > 0) {
282
+ const element = trimmedContent.children.item(startPoint - 1);
283
+ if (element.classList.contains("dataHeader")) {
284
+ (await this.getContentNodes()).repeatedContent.append(element);
285
+ break;
286
+ }
287
+ startPoint--;
130
288
  }
131
- startPoint--;
132
289
  }
133
290
  }
134
- }
135
- async firstUpdated(_changedProperties) {
136
- super.firstUpdated(_changedProperties);
137
- this.attachInvoiceDom();
138
- }
139
- async attachInvoiceDom() {
140
- const contentNodes = await this.getContentNodes();
141
- render(html `
142
- <style>
143
- .grid {
144
- display: grid;
145
- grid-template-columns: 40px auto 60px 60px 84px 84px 46px;
146
- }
147
- .topLine {
148
- margin-top: 5px;
149
- background: #e7e7e7;
150
- font-weight: bold;
151
- }
152
- .lineItem {
153
- font-size: 12px;
154
- padding: 5px;
155
- border-right: 1px dashed #ccc;
156
- }
157
-
158
- .lineItem:last-child {
159
- border-right: none;
160
- }
161
-
162
- .lineItem.rightAlign {
163
- text-align: right;
164
- }
165
-
166
- .invoiceLine {
167
- background: #ffffff00;
168
- border-bottom: 1px dotted #ccc;
169
- }
170
-
171
- .invoiceLine.highlighted {
172
- transition: background 0.2s;
173
- background: #ffc18f;
174
- border: 1px solid #ff9d4d;
175
- box-sizing: content-box;
176
- }
177
-
178
- .sums {
179
- margin-top: 5px;
180
- font-size: 12px;
181
- padding-left: 50%;
182
- }
183
-
184
- .sums .sumline {
185
- margin-top: 3px;
186
- display: grid;
187
- grid-template-columns: auto 90px;
188
- }
189
-
190
- .sums .sumline .label {
191
- padding: 2px 5px;
192
- border-right: 1px solid #ccc;
193
- text-align: right;
194
- font-weight: bold;
195
- }
196
-
197
- .sums .sumline .value {
198
- padding: 2px 5px;
199
- font-weight: bold;
200
- }
201
-
202
- .divider {
203
- margin-top: 8px;
204
- border-top: 1px dotted #ccc;
205
- }
206
-
207
- .taxNote {
208
- font-size: 12px;
209
- padding: 4px;
210
- background: #eeeeeb;
211
- text-align: center;
212
- }
213
-
214
- .infoBox {
215
- border-radius: 7px;
216
- border: 1px solid #ddd;
217
- border-left: 3px solid #c5e1a5;
218
- padding: 8px;
219
- margin-top: 16px;
220
- line-height: 1.4em;
221
- font-size: 16px;
222
- }
223
-
224
- .infoBox .label {
225
- padding-bottom: 2px;
226
- font-size: 12px;
227
- font-weight: bold;
228
- }
229
-
230
- .paymentCode {
231
- text-align: center;
232
- border-left: 2px solid #666;
233
- }
234
- </style>
235
- <div>We hereby invoice products and services provided to you by Lossless GmbH:</div>
291
+ translateKey(key) {
292
+ return plugins.shared.translation.translate(this.documentSettings.languageCode, key);
293
+ }
294
+ async firstUpdated(_changedProperties) {
295
+ super.firstUpdated(_changedProperties);
296
+ this.attachInvoiceDom();
297
+ }
298
+ renderPaymentTerms() {
299
+ return html `<div class="infoBox">
300
+ <div>
301
+ <div>
302
+ <div class="label">
303
+ ${this.translateKey("invoice@@payment.terms")}
304
+ </div>
305
+ <span>
306
+ ${this.translateKey("invoice@@payment.terms.direct")}
307
+ ${new Intl.DateTimeFormat(this.documentSettings.languageCode, {
308
+ dateStyle: this.documentSettings.dateStyle,
309
+ }).format(new Date(this.letterData.date).setDate(new Date(this.letterData.date).getDate() +
310
+ this.letterData?.dueInDays))}
311
+ </span>
312
+ </div>
313
+ </div>
314
+ </div>`;
315
+ }
316
+ renderPaymentInfo() {
317
+ const bic = this.letterData?.from.sepaConnection.bic;
318
+ const name = this.letterData?.from.name;
319
+ const iban = this.letterData?.from.sepaConnection.iban;
320
+ const currency = this.letterData?.currency;
321
+ const totalGross = this.getTotalGross();
322
+ const reference = this.letterData?.id;
323
+ return html `<div class="infoBox">
324
+ <div>
325
+ <div>
326
+ <div class="label">${this.translateKey("invoice@@payment.qr")}</div>
327
+ <span> ${this.translateKey("invoice@@payment.qr.description")} </span>
328
+ </div>
329
+ <dedocument-paymentcode
330
+ bic="${bic}"
331
+ name="${name}"
332
+ iban="${iban}"
333
+ currency="${currency}"
334
+ totalGross="${totalGross}"
335
+ reference="${reference}"
336
+ />
337
+ </div>
338
+ </div>`;
339
+ }
340
+ renderReferencedContract() {
341
+ return null;
342
+ // return this.documentSettings.enableInvoiceContractRefSection &&
343
+ // this.invoiceData?.content?.contractData?.contractDate
344
+ // ? html`
345
+ // <div class="infoBox">
346
+ // <div class="label">
347
+ // ${this.translateKey("invoice@@referencedContract")}
348
+ // </div>
349
+ // ${this.translateKey("invoice@@referencedContract.text")}
350
+ // ${new Intl.DateTimeFormat(this.documentSettings.languageCode, {
351
+ // dateStyle: this.documentSettings.dateStyle,
352
+ // }).format(
353
+ // new Date(this.invoiceData?.content.contractData.contractDate)
354
+ // )}.
355
+ // </div>
356
+ // `
357
+ // : null;
358
+ }
359
+ async attachInvoiceDom() {
360
+ const contentNodes = await this.getContentNodes();
361
+ render(html `
362
+ <div>${this.translateKey("invoice@@introStatement")}</div>
236
363
  <div class="grid topLine dataHeader">
237
364
  <div class="lineItem rightAlign">
238
- ${plugins.shared.translation.translate(this.documentSettings.languageCode, 'itemPos', 'Item Pos.')}
365
+ ${this.translateKey("invoice@@item.position")}
239
366
  </div>
240
367
  <div class="lineItem">
241
- ${plugins.shared.translation.translate(this.documentSettings.languageCode, 'description', 'Description')}
368
+ ${this.translateKey("invoice@@description")}
242
369
  </div>
243
370
  <div class="lineItem rightAlign">
244
- ${plugins.shared.translation.translate(this.documentSettings.languageCode, 'quantity', 'Quantity')}
245
- </div>
246
- <div class="lineItem">
247
- ${plugins.shared.translation.translate(this.documentSettings.languageCode, 'unitType', 'Unit Type')}
371
+ ${this.translateKey("invoice@@quantity")}
248
372
  </div>
373
+ <div class="lineItem">${this.translateKey("invoice@@unit.type")}</div>
249
374
  <div class="lineItem rightAlign">
250
- ${plugins.shared.translation.translate(this.documentSettings.languageCode, 'unitNetPrice', 'Unit Net Price')}
375
+ ${this.translateKey("invoice@@price.unit.net")}
251
376
  </div>
252
377
  <div class="lineItem rightAlign">
253
- ${plugins.shared.translation.translate(this.documentSettings.languageCode, 'totalNetPrice', 'Total Net Price')}
378
+ ${this.translateKey("invoice@@vat.short")}
254
379
  </div>
255
380
  <div class="lineItem rightAlign">
256
- ${plugins.shared.translation.translate(this.documentSettings.languageCode, 'vatShort', 'VAT')}
381
+ ${this.translateKey("invoice@@price.total.net")}
257
382
  </div>
258
383
  </div>
259
- ${(() => {
260
- let counter = 1;
261
- return this.letterData?.content.invoiceData?.items?.map((invoiceItem) => {
262
- const isHighlighted = false; // TODO: implement rest of highlight logic
263
- return html `
264
- <div class="grid invoiceLine needsDataHeader ${isHighlighted ? 'highlighted' : ''}">
265
- <div class="lineItem rightAlign">${counter++}</div>
266
- <div class="lineItem">${invoiceItem.name}</div>
267
- <div class="lineItem rightAlign">${invoiceItem.unitQuantity}</div>
268
- <div class="lineItem">${invoiceItem.unitType}</div>
269
- <div class="lineItem rightAlign">
270
- ${invoiceItem.unitNetPrice} ${this.letterData?.content.invoiceData.currency}
271
- </div>
272
- <div class="lineItem rightAlign">
273
- ${invoiceItem.unitQuantity * invoiceItem.unitNetPrice}
274
- ${this.letterData?.content.invoiceData.currency}
275
- </div>
276
- <div class="lineItem rightAlign">${invoiceItem.vatPercentage}%</div>
384
+ ${this.letterData?.items?.map((invoiceItem, index) => html `
385
+ <div class="grid needsDataHeader">
386
+ <div class="lineItem rightAlign">${index + 1}</div>
387
+ <div class="lineItem">${invoiceItem.name}</div>
388
+ <div class="lineItem rightAlign">${invoiceItem.unitQuantity}</div>
389
+ <div class="lineItem">${invoiceItem.unitType}</div>
390
+ <div class="lineItem rightAlign">
391
+ ${this.formatPrice(invoiceItem.unitNetPrice)}
277
392
  </div>
278
- `;
279
- });
280
- })()}
393
+ <div class="lineItem rightAlign">
394
+ ${invoiceItem.vatPercentage}%
395
+ </div>
396
+ <div class="lineItem rightAlign">
397
+ ${this.formatPrice(invoiceItem.unitQuantity * invoiceItem.unitNetPrice)}
398
+ </div>
399
+ </div>
400
+ `)}
281
401
  <div class="sums">
282
402
  <div class="sumline">
283
- <div class="label">Total net</div>
284
- <div class="value">${this.getTotalNet()} EUR</div>
403
+ <div class="label">
404
+ ${this.translateKey("invoice@@sum.total.net")}
405
+ </div>
406
+ <div class="value value--total rightAlign">
407
+ ${this.formatPrice(this.getTotalNet())}
408
+ </div>
285
409
  </div>
286
410
  ${this.getVatGroups().map((vatGroupArg) => {
287
- let itemNumbers = '';
288
- let first = true;
289
- for (const item of vatGroupArg.items) {
290
- const itemIndex = this.letterData.content.invoiceData.items.indexOf(item);
291
- itemNumbers += `${first ? '' : ', '}${itemIndex + 1}`;
292
- first = false;
293
- }
294
- return html `
411
+ let itemNumbers = vatGroupArg.items
412
+ .map((item) => this.letterData.items.indexOf(item) + 1)
413
+ .join(", ");
414
+ return html `
295
415
  <div class="sumline">
296
416
  <div class="label">
297
- Vat ${vatGroupArg.vatPercentage}%
417
+ ${this.translateKey("vat.short")}
418
+ ${vatGroupArg.vatPercentage}%
298
419
  ${this.documentSettings.vatGroupPositions
299
- ? html `
420
+ ? html `
300
421
  <br /><span style="font-weight: normal"
301
- >(on item positions: ${itemNumbers})</span
422
+ >(${this.translateKey("invoice@@vat.position")}:
423
+ ${itemNumbers})</span
302
424
  >
303
425
  `
304
- : html ``}
426
+ : html ``}
427
+ </div>
428
+ <div class="value rightAlign">
429
+ ${this.formatPrice(vatGroupArg.vatAmountSum)}
305
430
  </div>
306
- <div class="value">${vatGroupArg.vatAmountSum} EUR</div>
307
431
  </div>
308
432
  `;
309
- })}
433
+ })}
310
434
  <div class="sumline">
311
- <div class="label">Total gross</div>
312
- <div class="value">${this.getTotalGross()} EUR</div>
435
+ <div class="label">${this.translateKey("invoice@@totalGross")}</div>
436
+ <div class="value value--total rightAlign">
437
+ ${this.formatPrice(this.getTotalGross())}
438
+ </div>
313
439
  </div>
314
440
  </div>
315
441
  <div class="divider"></div>
316
- ${this.letterData?.content.invoiceData.reverseCharge
317
- ? html `
318
- <div class="taxNote">
319
- ${plugins.shared.translation.translate(this.documentSettings.languageCode, 'reverseVatNote', 'VAT arises on a reverse charge basis and is payable by the customer.')}
320
- </div>
321
- `
322
- : ``}
323
- <div class="infoBox">
324
- <div class="label">Payment Terms:</div>
325
- Payment is due within 30 days starting from the reception of this invoice. Please use the
326
- following SEPA details:
327
- <br /><br />
328
- Beneficiary: ${this.letterData?.from.name}<br />
329
- IBAN: ${this.letterData?.from?.sepaConnection?.iban}<br />
330
- BIC: ${this.letterData?.from?.sepaConnection?.bic}<br />
331
- Description: ${this.letterData?.content.invoiceData?.id}<br />
332
- Amount: ${this.getTotalGross()} ${this.letterData?.content.invoiceData.currency}
333
- </div>
334
- ${this.letterData?.content?.contractData?.contractDate
335
- ? html `
336
- <div class="infoBox">
337
- <div class="label">Referenced contract:</div>
338
- This invoice is adhering to agreements made by contract between the parties on
339
- ${plugins.smarttime.ExtendedDate.fromMillis(this.letterData?.content.contractData.contractDate).format('MMMM D, YYYY')}.
340
- </div>
341
- `
342
- : html ``}
343
- <div class="infoBox paymentCode">
344
- <div class="label">Sepa Payment Code:</div>
345
- </div>
442
+
443
+ ${this.letterData?.reverseCharge
444
+ ? html `<div class="taxNote">
445
+ ${this.translateKey("invoice@@vat.reverseCharge.note")}
446
+ </div>`
447
+ : ``}
448
+
449
+ <!-- REFERENCED CONTRACT -->
450
+ ${this.renderReferencedContract()}
451
+
452
+ <!-- PAYMENT TERMS -->
453
+ ${this.renderPaymentTerms()}
454
+
455
+ <!-- PAYMENT INFO -->
456
+ ${this.renderPaymentInfo()}
346
457
  `, contentNodes.currentContent);
347
- const canvas = document.createElement('canvas');
348
- plugins.qrcode.toCanvas(canvas, `BCD
349
- 001
350
- 1
351
- SCT
352
- ${this.letterData.content.invoiceData.billedBy.sepaConnection.bic}
353
- ${this.letterData.content.invoiceData.billedBy.name}
354
- ${this.letterData.content.invoiceData.billedBy.sepaConnection.iban}
355
- EUR${this.getTotalGross()}
356
- CHAR
357
- ${this.letterData.content.invoiceData.id}
358
- ${this.letterData.content.invoiceData.id}
359
- EPC QR Code`, (error) => {
360
- if (error)
361
- console.error(error);
362
- });
363
- contentNodes.currentContent.querySelector('.paymentCode').append(canvas);
364
- }
365
- };
366
- __decorate([
367
- property({
368
- type: Object,
369
- reflect: true,
370
- })
371
- ], DeContentInvoice.prototype, "letterData", void 0);
372
- __decorate([
373
- property({
374
- type: Object,
375
- reflect: true,
376
- })
377
- ], DeContentInvoice.prototype, "documentSettings", void 0);
378
- DeContentInvoice = __decorate([
379
- customElement('dedocument-contentinvoice')
380
- ], DeContentInvoice);
458
+ }
459
+ static {
460
+ __runInitializers(_classThis, _classExtraInitializers);
461
+ }
462
+ };
463
+ return DeContentInvoice = _classThis;
464
+ })();
381
465
  export { DeContentInvoice };
382
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGludm9pY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvY29udGVudGludm9pY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7Ozs7Ozs7QUFFSCxPQUFPLEVBQ0wsV0FBVyxFQUNYLFFBQVEsRUFDUixJQUFJLEVBQ0osYUFBYSxFQUViLEdBQUcsRUFDSCxVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFTN0MsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBaUIsU0FBUSxXQUFXO2FBQ2pDLFNBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUE7Ozs7Ozs7Ozs7R0FVOUIsQUFWaUIsQ0FVaEI7SUFjRjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBNkJILGdCQUFXLEdBQUcsR0FBVyxFQUFFO1lBQ2hDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztZQUVqQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNyQixPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzdELFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDcEQsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUVLLGtCQUFhLEdBQUcsR0FBVyxFQUFFO1lBQ2xDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztZQUVqQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxD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
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGludm9pY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90c193ZWIvZWxlbWVudHMvY29udGVudGludm9pY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztJQVV2QyxnQkFBZ0I7NEJBRDVCLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQzs7OztzQkFDTCxXQUFXOzs7Ozs7O2dDQUFuQixTQUFRLFdBQVc7Ozs7c0NBYTlDLFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDOzRDQUdELFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDO1lBTEYsbUxBQVMsVUFBVSw2QkFBVixVQUFVLCtGQUFtQztZQU10RCxxTUFBUyxnQkFBZ0IsNkJBQWhCLGdCQUFnQiwyR0FBOEM7WUF2QnpFLDZLQThjQzs7OztRQTdjUSxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7Ozs7Ozs7OztHQVU5QixDQUFDO1FBTUYseUZBQXNEO1FBQXRELElBQVMsVUFBVSxnREFBbUM7UUFBdEQsSUFBUyxVQUFVLHNEQUFtQztRQU10RCwrSkFBdUU7UUFBdkUsSUFBUyxnQkFBZ0Isc0RBQThDO1FBQXZFLElBQVMsZ0JBQWdCLDREQUE4QztRQUV2RTtZQUNFLEtBQUssRUFBRSxDQUFDO1lBQ1IsUUFB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