Compare commits

..

2 Commits

Author SHA1 Message Date
bfa223a0f0 feat: migrate to new tsclass schema 2025-03-26 14:51:14 +00:00
256cf74a45 feat: enhance translation and invoice layout 2025-03-24 08:55:35 +00:00
11 changed files with 1763 additions and 2478 deletions

View File

@@ -1,10 +1,5 @@
# Changelog
## 2025-01-01 - 1.6.11 - fix(license)
Update copyright notice in license to reflect new ownership
- Updated copyright from Lossless GmbH to Task Venture Capital GmbH.
## 2024-12-08 - 1.6.10 - fix(core)
Improve stability and performance of document generation

View File

@@ -1,4 +1,4 @@
Copyright (c) 2022 Task Venture Capital GmbH (hello@task.vc)
Copyright (c) 2022 Lossless GmbH (hello@lossless.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.

View File

@@ -1,6 +1,6 @@
{
"name": "@design.estate/dees-document",
"version": "1.6.11",
"version": "1.6.10",
"private": false,
"description": "A sophisticated framework for dynamically generating and rendering business documents like invoices with modern web technologies, featuring PDF creation, templating, and automation.",
"main": "dist_ts_web/index.js",
@@ -21,29 +21,29 @@
"author": "Lossless GmbH",
"license": "MIT",
"dependencies": {
"@design.estate/dees-catalog": "^1.10.10",
"@design.estate/dees-domtools": "^2.3.3",
"@design.estate/dees-element": "^2.1.2",
"@design.estate/dees-wcctools": "^1.1.1",
"@design.estate/dees-catalog": "^1.4.1",
"@design.estate/dees-domtools": "^2.3.2",
"@design.estate/dees-element": "^2.0.39",
"@design.estate/dees-wcctools": "^1.0.90",
"@git.zone/tsrun": "^1.3.3",
"@push.rocks/smartfile": "^11.2.5",
"@push.rocks/smartfile": "^11.2.0",
"@push.rocks/smartjson": "^5.0.20",
"@push.rocks/smartpath": "^5.0.18",
"@push.rocks/smartpdf": "^3.2.2",
"@push.rocks/smarttime": "^4.1.1",
"@tsclass/tsclass": "^9.2.0",
"@types/node": "^24.1.0",
"@tsclass/tsclass": "^8.0.3",
"@types/node": "^22.13.13",
"@types/qrcode": "^1.5.5",
"puppeteer": "^24.15.0",
"puppeteer": "^24.4.0",
"qrcode": "^1.5.4"
},
"devDependencies": {
"@git.zone/tsbuild": "^2.6.4",
"@git.zone/tsbundle": "^2.5.1",
"@git.zone/tstest": "^2.3.2",
"@git.zone/tswatch": "^2.1.2",
"@git.zone/tsbuild": "^2.3.2",
"@git.zone/tsbundle": "^2.2.5",
"@git.zone/tstest": "^1.0.96",
"@git.zone/tswatch": "^2.1.0",
"@push.rocks/projectinfo": "^5.0.2",
"@push.rocks/tapbundle": "^6.0.3"
"@push.rocks/tapbundle": "^5.6.0"
},
"files": [
"ts/**/*",

4091
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@design.estate/dees-document',
version: '1.6.11',
version: '1.6.10',
description: 'A sophisticated framework for dynamically generating and rendering business documents like invoices with modern web technologies, featuring PDF creation, templating, and automation.'
}

View File

@@ -1,5 +1,5 @@
import * as plugins from "./plugins.js";
import * as helpers from "./helpers.js";
import * as plugins from './plugins.js';
import * as helpers from './helpers.js';
export interface IPdfServiceConstructorOptions {}
@@ -8,9 +8,7 @@ export interface IPdfServiceConstructorOptions {}
*/
export class PdfService {
// STATIC
public static async createAndStart(
optionsArg: IPdfServiceConstructorOptions
) {
public static async createAndStart(optionsArg: IPdfServiceConstructorOptions) {
const pdfService = new PdfService(optionsArg);
await pdfService.start();
return pdfService;
@@ -44,23 +42,17 @@ export class PdfService {
* creates an letter
*/
public async createPdfFromLetterObject(optionsArg: {
letterData: plugins.tsclass.business.TLetter;
letterData: plugins.tsclass.business.ILetter;
documentSettings: plugins.shared.interfaces.IDocumentSettings;
}): Promise<plugins.smartpdf.IPdf> {
}) {
const html = `
<script type="module">
${await helpers.getBundleAsString()}
</script>
<dedocument-dedocument printMode documentSettings="${plugins.smartjson.stringifyBase64(
optionsArg.documentSettings
)}" letterData="${plugins.smartjson.stringifyBase64(
optionsArg.letterData
)}"></dedocument-dedocument>
<dedocument-dedocument printMode documentSettings="${plugins.smartjson.stringifyBase64(optionsArg.documentSettings)}" letterData="${plugins.smartjson.stringifyBase64(optionsArg.letterData)}"></dedocument-dedocument>
`;
// console.log(html);
const pdfResult = await this.smartpdfInstance.getA4PdfResultForHtmlString(
html
);
const pdfResult = await this.smartpdfInstance.getA4PdfResultForHtmlString(html);
return pdfResult;
}
}

View File

@@ -50,10 +50,7 @@ const toContact: plugins.tsclass.business.TContact = {
};
export const demoLetter: plugins.tsclass.finance.TInvoice = {
type: "accounting-doc",
accountingDocType: "invoice",
accountingDocId: "LL-INV-48765",
accountingDocStatus: "draft",
type: "invoice",
id: "LL-INV-48765",
versionInfo: {
version: "1.0.0",
@@ -62,6 +59,7 @@ export const demoLetter: plugins.tsclass.finance.TInvoice = {
language: "de",
date: Date.now(),
incidenceId: "LL-INV-48765",
invoiceId: "LL-INV-48765",
subject: "LL-INV-48765",
reverseCharge: true,
dueInDays: 30,
@@ -76,6 +74,7 @@ export const demoLetter: plugins.tsclass.finance.TInvoice = {
printResult: null,
currency: "EUR",
notes: [],
invoiceType: "debitnote",
items: [
{
name: "Item with 19% VAT",

View File

@@ -148,10 +148,82 @@ export const DE_translations: Dictionary = {
vat: "Umsatzsteuer",
};
// Define Spanish translations
// export const ES_translations: TTranslationImplementation = {
// address: "Dirección",
// bankConnection: "Conexión bancaria",
// contactInfo: "Información de contacto",
// description: "Descripción",
// invoice: "Factura",
// itemPos: "Pos.",
// quantity: "Cantidad",
// registrationInfo: "Información de registro",
// reverseVatNote:
// "El IVA se aplica por inversión del sujeto pasivo y debe ser pagado por el cliente.",
// totalNetPrice: "Precio total neto",
// unitNetPrice: "Precio unitario neto",
// unitType: "Tipo de unidad",
// yourCustomerId: "Su número de cliente:",
// yourVatId: "Su ID de IVA:",
// continuesOnPage: "Continúa en la página",
// finalPageStatement: "Esta es la última página de este documento.",
// page: "Página",
// vatShort: "IVA",
// };
// Define French translations
// export const FR_translations: TTranslationImplementation = {
// address: "Adresse",
// bankConnection: "Coordonnées bancaires",
// contactInfo: "Informations de contact",
// description: "Description",
// 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.",
// totalNetPrice: "Prix net total",
// unitNetPrice: "Prix unitaire net",
// unitType: "Type d'unité",
// yourCustomerId: "Votre numéro de client :",
// yourVatId: "Votre numéro de TVA :",
// continuesOnPage: "Continue sur la page",
// finalPageStatement: "Ceci est la dernière page de ce document.",
// page: "Page",
// vatShort: "TVA",
// };
// Define Italian translations
// export const IT_translations: TTranslationImplementation = {
// address: "Indirizzo",
// bankConnection: "Coordinate bancarie",
// contactInfo: "Informazioni di contatto",
// description: "Descrizione",
// invoice: "Fattura",
// itemPos: "Pos.",
// quantity: "Quantità",
// registrationInfo: "Informazioni di registrazione",
// reverseVatNote:
// "L'IVA è applicata con inversione contabile ed è a carico del cliente.",
// totalNetPrice: "Prezzo netto totale",
// unitNetPrice: "Prezzo netto unitario",
// unitType: "Tipo di unità",
// yourCustomerId: "Il tuo numero cliente:",
// yourVatId: "Il tuo numero di partita IVA:",
// continuesOnPage: "Continua alla pagina",
// finalPageStatement: "Questa è l'ultima pagina di questo documento.",
// page: "Pagina",
// vatShort: "IVA",
// };
// Language Code Map
export const languageCodeMap: Record<string, Dictionary> = {
EN: EN_translations,
DE: DE_translations,
// ES: ES_translations,
// FR: FR_translations,
// IT: IT_translations,
};
// Language Code Type

View File

@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@design.estate/dees-document',
version: '1.6.11',
version: '1.6.10',
description: 'A sophisticated framework for dynamically generating and rendering business documents like invoices with modern web technologies, featuring PDF creation, templating, and automation.'
}

View File

@@ -26,6 +26,7 @@ import { DeContentInvoice } from "./contentinvoice.js";
import { demoFunc } from "./document.demo.js";
import { dedocumentSharedStyle } from "../style.js";
import type { TInvoice } from "@tsclass/tsclass/dist_ts/finance/invoice.js";
declare global {
interface HTMLElementTagNameMap {
@@ -158,8 +159,7 @@ export class DeDocument extends DeesElement {
// lets append the content
const content: DeContentInvoice = new DeContentInvoice();
cleanUpStoreCurrentRender.push(content);
content.letterData = this
.letterData as unknown as plugins.tsclass.finance.TInvoice;
content.letterData = this.letterData as unknown as TInvoice;
content.documentSettings = this.documentSettings;
document.body.appendChild(content);

View File

@@ -101,7 +101,7 @@ export class DeLetterHeader extends DeesElement {
];
private renderDeliveryDate(from: Date, to: Date): TemplateResult {
if (this.letterData.accountingDocType !== "invoice") return null;
if (this.letterData.type !== "invoice") return null;
const dateFormat = new Intl.DateTimeFormat(
this.documentSettings.languageCode,
{ dateStyle: this.documentSettings.dateStyle }
@@ -174,7 +174,7 @@ export class DeLetterHeader extends DeesElement {
${this.letterData.to.registrationDetails.vatId || "not provided"}
<!-- TODO: Make use of components -->
${this.letterData.accountingDocType === "invoice"
${this.letterData.type === "invoice"
? html` <div class="label">
${plugins.shared.translation.translate(
this.documentSettings.languageCode,