Compare commits

..

No commits in common. "master" and "v1.6.8" have entirely different histories.

6 changed files with 26 additions and 108 deletions

View File

@ -1,22 +1,5 @@
# Changelog # 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
## 2024-12-08 - 1.6.9 - fix(contentinvoice.ts)
Improve invoice item layout and fix alignment issues.
- Fixed missing border on last invoice item.
- Added highlighted style for invoice lines.
- Corrected alignment and display of invoice item details.
- Included VAT percentage display adjustments.
## 2024-12-07 - 1.6.8 - fix(rendering and logging) ## 2024-12-07 - 1.6.8 - fix(rendering and logging)
Removed debug logging from document rendering process. Removed debug logging from document rendering process.

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 Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -1,6 +1,6 @@
{ {
"name": "@design.estate/dees-document", "name": "@design.estate/dees-document",
"version": "1.6.11", "version": "1.6.8",
"private": false, "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.", "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", "main": "dist_ts_web/index.js",

View File

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

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

@ -18,6 +18,7 @@ import * as plugins from '../plugins.js';
import { dedocumentSharedStyle } from '../style.js'; import { dedocumentSharedStyle } from '../style.js';
declare global { declare global {
interface HTMLElementTagNameMap { interface HTMLElementTagNameMap {
'dedocument-contentinvoice': DeContentInvoice; 'dedocument-contentinvoice': DeContentInvoice;
@ -218,26 +219,14 @@ export class DeContentInvoice extends DeesElement {
border-right: 1px dashed #ccc; border-right: 1px dashed #ccc;
} }
.lineItem:last-child {
border-right: none;
}
.lineItem.rightAlign { .lineItem.rightAlign {
text-align: right; text-align: right;
} }
.invoiceLine { .invoiceLine {
background: #ffffff00;
border-bottom: 1px dotted #ccc; border-bottom: 1px dotted #ccc;
} }
.invoiceLine.highlighted {
transition: background 0.2s;
background: #ffc18f;
border: 1px solid #ff9d4d;
box-sizing: content-box;
}
.sums { .sums {
margin-top: 5px; margin-top: 5px;
font-size: 12px; font-size: 12px;
@ -297,77 +286,33 @@ export class DeContentInvoice extends DeesElement {
</style> </style>
<div>We hereby invoice products and services provided to you by Lossless GmbH:</div> <div>We hereby invoice products and services provided to you by Lossless GmbH:</div>
<div class="grid topLine dataHeader"> <div class="grid topLine dataHeader">
<div class="lineItem rightAlign"> <div class="lineItem rightAlign">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'itemPos', 'Item Pos.')}</div>
${plugins.shared.translation.translate( <div class="lineItem">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'description', 'Description')}</div>
this.documentSettings.languageCode, <div class="lineItem rightAlign">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'quantity', 'Quantity')}</div>
'itemPos', <div class="lineItem">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'unitType', 'Unit Type')}</div>
'Item Pos.' <div class="lineItem rightAlign">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'unitNetPrice', 'Unit Net Price')}</div>
)} <div class="lineItem rightAlign">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'totalNetPrice', 'Total Net Price')}</div>
</div> <div class="lineItem rightAlign">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'vatShort', 'VAT')}</div>
<div class="lineItem">
${plugins.shared.translation.translate(
this.documentSettings.languageCode,
'description',
'Description'
)}
</div>
<div class="lineItem rightAlign">
${plugins.shared.translation.translate(
this.documentSettings.languageCode,
'quantity',
'Quantity'
)}
</div>
<div class="lineItem">
${plugins.shared.translation.translate(
this.documentSettings.languageCode,
'unitType',
'Unit Type'
)}
</div>
<div class="lineItem rightAlign">
${plugins.shared.translation.translate(
this.documentSettings.languageCode,
'unitNetPrice',
'Unit Net Price'
)}
</div>
<div class="lineItem rightAlign">
${plugins.shared.translation.translate(
this.documentSettings.languageCode,
'totalNetPrice',
'Total Net Price'
)}
</div>
<div class="lineItem rightAlign">
${plugins.shared.translation.translate(
this.documentSettings.languageCode,
'vatShort',
'VAT'
)}
</div>
</div> </div>
${(() => { ${(() => {
let counter = 1; let counter = 1;
return this.letterData?.content.invoiceData?.items?.map((invoiceItem) => { return this.letterData?.content.invoiceData?.items?.map(
const isHighlighted = false; // TODO: implement rest of highlight logic (invoiceItem) => html`
return html` <div class="grid invoiceLine needsDataHeader">
<div class="grid invoiceLine needsDataHeader ${isHighlighted ? 'highlighted' : ''}">
<div class="lineItem rightAlign">${counter++}</div> <div class="lineItem rightAlign">${counter++}</div>
<div class="lineItem">${invoiceItem.name}</div> <div class="lineItem">${invoiceItem.name}</div>
<div class="lineItem rightAlign">${invoiceItem.unitQuantity}</div> <div class="lineItem rightAlign">${invoiceItem.unitQuantity}</div>
<div class="lineItem">${invoiceItem.unitType}</div> <div class="lineItem">${invoiceItem.unitType}</div>
<div class="lineItem rightAlign">${invoiceItem.unitNetPrice} ${this.letterData?.content.invoiceData.currency}</div>
<div class="lineItem rightAlign"> <div class="lineItem rightAlign">
${invoiceItem.unitNetPrice} ${this.letterData?.content.invoiceData.currency} ${invoiceItem.unitQuantity * invoiceItem.unitNetPrice} ${this.letterData?.content.invoiceData.currency}
</div> </div>
<div class="lineItem rightAlign"> <div class="lineItem rightAlign">
${invoiceItem.unitQuantity * invoiceItem.unitNetPrice} ${invoiceItem.vatPercentage}%
${this.letterData?.content.invoiceData.currency}
</div> </div>
<div class="lineItem rightAlign">${invoiceItem.vatPercentage}%</div>
</div> </div>
`; `
}); );
})()} })()}
<div class="sums"> <div class="sums">
<div class="sumline"> <div class="sumline">
@ -386,13 +331,9 @@ export class DeContentInvoice extends DeesElement {
<div class="sumline"> <div class="sumline">
<div class="label"> <div class="label">
Vat ${vatGroupArg.vatPercentage}% Vat ${vatGroupArg.vatPercentage}%
${this.documentSettings.vatGroupPositions ${this.documentSettings.vatGroupPositions ? html`
? html` <br /><span style="font-weight: normal">(on item positions: ${itemNumbers})</span>
<br /><span style="font-weight: normal" ` : html``}
>(on item positions: ${itemNumbers})</span
>
`
: html``}
</div> </div>
<div class="value">${vatGroupArg.vatAmountSum} EUR</div> <div class="value">${vatGroupArg.vatAmountSum} EUR</div>
</div> </div>
@ -407,11 +348,7 @@ export class DeContentInvoice extends DeesElement {
${this.letterData?.content.invoiceData.reverseCharge ${this.letterData?.content.invoiceData.reverseCharge
? html` ? html`
<div class="taxNote"> <div class="taxNote">
${plugins.shared.translation.translate( ${plugins.shared.translation.translate(this.documentSettings.languageCode, 'reverseVatNote', 'VAT arises on a reverse charge basis and is payable by the customer.')}
this.documentSettings.languageCode,
'reverseVatNote',
'VAT arises on a reverse charge basis and is payable by the customer.'
)}
</div> </div>
` `
: ``} : ``}
@ -431,9 +368,7 @@ export class DeContentInvoice extends DeesElement {
<div class="infoBox"> <div class="infoBox">
<div class="label">Referenced contract:</div> <div class="label">Referenced contract:</div>
This invoice is adhering to agreements made by contract between the parties on This invoice is adhering to agreements made by contract between the parties on
${plugins.smarttime.ExtendedDate.fromMillis( ${plugins.smarttime.ExtendedDate.fromMillis(this.letterData?.content.contractData.contractDate).format('MMMM D, YYYY')}.
this.letterData?.content.contractData.contractDate
).format('MMMM D, YYYY')}.
</div> </div>
` `
: html``} : html``}