Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
1106b9648d | |||
1f06a73422 | |||
7d5508e4d8 | |||
67ae3ac22b | |||
389db4f014 | |||
60fd21c6d3 |
17
changelog.md
17
changelog.md
@ -1,5 +1,22 @@
|
|||||||
# 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.
|
||||||
|
|
||||||
|
4
license
4
license
@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2022 Lossless GmbH (hello@lossless.com)
|
Copyright (c) 2022 Task Venture Capital GmbH (hello@task.vc)
|
||||||
|
|
||||||
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
|
||||||
@ -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
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
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
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@design.estate/dees-document",
|
"name": "@design.estate/dees-document",
|
||||||
"version": "1.6.8",
|
"version": "1.6.11",
|
||||||
"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",
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@design.estate/dees-document',
|
name: '@design.estate/dees-document',
|
||||||
version: '1.6.8',
|
version: '1.6.11',
|
||||||
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.'
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@design.estate/dees-document',
|
name: '@design.estate/dees-document',
|
||||||
version: '1.6.8',
|
version: '1.6.11',
|
||||||
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.'
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@ 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;
|
||||||
@ -219,14 +218,26 @@ 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;
|
||||||
@ -286,33 +297,77 @@ 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">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'itemPos', 'Item Pos.')}</div>
|
<div class="lineItem rightAlign">
|
||||||
<div class="lineItem">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'description', 'Description')}</div>
|
${plugins.shared.translation.translate(
|
||||||
<div class="lineItem rightAlign">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'quantity', 'Quantity')}</div>
|
this.documentSettings.languageCode,
|
||||||
<div class="lineItem">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'unitType', 'Unit Type')}</div>
|
'itemPos',
|
||||||
<div class="lineItem rightAlign">${plugins.shared.translation.translate(this.documentSettings.languageCode, 'unitNetPrice', 'Unit Net Price')}</div>
|
'Item Pos.'
|
||||||
<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 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(
|
return this.letterData?.content.invoiceData?.items?.map((invoiceItem) => {
|
||||||
(invoiceItem) => html`
|
const isHighlighted = false; // TODO: implement rest of highlight logic
|
||||||
<div class="grid invoiceLine needsDataHeader">
|
return html`
|
||||||
|
<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.unitQuantity * invoiceItem.unitNetPrice} ${this.letterData?.content.invoiceData.currency}
|
${invoiceItem.unitNetPrice} ${this.letterData?.content.invoiceData.currency}
|
||||||
</div>
|
</div>
|
||||||
<div class="lineItem rightAlign">
|
<div class="lineItem rightAlign">
|
||||||
${invoiceItem.vatPercentage}%
|
${invoiceItem.unitQuantity * invoiceItem.unitNetPrice}
|
||||||
|
${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">
|
||||||
@ -331,9 +386,13 @@ 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 ? html`
|
${this.documentSettings.vatGroupPositions
|
||||||
<br /><span style="font-weight: normal">(on item positions: ${itemNumbers})</span>
|
? html`
|
||||||
` : html``}
|
<br /><span style="font-weight: normal"
|
||||||
|
>(on item positions: ${itemNumbers})</span
|
||||||
|
>
|
||||||
|
`
|
||||||
|
: html``}
|
||||||
</div>
|
</div>
|
||||||
<div class="value">${vatGroupArg.vatAmountSum} EUR</div>
|
<div class="value">${vatGroupArg.vatAmountSum} EUR</div>
|
||||||
</div>
|
</div>
|
||||||
@ -348,7 +407,11 @@ 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(this.documentSettings.languageCode, 'reverseVatNote', 'VAT arises on a reverse charge basis and is payable by the customer.')}
|
${plugins.shared.translation.translate(
|
||||||
|
this.documentSettings.languageCode,
|
||||||
|
'reverseVatNote',
|
||||||
|
'VAT arises on a reverse charge basis and is payable by the customer.'
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
`
|
`
|
||||||
: ``}
|
: ``}
|
||||||
@ -368,7 +431,9 @@ 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(this.letterData?.content.contractData.contractDate).format('MMMM D, YYYY')}.
|
${plugins.smarttime.ExtendedDate.fromMillis(
|
||||||
|
this.letterData?.content.contractData.contractDate
|
||||||
|
).format('MMMM D, YYYY')}.
|
||||||
</div>
|
</div>
|
||||||
`
|
`
|
||||||
: html``}
|
: html``}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user