From f2d585ed36fc3beb4cddc67044d388e1aa3a504f Mon Sep 17 00:00:00 2001 From: Philipp Kunz Date: Thu, 5 Dec 2024 01:33:16 +0100 Subject: [PATCH] update --- .npmrc | 2 +- package.json | 2 +- pnpm-lock.yaml | 13 +++--- ts_shared/demoletter.ts | 4 +- ts_shared/interfaces/document.ts | 1 + ts_shared/interfaces/index.ts | 1 - ts_shared/interfaces/translation.ts | 19 --------- ts_shared/translation.ts | 62 ++++++++++++++++++----------- ts_web/elements/contentinvoice.ts | 36 ++++++++++++----- ts_web/elements/document.ts | 23 +++++++++-- ts_web/elements/page.ts | 1 + ts_web/elements/pagecontent.ts | 1 + 12 files changed, 97 insertions(+), 68 deletions(-) delete mode 100644 ts_shared/interfaces/translation.ts diff --git a/.npmrc b/.npmrc index b002176..214c29d 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1 @@ -registry=https://verdaccio.nevermind.cloud/ +registry=https://registry.npmjs.org/ diff --git a/package.json b/package.json index 17121db..39561c1 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@git.zone/tsbuild": "^2.2.0", "@git.zone/tsbundle": "^2.1.0", "@git.zone/tstest": "^1.0.90", - "@git.zone/tswatch": "^2.0.25", + "@git.zone/tswatch": "^2.0.34", "@push.rocks/projectinfo": "^5.0.2", "@push.rocks/tapbundle": "^5.5.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b670fc8..aebd9af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,8 +58,8 @@ importers: specifier: ^1.0.90 version: 1.0.90(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)))(socks@2.8.3) '@git.zone/tswatch': - specifier: ^2.0.25 - version: 2.0.25 + specifier: ^2.0.34 + version: 2.0.34 '@push.rocks/projectinfo': specifier: ^5.0.2 version: 5.0.2 @@ -607,8 +607,8 @@ packages: resolution: {integrity: sha512-McytXK46GiReEps7wHWW6zOHYCFF4sywjj6auHjhGqzOogA2Wju1YtZRL+o+OAUb61kQxNFRras6Xg/4Zth0Bw==} hasBin: true - '@git.zone/tswatch@2.0.25': - resolution: {integrity: sha512-2A2TzJhw5AHI2BUOEjtZJzNgmRDMKZc4+p+yCdgj3mYcD7l1XeM6HTTcyRTxGDrDXggVIWN1O+UxU6ftHg94ag==} + '@git.zone/tswatch@2.0.34': + resolution: {integrity: sha512-nwrJffX3aAf8DOfbWPXErskn4RTdQVaE4WLnV8QEU2WdNehI3KQCdVPYHcskl7eqatjbZdQEck39DItmNacGxw==} hasBin: true '@hapi/bourne@3.0.0': @@ -5070,7 +5070,7 @@ snapshots: - supports-color - utf-8-validate - '@git.zone/tswatch@2.0.25': + '@git.zone/tswatch@2.0.34': dependencies: '@api.global/typedserver': 3.0.51 '@git.zone/tsbundle': 2.1.0 @@ -5080,12 +5080,15 @@ snapshots: '@push.rocks/smartchok': 1.0.34 '@push.rocks/smartcli': 4.0.11 '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartfile': 11.0.21 '@push.rocks/smartlog': 3.0.7 '@push.rocks/smartlog-destination-local': 9.0.2 '@push.rocks/smartshell': 3.0.6 '@push.rocks/taskbuffer': 3.1.7 transitivePeerDependencies: + - bufferutil - supports-color + - utf-8-validate '@hapi/bourne@3.0.0': {} diff --git a/ts_shared/demoletter.ts b/ts_shared/demoletter.ts index e38fed3..3f5b701 100644 --- a/ts_shared/demoletter.ts +++ b/ts_shared/demoletter.ts @@ -213,7 +213,7 @@ export const demoLetter: plugins.tsclass.business.ILetter = { export const demoDocumentSettings: interfaces.IDocumentSettings = { enableTopDraftText: true, - enableDefaultHeader: false, - enableDefaultFooter: false, + enableDefaultHeader: true, + enableDefaultFooter: true, languageCode: 'DE', }; \ No newline at end of file diff --git a/ts_shared/interfaces/document.ts b/ts_shared/interfaces/document.ts index 9047790..9a86868 100644 --- a/ts_shared/interfaces/document.ts +++ b/ts_shared/interfaces/document.ts @@ -5,4 +5,5 @@ export interface IDocumentSettings { enableDefaultHeader?: boolean; enableDefaultFooter?: boolean; languageCode?: translation.TLanguageCode; + vatGroupPositions?: boolean; } \ No newline at end of file diff --git a/ts_shared/interfaces/index.ts b/ts_shared/interfaces/index.ts index 4c78139..5d91bae 100644 --- a/ts_shared/interfaces/index.ts +++ b/ts_shared/interfaces/index.ts @@ -1,2 +1 @@ export * from './document.js'; -export * from './translation.js'; diff --git a/ts_shared/interfaces/translation.ts b/ts_shared/interfaces/translation.ts deleted file mode 100644 index 6ac746c..0000000 --- a/ts_shared/interfaces/translation.ts +++ /dev/null @@ -1,19 +0,0 @@ -export interface IDeDocumentTranslations { - address: string; - bankConnection: string; - contactInfo: string; - description: string; - invoice: string; - itemPos: string; - quantity: string; - registrationInfo: string; - reverseVatNote: string; - totalNetPrice: string; - unitNetPrice: string; - unitType: string; - yourCustomerId: string; - yourVatId: string; - continuesOnPage: string; - finalPageStatement: string; - page: string; -} \ No newline at end of file diff --git a/ts_shared/translation.ts b/ts_shared/translation.ts index 5b11866..a69e2cf 100644 --- a/ts_shared/translation.ts +++ b/ts_shared/translation.ts @@ -1,10 +1,7 @@ import * as interfaces from './interfaces/index.js'; -type TTranslationImplementation = { - [key in keyof interfaces.IDeDocumentTranslations]: string; -} - -export const EN_translations: TTranslationImplementation = { +// Define English translations without enforcing TTranslationImplementation yet +export const EN_translations = { address: 'Address', bankConnection: 'Bank Connection', contactInfo: 'Contact Info', @@ -22,8 +19,17 @@ export const EN_translations: TTranslationImplementation = { continuesOnPage: 'Continues on page', finalPageStatement: 'This is the final page of this document.', page: 'Page', +} as const; + +// Infer keys of EN_translations +export type TTranslationKey = keyof typeof EN_translations; + +// Define the type for all translations based on EN_translations keys +export type TTranslationImplementation = { + [key in TTranslationKey]: string; }; +// Define German translations export const DE_translations: TTranslationImplementation = { address: 'Adresse', bankConnection: 'Bankverbindung', @@ -33,9 +39,10 @@ export const DE_translations: TTranslationImplementation = { itemPos: 'Pos.', quantity: 'Anzahl', registrationInfo: 'HRA/HRB Info', - reverseVatNote: 'Umkehr der Umsatzsteuerpflicht: Der Rechnungsempfänger ist für die korrekte Abrechnung der Umsatzsteuer zuständig.', - totalNetPrice: 'Nettopreis Summe', - unitNetPrice: 'Nettopreis', + reverseVatNote: + 'Umkehr der Umsatzsteuerpflicht: Der Rechnungsempfänger ist für die korrekte Abrechnung der Umsatzsteuer zuständig.', + totalNetPrice: 'Summe netto', + unitNetPrice: 'Einheit netto', unitType: 'Einheit', yourCustomerId: 'Ihre Kundennummer:', yourVatId: 'Ihre Umsatzsteuer-ID:', @@ -44,6 +51,7 @@ export const DE_translations: TTranslationImplementation = { page: 'Seite', }; +// Define Spanish translations export const ES_translations: TTranslationImplementation = { address: 'Dirección', bankConnection: 'Conexión bancaria', @@ -64,6 +72,7 @@ export const ES_translations: TTranslationImplementation = { page: 'Página', }; +// Define French translations export const FR_translations: TTranslationImplementation = { address: 'Adresse', bankConnection: 'Coordonnées bancaires', @@ -72,11 +81,12 @@ export const FR_translations: TTranslationImplementation = { invoice: 'Facture', itemPos: 'Position', quantity: 'Quantité', - registrationInfo: 'Informations d\'enregistrement', - reverseVatNote: 'La TVA s\'applique selon le mécanisme d\'autoliquidation et est à payer par le client.', + registrationInfo: "Informations d'enregistrement", + reverseVatNote: + "La TVA s'applique selon le mécanisme d'autoliquidation et est à payer par le client.", totalNetPrice: 'Prix net total', unitNetPrice: 'Prix unitaire net', - unitType: 'Type d\'unité', + unitType: "Type d'unité", yourCustomerId: 'Votre numéro de client :', yourVatId: 'Votre numéro de TVA :', continuesOnPage: 'Continue sur la page', @@ -84,6 +94,7 @@ export const FR_translations: TTranslationImplementation = { page: 'Page', }; +// Define Italian translations export const IT_translations: TTranslationImplementation = { address: 'Indirizzo', bankConnection: 'Coordinate bancarie', @@ -93,7 +104,7 @@ export const IT_translations: TTranslationImplementation = { itemPos: 'Pos.', quantity: 'Quantità', registrationInfo: 'Informazioni di registrazione', - reverseVatNote: 'L\'IVA è applicata con inversione contabile ed è a carico del cliente.', + reverseVatNote: "L'IVA è applicata con inversione contabile ed è a carico del cliente.", totalNetPrice: 'Prezzo netto totale', unitNetPrice: 'Prezzo netto unitario', unitType: 'Tipo di unità', @@ -104,21 +115,24 @@ export const IT_translations: TTranslationImplementation = { page: 'Pagina', }; -export const languageCodeMap = { - 'DE': DE_translations, - 'EN': EN_translations, - 'ES': ES_translations, - 'FR': FR_translations, - 'IT': IT_translations, +// Language Code Map +export const languageCodeMap: Record = { + EN: EN_translations, + DE: DE_translations, + ES: ES_translations, + FR: FR_translations, + IT: IT_translations, }; +// Language Code Type export type TLanguageCode = keyof typeof languageCodeMap; -export const translate = (languageCode: TLanguageCode, key: string, defaultValue: string) => { +// Translate Function +export const translate = ( + languageCode: TLanguageCode, + key: TTranslationKey, + defaultValue: string +): string => { const translations = languageCodeMap[languageCode] || EN_translations; - if (translations && translations[key]) { - return translations[key]; - } else { - return defaultValue; - } + return translations[key] || defaultValue; }; \ No newline at end of file diff --git a/ts_web/elements/contentinvoice.ts b/ts_web/elements/contentinvoice.ts index 2b7f21c..a240862 100644 --- a/ts_web/elements/contentinvoice.ts +++ b/ts_web/elements/contentinvoice.ts @@ -59,6 +59,7 @@ export class DeContentInvoice extends DeesElement { css` :host { color: #333; + font-family: inherit; } .trimmedContent { @@ -204,7 +205,7 @@ export class DeContentInvoice extends DeesElement {
We hereby invoice products and services provided to you by Lossless GmbH:
-
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'itemPos', 'Item Pos.')}
+
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'itemPos', 'Item Pos.')}
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'description', 'Description')}
-
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'quantity', 'Quantity')}
+
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'quantity', 'Quantity')}
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'unitType', 'Unit Type')}
-
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'unitNetPrice', 'Unit Net Price')}
-
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'totalNetPrice', 'Total Net Price')}
+
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'unitNetPrice', 'Unit Net Price')}
+
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'totalNetPrice', 'Total Net Price')}
+
${plugins.shared.translation.translate(this.documentSettings.languageCode, 'vatShort', 'VAT')}
${(() => { let counter = 1; return this.letterData?.content.invoiceData?.items?.map( (invoiceItem) => html`
-
${counter++}
+
${counter++}
${invoiceItem.name}
-
${invoiceItem.unitQuantity}
+
${invoiceItem.unitQuantity}
${invoiceItem.unitType}
-
${invoiceItem.unitNetPrice} ${this.letterData?.content.invoiceData.currency}
-
+
${invoiceItem.unitNetPrice} ${this.letterData?.content.invoiceData.currency}
+
${invoiceItem.unitQuantity * invoiceItem.unitNetPrice} ${this.letterData?.content.invoiceData.currency}
+
+ ${invoiceItem.vatPercentage}% +
` ); @@ -317,8 +329,10 @@ export class DeContentInvoice extends DeesElement { return html`
- Vat ${vatGroupArg.vatPercentage}%
- (on item positions: ${itemNumbers}) + Vat ${vatGroupArg.vatPercentage}% + ${this.documentSettings.vatGroupPositions ? html` +
(on item positions: ${itemNumbers}) + ` : html``}
${vatGroupArg.vatAmountSum} EUR
diff --git a/ts_web/elements/document.ts b/ts_web/elements/document.ts index 67d6e64..5f07993 100644 --- a/ts_web/elements/document.ts +++ b/ts_web/elements/document.ts @@ -16,6 +16,8 @@ export const defaultDocumentSettings: plugins.shared.interfaces.IDocumentSetting enableTopDraftText: true, enableDefaultHeader: true, enableDefaultFooter: true, + languageCode: 'EN', + vatGroupPositions: true, }; @@ -97,6 +99,7 @@ export class DeDocument extends DeesElement { color: #333; padding: 0px; position: relative; + font-family: 'Dees Sans', sans-serif; } .betweenPagesSpacer { @@ -112,6 +115,12 @@ export class DeDocument extends DeesElement { } public async firstUpdated(_changedProperties: Map) { + domtools.plugins.smartdelay.delayFor(0).then(() => { + this.documentSettings = { + ...defaultDocumentSettings, + ...this.documentSettings, + } + }); const resizeObserver = new ResizeObserver((entries) => { for (const entry of entries) { const width = entry.contentRect.width; @@ -126,13 +135,19 @@ export class DeDocument extends DeesElement { }) } + public latestDocumentSettings: plugins.shared.interfaces.IDocumentSettings = null; public latestRenderedLetterData: plugins.tsclass.business.ILetter = null; public async renderDocument() { - const domtools = await this.domtoolsPromise; - + this.latestDocumentSettings = this.documentSettings; + this.latestRenderedLetterData = this.letterData; + + console.log(`rendering with settings:`); + console.log(this.latestDocumentSettings); + + const domtools = await this.domtoolsPromise; const documentBuildContainer = document.createElement('div'); document.body.appendChild(documentBuildContainer); @@ -199,13 +214,13 @@ export class DeDocument extends DeesElement { } } this.adjustDePageScaling(); - this.latestRenderedLetterData = this.letterData; } async updated(changedProperties: Map): Promise { super.updated(changedProperties); const domtools = await this.domtoolsPromise; - const renderedDocIsUpToDate = domtools.convenience.smartjson.deepEqualObjects(this.letterData, this.latestRenderedLetterData); + let renderedDocIsUpToDate = domtools.convenience.smartjson.deepEqualObjects(this.letterData, this.latestRenderedLetterData) + && domtools.convenience.smartjson.deepEqualObjects(this.documentSettings, this.latestDocumentSettings); if (!renderedDocIsUpToDate) { this.renderDocument(); } diff --git a/ts_web/elements/page.ts b/ts_web/elements/page.ts index a9c7c3f..a10295d 100644 --- a/ts_web/elements/page.ts +++ b/ts_web/elements/page.ts @@ -77,6 +77,7 @@ export class DePage extends DeesElement { css` :host { display: block; + font-family: inherit; } #scaleWrapper { diff --git a/ts_web/elements/pagecontent.ts b/ts_web/elements/pagecontent.ts index fda71e6..e21eb32 100644 --- a/ts_web/elements/pagecontent.ts +++ b/ts_web/elements/pagecontent.ts @@ -49,6 +49,7 @@ export class DePageContent extends DeesElement { css` :host { color: #333; + font-family: inherit; } .content {