@design.estate/dees-document 1.6.9 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +622 -605
- package/dist_bundle/bundle.js.map +4 -4
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.pdfservice.d.ts +3 -3
- package/dist_ts/classes.pdfservice.js +6 -3
- package/dist_ts/helpers.d.ts +1 -1
- package/dist_ts/helpers.js +2 -2
- package/dist_ts/paths.js +4 -2
- package/dist_ts/plugins.d.ts +2 -0
- package/dist_ts/plugins.js +3 -1
- package/dist_ts_shared/demoletter.d.ts +3 -3
- package/dist_ts_shared/demoletter.js +223 -192
- package/dist_ts_shared/index.d.ts +6 -7
- package/dist_ts_shared/index.js +10 -8
- package/dist_ts_shared/interfaces/document.d.ts +15 -2
- package/dist_ts_shared/interfaces/document.js +1 -1
- package/dist_ts_shared/translation.d.ts +79 -28
- package/dist_ts_shared/translation.js +121 -107
- package/dist_ts_web/ts_shared/translation.d.ts +82 -0
- package/dist_ts_web/ts_shared/translation.js +134 -0
- package/dist_ts_web/{00_commitinfo_data.js → ts_web/00_commitinfo_data.js} +2 -2
- package/dist_ts_web/{elements → ts_web/elements}/contentinvoice.d.ts +12 -6
- package/dist_ts_web/ts_web/elements/contentinvoice.js +466 -0
- package/dist_ts_web/{elements → ts_web/elements}/document.d.ts +10 -10
- package/dist_ts_web/ts_web/elements/document.demo.js +9 -0
- package/dist_ts_web/ts_web/elements/document.js +306 -0
- package/dist_ts_web/ts_web/elements/index.d.ts +10 -0
- package/dist_ts_web/ts_web/elements/index.js +11 -0
- package/dist_ts_web/ts_web/elements/letterheader.d.ts +18 -0
- package/dist_ts_web/ts_web/elements/letterheader.js +224 -0
- package/dist_ts_web/ts_web/elements/page.d.ts +25 -0
- package/dist_ts_web/ts_web/elements/page.js +335 -0
- package/dist_ts_web/{elements → ts_web/elements}/pagecontainer.d.ts +4 -4
- package/dist_ts_web/ts_web/elements/pagecontainer.js +114 -0
- package/dist_ts_web/{elements → ts_web/elements}/pagecontent.d.ts +7 -6
- package/dist_ts_web/ts_web/elements/pagecontent.js +177 -0
- package/dist_ts_web/ts_web/elements/pagefooter.d.ts +17 -0
- package/dist_ts_web/ts_web/elements/pagefooter.js +234 -0
- package/dist_ts_web/ts_web/elements/pageheader.d.ts +17 -0
- package/dist_ts_web/ts_web/elements/pageheader.js +165 -0
- package/dist_ts_web/ts_web/elements/paymentcode.d.ts +19 -0
- package/dist_ts_web/ts_web/elements/paymentcode.js +162 -0
- package/dist_ts_web/{elements → ts_web/elements}/viewer.d.ts +5 -5
- package/dist_ts_web/ts_web/elements/viewer.demo.js +9 -0
- package/dist_ts_web/ts_web/elements/viewer.js +150 -0
- package/dist_ts_web/{index.js → ts_web/index.js} +1 -1
- package/dist_ts_web/{pages → ts_web/pages}/index.js +1 -1
- package/dist_ts_web/ts_web/pages/page1.js +21 -0
- package/dist_ts_web/{pages → ts_web/pages}/page2.js +1 -1
- package/dist_ts_web/ts_web/plugins.js +14 -0
- package/dist_ts_web/ts_web/style.js +38 -0
- package/license +2 -2
- package/package.json +21 -19
- package/readme.hints.md +40 -1
- package/readme.md +202 -125
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.pdfservice.ts +15 -7
- package/ts/helpers.ts +1 -1
- package/ts/paths.ts +3 -1
- package/ts/plugins.ts +3 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/contentinvoice.ts +272 -250
- package/ts_web/elements/document.demo.ts +7 -4
- package/ts_web/elements/document.ts +68 -82
- package/ts_web/elements/index.ts +10 -9
- package/ts_web/elements/letterheader.ts +106 -39
- package/ts_web/elements/page.ts +106 -48
- package/ts_web/elements/pagecontainer.ts +14 -13
- package/ts_web/elements/pagecontent.ts +34 -53
- package/ts_web/elements/pagefooter.ts +125 -45
- package/ts_web/elements/pageheader.ts +22 -16
- package/ts_web/elements/paymentcode.ts +95 -0
- package/ts_web/elements/viewer.demo.ts +7 -4
- package/ts_web/elements/viewer.ts +26 -12
- package/ts_web/pages/page1.ts +10 -6
- package/ts_web/style.ts +34 -3
- package/dist_ts_shared/interfaces/translation.d.ts +0 -19
- package/dist_ts_shared/interfaces/translation.js +0 -2
- package/dist_ts_web/elements/contentinvoice.js +0 -388
- package/dist_ts_web/elements/document.demo.js +0 -6
- package/dist_ts_web/elements/document.js +0 -272
- package/dist_ts_web/elements/index.d.ts +0 -9
- package/dist_ts_web/elements/index.js +0 -10
- package/dist_ts_web/elements/letterheader.d.ts +0 -16
- package/dist_ts_web/elements/letterheader.js +0 -124
- package/dist_ts_web/elements/page.d.ts +0 -25
- package/dist_ts_web/elements/page.js +0 -219
- package/dist_ts_web/elements/pagecontainer.js +0 -67
- package/dist_ts_web/elements/pagecontent.js +0 -143
- package/dist_ts_web/elements/pagefooter.d.ts +0 -17
- package/dist_ts_web/elements/pagefooter.js +0 -138
- package/dist_ts_web/elements/pageheader.d.ts +0 -17
- package/dist_ts_web/elements/pageheader.js +0 -109
- package/dist_ts_web/elements/viewer.demo.js +0 -6
- package/dist_ts_web/elements/viewer.js +0 -101
- package/dist_ts_web/pages/page1.js +0 -17
- package/dist_ts_web/plugins.js +0 -14
- package/dist_ts_web/style.js +0 -7
- package/dist_watch/bundle.js +0 -40318
- package/dist_watch/bundle.js.map +0 -7
- package/dist_watch/index.html +0 -25
- /package/dist_ts_web/{00_commitinfo_data.d.ts → ts_web/00_commitinfo_data.d.ts} +0 -0
- /package/dist_ts_web/{elements → ts_web/elements}/document.demo.d.ts +0 -0
- /package/dist_ts_web/{elements → ts_web/elements}/viewer.demo.d.ts +0 -0
- /package/dist_ts_web/{index.d.ts → ts_web/index.d.ts} +0 -0
- /package/dist_ts_web/{pages → ts_web/pages}/index.d.ts +0 -0
- /package/dist_ts_web/{pages → ts_web/pages}/page1.d.ts +0 -0
- /package/dist_ts_web/{pages → ts_web/pages}/page2.d.ts +0 -0
- /package/dist_ts_web/{plugins.d.ts → ts_web/plugins.d.ts} +0 -0
- /package/dist_ts_web/{style.d.ts → ts_web/style.d.ts} +0 -0
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import * as plugins from
|
|
1
|
+
import * as plugins from "../plugins.js";
|
|
2
2
|
|
|
3
|
-
import { html } from
|
|
3
|
+
import { html } from "@design.estate/dees-element";
|
|
4
4
|
|
|
5
5
|
export const demoFunc = () => html`
|
|
6
|
-
<dedocument-dedocument
|
|
7
|
-
|
|
6
|
+
<dedocument-dedocument
|
|
7
|
+
.format="${"a4"}"
|
|
8
|
+
.letterData=${plugins.shared.demoLetter}
|
|
9
|
+
></dedocument-dedocument>
|
|
10
|
+
`;
|
|
@@ -5,34 +5,34 @@ import {
|
|
|
5
5
|
customElement,
|
|
6
6
|
type TemplateResult,
|
|
7
7
|
css,
|
|
8
|
-
state,
|
|
9
|
-
cssManager,
|
|
10
|
-
unsafeCSS,
|
|
11
8
|
domtools,
|
|
12
|
-
} from
|
|
13
|
-
import * as plugins from
|
|
14
|
-
|
|
15
|
-
export const defaultDocumentSettings: plugins.shared.interfaces.IDocumentSettings =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
import {
|
|
9
|
+
} from "@design.estate/dees-element";
|
|
10
|
+
import * as plugins from "../plugins.js";
|
|
11
|
+
|
|
12
|
+
export const defaultDocumentSettings: plugins.shared.interfaces.IDocumentSettings =
|
|
13
|
+
{
|
|
14
|
+
enableTopDraftText: true,
|
|
15
|
+
enableDefaultHeader: true,
|
|
16
|
+
enableDefaultFooter: true,
|
|
17
|
+
enableFoldMarks: true,
|
|
18
|
+
enableInvoiceContractRefSection: true,
|
|
19
|
+
languageCode: "EN",
|
|
20
|
+
vatGroupPositions: true,
|
|
21
|
+
dateStyle: "short",
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
import { DePage } from "./page.js";
|
|
25
|
+
import { DeContentInvoice } from "./contentinvoice.js";
|
|
26
|
+
|
|
27
|
+
import { demoFunc } from "./document.demo.js";
|
|
28
28
|
|
|
29
29
|
declare global {
|
|
30
30
|
interface HTMLElementTagNameMap {
|
|
31
|
-
|
|
31
|
+
"dedocument-dedocument": DeDocument;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
@customElement(
|
|
35
|
+
@customElement("dedocument-dedocument")
|
|
36
36
|
export class DeDocument extends DeesElement {
|
|
37
37
|
public static demo = demoFunc;
|
|
38
38
|
|
|
@@ -40,51 +40,52 @@ export class DeDocument extends DeesElement {
|
|
|
40
40
|
type: String,
|
|
41
41
|
reflect: true,
|
|
42
42
|
})
|
|
43
|
-
|
|
43
|
+
accessor format: "a4" = "a4";
|
|
44
44
|
|
|
45
45
|
@property({
|
|
46
46
|
type: Number,
|
|
47
47
|
reflect: true,
|
|
48
48
|
})
|
|
49
|
-
|
|
49
|
+
accessor viewWidth: number = null;
|
|
50
50
|
|
|
51
51
|
@property({
|
|
52
52
|
type: Number,
|
|
53
53
|
reflect: true,
|
|
54
54
|
})
|
|
55
|
-
|
|
55
|
+
accessor viewHeight: number = null;
|
|
56
56
|
|
|
57
57
|
@property({
|
|
58
58
|
type: Boolean,
|
|
59
59
|
reflect: true,
|
|
60
60
|
})
|
|
61
|
-
printMode = false;
|
|
61
|
+
accessor printMode = false;
|
|
62
62
|
|
|
63
63
|
@property({
|
|
64
64
|
type: Object,
|
|
65
65
|
reflect: true,
|
|
66
66
|
converter: (valueArg) => {
|
|
67
|
-
if (typeof valueArg ===
|
|
68
|
-
return plugins.smartjson.parseBase64(valueArg)
|
|
67
|
+
if (typeof valueArg === "string") {
|
|
68
|
+
return plugins.smartjson.parseBase64(valueArg);
|
|
69
69
|
} else {
|
|
70
70
|
return valueArg;
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
73
|
})
|
|
74
|
-
|
|
74
|
+
accessor letterData: plugins.tsclass.business.TLetter;
|
|
75
75
|
|
|
76
76
|
@property({
|
|
77
77
|
type: Object,
|
|
78
78
|
reflect: true,
|
|
79
79
|
converter: (valueArg) => {
|
|
80
|
-
if (typeof valueArg ===
|
|
81
|
-
return plugins.smartjson.parseBase64(valueArg)
|
|
80
|
+
if (typeof valueArg === "string") {
|
|
81
|
+
return plugins.smartjson.parseBase64(valueArg);
|
|
82
82
|
} else {
|
|
83
83
|
return valueArg;
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
86
|
})
|
|
87
|
-
|
|
87
|
+
accessor documentSettings: plugins.shared.interfaces.IDocumentSettings =
|
|
88
|
+
defaultDocumentSettings;
|
|
88
89
|
|
|
89
90
|
constructor() {
|
|
90
91
|
super();
|
|
@@ -96,10 +97,6 @@ export class DeDocument extends DeesElement {
|
|
|
96
97
|
css`
|
|
97
98
|
:host {
|
|
98
99
|
display: block;
|
|
99
|
-
color: #333;
|
|
100
|
-
padding: 0px;
|
|
101
|
-
position: relative;
|
|
102
|
-
font-family: 'Dees Sans', sans-serif;
|
|
103
100
|
}
|
|
104
101
|
|
|
105
102
|
.betweenPagesSpacer {
|
|
@@ -109,41 +106,17 @@ export class DeDocument extends DeesElement {
|
|
|
109
106
|
];
|
|
110
107
|
|
|
111
108
|
public render(): TemplateResult {
|
|
112
|
-
return html`
|
|
113
|
-
<div class="documentContainer"></div>
|
|
114
|
-
`;
|
|
109
|
+
return html` <div class="documentContainer"></div> `;
|
|
115
110
|
}
|
|
116
111
|
|
|
117
|
-
public async firstUpdated(
|
|
112
|
+
public async firstUpdated(
|
|
113
|
+
_changedProperties: Map<string | number | symbol, unknown>
|
|
114
|
+
) {
|
|
118
115
|
domtools.plugins.smartdelay.delayFor(0).then(async () => {
|
|
119
116
|
this.documentSettings = {
|
|
120
117
|
...defaultDocumentSettings,
|
|
121
118
|
...this.documentSettings,
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
while (false) {
|
|
125
|
-
await domtools.plugins.smartdelay.delayFor(1000);
|
|
126
|
-
this.letterData = {
|
|
127
|
-
...this.letterData,
|
|
128
|
-
content: {
|
|
129
|
-
...this.letterData.content,
|
|
130
|
-
invoiceData: {
|
|
131
|
-
...this.letterData.content.invoiceData,
|
|
132
|
-
items: [
|
|
133
|
-
...this.letterData.content.invoiceData.items,
|
|
134
|
-
{
|
|
135
|
-
name: 'Test Item',
|
|
136
|
-
unitQuantity: 1,
|
|
137
|
-
unitNetPrice: 100,
|
|
138
|
-
unitType: 'hours',
|
|
139
|
-
vatPercentage: 19,
|
|
140
|
-
position: 1,
|
|
141
|
-
},
|
|
142
|
-
],
|
|
143
|
-
},
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
119
|
+
};
|
|
147
120
|
});
|
|
148
121
|
const resizeObserver = new ResizeObserver((entries) => {
|
|
149
122
|
for (const entry of entries) {
|
|
@@ -156,16 +129,15 @@ export class DeDocument extends DeesElement {
|
|
|
156
129
|
resizeObserver.observe(this);
|
|
157
130
|
this.registerGarbageFunction(() => {
|
|
158
131
|
resizeObserver.disconnect();
|
|
159
|
-
})
|
|
132
|
+
});
|
|
160
133
|
}
|
|
161
134
|
|
|
162
|
-
public latestDocumentSettings: plugins.shared.interfaces.IDocumentSettings =
|
|
163
|
-
|
|
135
|
+
public latestDocumentSettings: plugins.shared.interfaces.IDocumentSettings =
|
|
136
|
+
null;
|
|
137
|
+
public latestRenderedLetterData: plugins.tsclass.business.TLetter = null;
|
|
164
138
|
public cleanupStore: any[] = [];
|
|
165
139
|
|
|
166
|
-
|
|
167
140
|
public async renderDocument() {
|
|
168
|
-
|
|
169
141
|
this.latestDocumentSettings = this.documentSettings;
|
|
170
142
|
this.latestRenderedLetterData = this.letterData;
|
|
171
143
|
|
|
@@ -173,7 +145,7 @@ export class DeDocument extends DeesElement {
|
|
|
173
145
|
const cleanUpStoreNextRender = [];
|
|
174
146
|
|
|
175
147
|
const domtools = await this.domtoolsPromise;
|
|
176
|
-
const documentBuildContainer = document.createElement(
|
|
148
|
+
const documentBuildContainer = document.createElement("div");
|
|
177
149
|
cleanUpStoreCurrentRender.push(documentBuildContainer);
|
|
178
150
|
document.body.appendChild(documentBuildContainer);
|
|
179
151
|
|
|
@@ -184,7 +156,8 @@ export class DeDocument extends DeesElement {
|
|
|
184
156
|
// lets append the content
|
|
185
157
|
const content: DeContentInvoice = new DeContentInvoice();
|
|
186
158
|
cleanUpStoreCurrentRender.push(content);
|
|
187
|
-
content.letterData = this
|
|
159
|
+
content.letterData = this
|
|
160
|
+
.letterData as unknown as plugins.tsclass.finance.TInvoice;
|
|
188
161
|
content.documentSettings = this.documentSettings;
|
|
189
162
|
document.body.appendChild(content);
|
|
190
163
|
|
|
@@ -208,7 +181,7 @@ export class DeDocument extends DeesElement {
|
|
|
208
181
|
// store current page
|
|
209
182
|
cleanUpStoreNextRender.push(newPage);
|
|
210
183
|
documentBuildContainer.append(newPage);
|
|
211
|
-
|
|
184
|
+
|
|
212
185
|
await currentContent.elementDomReady;
|
|
213
186
|
await currentContent.trimStartToOffset(overallContentOffset);
|
|
214
187
|
let newPageOverflows = await newPage.checkOverflow();
|
|
@@ -224,17 +197,18 @@ export class DeDocument extends DeesElement {
|
|
|
224
197
|
complete = true;
|
|
225
198
|
}
|
|
226
199
|
}
|
|
227
|
-
|
|
200
|
+
|
|
228
201
|
for (const cleanUp of this.cleanupStore) {
|
|
229
202
|
cleanUp.remove();
|
|
230
203
|
}
|
|
231
|
-
this.cleanupStore = cleanUpStoreNextRender
|
|
204
|
+
this.cleanupStore = cleanUpStoreNextRender;
|
|
232
205
|
|
|
233
206
|
cleanUpStoreCurrentRender.forEach((cleanUp) => {
|
|
234
207
|
cleanUp.remove();
|
|
235
208
|
});
|
|
236
209
|
|
|
237
|
-
const documentContainer =
|
|
210
|
+
const documentContainer =
|
|
211
|
+
this.shadowRoot.querySelector(".documentContainer");
|
|
238
212
|
if (documentContainer) {
|
|
239
213
|
const children = Array.from(documentContainer.children);
|
|
240
214
|
children.forEach((child) => {
|
|
@@ -247,24 +221,36 @@ export class DeDocument extends DeesElement {
|
|
|
247
221
|
documentContainer.append(page);
|
|
248
222
|
// betweenPagesSpacer
|
|
249
223
|
if (!this.printMode) {
|
|
250
|
-
const betweenPagesSpacerDiv = document.createElement(
|
|
251
|
-
betweenPagesSpacerDiv.classList.add(
|
|
224
|
+
const betweenPagesSpacerDiv = document.createElement("div");
|
|
225
|
+
betweenPagesSpacerDiv.classList.add("betweenPagesSpacer");
|
|
252
226
|
documentContainer.appendChild(betweenPagesSpacerDiv);
|
|
253
227
|
}
|
|
254
228
|
}
|
|
255
229
|
this.adjustDePageScaling();
|
|
256
230
|
}
|
|
257
231
|
|
|
258
|
-
async updated(
|
|
232
|
+
async updated(
|
|
233
|
+
changedProperties: Map<string | number | symbol, unknown>
|
|
234
|
+
): Promise<void> {
|
|
259
235
|
super.updated(changedProperties);
|
|
260
236
|
const domtools = await this.domtoolsPromise;
|
|
261
|
-
let renderedDocIsUpToDate =
|
|
262
|
-
|
|
237
|
+
let renderedDocIsUpToDate =
|
|
238
|
+
domtools.convenience.smartjson.deepEqualObjects(
|
|
239
|
+
this.letterData,
|
|
240
|
+
this.latestRenderedLetterData
|
|
241
|
+
) &&
|
|
242
|
+
domtools.convenience.smartjson.deepEqualObjects(
|
|
243
|
+
this.documentSettings,
|
|
244
|
+
this.latestDocumentSettings
|
|
245
|
+
);
|
|
263
246
|
if (!renderedDocIsUpToDate) {
|
|
264
247
|
this.renderDocument();
|
|
265
248
|
}
|
|
266
249
|
|
|
267
|
-
if (
|
|
250
|
+
if (
|
|
251
|
+
changedProperties.has("viewHeight") ||
|
|
252
|
+
changedProperties.has("viewWidth")
|
|
253
|
+
) {
|
|
268
254
|
this.adjustDePageScaling();
|
|
269
255
|
}
|
|
270
256
|
}
|
|
@@ -275,7 +261,7 @@ export class DeDocument extends DeesElement {
|
|
|
275
261
|
}
|
|
276
262
|
this.viewWidth = this.clientWidth;
|
|
277
263
|
// Find all DePage instances within this DeDocument
|
|
278
|
-
const pages = this.shadowRoot.querySelectorAll(
|
|
264
|
+
const pages = this.shadowRoot.querySelectorAll("dedocument-page");
|
|
279
265
|
|
|
280
266
|
// Update each DePage instance's viewHeight and viewWidth
|
|
281
267
|
pages.forEach((page: DePage) => {
|
package/ts_web/elements/index.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
9
|
-
export * from
|
|
1
|
+
export * from "./contentinvoice.js";
|
|
2
|
+
export * from "./document.js";
|
|
3
|
+
export * from "./letterheader.js";
|
|
4
|
+
export * from "./page.js";
|
|
5
|
+
export * from "./pagecontainer.js";
|
|
6
|
+
export * from "./pagecontent.js";
|
|
7
|
+
export * from "./pagefooter.js";
|
|
8
|
+
export * from "./pageheader.js";
|
|
9
|
+
export * from "./viewer.js";
|
|
10
|
+
export * from "./paymentcode.js";
|
|
@@ -5,43 +5,51 @@ import {
|
|
|
5
5
|
customElement,
|
|
6
6
|
type TemplateResult,
|
|
7
7
|
css,
|
|
8
|
-
cssManager,
|
|
9
8
|
unsafeCSS,
|
|
10
9
|
domtools,
|
|
11
|
-
} from
|
|
10
|
+
} from "@design.estate/dees-element";
|
|
12
11
|
|
|
13
|
-
import * as plugins from
|
|
14
|
-
import { dedocumentSharedStyle } from
|
|
12
|
+
import * as plugins from "../plugins.js";
|
|
13
|
+
import { dedocumentSharedStyle } from "../style.js";
|
|
15
14
|
|
|
16
15
|
declare global {
|
|
17
16
|
interface HTMLElementTagNameMap {
|
|
18
|
-
|
|
17
|
+
"dedocument-letterheader": DeLetterHeader;
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
|
|
22
|
-
@customElement(
|
|
21
|
+
@customElement("dedocument-letterheader")
|
|
23
22
|
export class DeLetterHeader extends DeesElement {
|
|
24
23
|
public static demo = () => html`
|
|
25
|
-
<dedocument-letterheader
|
|
24
|
+
<dedocument-letterheader
|
|
25
|
+
.format="${"a4"}"
|
|
26
|
+
.letterData=${plugins.shared.demoLetter}
|
|
27
|
+
></dedocument-letterheader>
|
|
26
28
|
`;
|
|
27
29
|
|
|
28
30
|
@property({
|
|
29
31
|
type: Object,
|
|
30
|
-
reflect: true
|
|
32
|
+
reflect: true,
|
|
31
33
|
})
|
|
32
|
-
|
|
34
|
+
accessor letterData: plugins.tsclass.finance.TInvoice;
|
|
33
35
|
|
|
34
36
|
@property({
|
|
35
37
|
type: Number,
|
|
36
38
|
reflect: true,
|
|
37
39
|
})
|
|
38
|
-
|
|
40
|
+
accessor pageNumber: number = 1;
|
|
39
41
|
|
|
40
42
|
@property({
|
|
41
43
|
type: Number,
|
|
42
44
|
reflect: true,
|
|
43
45
|
})
|
|
44
|
-
|
|
46
|
+
accessor pageTotalNumber: number = 1;
|
|
47
|
+
|
|
48
|
+
@property({
|
|
49
|
+
type: Object,
|
|
50
|
+
reflect: true,
|
|
51
|
+
})
|
|
52
|
+
accessor documentSettings: plugins.shared.interfaces.IDocumentSettings;
|
|
45
53
|
|
|
46
54
|
constructor() {
|
|
47
55
|
super();
|
|
@@ -52,19 +60,29 @@ export class DeLetterHeader extends DeesElement {
|
|
|
52
60
|
domtools.elementBasic.staticStyles,
|
|
53
61
|
dedocumentSharedStyle,
|
|
54
62
|
css`
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
.address {
|
|
64
|
+
position: absolute;
|
|
65
|
+
top: calc(var(--DPI-FACTOR) * 4.5);
|
|
66
|
+
left: var(--LEFT-MARGIN);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.date {
|
|
70
|
+
position: absolute;
|
|
71
|
+
top: calc(var(--DPI-FACTOR) * 4.5);
|
|
72
|
+
right: var(--RIGHT-MARGIN);
|
|
73
|
+
text-align: right;
|
|
57
74
|
}
|
|
58
75
|
|
|
59
76
|
.recepientInfo {
|
|
60
77
|
position: absolute;
|
|
61
78
|
display: block;
|
|
62
79
|
overflow: hidden;
|
|
63
|
-
top:
|
|
64
|
-
right:
|
|
80
|
+
top: calc(var(--DPI-FACTOR) * 5.5);
|
|
81
|
+
right: var(--RIGHT-MARGIN);
|
|
65
82
|
width: 200px;
|
|
66
83
|
text-align: right;
|
|
67
84
|
}
|
|
85
|
+
|
|
68
86
|
.recepientInfo .label {
|
|
69
87
|
margin-top: 10px;
|
|
70
88
|
margin-bottom: 3px;
|
|
@@ -72,19 +90,6 @@ export class DeLetterHeader extends DeesElement {
|
|
|
72
90
|
font-weight: bold;
|
|
73
91
|
}
|
|
74
92
|
|
|
75
|
-
.date {
|
|
76
|
-
position: absolute;
|
|
77
|
-
top: 180px;
|
|
78
|
-
right: ${unsafeCSS(plugins.shared.rightMargin + 'px')};
|
|
79
|
-
text-align: right;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.address {
|
|
83
|
-
position: absolute;
|
|
84
|
-
top: 180px;
|
|
85
|
-
left: ${unsafeCSS(plugins.shared.leftMargin + 'px')};
|
|
86
|
-
}
|
|
87
|
-
|
|
88
93
|
.address .from {
|
|
89
94
|
font-size: 10px;
|
|
90
95
|
}
|
|
@@ -95,31 +100,93 @@ export class DeLetterHeader extends DeesElement {
|
|
|
95
100
|
`,
|
|
96
101
|
];
|
|
97
102
|
|
|
103
|
+
private renderDeliveryDate(from: Date, to: Date): TemplateResult {
|
|
104
|
+
if (this.letterData.accountingDocType !== "invoice") return null;
|
|
105
|
+
const dateFormat = new Intl.DateTimeFormat(
|
|
106
|
+
this.documentSettings.languageCode,
|
|
107
|
+
{ dateStyle: this.documentSettings.dateStyle }
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
let formattedFrom = from ? dateFormat.format(from) : null;
|
|
111
|
+
let formattedTo = to ? dateFormat.format(to) : null;
|
|
112
|
+
|
|
113
|
+
const isSameDay = formattedFrom === formattedTo;
|
|
114
|
+
|
|
115
|
+
if (isSameDay) {
|
|
116
|
+
return html`<div class="label">
|
|
117
|
+
${plugins.shared.translation.translate(
|
|
118
|
+
this.documentSettings.languageCode,
|
|
119
|
+
"letterhead@@periodOfPerformance.day"
|
|
120
|
+
)}
|
|
121
|
+
</div>
|
|
122
|
+
<span> ${formattedFrom} </span>`;
|
|
123
|
+
} else {
|
|
124
|
+
return html`<div class="label">
|
|
125
|
+
${plugins.shared.translation.translate(
|
|
126
|
+
this.documentSettings.languageCode,
|
|
127
|
+
"letterhead@@periodOfPerformance.range"
|
|
128
|
+
)}
|
|
129
|
+
</div>
|
|
130
|
+
<span> ${formattedFrom} - ${formattedTo}</span>`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
98
134
|
public render(): TemplateResult {
|
|
99
135
|
return html`
|
|
100
136
|
<div class="date">
|
|
101
|
-
${new
|
|
102
|
-
|
|
137
|
+
${new Intl.DateTimeFormat(this.documentSettings.languageCode, {
|
|
138
|
+
dateStyle: "long",
|
|
139
|
+
}).format(new Date(this.letterData.date))}
|
|
103
140
|
</div>
|
|
104
141
|
<div class="address">
|
|
105
142
|
<div class="from">
|
|
106
|
-
${this.letterData.from.name},
|
|
107
|
-
${this.letterData.from.address.
|
|
108
|
-
${this.letterData.from.address.
|
|
143
|
+
${this.letterData.from.name},
|
|
144
|
+
${this.letterData.from.address.streetName}
|
|
145
|
+
${this.letterData.from.address.houseNumber},
|
|
146
|
+
${this.letterData.from.address.postalCode}
|
|
147
|
+
${this.letterData.from.address.city},
|
|
148
|
+
${this.letterData.from.address.country}
|
|
109
149
|
</div>
|
|
110
150
|
<div class="to">
|
|
111
151
|
${this.letterData.to.name}<br />
|
|
112
|
-
${this.letterData.to.address.streetName}
|
|
113
|
-
${this.letterData.to.address.
|
|
152
|
+
${this.letterData.to.address.streetName}
|
|
153
|
+
${this.letterData.to.address.houseNumber}<br />
|
|
154
|
+
${this.letterData.to.address.postalCode}
|
|
155
|
+
${this.letterData.to.address.city}<br />
|
|
114
156
|
${this.letterData.from.address.country}
|
|
115
157
|
</div>
|
|
116
158
|
</div>
|
|
117
159
|
<div class="recepientInfo">
|
|
118
|
-
<div class="label">
|
|
119
|
-
|
|
160
|
+
<div class="label">
|
|
161
|
+
${plugins.shared.translation.translate(
|
|
162
|
+
this.documentSettings.languageCode,
|
|
163
|
+
"letterhead@@customer.number"
|
|
164
|
+
)}
|
|
165
|
+
</div>
|
|
166
|
+
${this.letterData.to.customerNumber || "not registered"}
|
|
167
|
+
|
|
168
|
+
<div class="label">
|
|
169
|
+
${plugins.shared.translation.translate(
|
|
170
|
+
this.documentSettings.languageCode,
|
|
171
|
+
"letterhead@@vat.yourId"
|
|
172
|
+
)}
|
|
173
|
+
</div>
|
|
174
|
+
${this.letterData.to.registrationDetails.vatId || "not provided"}
|
|
120
175
|
|
|
121
|
-
|
|
122
|
-
${this.letterData.
|
|
176
|
+
<!-- TODO: Make use of components -->
|
|
177
|
+
${this.letterData.accountingDocType === "invoice"
|
|
178
|
+
? html` <div class="label">
|
|
179
|
+
${plugins.shared.translation.translate(
|
|
180
|
+
this.documentSettings.languageCode,
|
|
181
|
+
"letterhead@@invoice.number"
|
|
182
|
+
)}
|
|
183
|
+
</div>
|
|
184
|
+
${this.letterData.id || "not registered"}`
|
|
185
|
+
: null}
|
|
186
|
+
${this.renderDeliveryDate(
|
|
187
|
+
new Date(this.letterData.periodOfPerformance?.from),
|
|
188
|
+
new Date(this.letterData.periodOfPerformance?.to)
|
|
189
|
+
)}
|
|
123
190
|
</div>
|
|
124
191
|
`;
|
|
125
192
|
}
|