@hartl-services/medusa-base 1.0.0 → 2.0.0
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/.medusa/server/src/admin/index.js +117 -1
- package/.medusa/server/src/admin/index.mjs +118 -2
- package/.medusa/server/src/documents/plugin-features.js +15 -1
- package/.medusa/server/src/documents/templates/financial-document.js +69 -51
- package/.medusa/server/src/documents/templates/format.js +44 -2
- package/.medusa/server/src/documents/templates/html-factory.js +7 -5
- package/.medusa/server/src/documents/templates/html-utils.js +12 -2
- package/.medusa/server/src/documents/templates/layout.js +115 -70
- package/.medusa/server/src/documents/templates/packing-list.js +10 -8
- package/.medusa/server/src/documents/utils/document-merchant.js +5 -5
- package/.medusa/server/src/documents/utils/document-render-settings.js +59 -0
- package/.medusa/server/src/email/application/handle-invite-event.js +8 -2
- package/.medusa/server/src/email/application/handle-password-reset-event.js +16 -4
- package/.medusa/server/src/email/domain/order-summary.js +103 -0
- package/.medusa/server/src/email/domain/refund-summary.js +43 -0
- package/.medusa/server/src/email/domain/return-summary.js +118 -0
- package/.medusa/server/src/email/domain/shipment-summary.js +74 -0
- package/.medusa/server/src/email/plugin-features.js +9 -1
- package/.medusa/server/src/email/rendering/default-templates.js +693 -65
- package/.medusa/server/src/email/rendering/load-email-shop-details.js +36 -0
- package/.medusa/server/src/email/rendering/render-email.js +16 -3
- package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +20 -1
- package/.medusa/server/src/email/types/template-data.js +155 -2
- package/.medusa/server/src/modules/documents/domain/merchant.js +2 -33
- package/.medusa/server/src/modules/documents/domain/options.js +1 -7
- package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +4 -3
- package/.medusa/server/src/public/descriptor.js +3 -1
- package/.medusa/server/src/public/shop-master-data.js +7 -7
- package/.medusa/server/src/shop-config/build-food-shop-config.js +6 -6
- package/.medusa/server/src/shop-config/options.js +5 -15
- package/.medusa/server/src/workflows/documents/issue-cancellation-after-refund.js +2 -3
- package/.medusa/server/src/workflows/documents/issue-document.js +6 -5
- package/.medusa/server/src/workflows/documents/issue-packing-list.js +9 -3
- package/.medusa/server/src/workflows/email/dispatch-email-message.js +4 -2
- package/.medusa/server/src/workflows/email/prepare-order-canceled-email.js +42 -4
- package/.medusa/server/src/workflows/email/prepare-order-received-email.js +31 -5
- package/.medusa/server/src/workflows/email/prepare-refund-email.js +25 -1
- package/.medusa/server/src/workflows/email/prepare-return-email.js +64 -3
- package/.medusa/server/src/workflows/email/prepare-shipment-email.js +36 -3
- package/README.md +180 -43
- package/dist/admin-components/features/plugin-features/components/ImageSettingInput.d.ts +15 -0
- package/dist/admin-components/features/plugin-features/components/ImageSettingInput.js +42 -0
- package/dist/admin-components/features/plugin-features/components/PluginSettingsForm.js +4 -2
- package/dist/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.d.ts +1 -1
- package/dist/admin-components/features/plugin-features/hooks/usePluginFeatures.d.ts +4 -4
- package/dist/admin-components/features/plugin-features/hooks/usePluginSettingsForm.d.ts +1 -1
- package/dist/admin-components/features/plugin-features/lib/image-upload.d.ts +6 -0
- package/dist/admin-components/features/plugin-features/lib/image-upload.js +17 -0
- package/dist/admin-components/features/plugin-features/lib/plugin-features-admin-client.d.ts +4 -4
- package/dist/admin-components/i18n/texts.d.ts +6 -0
- package/dist/admin-components/i18n/texts.js +6 -0
- package/dist/documents/templates/financial-document.d.ts +3 -3
- package/dist/documents/templates/financial-document.js +68 -50
- package/dist/documents/templates/format.d.ts +14 -0
- package/dist/documents/templates/format.js +43 -1
- package/dist/documents/templates/html-factory.d.ts +6 -2
- package/dist/documents/templates/html-factory.js +6 -4
- package/dist/documents/templates/html-utils.d.ts +6 -0
- package/dist/documents/templates/html-utils.js +11 -1
- package/dist/documents/templates/layout.d.ts +21 -3
- package/dist/documents/templates/layout.js +114 -69
- package/dist/documents/templates/packing-list.js +9 -7
- package/dist/documents/types/documents.d.ts +11 -16
- package/dist/documents/types/html-factory.d.ts +1 -0
- package/dist/email/types/shop-configuration.d.ts +25 -0
- package/dist/email/types/template-data.d.ts +509 -0
- package/dist/email/types/template-data.js +154 -1
- package/dist/modules/documents/domain/options.d.ts +1 -9
- package/dist/modules/documents/domain/options.js +0 -6
- package/dist/public/descriptor.js +2 -0
- package/dist/public/shop-master-data.d.ts +5 -6
- package/dist/public/shop-master-data.js +6 -6
- package/dist/public/types.d.ts +2 -1
- package/dist/shop-config/build-food-shop-config.js +5 -5
- package/dist/shop-config/options.d.ts +13 -8
- package/dist/shop-config/options.js +4 -14
- package/package.json +2 -2
- package/dist/modules/documents/domain/merchant.d.ts +0 -22
- package/dist/modules/documents/domain/merchant.js +0 -85
|
@@ -10,9 +10,11 @@ const packing_list_1 = require("./packing-list");
|
|
|
10
10
|
* sender comes with every render input (`input.merchant`, the base plugin's
|
|
11
11
|
* shop master data). `timeZone` is the IANA time zone in which printed dates
|
|
12
12
|
* are shown; the plugin passes its resolved `numbering.timeZone` so the date
|
|
13
|
-
* on a document matches the period its number was allocated in.
|
|
13
|
+
* on a document matches the period its number was allocated in. `theme`
|
|
14
|
+
* adds a project's CSS and page background (watermark) on top of the default
|
|
15
|
+
* look; the logo comes from the Documents settings (`input.settings`).
|
|
14
16
|
*/
|
|
15
|
-
const createDefaultDocumentHtmlFactory = ({ timeZone, }) => {
|
|
17
|
+
const createDefaultDocumentHtmlFactory = ({ timeZone, theme, }) => {
|
|
16
18
|
return (input) => {
|
|
17
19
|
const kind = input.document.kind;
|
|
18
20
|
switch (kind) {
|
|
@@ -20,12 +22,12 @@ const createDefaultDocumentHtmlFactory = ({ timeZone, }) => {
|
|
|
20
22
|
case "cancellation":
|
|
21
23
|
case "credit_note":
|
|
22
24
|
if ("totals" in input) {
|
|
23
|
-
return (0, financial_document_1.renderFinancialDocument)(input, (0, layout_1.createDocumentLayout)(input.merchant, true), timeZone);
|
|
25
|
+
return (0, financial_document_1.renderFinancialDocument)(input, (0, layout_1.createDocumentLayout)(input.merchant, input.settings, true, theme), timeZone);
|
|
24
26
|
}
|
|
25
27
|
break;
|
|
26
28
|
case "packing_list":
|
|
27
29
|
if ("fulfillment" in input) {
|
|
28
|
-
return (0, packing_list_1.renderPackingList)(input, (0, layout_1.createDocumentLayout)(input.merchant, false), timeZone);
|
|
30
|
+
return (0, packing_list_1.renderPackingList)(input, (0, layout_1.createDocumentLayout)(input.merchant, input.settings, false, theme), timeZone);
|
|
29
31
|
}
|
|
30
32
|
break;
|
|
31
33
|
default: {
|
|
@@ -37,4 +39,4 @@ const createDefaultDocumentHtmlFactory = ({ timeZone, }) => {
|
|
|
37
39
|
};
|
|
38
40
|
};
|
|
39
41
|
exports.createDefaultDocumentHtmlFactory = createDefaultDocumentHtmlFactory;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvaHRtbC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxxSUFBcUk7OztBQUlySSxxQ0FBbUU7QUFDbkUsNkRBQThEO0FBQzlELGlEQUFrRDtBQUVsRDs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxFQUMvQyxRQUFRLEVBQ1IsS0FBSyxHQUlOLEVBQXVCLEVBQUU7SUFDeEIsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUE7UUFFaEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxjQUFjLENBQUM7WUFDcEIsS0FBSyxhQUFhO2dCQUNoQixJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDdEIsT0FBTyxJQUFBLDRDQUF1QixFQUM1QixLQUFLLEVBQ0wsSUFBQSw2QkFBb0IsRUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUNqRSxRQUFRLENBQ1QsQ0FBQTtnQkFDSCxDQUFDO2dCQUNELE1BQUs7WUFDUCxLQUFLLGNBQWM7Z0JBQ2pCLElBQUksYUFBYSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUMzQixPQUFPLElBQUEsZ0NBQWlCLEVBQ3RCLEtBQUssRUFDTCxJQUFBLDZCQUFvQixFQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQ2xFLFFBQVEsQ0FDVCxDQUFBO2dCQUNILENBQUM7Z0JBQ0QsTUFBSztZQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsTUFBTSxlQUFlLEdBQVUsSUFBSSxDQUFBO2dCQUNuQyxNQUFNLElBQUksU0FBUyxDQUFDLDhCQUE4QixlQUFlLEVBQUUsQ0FBQyxDQUFBO1lBQ3RFLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvQ0FBb0MsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNqRSxDQUFDLENBQUE7QUFDSCxDQUFDLENBQUE7QUF2Q1ksUUFBQSxnQ0FBZ0Msb0NBdUM1QyJ9
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.formatOrderReference = exports.escapeHtml = void 0;
|
|
3
|
+
exports.renderMoney = exports.formatOrderReference = exports.escapeHtml = void 0;
|
|
4
|
+
const format_1 = require("./format");
|
|
4
5
|
const escapeHtml = (value) => String(value ?? "")
|
|
5
6
|
.replaceAll("&", "&")
|
|
6
7
|
.replaceAll("<", "<")
|
|
@@ -10,4 +11,13 @@ const escapeHtml = (value) => String(value ?? "")
|
|
|
10
11
|
exports.escapeHtml = escapeHtml;
|
|
11
12
|
const formatOrderReference = (displayId) => displayId === null ? "-" : `#${displayId}`;
|
|
12
13
|
exports.formatOrderReference = formatOrderReference;
|
|
13
|
-
|
|
14
|
+
/**
|
|
15
|
+
* An amount as `<span class="money">` with separate currency and amount
|
|
16
|
+
* spans; `amount` overrides the money's own amount (e.g. a negated value).
|
|
17
|
+
*/
|
|
18
|
+
const renderMoney = (money, amount = money.amount) => {
|
|
19
|
+
const parts = (0, format_1.formatMoneyParts)({ amount, currencyCode: money.currency_code });
|
|
20
|
+
return `<span class="money"><span class="currency">${(0, exports.escapeHtml)(parts.currency)}</span> <span class="amount">${(0, exports.escapeHtml)(parts.amount)}</span></span>`;
|
|
21
|
+
};
|
|
22
|
+
exports.renderMoney = renderMoney;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kb2N1bWVudHMvdGVtcGxhdGVzL2h0bWwtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscUNBQTJDO0FBRXBDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBeUMsRUFBVSxFQUFFLENBQzlFLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0tBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO0tBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0tBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0tBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO0tBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFOakIsUUFBQSxVQUFVLGNBTU87QUFFdkIsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFNBQXdCLEVBQVUsRUFBRSxDQUN2RSxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUE7QUFEL0IsUUFBQSxvQkFBb0Isd0JBQ1c7QUFFNUM7OztHQUdHO0FBQ0ksTUFBTSxXQUFXLEdBQUcsQ0FDekIsS0FBb0IsRUFDcEIsU0FBaUIsS0FBSyxDQUFDLE1BQU0sRUFDckIsRUFBRTtJQUNWLE1BQU0sS0FBSyxHQUFHLElBQUEseUJBQWdCLEVBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLE9BQU8sOENBQThDLElBQUEsa0JBQVUsRUFBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxJQUFBLGtCQUFVLEVBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQTtBQUN6SixDQUFDLENBQUE7QUFOWSxRQUFBLFdBQVcsZUFNdkIifQ==
|
|
@@ -1,97 +1,142 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createDocumentLayout = void 0;
|
|
3
|
+
exports.createDocumentLayout = exports.formatCountryName = void 0;
|
|
4
4
|
const html_utils_1 = require("./html-utils");
|
|
5
5
|
const formatCountryName = (countryCode) => new Intl.DisplayNames("de", { type: "region" }).of(countryCode.toUpperCase()) ?? countryCode.toUpperCase();
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
[merchant.postal_code, merchant.city].join(" "),
|
|
10
|
-
formatCountryName(merchant.country_code),
|
|
11
|
-
]
|
|
12
|
-
.filter((part) => Boolean(part))
|
|
6
|
+
exports.formatCountryName = formatCountryName;
|
|
7
|
+
const joinLines = (lines) => lines
|
|
8
|
+
.filter((line) => Boolean(line))
|
|
13
9
|
.map(html_utils_1.escapeHtml)
|
|
14
10
|
.join("<br />");
|
|
15
|
-
|
|
11
|
+
const renderFooterColumn = (heading, lines) => {
|
|
12
|
+
const content = joinLines(lines);
|
|
13
|
+
if (!content) {
|
|
14
|
+
return "";
|
|
15
|
+
}
|
|
16
|
+
const title = heading
|
|
17
|
+
? `<div class="footer-heading">${(0, html_utils_1.escapeHtml)(heading)}</div>`
|
|
18
|
+
: "";
|
|
19
|
+
return `<div class="footer-column">${title}${content}</div>`;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Legal footer in three columns: sender with UID and company register,
|
|
23
|
+
* contact, bank. Packing lists (`includeLegalDetails: false`) show only the
|
|
24
|
+
* sender's name and address.
|
|
25
|
+
*/
|
|
16
26
|
const renderMerchantFooter = (merchant, includeLegalDetails) => {
|
|
27
|
+
const sender = `<div class="footer-column"><strong>${(0, html_utils_1.escapeHtml)(merchant.legal_name)}</strong><br />${joinLines([
|
|
28
|
+
merchant.address_line1,
|
|
29
|
+
merchant.address_line2,
|
|
30
|
+
`${merchant.postal_code} ${merchant.city}`,
|
|
31
|
+
(0, exports.formatCountryName)(merchant.country_code),
|
|
32
|
+
...(includeLegalDetails
|
|
33
|
+
? [
|
|
34
|
+
merchant.vat_number ? `UID: ${merchant.vat_number}` : null,
|
|
35
|
+
merchant.company_register_number
|
|
36
|
+
? `Firmenbuchnummer: ${merchant.company_register_number}`
|
|
37
|
+
: null,
|
|
38
|
+
merchant.company_register_court
|
|
39
|
+
? `Firmenbuchgericht: ${merchant.company_register_court}`
|
|
40
|
+
: null,
|
|
41
|
+
]
|
|
42
|
+
: []),
|
|
43
|
+
])}</div>`;
|
|
17
44
|
if (!includeLegalDetails) {
|
|
18
|
-
return
|
|
45
|
+
return sender;
|
|
19
46
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
merchant.legal_name,
|
|
31
|
-
merchant.vat_number ? `UID: ${merchant.vat_number}` : null,
|
|
32
|
-
...register,
|
|
33
|
-
],
|
|
34
|
-
[merchant.email, merchant.phone, merchant.website],
|
|
35
|
-
[
|
|
36
|
-
merchant.iban ? `IBAN: ${merchant.iban}` : null,
|
|
47
|
+
return [
|
|
48
|
+
sender,
|
|
49
|
+
renderFooterColumn("Kontakt", [
|
|
50
|
+
merchant.phone,
|
|
51
|
+
merchant.email,
|
|
52
|
+
merchant.website,
|
|
53
|
+
]),
|
|
54
|
+
// The heading names the IBAN; only the BIC keeps its label.
|
|
55
|
+
renderFooterColumn("Bankverbindung", [
|
|
56
|
+
merchant.iban,
|
|
37
57
|
merchant.bic ? `BIC: ${merchant.bic}` : null,
|
|
38
|
-
],
|
|
39
|
-
];
|
|
40
|
-
return lines
|
|
41
|
-
.map((parts) => parts
|
|
42
|
-
.filter((part) => Boolean(part))
|
|
43
|
-
.map(html_utils_1.escapeHtml)
|
|
44
|
-
.join(" · "))
|
|
45
|
-
.filter(Boolean)
|
|
46
|
-
.join("<br />");
|
|
58
|
+
]),
|
|
59
|
+
].join("");
|
|
47
60
|
};
|
|
61
|
+
const renderLetterhead = (merchant, settings) => settings.logo_src
|
|
62
|
+
? `<img class="logo" src="${(0, html_utils_1.escapeHtml)(settings.logo_src)}" alt="${(0, html_utils_1.escapeHtml)(merchant.legal_name)}" />`
|
|
63
|
+
: `<div class="logo-text">${(0, html_utils_1.escapeHtml)(merchant.legal_name)}</div>`;
|
|
48
64
|
const renderMetadata = (metadata) => metadata
|
|
49
|
-
.map(({ label, value }) => `<
|
|
65
|
+
.map(({ label, value }) => `<tr><th scope="row">${(0, html_utils_1.escapeHtml)(label)}</th><td>${(0, html_utils_1.escapeHtml)(value)}</td></tr>`)
|
|
50
66
|
.join("");
|
|
51
67
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
68
|
+
* A4 with only a bottom page margin, which holds the page number
|
|
69
|
+
* (`@bottom-right`; `counter(pages)` works only in page margin boxes). `.page`
|
|
70
|
+
* carries the other margins and repeats them on every printed page
|
|
71
|
+
* (`box-decoration-break: clone`); the fixed footer is positioned in the page
|
|
72
|
+
* area, `--footer-height` reserves its space at the bottom of each page.
|
|
54
73
|
*/
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
.
|
|
66
|
-
.
|
|
67
|
-
.document-
|
|
68
|
-
|
|
69
|
-
|
|
74
|
+
const DEFAULT_STYLESHEET = `
|
|
75
|
+
@page { size: A4; margin: 0 0 8mm 0; @bottom-right { color: #6b7280; content: "Seite " counter(page) " von " counter(pages); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 7.5pt; padding-right: 20mm; vertical-align: top; } }
|
|
76
|
+
:root { --accent: #111827; --text: #1f2937; --muted: #6b7280; --line: #d1d5db; --table-head: #f3f4f6; --page-x: 20mm; --page-top: 18mm; --footer-height: 30mm; }
|
|
77
|
+
* { box-sizing: border-box; }
|
|
78
|
+
html, body { margin: 0; padding: 0; }
|
|
79
|
+
body { color: var(--text); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 10pt; line-height: 1.4; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
|
80
|
+
.page { -webkit-box-decoration-break: clone; box-decoration-break: clone; padding: var(--page-top) var(--page-x) calc(var(--footer-height) + 8mm); }
|
|
81
|
+
.letterhead { margin-bottom: 14mm; min-height: 16mm; }
|
|
82
|
+
.logo { display: block; height: 22mm; max-width: 90mm; object-fit: contain; object-position: left center; width: auto; }
|
|
83
|
+
.logo-text { color: var(--accent); font-size: 20pt; font-weight: 700; letter-spacing: 0.02em; }
|
|
84
|
+
.document-head { break-inside: avoid; display: flex; gap: 12mm; justify-content: space-between; margin-bottom: 14mm; page-break-inside: avoid; }
|
|
85
|
+
.recipient { flex: 1 1 0; font-style: normal; padding-top: 9mm; }
|
|
86
|
+
.document-info { flex: 0 0 78mm; }
|
|
87
|
+
h1 { color: var(--accent); font-size: 16pt; font-weight: 400; letter-spacing: 0.08em; margin: 0 0 3mm; text-transform: uppercase; }
|
|
88
|
+
h2 { break-after: avoid; font-size: 10pt; margin: 8mm 0 2mm; page-break-after: avoid; }
|
|
89
|
+
.document-metadata { border-collapse: collapse; width: 100%; }
|
|
90
|
+
.document-metadata th, .document-metadata td { border: 0; font-weight: 400; padding: 0; text-align: left; vertical-align: top; }
|
|
91
|
+
.document-metadata td { text-align: right; }
|
|
92
|
+
.muted, .sku, .batch { color: var(--muted); }
|
|
93
|
+
.batch, .packing-batch { font-size: 8pt; margin-top: 1mm; }
|
|
70
94
|
.packing-batch { display: flex; gap: 12px; justify-content: space-between; }
|
|
71
95
|
table { border-collapse: collapse; page-break-inside: auto; width: 100%; }
|
|
72
96
|
thead { display: table-header-group; }
|
|
73
97
|
tfoot { display: table-footer-group; }
|
|
74
98
|
tbody { page-break-inside: auto; }
|
|
75
99
|
tr { break-inside: avoid; page-break-inside: avoid; }
|
|
76
|
-
th { background:
|
|
77
|
-
th
|
|
100
|
+
.items th { background: var(--table-head); font-weight: 700; text-align: left; }
|
|
101
|
+
.items th.number { text-align: right; }
|
|
102
|
+
.items th, .items td { padding: 2.5mm 2mm; vertical-align: top; }
|
|
103
|
+
.items tbody.lines td { border-bottom: 1px solid var(--line); }
|
|
78
104
|
.number { text-align: right; white-space: nowrap; }
|
|
79
|
-
.
|
|
80
|
-
.totals {
|
|
81
|
-
.totals td {
|
|
82
|
-
.totals tr
|
|
83
|
-
|
|
84
|
-
|
|
105
|
+
.money { white-space: nowrap; }
|
|
106
|
+
.items tbody.totals td { padding-bottom: 1.5mm; padding-top: 1.5mm; }
|
|
107
|
+
.items tbody.totals tr:first-child td { padding-top: 3mm; }
|
|
108
|
+
.items tbody.totals tr.grand-total td.label, .items tbody.totals tr.grand-total td.number { border-bottom: 1px solid var(--line); border-top: 1px solid var(--line); font-weight: 700; padding-bottom: 2mm; padding-top: 2mm; }
|
|
109
|
+
.payment-terms { margin-top: 10mm; white-space: pre-line; }
|
|
110
|
+
.recipient, .tax-compliance, .payment-terms, .items tbody.totals { break-inside: avoid; page-break-inside: avoid; }
|
|
111
|
+
.page-footer { align-items: flex-start; bottom: 4mm; color: var(--text); display: flex; font-size: 8pt; gap: 8mm; left: var(--page-x); line-height: 1.35; position: fixed; right: var(--page-x); }
|
|
112
|
+
.footer-column { flex: 1 1 0; }
|
|
113
|
+
.footer-heading { color: var(--muted); }
|
|
114
|
+
`;
|
|
115
|
+
/**
|
|
116
|
+
* `includeLegalDetails` adds UID, company register, contact and bank details
|
|
117
|
+
* to the footer (financial documents); packing lists show only the sender.
|
|
118
|
+
*/
|
|
119
|
+
const createDocumentLayout = (merchant, settings, includeLegalDetails, theme = {}) => ({ body, documentTitle, metadata, number, pageTitle, recipient }) => `<!doctype html>
|
|
120
|
+
<html lang="de">
|
|
121
|
+
<head>
|
|
122
|
+
<meta charset="utf-8" />
|
|
123
|
+
<title>${(0, html_utils_1.escapeHtml)(pageTitle)} ${(0, html_utils_1.escapeHtml)(number)}</title>
|
|
124
|
+
<style>${DEFAULT_STYLESHEET}${theme.stylesheet ?? ""}</style>
|
|
85
125
|
</head>
|
|
86
126
|
<body>
|
|
87
|
-
<
|
|
88
|
-
|
|
89
|
-
<
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
127
|
+
<footer class="page-footer">${renderMerchantFooter(merchant, includeLegalDetails)}</footer>
|
|
128
|
+
<main class="page">
|
|
129
|
+
<header class="letterhead">${renderLetterhead(merchant, settings)}</header>
|
|
130
|
+
<section class="document-head">
|
|
131
|
+
<address class="recipient">${recipient ?? ""}</address>
|
|
132
|
+
<div class="document-info">
|
|
133
|
+
<h1>${(0, html_utils_1.escapeHtml)(documentTitle)}</h1>
|
|
134
|
+
<table class="document-metadata"><tbody>${renderMetadata(metadata)}</tbody></table>
|
|
135
|
+
</div>
|
|
136
|
+
</section>
|
|
137
|
+
${body}
|
|
138
|
+
</main>
|
|
94
139
|
</body>
|
|
95
140
|
</html>`;
|
|
96
141
|
exports.createDocumentLayout = createDocumentLayout;
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvbGF5b3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDZDQUF5QztBQWlDbEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFdBQW1CLEVBQVUsRUFBRSxDQUMvRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUNoRCxXQUFXLENBQUMsV0FBVyxFQUFFLENBQzFCLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBSG5CLFFBQUEsaUJBQWlCLHFCQUdFO0FBRWhDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBaUMsRUFBVSxFQUFFLENBQzlELEtBQUs7S0FDRixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0MsR0FBRyxDQUFDLHVCQUFVLENBQUM7S0FDZixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7QUFFbkIsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixPQUFzQixFQUN0QixLQUFpQyxFQUN6QixFQUFFO0lBQ1YsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLE9BQU87UUFDbkIsQ0FBQyxDQUFDLCtCQUErQixJQUFBLHVCQUFVLEVBQUMsT0FBTyxDQUFDLFFBQVE7UUFDNUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE9BQU8sOEJBQThCLEtBQUssR0FBRyxPQUFPLFFBQVEsQ0FBQTtBQUM5RCxDQUFDLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxD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
|
|
@@ -10,15 +10,15 @@ const renderBatchAllocations = (line, timeZone) => {
|
|
|
10
10
|
return line.batch_allocations
|
|
11
11
|
.map((allocation) => `<div class="packing-batch">
|
|
12
12
|
<strong>${(0, html_utils_1.escapeHtml)(allocation.lot_number)}</strong>
|
|
13
|
-
<span>MHD: ${(0, format_1.
|
|
13
|
+
<span>MHD: ${(0, html_utils_1.escapeHtml)((0, format_1.formatDocumentDate)(allocation.expiry_date, timeZone))}</span>
|
|
14
14
|
<span>Menge: ${(0, html_utils_1.escapeHtml)(allocation.quantity)}</span>
|
|
15
15
|
</div>`)
|
|
16
16
|
.join("");
|
|
17
17
|
};
|
|
18
18
|
const renderLines = (input, timeZone) => input.lines
|
|
19
19
|
.map((line) => `<tr>
|
|
20
|
-
<td>
|
|
21
|
-
<
|
|
20
|
+
<td class="item">
|
|
21
|
+
<div class="item-title">${(0, html_utils_1.escapeHtml)(line.title)}</div>
|
|
22
22
|
${line.sku ? `<div class="sku">SKU: ${(0, html_utils_1.escapeHtml)(line.sku)}</div>` : ""}
|
|
23
23
|
</td>
|
|
24
24
|
<td>${renderBatchAllocations(line, timeZone)}</td>
|
|
@@ -26,12 +26,13 @@ const renderLines = (input, timeZone) => input.lines
|
|
|
26
26
|
</tr>`)
|
|
27
27
|
.join("");
|
|
28
28
|
const renderPackingList = (input, layout, timeZone) => layout({
|
|
29
|
-
body: `<table>
|
|
30
|
-
<thead><tr><th>Bezeichnung</th><th>Charge</th><th class="number">Benötigte Menge</th></tr></thead>
|
|
31
|
-
<tbody>${renderLines(input, timeZone)}</tbody>
|
|
29
|
+
body: `<table class="items packing-items">
|
|
30
|
+
<thead><tr><th class="item">Bezeichnung</th><th>Charge</th><th class="number">Benötigte Menge</th></tr></thead>
|
|
31
|
+
<tbody class="lines">${renderLines(input, timeZone)}</tbody>
|
|
32
32
|
</table>`,
|
|
33
33
|
documentTitle: "Packliste",
|
|
34
34
|
metadata: [
|
|
35
|
+
{ label: "Packlistennummer", value: input.document.number },
|
|
35
36
|
{
|
|
36
37
|
label: "Bestellung",
|
|
37
38
|
value: (0, html_utils_1.formatOrderReference)(input.order.display_id),
|
|
@@ -39,12 +40,13 @@ const renderPackingList = (input, layout, timeZone) => layout({
|
|
|
39
40
|
{ label: "Fulfillment", value: input.fulfillment.id },
|
|
40
41
|
{
|
|
41
42
|
label: "Erstellungsdatum",
|
|
42
|
-
value: (0, format_1.
|
|
43
|
+
value: (0, format_1.formatDocumentDate)(input.document.generated_at, timeZone),
|
|
43
44
|
},
|
|
44
45
|
{ label: "Lagerplatz", value: input.fulfillment.location_name },
|
|
45
46
|
],
|
|
46
47
|
number: input.document.number,
|
|
47
48
|
pageTitle: "Packliste",
|
|
49
|
+
recipient: null,
|
|
48
50
|
});
|
|
49
51
|
exports.renderPackingList = renderPackingList;
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2luZy1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvcGFja2luZy1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHFDQUE2QztBQUM3Qyw2Q0FBK0Q7QUFHL0QsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixJQUErQyxFQUMvQyxRQUFnQixFQUNSLEVBQUU7SUFDVixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyw4QkFBOEIsQ0FBQTtJQUN2QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCO1NBQzFCLEdBQUcsQ0FDRixDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7a0JBQ0osSUFBQSx1QkFBVSxFQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7cUJBQzlCLElBQUEsdUJBQVUsRUFBQyxJQUFBLDJCQUFrQixFQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7dUJBQzlELElBQUEsdUJBQVUsRUFBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3pDLENBQ1I7U0FDQSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDYixDQUFDLENBQUE7QUFFRCxNQUFNLFdBQVcsR0FBRyxDQUNsQixLQUErQixFQUMvQixRQUFnQixFQUNSLEVBQUUsQ0FDVixLQUFLLENBQUMsS0FBSztLQUNSLEdBQUcsQ0FDRixDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7O29DQUVvQixJQUFBLHVCQUFVLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsSUFBQSx1QkFBVSxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFOztjQUVuRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDOzZCQUN2QixJQUFBLHVCQUFVLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMxQyxDQUNQO0tBQ0EsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBRU4sTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixLQUErQixFQUMvQixNQUFzQixFQUN0QixRQUFnQixFQUNSLEVBQUUsQ0FDVixNQUFNLENBQUM7SUFDTCxJQUFJLEVBQUU7OzZCQUVtQixXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQzthQUM1QztJQUNULGFBQWEsRUFBRSxXQUFXO0lBQzFCLFFBQVEsRUFBRTtRQUNSLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUMzRDtZQUNFLEtBQUssRUFBRSxZQUFZO1lBQ25CLEtBQUssRUFBRSxJQUFBLGlDQUFvQixFQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1NBQ3BEO1FBQ0QsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUNyRDtZQUNFLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsS0FBSyxFQUFFLElBQUEsMkJBQWtCLEVBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDO1NBQ2pFO1FBQ0QsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtLQUNoRTtJQUNELE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDN0IsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLElBQUk7Q0FDaEIsQ0FBQyxDQUFBO0FBM0JTLFFBQUEsaUJBQWlCLHFCQTJCMUIifQ==
|
|
@@ -5,13 +5,13 @@ const public_1 = require("../../public");
|
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
6
|
const merchant_1 = require("../../modules/documents/domain/merchant");
|
|
7
7
|
/**
|
|
8
|
-
* The shop's sender facts for one render
|
|
9
|
-
*
|
|
8
|
+
* The shop's sender facts for one render, from the base plugin's shop master
|
|
9
|
+
* data (stored in the Admin; there is no config fallback). Fails with
|
|
10
10
|
* `UNEXPECTED_STATE` naming the missing fields, so the document is marked
|
|
11
11
|
* failed and issued again once the data is complete. Read failures propagate.
|
|
12
12
|
*/
|
|
13
|
-
const resolveDocumentMerchant = async (container
|
|
14
|
-
const { values } = await (0, public_1.getShopMasterData)(container
|
|
13
|
+
const resolveDocumentMerchant = async (container) => {
|
|
14
|
+
const { values } = await (0, public_1.getShopMasterData)(container);
|
|
15
15
|
const resolution = (0, merchant_1.toDocumentMerchant)(values);
|
|
16
16
|
if (!resolution.merchant) {
|
|
17
17
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Shop-Stammdaten unvollständig: ${resolution.missing.join(", ")}. Bitte unter Einstellungen → Hartl Services Plugins → Shop-Stammdaten ergänzen.`);
|
|
@@ -19,4 +19,4 @@ const resolveDocumentMerchant = async (container, fallback) => {
|
|
|
19
19
|
return resolution.merchant;
|
|
20
20
|
};
|
|
21
21
|
exports.resolveDocumentMerchant = resolveDocumentMerchant;
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVyY2hhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3V0aWxzL2RvY3VtZW50LW1lcmNoYW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFnRDtBQUVoRCxxREFBdUQ7QUFFdkQsc0VBQTRFO0FBRzVFOzs7OztHQUtHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQzFDLFNBQTBCLEVBQ0MsRUFBRTtJQUM3QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLDBCQUFpQixFQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3JELE1BQU0sVUFBVSxHQUFHLElBQUEsNkJBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLGtDQUFrQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0ZBQWtGLENBQ2xKLENBQUE7SUFDSCxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFBO0FBQzVCLENBQUMsQ0FBQTtBQVpZLFFBQUEsdUJBQXVCLDJCQVluQyJ9
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveDocumentRenderSettings = void 0;
|
|
4
|
+
const public_1 = require("../../public");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const plugin_features_1 = require("../plugin-features");
|
|
7
|
+
const LOGO_TIMEOUT_MS = 10_000;
|
|
8
|
+
const LOGO_MAX_BYTES = 2 * 1024 * 1024;
|
|
9
|
+
const LOGO_TYPES = new Set(["image/png", "image/jpeg"]);
|
|
10
|
+
const logoError = (message) => new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, message);
|
|
11
|
+
/**
|
|
12
|
+
* Downloads the logo once per render and inlines it as a `data:` URL, so
|
|
13
|
+
* Chromium never waits on the network while printing. A logo that cannot be
|
|
14
|
+
* loaded is logged and left out: a missing logo must not block an invoice.
|
|
15
|
+
*/
|
|
16
|
+
const loadLogo = async (url, fetchLogo) => {
|
|
17
|
+
const response = await fetchLogo(url, {
|
|
18
|
+
signal: AbortSignal.timeout(LOGO_TIMEOUT_MS),
|
|
19
|
+
});
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
throw logoError(`HTTP ${response.status}`);
|
|
22
|
+
}
|
|
23
|
+
const type = response.headers.get("content-type")?.split(";")[0]?.trim();
|
|
24
|
+
if (!type || !LOGO_TYPES.has(type)) {
|
|
25
|
+
throw logoError(`unsupported content type '${type ?? ""}'`);
|
|
26
|
+
}
|
|
27
|
+
const bytes = Buffer.from(await response.arrayBuffer());
|
|
28
|
+
if (bytes.length === 0 || bytes.length > LOGO_MAX_BYTES) {
|
|
29
|
+
throw logoError(`unsupported size of ${bytes.length} bytes`);
|
|
30
|
+
}
|
|
31
|
+
return `data:${type};base64,${bytes.toString("base64")}`;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* The Documents settings a render needs. A settings read failure propagates
|
|
35
|
+
* (like the merchant read); a logo download failure renders without logo.
|
|
36
|
+
*/
|
|
37
|
+
const resolveDocumentRenderSettings = async (container, fetchLogo = fetch) => {
|
|
38
|
+
const { values } = await (0, public_1.getPluginSettings)(container, plugin_features_1.documentsPluginFeatures);
|
|
39
|
+
const paymentTerms = typeof values.payment_terms === "string" && values.payment_terms.trim()
|
|
40
|
+
? values.payment_terms.trim()
|
|
41
|
+
: null;
|
|
42
|
+
const logoUrl = typeof values.logo === "string" ? values.logo : null;
|
|
43
|
+
if (!logoUrl) {
|
|
44
|
+
return { logo_src: null, payment_terms: paymentTerms };
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
return {
|
|
48
|
+
logo_src: await loadLogo(logoUrl, fetchLogo),
|
|
49
|
+
payment_terms: paymentTerms,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
54
|
+
logger.warn(`Documents: logo ${logoUrl} could not be loaded, rendering without it: ${error instanceof Error ? error.message : String(error)}`);
|
|
55
|
+
return { logo_src: null, payment_terms: paymentTerms };
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
exports.resolveDocumentRenderSettings = resolveDocumentRenderSettings;
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtcmVuZGVyLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy91dGlscy9kb2N1bWVudC1yZW5kZXItc2V0dGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQWdEO0FBRWhELHFEQUFrRjtBQUVsRix3REFBNEQ7QUFHNUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFBO0FBQzlCLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFBO0FBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUE7QUFJdkQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFlLEVBQWUsRUFBRSxDQUNqRCxJQUFJLG1CQUFXLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFFOUQ7Ozs7R0FJRztBQUNILE1BQU0sUUFBUSxHQUFHLEtBQUssRUFDcEIsR0FBVyxFQUNYLFNBQW9CLEVBQ0gsRUFBRTtJQUNuQixNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDcEMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO0tBQzdDLENBQUMsQ0FBQTtJQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxTQUFTLENBQUMsUUFBUSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3hFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLENBQUMsNkJBQTZCLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDdkQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sU0FBUyxDQUFDLHVCQUF1QixLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBQ0QsT0FBTyxRQUFRLElBQUksV0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUE7QUFDMUQsQ0FBQyxDQUFBO0FBRUQ7OztHQUdHO0FBQ0ksTUFBTSw2QkFBNkIsR0FBRyxLQUFLLEVBQ2hELFNBQTBCLEVBQzFCLFlBQXVCLEtBQUssRUFDSyxFQUFFO0lBQ25DLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsMEJBQWlCLEVBQUMsU0FBUyxFQUFFLHlDQUF1QixDQUFDLENBQUE7SUFDOUUsTUFBTSxZQUFZLEdBQ2hCLE9BQU8sTUFBTSxDQUFDLGFBQWEsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7UUFDckUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO1FBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDVixNQUFNLE9BQU8sR0FBRyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDcEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFBO0lBQ3hELENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7WUFDNUMsYUFBYSxFQUFFLFlBQVk7U0FDNUIsQ0FBQTtJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQVcsQ0FBQTtRQUM1RSxNQUFNLENBQUMsSUFBSSxDQUNULG1CQUFtQixPQUFPLCtDQUN4QixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2RCxFQUFFLENBQ0gsQ0FBQTtRQUNELE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsQ0FBQTtJQUN4RCxDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBNUJZLFFBQUEsNkJBQTZCLGlDQTRCekMifQ==
|
|
@@ -6,6 +6,8 @@ const failure_classification_1 = require("../domain/failure-classification");
|
|
|
6
6
|
const business_keys_1 = require("../domain/business-keys");
|
|
7
7
|
const event_schemas_1 = require("../domain/event-schemas");
|
|
8
8
|
const email_1 = require("../../modules/email");
|
|
9
|
+
const load_email_shop_details_1 = require("../rendering/load-email-shop-details");
|
|
10
|
+
const order_summary_1 = require("../domain/order-summary");
|
|
9
11
|
const render_email_1 = require("../rendering/render-email");
|
|
10
12
|
const dispatch_email_message_1 = require("../../workflows/email/dispatch-email-message");
|
|
11
13
|
exports.INVITE_MAX_ATTEMPTS = 2;
|
|
@@ -116,6 +118,8 @@ const deliverInvite = async (container, email, claim, inviteId, expectedToken, e
|
|
|
116
118
|
if (!current || current.accepted || current.token !== expectedToken) {
|
|
117
119
|
return await failClaim(email, claim, "invite_superseded", getNow());
|
|
118
120
|
}
|
|
121
|
+
const shop = await (0, load_email_shop_details_1.loadEmailShopDetails)(container);
|
|
122
|
+
const expiresAtIso = (0, order_summary_1.toIsoDateTime)(current.expires_at);
|
|
119
123
|
let rendered;
|
|
120
124
|
try {
|
|
121
125
|
const configuration = email.getDispatchConfiguration();
|
|
@@ -123,8 +127,10 @@ const deliverInvite = async (container, email, claim, inviteId, expectedToken, e
|
|
|
123
127
|
kind: "user.invite",
|
|
124
128
|
data: {
|
|
125
129
|
invite_url: configuration.inviteUrl({ token: expectedToken }),
|
|
130
|
+
// An unreadable expiry only drops the validity sentence.
|
|
131
|
+
...(expiresAtIso ? { expires_at: expiresAtIso } : {}),
|
|
126
132
|
},
|
|
127
|
-
});
|
|
133
|
+
}, shop);
|
|
128
134
|
}
|
|
129
135
|
catch {
|
|
130
136
|
return await failClaim(email, claim, "render_failed", getNow());
|
|
@@ -309,4 +315,4 @@ const handleInviteEvent = async (container, payload, clock = () => new Date()) =
|
|
|
309
315
|
}
|
|
310
316
|
};
|
|
311
317
|
exports.handleInviteEvent = handleInviteEvent;
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWludml0ZS1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC9hcHBsaWNhdGlvbi9oYW5kbGUtaW52aXRlLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLHFEQUFvRDtBQUVwRCw2RUFHMEM7QUFDMUMsMkRBQWdFO0FBQ2hFLDJEQUdpQztBQUNqQywrQ0FBbUQ7QUFNbkQsNERBQXdEO0FBQ3hELHlGQUF1RjtBQUUxRSxRQUFBLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUN4QixRQUFBLHFCQUFxQixHQUFHLG9CQUFvQixDQUFDO0FBc0IxRCxNQUFNLEtBQUssR0FBRyxHQUFVLEVBQUU7SUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBcUIsQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsT0FBMkIsRUFDM0IsSUFBYSxFQUNDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6QixVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUU7SUFDdEIsTUFBTSxFQUNKLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTTtRQUN2QixDQUFDLENBQUMsTUFBTTtRQUNSLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFDNUIsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxZQUFZO2dCQUM5RCxDQUFDLENBQUMsUUFBUTtnQkFDVixDQUFDLENBQUMsYUFBYTtDQUN4QixDQUFDLENBQUM7QUFFSCxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBYyxFQUE2QixFQUFFO0lBQ3pFLElBQUksQ0FBQyxLQUFLLElB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
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWludml0ZS1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC9hcHBsaWNhdGlvbi9oYW5kbGUtaW52aXRlLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLHFEQUFvRDtBQUVwRCw2RUFHMEM7QUFDMUMsMkRBQWdFO0FBQ2hFLDJEQUdpQztBQUNqQywrQ0FBbUQ7QUFNbkQsa0ZBQTRFO0FBQzVFLDJEQUF3RDtBQUN4RCw0REFBd0Q7QUFDeEQseUZBQXVGO0FBRTFFLFFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7QUFzQjFELE1BQU0sS0FBSyxHQUFHLEdBQVUsRUFBRTtJQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUFxQixDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUN2QixPQUEyQixFQUMzQixJQUFhLEVBQ0MsRUFBRSxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pCLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRTtJQUN0QixNQUFNLEVBQ0osT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNO1FBQ3ZCLENBQUMsQ0FBQyxNQUFNO1FBQ1IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUztZQUM1QixDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFlBQVk7Z0JBQzlELENBQUMsQ0FBQyxRQUFRO2dCQUNWLENBQUMsQ0FBQyxhQUFhO0NBQ3hCLENBQUMsQ0FBQztBQUVILE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFjLEVBQTZCLEVB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
|