@hartl-services/medusa-base 0.4.0 → 1.1.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 +1657 -111
- package/.medusa/server/src/admin/index.mjs +1647 -101
- package/.medusa/server/src/api/admin/email/messages/[id]/resends/route.js +24 -0
- package/.medusa/server/src/api/admin/email/messages/[id]/route.js +12 -0
- package/.medusa/server/src/api/admin/email/messages/route.js +12 -0
- package/.medusa/server/src/api/admin/email/terms-versions/[id]/download/route.js +16 -0
- package/.medusa/server/src/api/admin/email/terms-versions/route.js +47 -0
- package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/download/route.js +21 -0
- package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/regenerate/route.js +38 -0
- package/.medusa/server/src/api/admin/orders/[id]/documents/regenerate/route.js +32 -0
- package/.medusa/server/src/api/admin/orders/[id]/documents/route.js +36 -0
- package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/download/route.js +24 -0
- package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/retry/route.js +44 -0
- package/.medusa/server/src/api/admin/orders/[id]/packing-lists/route.js +82 -0
- package/.medusa/server/src/api/document-download-response.js +16 -0
- package/.medusa/server/src/api/document-response.js +23 -0
- package/.medusa/server/src/api/files/[asset]/route.js +24 -0
- package/.medusa/server/src/api/files/file-response.js +43 -0
- package/.medusa/server/src/api/files/gateway-options.js +31 -0
- package/.medusa/server/src/api/files/private/[token]/route.js +29 -0
- package/.medusa/server/src/api/files/upload/[token]/route.js +66 -0
- package/.medusa/server/src/api/middlewares.js +168 -1
- package/.medusa/server/src/api/packing-list-response.js +22 -0
- package/.medusa/server/src/api/route.js +27 -0
- package/.medusa/server/src/api/store/documents/[id]/download/route.js +21 -0
- package/.medusa/server/src/api/store/documents/[id]/route.js +15 -0
- package/.medusa/server/src/api/store/documents/route.js +11 -0
- package/.medusa/server/src/api/terms-download-response.js +12 -0
- package/.medusa/server/src/documents/config/index.js +18 -0
- package/.medusa/server/src/documents/paths/documents.js +6 -0
- package/.medusa/server/src/documents/paths/index.js +18 -0
- package/.medusa/server/src/documents/plugin-features.js +38 -0
- package/.medusa/server/src/documents/schemas/documents.js +18 -0
- package/.medusa/server/src/documents/schemas/index.js +18 -0
- package/.medusa/server/src/documents/scripts/verify-documents-file-storage.js +55 -0
- package/.medusa/server/src/documents/templates/financial-document.js +160 -0
- package/.medusa/server/src/documents/templates/format.js +73 -0
- package/.medusa/server/src/documents/templates/html-factory.js +42 -0
- package/.medusa/server/src/documents/templates/html-utils.js +23 -0
- package/.medusa/server/src/documents/templates/layout.js +142 -0
- package/.medusa/server/src/documents/templates/packing-list.js +52 -0
- package/.medusa/server/src/documents/types/admin-api.js +3 -0
- package/.medusa/server/src/documents/types/document-summary.js +3 -0
- package/.medusa/server/src/documents/types/documents.js +3 -0
- package/.medusa/server/src/documents/types/html-factory.js +6 -0
- package/.medusa/server/src/documents/types/index.js +22 -0
- package/.medusa/server/src/documents/types/store-api.js +3 -0
- package/.medusa/server/src/documents/utils/document-merchant.js +22 -0
- package/.medusa/server/src/documents/utils/document-render-settings.js +59 -0
- package/.medusa/server/src/documents/utils/html-to-pdf.js +61 -0
- package/.medusa/server/src/documents/utils/private-file-storage.js +64 -0
- package/.medusa/server/src/documents/utils/resolve-services.js +7 -0
- package/.medusa/server/src/email/application/handle-invite-event.js +318 -0
- package/.medusa/server/src/email/application/handle-password-reset-event.js +366 -0
- package/.medusa/server/src/email/config/index.js +84 -0
- package/.medusa/server/src/email/config/notification-module.js +20 -0
- package/.medusa/server/src/email/domain/business-keys.js +50 -0
- package/.medusa/server/src/email/domain/documents-fact-fingerprint.js +7 -0
- package/.medusa/server/src/email/domain/event-schemas.js +36 -0
- package/.medusa/server/src/email/domain/failure-classification.js +53 -0
- 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 +39 -0
- package/.medusa/server/src/email/rendering/default-templates.js +719 -0
- package/.medusa/server/src/email/rendering/load-email-shop-details.js +36 -0
- package/.medusa/server/src/email/rendering/render-email.js +50 -0
- package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +67 -0
- package/.medusa/server/src/email/types/email-kinds.js +18 -0
- package/.medusa/server/src/email/types/index.js +21 -0
- package/.medusa/server/src/email/types/shop-configuration.js +3 -0
- package/.medusa/server/src/email/types/smtp-configuration.js +3 -0
- package/.medusa/server/src/email/types/template-data.js +232 -0
- package/.medusa/server/src/files/config/index.js +256 -0
- package/.medusa/server/src/files/gateway/index.js +115 -0
- package/.medusa/server/src/files/types/index.js +6 -0
- package/.medusa/server/src/files/types/public.js +6 -0
- package/.medusa/server/src/jobs/document-fact-publication-reconciliation.js +18 -0
- package/.medusa/server/src/jobs/document-resolution-reconciliation.js +20 -0
- package/.medusa/server/src/jobs/packing-list-reconciliation.js +49 -0
- package/.medusa/server/src/jobs/reconcile-email-attempts.js +63 -0
- package/.medusa/server/src/jobs/reconcile-pending-email-messages.js +41 -0
- package/.medusa/server/src/jobs/retry-email-messages.js +27 -0
- package/.medusa/server/src/migration-scripts/dismiss-orphaned-cart-promotion-links.js +26 -0
- package/.medusa/server/src/modules/documents/domain/cancellation-snapshot.js +97 -0
- package/.medusa/server/src/modules/documents/domain/document-number.js +36 -0
- package/.medusa/server/src/modules/documents/domain/document-resolution.js +24 -0
- package/.medusa/server/src/modules/documents/domain/issuance-rules.js +37 -0
- package/.medusa/server/src/modules/documents/domain/merchant.js +86 -0
- package/.medusa/server/src/modules/documents/domain/options.js +40 -0
- package/.medusa/server/src/modules/documents/domain/packing-list.js +90 -0
- package/.medusa/server/src/modules/documents/domain/snapshot-normalization.js +17 -0
- package/.medusa/server/src/modules/documents/domain/tax-breakdown.js +66 -0
- package/.medusa/server/src/modules/documents/index.js +15 -0
- package/.medusa/server/src/modules/documents/loaders/assert-private-file-storage.js +20 -0
- package/.medusa/server/src/modules/documents/migrations/Migration20260827061749.js +75 -0
- package/.medusa/server/src/modules/documents/migrations/Migration20260830111207.js +28 -0
- package/.medusa/server/src/modules/documents/models/document-artifact.js +25 -0
- package/.medusa/server/src/modules/documents/models/document-number-sequence.js +29 -0
- package/.medusa/server/src/modules/documents/models/document.js +82 -0
- package/.medusa/server/src/modules/documents/models/order-cancellation-resolution.js +51 -0
- package/.medusa/server/src/modules/documents/models/packing-list-revision.js +36 -0
- package/.medusa/server/src/modules/documents/models/packing-list.js +27 -0
- package/.medusa/server/src/modules/documents/models/refund-document-resolution.js +66 -0
- package/.medusa/server/src/modules/documents/models/shipment-invoice-assignment.js +51 -0
- package/.medusa/server/src/modules/documents/models/shipment-invoice-coordinator.js +44 -0
- package/.medusa/server/src/modules/documents/service.js +1701 -0
- package/.medusa/server/src/modules/email/domain/attachment.js +25 -0
- package/.medusa/server/src/modules/email/domain/message-state.js +69 -0
- package/.medusa/server/src/modules/email/index.js +13 -0
- package/.medusa/server/src/modules/email/migrations/Migration20260826173422.js +32 -0
- package/.medusa/server/src/modules/email/migrations/Migration20260827172945.js +16 -0
- package/.medusa/server/src/modules/email/migrations/Migration20260827194804.js +22 -0
- package/.medusa/server/src/modules/email/migrations/Migration20260906195205.js +16 -0
- package/.medusa/server/src/modules/email/models/email-attempt.js +56 -0
- package/.medusa/server/src/modules/email/models/email-message.js +71 -0
- package/.medusa/server/src/modules/email/models/email-terms-version.js +37 -0
- package/.medusa/server/src/modules/email/service.js +1285 -0
- package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +4 -3
- package/.medusa/server/src/providers/s3-cache/cache/atomic-write.js +25 -0
- package/.medusa/server/src/providers/s3-cache/cache/cache-manager.js +115 -0
- package/.medusa/server/src/providers/s3-cache/cache/keyed-lock.js +28 -0
- package/.medusa/server/src/providers/s3-cache/index.js +8 -0
- package/.medusa/server/src/providers/s3-cache/object-key.js +53 -0
- package/.medusa/server/src/providers/s3-cache/s3-cache-file.js +229 -0
- package/.medusa/server/src/providers/s3-cache/s3-object-store.js +86 -0
- package/.medusa/server/src/providers/smtp/index.js +8 -0
- package/.medusa/server/src/providers/smtp/service.js +236 -0
- package/.medusa/server/src/providers/smtp/types.js +11 -0
- package/.medusa/server/src/public/config.js +186 -0
- package/.medusa/server/src/public/descriptor.js +3 -1
- package/.medusa/server/src/public/gateway.js +19 -0
- package/.medusa/server/src/public/instrumentation.js +56 -0
- package/.medusa/server/src/public/shop-config.js +12 -0
- package/.medusa/server/src/public/shop-master-data.js +2 -2
- package/.medusa/server/src/public/shop-types.js +24 -0
- package/.medusa/server/src/shop-config/build-food-shop-config.js +252 -0
- package/.medusa/server/src/shop-config/options.js +75 -0
- package/.medusa/server/src/subscribers/affiliate-consignment-reminder-due.js +26 -0
- package/.medusa/server/src/subscribers/documents-order-canceled.js +24 -0
- package/.medusa/server/src/subscribers/documents-order-cancellation-ready.js +26 -0
- package/.medusa/server/src/subscribers/documents-refund-ready.js +24 -0
- package/.medusa/server/src/subscribers/documents-shipment-created.js +36 -0
- package/.medusa/server/src/subscribers/documents-shipment-invoice-assignment-decided.js +26 -0
- package/.medusa/server/src/subscribers/email-order-canceled.js +28 -0
- package/.medusa/server/src/subscribers/email-shipment-created.js +32 -0
- package/.medusa/server/src/subscribers/order-placed.js +27 -0
- package/.medusa/server/src/subscribers/packing-list-allocation-revised.js +32 -0
- package/.medusa/server/src/subscribers/packing-list-fulfillment-canceled.js +54 -0
- package/.medusa/server/src/subscribers/packing-list-fulfillment-created.js +31 -0
- package/.medusa/server/src/subscribers/password-reset.js +23 -0
- package/.medusa/server/src/subscribers/payment-refunded.js +38 -0
- package/.medusa/server/src/subscribers/return-received.js +27 -0
- package/.medusa/server/src/subscribers/return-requested.js +27 -0
- package/.medusa/server/src/subscribers/user-invite.js +23 -0
- package/.medusa/server/src/utils/cart-promotion-links.js +101 -0
- package/.medusa/server/src/workflows/documents/issue-cancellation-after-refund.js +246 -0
- package/.medusa/server/src/workflows/documents/issue-document.js +165 -0
- package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +521 -0
- package/.medusa/server/src/workflows/documents/issue-packing-list.js +390 -0
- package/.medusa/server/src/workflows/documents/publish-document-facts.js +53 -0
- package/.medusa/server/src/workflows/documents/reconcile-document-resolutions.js +48 -0
- package/.medusa/server/src/workflows/documents/reconcile-order-cancellation.js +92 -0
- package/.medusa/server/src/workflows/documents/regenerate-issued-document.js +61 -0
- package/.medusa/server/src/workflows/email/dispatch-email-message.js +301 -0
- package/.medusa/server/src/workflows/email/documents-required-facts.js +30 -0
- package/.medusa/server/src/workflows/email/prepare-affiliate-reminder-email.js +58 -0
- package/.medusa/server/src/workflows/email/prepare-order-canceled-email.js +102 -0
- package/.medusa/server/src/workflows/email/prepare-order-received-email.js +82 -0
- package/.medusa/server/src/workflows/email/prepare-refund-email.js +71 -0
- package/.medusa/server/src/workflows/email/prepare-return-email.js +136 -0
- package/.medusa/server/src/workflows/email/prepare-shipment-email.js +115 -0
- package/.medusa/server/src/workflows/email/retry-email-messages.js +31 -0
- package/.medusa/server/src/workflows/hooks/dismiss-deleted-promotion-cart-links.js +23 -0
- package/README.md +1777 -8
- 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/config/index.d.ts +11 -0
- package/dist/documents/config/index.js +17 -0
- package/dist/documents/templates/financial-document.d.ts +3 -0
- package/dist/documents/templates/financial-document.js +159 -0
- package/dist/documents/templates/format.d.ts +30 -0
- package/dist/documents/templates/format.js +72 -0
- package/dist/documents/templates/html-factory.d.ts +15 -0
- package/dist/documents/templates/html-factory.js +41 -0
- package/dist/documents/templates/html-utils.d.ts +8 -0
- package/dist/documents/templates/html-utils.js +22 -0
- package/dist/documents/templates/layout.d.ts +35 -0
- package/dist/documents/templates/layout.js +141 -0
- package/dist/documents/templates/packing-list.d.ts +3 -0
- package/dist/documents/templates/packing-list.js +51 -0
- package/dist/documents/types/admin-api.d.ts +1 -0
- package/dist/documents/types/admin-api.js +2 -0
- package/dist/documents/types/document-summary.d.ts +1 -0
- package/dist/documents/types/document-summary.js +2 -0
- package/dist/documents/types/documents.d.ts +191 -0
- package/dist/documents/types/documents.js +2 -0
- package/dist/documents/types/html-factory.d.ts +8 -0
- package/dist/documents/types/html-factory.js +5 -0
- package/dist/documents/types/index.d.ts +5 -0
- package/dist/documents/types/index.js +21 -0
- package/dist/documents/types/store-api.d.ts +1 -0
- package/dist/documents/types/store-api.js +2 -0
- package/dist/email/config/index.d.ts +17 -0
- package/dist/email/config/index.js +83 -0
- package/dist/email/config/notification-module.d.ts +22 -0
- package/dist/email/config/notification-module.js +19 -0
- package/dist/email/types/email-kinds.d.ts +15 -0
- package/dist/email/types/email-kinds.js +17 -0
- package/dist/email/types/index.d.ts +4 -0
- package/dist/email/types/index.js +20 -0
- package/dist/email/types/shop-configuration.d.ts +68 -0
- package/dist/email/types/shop-configuration.js +2 -0
- package/dist/email/types/smtp-configuration.d.ts +9 -0
- package/dist/email/types/smtp-configuration.js +2 -0
- package/dist/email/types/template-data.d.ts +609 -0
- package/dist/email/types/template-data.js +231 -0
- package/dist/files/config/index.d.ts +32 -0
- package/dist/files/config/index.js +255 -0
- package/dist/files/gateway/index.d.ts +30 -0
- package/dist/files/gateway/index.js +114 -0
- package/dist/files/types/index.d.ts +2 -0
- package/dist/files/types/index.js +5 -0
- package/dist/files/types/public.d.ts +90 -0
- package/dist/files/types/public.js +5 -0
- package/dist/modules/documents/domain/merchant.d.ts +22 -0
- package/dist/modules/documents/domain/merchant.js +85 -0
- package/dist/modules/documents/domain/options.d.ts +34 -0
- package/dist/modules/documents/domain/options.js +39 -0
- package/dist/public/config.d.ts +59 -0
- package/dist/public/config.js +185 -0
- package/dist/public/descriptor.js +2 -0
- package/dist/public/gateway.d.ts +2 -0
- package/dist/public/gateway.js +18 -0
- package/dist/public/instrumentation.d.ts +12 -0
- package/dist/public/instrumentation.js +55 -0
- package/dist/public/shop-config.d.ts +8 -0
- package/dist/public/shop-config.js +11 -0
- package/dist/public/shop-master-data.d.ts +1 -1
- package/dist/public/shop-master-data.js +1 -1
- package/dist/public/shop-types.d.ts +7 -0
- package/dist/public/shop-types.js +23 -0
- package/dist/public/types.d.ts +19 -2
- package/dist/shop-config/build-food-shop-config.d.ts +44 -0
- package/dist/shop-config/build-food-shop-config.js +251 -0
- package/dist/shop-config/options.d.ts +48 -0
- package/dist/shop-config/options.js +74 -0
- package/package.json +48 -5
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderFinancialDocument = void 0;
|
|
4
|
+
const format_1 = require("./format");
|
|
5
|
+
const html_utils_1 = require("./html-utils");
|
|
6
|
+
const layout_1 = require("./layout");
|
|
7
|
+
const labelsByKind = {
|
|
8
|
+
cancellation: {
|
|
9
|
+
number: "Stornonummer",
|
|
10
|
+
title: "Stornorechnung",
|
|
11
|
+
},
|
|
12
|
+
credit_note: {
|
|
13
|
+
number: "Gutschriftnummer",
|
|
14
|
+
title: "Gutschrift",
|
|
15
|
+
},
|
|
16
|
+
invoice: {
|
|
17
|
+
number: "Rechnungsnummer",
|
|
18
|
+
title: "Rechnung",
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
const renderAddress = (input) => {
|
|
22
|
+
const address = input.order.billing_address;
|
|
23
|
+
if (!address) {
|
|
24
|
+
return (0, html_utils_1.escapeHtml)(input.order.email);
|
|
25
|
+
}
|
|
26
|
+
return [
|
|
27
|
+
address.company,
|
|
28
|
+
[address.first_name, address.last_name]
|
|
29
|
+
.filter((part) => Boolean(part))
|
|
30
|
+
.join(" "),
|
|
31
|
+
address.address_1,
|
|
32
|
+
address.address_2,
|
|
33
|
+
[address.postal_code, address.city]
|
|
34
|
+
.filter((part) => Boolean(part))
|
|
35
|
+
.join(" "),
|
|
36
|
+
address.country_code ? (0, layout_1.formatCountryName)(address.country_code) : null,
|
|
37
|
+
]
|
|
38
|
+
.filter((part) => Boolean(part))
|
|
39
|
+
.map(html_utils_1.escapeHtml)
|
|
40
|
+
.join("<br />");
|
|
41
|
+
};
|
|
42
|
+
/** "Charge: L-1, MHD: 30.06.2027"; the quantity only when a line has several batches. */
|
|
43
|
+
const renderBatchDetails = (line, timeZone) => {
|
|
44
|
+
const showQuantity = line.batch_allocations.length > 1;
|
|
45
|
+
return line.batch_allocations
|
|
46
|
+
.map((allocation) => {
|
|
47
|
+
const parts = [
|
|
48
|
+
`Charge: ${allocation.lot_number}`,
|
|
49
|
+
`MHD: ${(0, format_1.formatDocumentDate)(allocation.expiry_date, timeZone)}`,
|
|
50
|
+
showQuantity ? `Menge: ${allocation.quantity}` : null,
|
|
51
|
+
].filter((part) => Boolean(part));
|
|
52
|
+
return `<div class="batch">${(0, html_utils_1.escapeHtml)(parts.join(", "))}</div>`;
|
|
53
|
+
})
|
|
54
|
+
.join("");
|
|
55
|
+
};
|
|
56
|
+
const renderLines = (input, timeZone) => input.lines
|
|
57
|
+
.map((line) => `<tr>
|
|
58
|
+
<td class="item">
|
|
59
|
+
<div class="item-title">${(0, html_utils_1.escapeHtml)(line.title)}</div>
|
|
60
|
+
${line.sku ? `<div class="sku">SKU: ${(0, html_utils_1.escapeHtml)(line.sku)}</div>` : ""}
|
|
61
|
+
${renderBatchDetails(line, timeZone)}
|
|
62
|
+
</td>
|
|
63
|
+
<td class="number quantity">${(0, html_utils_1.escapeHtml)(line.quantity)}</td>
|
|
64
|
+
<td class="number">${(0, html_utils_1.renderMoney)(line.unit_price)}</td>
|
|
65
|
+
<td class="number">${(0, html_utils_1.renderMoney)(line.total)}</td>
|
|
66
|
+
</tr>`)
|
|
67
|
+
.join("");
|
|
68
|
+
const isExemptIntraCommunitySupply = (input) => input.order.tax_compliance?.exemption_wording ===
|
|
69
|
+
"steuerfreie_innergemeinschaftliche_lieferung";
|
|
70
|
+
const renderTaxCompliance = (input) => {
|
|
71
|
+
const evidence = input.order.tax_compliance;
|
|
72
|
+
if (!evidence || !isExemptIntraCommunitySupply(input)) {
|
|
73
|
+
return "";
|
|
74
|
+
}
|
|
75
|
+
return `<section class="tax-compliance">
|
|
76
|
+
<h2>Steuerliche Angaben</h2>
|
|
77
|
+
<strong>${(0, html_utils_1.escapeHtml)(evidence.customer_company_name)}</strong><br />
|
|
78
|
+
UID des Kunden: ${(0, html_utils_1.escapeHtml)(evidence.customer_vat_number)}<br />
|
|
79
|
+
Steuerfreie innergemeinschaftliche Lieferung
|
|
80
|
+
</section>`;
|
|
81
|
+
};
|
|
82
|
+
const renderDiscountTotal = (input) => {
|
|
83
|
+
const discount = input.totals.discount_total;
|
|
84
|
+
const displayAmount = input.document.kind === "invoice" && Number(discount.amount) > 0
|
|
85
|
+
? `-${discount.amount}`
|
|
86
|
+
: discount.amount;
|
|
87
|
+
return (0, html_utils_1.renderMoney)(discount, displayAmount);
|
|
88
|
+
};
|
|
89
|
+
const formatTaxRate = (rate) => new Intl.NumberFormat(format_1.DEFAULT_FORMAT_LOCALE, {
|
|
90
|
+
maximumFractionDigits: 2,
|
|
91
|
+
style: "percent",
|
|
92
|
+
}).format(rate / 100);
|
|
93
|
+
/** One totals row below the Menge/Einzelpreis columns; the amount sits under "Summe". */
|
|
94
|
+
const renderTotalRow = (label, value, className) => `<tr${className ? ` class="${className}"` : ""}><td class="spacer"></td><td class="label" colspan="2">${(0, html_utils_1.escapeHtml)(label)}</td><td class="number">${value}</td></tr>`;
|
|
95
|
+
const renderTaxRows = (input) => {
|
|
96
|
+
const { tax_breakdown: breakdown, tax_total: taxTotal } = input.totals;
|
|
97
|
+
const rows = breakdown.length > 0
|
|
98
|
+
? breakdown.map((entry) => ({
|
|
99
|
+
label: `${entry.name} ${formatTaxRate(entry.rate)}`,
|
|
100
|
+
money: entry.tax_total,
|
|
101
|
+
}))
|
|
102
|
+
: [{ label: "Umsatzsteuer", money: taxTotal }];
|
|
103
|
+
return rows
|
|
104
|
+
.map(({ label, money }) => renderTotalRow(label, (0, html_utils_1.renderMoney)(money)))
|
|
105
|
+
.join("");
|
|
106
|
+
};
|
|
107
|
+
/** Only invoices ask for payment; cancellations and credit notes do not. */
|
|
108
|
+
const renderPaymentTerms = (input) => input.document.kind === "invoice" && input.settings.payment_terms
|
|
109
|
+
? `<section class="payment-terms">${(0, html_utils_1.escapeHtml)(input.settings.payment_terms)}</section>`
|
|
110
|
+
: "";
|
|
111
|
+
const renderFinancialDocument = (input, layout, timeZone) => {
|
|
112
|
+
const labels = labelsByKind[input.document.kind];
|
|
113
|
+
const metadata = [
|
|
114
|
+
{ label: labels.number, value: input.document.number },
|
|
115
|
+
{
|
|
116
|
+
label: "Bestellung",
|
|
117
|
+
value: (0, html_utils_1.formatOrderReference)(input.order.display_id),
|
|
118
|
+
},
|
|
119
|
+
];
|
|
120
|
+
if (input.document.kind !== "invoice") {
|
|
121
|
+
metadata.push({
|
|
122
|
+
label: "Ursprungsrechnung",
|
|
123
|
+
value: input.document.source_document_number ?? "-",
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (input.order.tax_compliance && isExemptIntraCommunitySupply(input)) {
|
|
127
|
+
metadata.push({
|
|
128
|
+
label: "Kunden-UID",
|
|
129
|
+
value: input.order.tax_compliance.customer_vat_number,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
metadata.push({
|
|
133
|
+
label: "Datum",
|
|
134
|
+
value: (0, format_1.formatDocumentDate)(input.document.issued_at, timeZone),
|
|
135
|
+
});
|
|
136
|
+
const { totals } = input;
|
|
137
|
+
const body = `<table class="items financial-items">
|
|
138
|
+
<thead><tr><th class="item">Artikel</th><th class="number quantity">Menge</th><th class="number">Einzelpreis</th><th class="number">Summe</th></tr></thead>
|
|
139
|
+
<tbody class="lines">${renderLines(input, timeZone)}</tbody>
|
|
140
|
+
<tbody class="totals">
|
|
141
|
+
${renderTotalRow("Zwischensumme", (0, html_utils_1.renderMoney)(totals.subtotal))}
|
|
142
|
+
${renderTotalRow("Versand", (0, html_utils_1.renderMoney)(totals.shipping_total))}
|
|
143
|
+
${renderTotalRow("Rabatt", renderDiscountTotal(input))}
|
|
144
|
+
${renderTaxRows(input)}
|
|
145
|
+
${renderTotalRow("Gesamt", (0, html_utils_1.renderMoney)(totals.total), "grand-total")}
|
|
146
|
+
</tbody>
|
|
147
|
+
</table>
|
|
148
|
+
${renderTaxCompliance(input)}
|
|
149
|
+
${renderPaymentTerms(input)}`;
|
|
150
|
+
return layout({
|
|
151
|
+
body,
|
|
152
|
+
documentTitle: labels.title,
|
|
153
|
+
metadata,
|
|
154
|
+
number: input.document.number,
|
|
155
|
+
pageTitle: labels.title,
|
|
156
|
+
recipient: renderAddress(input),
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
exports.renderFinancialDocument = renderFinancialDocument;
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYW5jaWFsLWRvY3VtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvZmluYW5jaWFsLWRvY3VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLHFDQUFvRTtBQUNwRSw2Q0FBNEU7QUFDNUUscUNBQWlFO0FBT2pFLE1BQU0sWUFBWSxHQUFHO0lBQ25CLFlBQVksRUFBRTtRQUNaLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLEtBQUssRUFBRSxnQkFBZ0I7S0FDeEI7SUFDRCxXQUFXLEVBQUU7UUFDWCxNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLEtBQUssRUFBRSxZQUFZO0tBQ3BCO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixLQUFLLEVBQUUsVUFBVTtLQUNsQjtDQUlGLENBQUE7QUFFRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQTRCLEVBQVUsRUFBRTtJQUM3RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQTtJQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLElBQUEsdUJBQVUsRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxDQUFDLE9BQU87UUFDZixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQzthQUNwQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNaLE9BQU8sQ0FBQyxTQUFTO1FBQ2pCLE9BQU8sQ0FBQyxTQUFTO1FBQ2pCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO2FBQ2hDLE1BQU0sQ0FBQyxD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
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatDocumentDate = exports.formatMoneyParts = exports.formatDate = exports.formatMoney = exports.DEFAULT_FORMAT_LOCALE = void 0;
|
|
4
|
+
exports.DEFAULT_FORMAT_LOCALE = "de-AT";
|
|
5
|
+
const formatMoney = ({ amount, currencyCode }, { locale = exports.DEFAULT_FORMAT_LOCALE } = {}) => {
|
|
6
|
+
const numericAmount = Number(amount);
|
|
7
|
+
const normalizedCurrencyCode = currencyCode.toUpperCase();
|
|
8
|
+
const fallback = `${String(amount)} ${normalizedCurrencyCode}`;
|
|
9
|
+
if (!Number.isFinite(numericAmount)) {
|
|
10
|
+
return fallback;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
return new Intl.NumberFormat(locale, {
|
|
14
|
+
currency: normalizedCurrencyCode,
|
|
15
|
+
style: "currency",
|
|
16
|
+
}).format(numericAmount);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return fallback;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.formatMoney = formatMoney;
|
|
23
|
+
const formatDate = (value, { locale = exports.DEFAULT_FORMAT_LOCALE, options, timeZone }) => {
|
|
24
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
25
|
+
if (Number.isNaN(date.getTime())) {
|
|
26
|
+
return String(value);
|
|
27
|
+
}
|
|
28
|
+
return new Intl.DateTimeFormat(locale, { timeZone, ...options }).format(date);
|
|
29
|
+
};
|
|
30
|
+
exports.formatDate = formatDate;
|
|
31
|
+
/**
|
|
32
|
+
* `formatMoney` split into currency and number, so a template can align the
|
|
33
|
+
* currency and the amount separately. Falls back to the whole
|
|
34
|
+
* `formatMoney` text as `amount`.
|
|
35
|
+
*/
|
|
36
|
+
const formatMoneyParts = ({ amount, currencyCode }, { locale = exports.DEFAULT_FORMAT_LOCALE } = {}) => {
|
|
37
|
+
const numericAmount = Number(amount);
|
|
38
|
+
const fallback = {
|
|
39
|
+
currency: "",
|
|
40
|
+
amount: (0, exports.formatMoney)({ amount, currencyCode }, { locale }),
|
|
41
|
+
};
|
|
42
|
+
if (!Number.isFinite(numericAmount)) {
|
|
43
|
+
return fallback;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const parts = new Intl.NumberFormat(locale, {
|
|
47
|
+
currency: currencyCode.toUpperCase(),
|
|
48
|
+
style: "currency",
|
|
49
|
+
}).formatToParts(numericAmount);
|
|
50
|
+
return {
|
|
51
|
+
currency: parts
|
|
52
|
+
.filter((part) => part.type === "currency")
|
|
53
|
+
.map((part) => part.value)
|
|
54
|
+
.join(""),
|
|
55
|
+
amount: parts
|
|
56
|
+
.filter((part) => part.type !== "currency" &&
|
|
57
|
+
!(part.type === "literal" && !part.value.trim()))
|
|
58
|
+
.map((part) => part.value)
|
|
59
|
+
.join(""),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return fallback;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
exports.formatMoneyParts = formatMoneyParts;
|
|
67
|
+
/** A document date as "01.01.2027" in the given time zone. */
|
|
68
|
+
const formatDocumentDate = (value, timeZone) => (0, exports.formatDate)(value, {
|
|
69
|
+
timeZone,
|
|
70
|
+
options: { day: "2-digit", month: "2-digit", year: "numeric" },
|
|
71
|
+
});
|
|
72
|
+
exports.formatDocumentDate = formatDocumentDate;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEscUJBQXFCLEdBQUcsT0FBTyxDQUFBO0FBV3JDLE1BQU0sV0FBVyxHQUFHLENBQ3pCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBb0IsRUFDMUMsRUFBRSxNQUFNLEdBQUcsNkJBQXFCLEtBQXlCLEVBQUUsRUFDbkQsRUFBRTtJQUNWLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNwQyxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUN6RCxNQUFNLFFBQVEsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxDQUFBO0lBRTlELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDcEMsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUNuQyxRQUFRLEVBQUUsc0JBQXNCO1lBQ2hDLEtBQUssRUFBRSxVQUFVO1NBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7QUFDSCxDQUFDLENBQUE7QUFwQlksUUFBQSxXQUFXLGVBb0J2QjtBQVNNLE1BQU0sVUFBVSxHQUFHLENBQ3hCLEtBQW9CLEVBQ3BCLEVBQUUsTUFBTSxHQUFHLDZCQUFxQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQXFCLEVBQ2hFLEVBQUU7SUFDVixNQUFNLElBQUksR0FBRyxLQUFLLFlBQVksSUFBSSxDQUFDLENB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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @medusajs/use-medusa-error-not-generic-error -- Invalid render inputs are programmer errors, not HTTP responses. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createDefaultDocumentHtmlFactory = void 0;
|
|
5
|
+
const layout_1 = require("./layout");
|
|
6
|
+
const financial_document_1 = require("./financial-document");
|
|
7
|
+
const packing_list_1 = require("./packing-list");
|
|
8
|
+
/**
|
|
9
|
+
* The plugin's default document markup (German, locale de-AT). The legal
|
|
10
|
+
* sender comes with every render input (`input.merchant`, the base plugin's
|
|
11
|
+
* shop master data). `timeZone` is the IANA time zone in which printed dates
|
|
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. `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`).
|
|
16
|
+
*/
|
|
17
|
+
const createDefaultDocumentHtmlFactory = ({ timeZone, theme, }) => {
|
|
18
|
+
return (input) => {
|
|
19
|
+
const kind = input.document.kind;
|
|
20
|
+
switch (kind) {
|
|
21
|
+
case "invoice":
|
|
22
|
+
case "cancellation":
|
|
23
|
+
case "credit_note":
|
|
24
|
+
if ("totals" in input) {
|
|
25
|
+
return (0, financial_document_1.renderFinancialDocument)(input, (0, layout_1.createDocumentLayout)(input.merchant, input.settings, true, theme), timeZone);
|
|
26
|
+
}
|
|
27
|
+
break;
|
|
28
|
+
case "packing_list":
|
|
29
|
+
if ("fulfillment" in input) {
|
|
30
|
+
return (0, packing_list_1.renderPackingList)(input, (0, layout_1.createDocumentLayout)(input.merchant, input.settings, false, theme), timeZone);
|
|
31
|
+
}
|
|
32
|
+
break;
|
|
33
|
+
default: {
|
|
34
|
+
const unsupportedKind = kind;
|
|
35
|
+
throw new TypeError(`Unsupported document kind: ${unsupportedKind}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
throw new TypeError(`Invalid input for document kind: ${kind}`);
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
exports.createDefaultDocumentHtmlFactory = createDefaultDocumentHtmlFactory;
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvaHRtbC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxxSUFBcUk7OztBQUlySSxxQ0FBbUU7QUFDbkUsNkRBQThEO0FBQzlELGlEQUFrRDtBQUVsRDs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxFQUMvQyxRQUFRLEVBQ1IsS0FBSyxHQUlOLEVBQXVCLEVBQUU7SUFDeEIsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUE7UUFFaEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxjQUFjLENBQUM7WUFDcEIsS0FBSyxhQUFhO2dCQUNoQixJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDdEIsT0FBTyxJQUFBLDRDQUF1QixFQUM1QixLQUFLLEVBQ0wsSUFBQSw2QkFBb0IsRUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUNqRSxRQUFRLENBQ1QsQ0FBQTtnQkFDSCxDQUFDO2dCQUNELE1BQUs7WUFDUCxLQUFLLGNBQWM7Z0JBQ2pCLElBQUksYUFBYSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUMzQixPQUFPLElBQUEsZ0NBQWlCLEVBQ3RCLEtBQUssRUFDTCxJQUFBLDZCQUFvQixFQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQ2xFLFFBQVEsQ0FDVCxDQUFBO2dCQUNILENBQUM7Z0JBQ0QsTUFBSztZQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsTUFBTSxlQUFlLEdBQVUsSUFBSSxDQUFBO2dCQUNuQyxNQUFNLElBQUksU0FBUyxDQUFDLDhCQUE4QixlQUFlLEVBQUUsQ0FBQyxDQUFBO1lBQ3RFLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvQ0FBb0MsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNqRSxDQUFDLENBQUE7QUFDSCxDQUFDLENBQUE7QUF2Q1ksUUFBQSxnQ0FBZ0Msb0NBdUM1QyJ9
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderMoney = exports.formatOrderReference = exports.escapeHtml = void 0;
|
|
4
|
+
const format_1 = require("./format");
|
|
5
|
+
const escapeHtml = (value) => String(value ?? "")
|
|
6
|
+
.replaceAll("&", "&")
|
|
7
|
+
.replaceAll("<", "<")
|
|
8
|
+
.replaceAll(">", ">")
|
|
9
|
+
.replaceAll('"', """)
|
|
10
|
+
.replaceAll("'", "'");
|
|
11
|
+
exports.escapeHtml = escapeHtml;
|
|
12
|
+
const formatOrderReference = (displayId) => displayId === null ? "-" : `#${displayId}`;
|
|
13
|
+
exports.formatOrderReference = formatOrderReference;
|
|
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==
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDocumentLayout = exports.formatCountryName = void 0;
|
|
4
|
+
const html_utils_1 = require("./html-utils");
|
|
5
|
+
const formatCountryName = (countryCode) => new Intl.DisplayNames("de", { type: "region" }).of(countryCode.toUpperCase()) ?? countryCode.toUpperCase();
|
|
6
|
+
exports.formatCountryName = formatCountryName;
|
|
7
|
+
const joinLines = (lines) => lines
|
|
8
|
+
.filter((line) => Boolean(line))
|
|
9
|
+
.map(html_utils_1.escapeHtml)
|
|
10
|
+
.join("<br />");
|
|
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
|
+
*/
|
|
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>`;
|
|
44
|
+
if (!includeLegalDetails) {
|
|
45
|
+
return sender;
|
|
46
|
+
}
|
|
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,
|
|
57
|
+
merchant.bic ? `BIC: ${merchant.bic}` : null,
|
|
58
|
+
]),
|
|
59
|
+
].join("");
|
|
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>`;
|
|
64
|
+
const renderMetadata = (metadata) => metadata
|
|
65
|
+
.map(({ label, value }) => `<tr><th scope="row">${(0, html_utils_1.escapeHtml)(label)}</th><td>${(0, html_utils_1.escapeHtml)(value)}</td></tr>`)
|
|
66
|
+
.join("");
|
|
67
|
+
/**
|
|
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.
|
|
73
|
+
*/
|
|
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; }
|
|
94
|
+
.packing-batch { display: flex; gap: 12px; justify-content: space-between; }
|
|
95
|
+
table { border-collapse: collapse; page-break-inside: auto; width: 100%; }
|
|
96
|
+
thead { display: table-header-group; }
|
|
97
|
+
tfoot { display: table-footer-group; }
|
|
98
|
+
tbody { page-break-inside: auto; }
|
|
99
|
+
tr { break-inside: avoid; page-break-inside: avoid; }
|
|
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); }
|
|
104
|
+
.number { text-align: right; white-space: nowrap; }
|
|
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>
|
|
125
|
+
</head>
|
|
126
|
+
<body>
|
|
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>
|
|
139
|
+
</body>
|
|
140
|
+
</html>`;
|
|
141
|
+
exports.createDocumentLayout = createDocumentLayout;
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvbGF5b3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDZDQUF5QztBQWlDbEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFdBQW1CLEVBQVUsRUFBRSxDQUMvRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUNoRCxXQUFXLENBQUMsV0FBVyxFQUFFLENBQzFCLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBSG5CLFFBQUEsaUJBQWlCLHFCQUdFO0FBRWhDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBaUMsRUFBVSxFQUFFLENBQzlELEtBQUs7S0FDRixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0MsR0FBRyxDQUFDLHVCQUFVLENBQUM7S0FDZixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7QUFFbkIsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixPQUFzQixFQUN0QixLQUFpQyxFQUN6QixFQUFFO0lBQ1YsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLE9BQU87UUFDbkIsQ0FBQyxDQUFDLCtCQUErQixJQUFBLHVCQUFVLEVBQUMsT0FBTyxDQUFDLFFBQVE7UUFDNUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE9BQU8sOEJBQThCLEtBQUssR0FBRyxPQUFPLFFBQVEsQ0FBQTtBQUM5RCxDQUFDLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxD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
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderPackingList = void 0;
|
|
4
|
+
const format_1 = require("./format");
|
|
5
|
+
const html_utils_1 = require("./html-utils");
|
|
6
|
+
const renderBatchAllocations = (line, timeZone) => {
|
|
7
|
+
if (line.batch_allocations.length === 0) {
|
|
8
|
+
return '<span class="muted">-</span>';
|
|
9
|
+
}
|
|
10
|
+
return line.batch_allocations
|
|
11
|
+
.map((allocation) => `<div class="packing-batch">
|
|
12
|
+
<strong>${(0, html_utils_1.escapeHtml)(allocation.lot_number)}</strong>
|
|
13
|
+
<span>MHD: ${(0, html_utils_1.escapeHtml)((0, format_1.formatDocumentDate)(allocation.expiry_date, timeZone))}</span>
|
|
14
|
+
<span>Menge: ${(0, html_utils_1.escapeHtml)(allocation.quantity)}</span>
|
|
15
|
+
</div>`)
|
|
16
|
+
.join("");
|
|
17
|
+
};
|
|
18
|
+
const renderLines = (input, timeZone) => input.lines
|
|
19
|
+
.map((line) => `<tr>
|
|
20
|
+
<td class="item">
|
|
21
|
+
<div class="item-title">${(0, html_utils_1.escapeHtml)(line.title)}</div>
|
|
22
|
+
${line.sku ? `<div class="sku">SKU: ${(0, html_utils_1.escapeHtml)(line.sku)}</div>` : ""}
|
|
23
|
+
</td>
|
|
24
|
+
<td>${renderBatchAllocations(line, timeZone)}</td>
|
|
25
|
+
<td class="number">${(0, html_utils_1.escapeHtml)(line.quantity)}</td>
|
|
26
|
+
</tr>`)
|
|
27
|
+
.join("");
|
|
28
|
+
const renderPackingList = (input, layout, timeZone) => layout({
|
|
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
|
+
</table>`,
|
|
33
|
+
documentTitle: "Packliste",
|
|
34
|
+
metadata: [
|
|
35
|
+
{ label: "Packlistennummer", value: input.document.number },
|
|
36
|
+
{
|
|
37
|
+
label: "Bestellung",
|
|
38
|
+
value: (0, html_utils_1.formatOrderReference)(input.order.display_id),
|
|
39
|
+
},
|
|
40
|
+
{ label: "Fulfillment", value: input.fulfillment.id },
|
|
41
|
+
{
|
|
42
|
+
label: "Erstellungsdatum",
|
|
43
|
+
value: (0, format_1.formatDocumentDate)(input.document.generated_at, timeZone),
|
|
44
|
+
},
|
|
45
|
+
{ label: "Lagerplatz", value: input.fulfillment.location_name },
|
|
46
|
+
],
|
|
47
|
+
number: input.document.number,
|
|
48
|
+
pageTitle: "Packliste",
|
|
49
|
+
recipient: null,
|
|
50
|
+
});
|
|
51
|
+
exports.renderPackingList = renderPackingList;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2luZy1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvcGFja2luZy1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHFDQUE2QztBQUM3Qyw2Q0FBK0Q7QUFHL0QsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixJQUErQyxFQUMvQyxRQUFnQixFQUNSLEVBQUU7SUFDVixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyw4QkFBOEIsQ0FBQTtJQUN2QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCO1NBQzFCLEdBQUcsQ0FDRixDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7a0JBQ0osSUFBQSx1QkFBVSxFQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7cUJBQzlCLElBQUEsdUJBQVUsRUFBQyxJQUFBLDJCQUFrQixFQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7dUJBQzlELElBQUEsdUJBQVUsRUFBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3pDLENBQ1I7U0FDQSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDYixDQUFDLENBQUE7QUFFRCxNQUFNLFdBQVcsR0FBRyxDQUNsQixLQUErQixFQUMvQixRQUFnQixFQUNSLEVBQUUsQ0FDVixLQUFLLENBQUMsS0FBSztLQUNSLEdBQUcsQ0FDRixDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7O29DQUVvQixJQUFBLHVCQUFVLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsSUFBQSx1QkFBVSxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFOztjQUVuRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDOzZCQUN2QixJQUFBLHVCQUFVLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMxQyxDQUNQO0tBQ0EsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBRU4sTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixLQUErQixFQUMvQixNQUFzQixFQUN0QixRQUFnQixFQUNSLEVBQUUsQ0FDVixNQUFNLENBQUM7SUFDTCxJQUFJLEVBQUU7OzZCQUVtQixXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQzthQUM1QztJQUNULGFBQWEsRUFBRSxXQUFXO0lBQzFCLFFBQVEsRUFBRTtRQUNSLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUMzRDtZQUNFLEtBQUssRUFBRSxZQUFZO1lBQ25CLEtBQUssRUFBRSxJQUFBLGlDQUFvQixFQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1NBQ3BEO1FBQ0QsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUNyRDtZQUNFLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsS0FBSyxFQUFFLElBQUEsMkJBQWtCLEVBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDO1NBQ2pFO1FBQ0QsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtLQUNoRTtJQUNELE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDN0IsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLElBQUk7Q0FDaEIsQ0FBQyxDQUFBO0FBM0JTLFFBQUEsaUJBQWlCLHFCQTJCMUIifQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90eXBlcy9hZG1pbi1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtc3VtbWFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kb2N1bWVudHMvdHlwZXMvZG9jdW1lbnQtc3VtbWFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90eXBlcy9kb2N1bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defineDocumentHtmlFactory = void 0;
|
|
4
|
+
const defineDocumentHtmlFactory = (factory) => factory;
|
|
5
|
+
exports.defineDocumentHtmlFactory = defineDocumentHtmlFactory;
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90eXBlcy9odG1sLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVU8sTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxPQUE0QixFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUE7QUFGcEIsUUFBQSx5QkFBeUIsNkJBRUwifQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./admin-api"), exports);
|
|
18
|
+
__exportStar(require("./documents"), exports);
|
|
19
|
+
__exportStar(require("./document-summary"), exports);
|
|
20
|
+
__exportStar(require("./html-factory"), exports);
|
|
21
|
+
__exportStar(require("./store-api"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3R5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBMkI7QUFDM0IsOENBQTJCO0FBQzNCLHFEQUFrQztBQUNsQyxpREFBOEI7QUFDOUIsOENBQTJCIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90eXBlcy9zdG9yZS1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveDocumentMerchant = void 0;
|
|
4
|
+
const public_1 = require("../../public");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const merchant_1 = require("../../modules/documents/domain/merchant");
|
|
7
|
+
/**
|
|
8
|
+
* The shop's sender facts for one render: shop master data of the base
|
|
9
|
+
* plugin (stored in the Admin) > the plugin's `merchant` option. Fails with
|
|
10
|
+
* `UNEXPECTED_STATE` naming the missing fields, so the document is marked
|
|
11
|
+
* failed and issued again once the data is complete. Read failures propagate.
|
|
12
|
+
*/
|
|
13
|
+
const resolveDocumentMerchant = async (container, fallback) => {
|
|
14
|
+
const { values } = await (0, public_1.getShopMasterData)(container, fallback);
|
|
15
|
+
const resolution = (0, merchant_1.toDocumentMerchant)(values);
|
|
16
|
+
if (!resolution.merchant) {
|
|
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.`);
|
|
18
|
+
}
|
|
19
|
+
return resolution.merchant;
|
|
20
|
+
};
|
|
21
|
+
exports.resolveDocumentMerchant = resolveDocumentMerchant;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVyY2hhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3V0aWxzL2RvY3VtZW50LW1lcmNoYW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFnRDtBQUVoRCxxREFBdUQ7QUFFdkQsc0VBR2dEO0FBR2hEOzs7OztHQUtHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQzFDLFNBQTBCLEVBQzFCLFFBQWdDLEVBQ0wsRUFBRTtJQUM3QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLDBCQUFpQixFQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFBLDZCQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxrQ0FBa0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtGQUFrRixDQUNsSixDQUFBO0lBQ0gsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQTtBQUM1QixDQUFDLENBQUE7QUFiWSxRQUFBLHVCQUF1QiwyQkFhbkMifQ==
|