@webbers/invoices-medusa 1.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.
Files changed (35) hide show
  1. package/.medusa/server/src/admin/index.js +86 -0
  2. package/.medusa/server/src/admin/index.mjs +85 -0
  3. package/.medusa/server/src/api/admin/orders/[id]/invoice/[invoice_id]/route.js +28 -0
  4. package/.medusa/server/src/api/middlewares.js +13 -0
  5. package/.medusa/server/src/api/store/orders/[id]/invoice/route.js +37 -0
  6. package/.medusa/server/src/core/classes/pdf-generator/index.js +36 -0
  7. package/.medusa/server/src/core/classes/pdf-generator/templates/base.js +32 -0
  8. package/.medusa/server/src/core/classes/pdf-generator/templates/credit-invoice-content.js +308 -0
  9. package/.medusa/server/src/core/classes/pdf-generator/templates/invoice-content.js +496 -0
  10. package/.medusa/server/src/core/classes/pdf-generator/templates/packing-slip-content.js +164 -0
  11. package/.medusa/server/src/i18n/index.js +41 -0
  12. package/.medusa/server/src/i18n/messages/de.js +80 -0
  13. package/.medusa/server/src/i18n/messages/en.js +80 -0
  14. package/.medusa/server/src/i18n/messages/fr.js +80 -0
  15. package/.medusa/server/src/i18n/messages/it.js +80 -0
  16. package/.medusa/server/src/i18n/messages/nl.js +80 -0
  17. package/.medusa/server/src/links/invoice-order.js +17 -0
  18. package/.medusa/server/src/modules/invoice/index.js +15 -0
  19. package/.medusa/server/src/modules/invoice/loaders/validate.js +12 -0
  20. package/.medusa/server/src/modules/invoice/migrations/Migration20260312154721.js +18 -0
  21. package/.medusa/server/src/modules/invoice/migrations/Migration20260403000001.js +16 -0
  22. package/.medusa/server/src/modules/invoice/models/invoice.js +14 -0
  23. package/.medusa/server/src/modules/invoice/service.js +45 -0
  24. package/.medusa/server/src/subscribers/fulfillment-created-invoice.js +39 -0
  25. package/.medusa/server/src/subscribers/payment-refunded-invoice.js +65 -0
  26. package/.medusa/server/src/types/index.js +3 -0
  27. package/.medusa/server/src/utils/format-locale-amount.js +12 -0
  28. package/.medusa/server/src/workflows/create-credit-invoice.js +37 -0
  29. package/.medusa/server/src/workflows/create-invoice.js +38 -0
  30. package/.medusa/server/src/workflows/generate-invoice-pdf.js +10 -0
  31. package/.medusa/server/src/workflows/steps/create-invoice-step.js +25 -0
  32. package/.medusa/server/src/workflows/steps/generate-invoice-pdf-step.js +61 -0
  33. package/.medusa/server/src/workflows/steps/upload-invoice-pdf-step.js +29 -0
  34. package/README.md +219 -0
  35. package/package.json +86 -0
@@ -0,0 +1,496 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const i18n_1 = require("../../../../i18n");
7
+ const format_locale_amount_1 = __importDefault(require("../../../../utils/format-locale-amount"));
8
+ const date_fns_1 = require("date-fns");
9
+ const invoiceContent = async (order, options) => {
10
+ const locale = (0, i18n_1.resolveLocale)(order.metadata?.locale, options.defaultLocale);
11
+ const t = (0, i18n_1.getI18nMessages)(locale);
12
+ const fmt = (amount) => (0, format_locale_amount_1.default)(amount, order.currency_code, locale);
13
+ if (!order.billing_address || !order.shipping_address) {
14
+ throw new Error("Billing and or shipping address is missing");
15
+ }
16
+ const formatExclVat = order?.items?.some((i) => i.is_tax_inclusive === false);
17
+ const taxRateMap = new Map();
18
+ const collectTaxLines = (taxLines) => {
19
+ for (const taxLine of taxLines ?? []) {
20
+ const rate = taxLine.rate ?? 0;
21
+ const amount = Number(taxLine.total ?? 0);
22
+ taxRateMap.set(rate, (taxRateMap.get(rate) ?? 0) + amount);
23
+ }
24
+ };
25
+ for (const item of order.items ?? []) {
26
+ collectTaxLines(item.tax_lines);
27
+ }
28
+ for (const shippingMethod of order.shipping_methods ?? []) {
29
+ collectTaxLines(shippingMethod.tax_lines);
30
+ }
31
+ const taxLinesPdf = [...taxRateMap.entries()].map(([rate, amount]) => [
32
+ {
33
+ text: `${t.invoice.vat} ${rate}%`,
34
+ border: false,
35
+ margin: [0, 2, 0, 5],
36
+ },
37
+ {
38
+ text: fmt(amount),
39
+ alignment: "right",
40
+ border: false,
41
+ margin: [0, 2, 0, 5],
42
+ },
43
+ ]);
44
+ const invoice = order.invoices.find((i) => i.type === "debit");
45
+ const deliveryDate = order.metadata?.delivery_date ??
46
+ order.shipping_methods?.[0]?.data?.delivery_date;
47
+ if (!invoice) {
48
+ throw new Error("Invoice is missing");
49
+ }
50
+ // @ts-ignore
51
+ return [
52
+ {
53
+ columns: [
54
+ {
55
+ text: t.invoice.invoice,
56
+ width: "*",
57
+ fontSize: 28,
58
+ bold: true,
59
+ margin: [0, 0, 0, 15],
60
+ },
61
+ {
62
+ stack: [
63
+ {
64
+ key: t.invoice.address,
65
+ value: options.addressInfo.companyName,
66
+ valueProps: {
67
+ bold: true,
68
+ },
69
+ },
70
+ {
71
+ key: "",
72
+ value: options.addressInfo.address(t.countries),
73
+ },
74
+ {
75
+ key: t.invoice.coc,
76
+ value: options.addressInfo.cocNumber,
77
+ },
78
+ {
79
+ key: t.invoice.vatNr,
80
+ value: options.addressInfo.vatNumber,
81
+ },
82
+ ...(formatExclVat
83
+ ? [
84
+ {
85
+ key: t.invoice.iban,
86
+ value: options.addressInfo.iban,
87
+ },
88
+ ]
89
+ : []),
90
+ {
91
+ key: t.invoice.email,
92
+ value: options.addressInfo.email,
93
+ },
94
+ ].map(({ key, value, valueProps }) => ({
95
+ columns: [
96
+ {
97
+ text: key,
98
+ color: "#aaaaab",
99
+ width: "*",
100
+ fontSize: 10,
101
+ alignment: "right",
102
+ },
103
+ {
104
+ text: value,
105
+ fontSize: 10,
106
+ width: 135,
107
+ ...valueProps,
108
+ },
109
+ ],
110
+ })),
111
+ },
112
+ ],
113
+ },
114
+ {
115
+ columns: [
116
+ {
117
+ stack: [
118
+ {
119
+ text: t.invoice.invoiceNumber,
120
+ color: "#aaaaab",
121
+ width: "*",
122
+ fontSize: 11,
123
+ margin: [0, 10, 0, 2],
124
+ },
125
+ {
126
+ text: `#${invoice.display_id.toString().padStart(5, "0")}`,
127
+ },
128
+ ],
129
+ },
130
+ {
131
+ stack: [
132
+ {
133
+ text: t.invoice.date,
134
+ color: "#aaaaab",
135
+ width: "*",
136
+ fontSize: 11,
137
+ margin: [0, 10, 0, 2],
138
+ },
139
+ {
140
+ text: (0, date_fns_1.formatDate)(invoice.created_at, "dd-MM-yyyy"),
141
+ },
142
+ ],
143
+ },
144
+ {
145
+ stack: [
146
+ {
147
+ text: t.invoice.dueDate,
148
+ color: "#aaaaab",
149
+ width: "*",
150
+ fontSize: 11,
151
+ margin: [0, 10, 0, 2],
152
+ },
153
+ {
154
+ text: (0, date_fns_1.formatDate)((0, date_fns_1.addDays)(invoice.created_at, 30), "dd-MM-yyyy"),
155
+ },
156
+ ],
157
+ },
158
+ ],
159
+ },
160
+ {
161
+ columns: [
162
+ {
163
+ stack: [
164
+ {
165
+ text: t.invoice.orderNumber,
166
+ color: "#aaaaab",
167
+ width: "*",
168
+ fontSize: 11,
169
+ margin: [0, 10, 0, 2],
170
+ },
171
+ {
172
+ text: `#${order.display_id.toString().padStart(5, "0")}`,
173
+ },
174
+ ],
175
+ },
176
+ ...(deliveryDate
177
+ ? [
178
+ {
179
+ stack: [
180
+ {
181
+ text: t.invoice.deliveryDate,
182
+ color: "#aaaaab",
183
+ width: "*",
184
+ fontSize: 11,
185
+ margin: [0, 10, 0, 2],
186
+ },
187
+ {
188
+ text: (0, date_fns_1.formatDate)(new Date(`${deliveryDate}`), "dd-MM-yyyy"),
189
+ },
190
+ ],
191
+ },
192
+ {
193
+ stack: order.metadata?.po_number
194
+ ? [
195
+ {
196
+ text: t.invoice.poNumber,
197
+ color: "#aaaaab",
198
+ width: "*",
199
+ fontSize: 11,
200
+ margin: [0, 10, 0, 2],
201
+ },
202
+ {
203
+ text: order.metadata?.po_number,
204
+ },
205
+ ]
206
+ : [
207
+ {
208
+ text: "",
209
+ width: "*",
210
+ },
211
+ ],
212
+ },
213
+ ]
214
+ : []),
215
+ ],
216
+ },
217
+ {
218
+ columns: [
219
+ {
220
+ text: t.invoice.billingAddress,
221
+ color: "#aaaaab",
222
+ fontSize: 11,
223
+ margin: [0, 10, 0, 2],
224
+ },
225
+ {
226
+ text: t.invoice.deliveryAddress,
227
+ color: "#aaaaab",
228
+ fontSize: 11,
229
+ margin: [0, 10, 0, 2],
230
+ },
231
+ ],
232
+ },
233
+ {
234
+ columns: [
235
+ {
236
+ text: `${order.billing_address.company ? `${order.billing_address.company} - ` : ""}${order.billing_address.first_name} ${order.billing_address.last_name} \n ${order.billing_address.address_1} ${!order.billing_address.address_2 ? "" : order.billing_address.address_2} \n ${order.billing_address.postal_code} ${order.billing_address.city} \n ${t.countries[order.billing_address.country_code] ?? order.billing_address.country_code}
237
+ \n E: ${order.email}${order.shipping_address.phone ? `\n T: ${order.shipping_address.phone}` : ""}`,
238
+ },
239
+ {
240
+ text: `${order.shipping_address.company ? `${order.shipping_address.company} - ` : ""}${order.shipping_address.first_name} ${order.shipping_address.last_name} \n ${order.shipping_address.address_1} ${!order.shipping_address.address_2 ? "" : order.shipping_address.address_2} \n ${order.shipping_address.postal_code} ${order.shipping_address.city} \n ${t.countries[order.shipping_address.country_code] ?? order.shipping_address.country_code}`,
241
+ },
242
+ ],
243
+ },
244
+ "\n",
245
+ {
246
+ layout: {
247
+ defaultBorder: false,
248
+ hLineWidth: () => 1,
249
+ vLineWidth: () => 0,
250
+ hLineColor: () => "#aaa",
251
+ paddingLeft: () => 5,
252
+ paddingRight: () => 5,
253
+ paddingTop: () => 0,
254
+ paddingBottom: () => 0,
255
+ },
256
+ table: {
257
+ headerRows: 1,
258
+ widths: ["auto", "*", "auto", "auto", "auto"],
259
+ body: [
260
+ [
261
+ {
262
+ text: t.invoice.quantity,
263
+ style: "tableHeader",
264
+ },
265
+ {
266
+ text: t.invoice.item,
267
+ style: "tableHeader",
268
+ },
269
+ {
270
+ text: t.invoice.ean,
271
+ style: "tableHeader",
272
+ },
273
+ {
274
+ text: t.invoice.unitPrice,
275
+ style: "tableHeader",
276
+ },
277
+ {
278
+ text: t.invoice.subtotal,
279
+ style: "tableHeader",
280
+ alignment: "right",
281
+ },
282
+ ],
283
+ ...(order.items ?? []).map((item) => {
284
+ return [
285
+ {
286
+ text: `${item.quantity}x`,
287
+ style: "lineItemStyle",
288
+ border: [false, false, false, true],
289
+ },
290
+ {
291
+ text: [
292
+ { text: `${item.title} - ${item.subtitle}` },
293
+ ...(item?.variant?.inventory_items &&
294
+ item?.variant?.inventory_items?.length > 1
295
+ ? [
296
+ item?.variant?.inventory_items ? `:\n` : "",
297
+ item?.variant?.inventory_items
298
+ ?.map((im) => `- ${im.required_quantity}x ${im.inventory.title} ${!!im.inventory.metadata?.content ? "- " + im.inventory.metadata?.content : ""}`)
299
+ .join("\n"),
300
+ ]
301
+ : []),
302
+ ],
303
+ style: "lineItemStyle",
304
+ border: [false, false, false, true],
305
+ },
306
+ {
307
+ text: item
308
+ ?.variant?.ean ?? "-",
309
+ style: "lineItemStyle",
310
+ border: [false, false, false, true],
311
+ },
312
+ {
313
+ stack: [
314
+ ...(item.original_total &&
315
+ Number(item.original_total) !== Number(item.total)
316
+ ? [
317
+ {
318
+ text: fmt(Number(formatExclVat
319
+ ? item.original_subtotal
320
+ : item.original_total) / item.quantity),
321
+ style: "fromPriceStyle",
322
+ alignment: "center",
323
+ },
324
+ ]
325
+ : []),
326
+ {
327
+ text: fmt(Number(formatExclVat ? item.subtotal : item.total) /
328
+ item.quantity),
329
+ style: "priceStyle",
330
+ alignment: "center",
331
+ },
332
+ ],
333
+ style: "lineItemStyle",
334
+ border: [false, false, false, true],
335
+ },
336
+ {
337
+ stack: [
338
+ ...(item.original_total &&
339
+ Number(item.original_total) !== Number(item.total)
340
+ ? [
341
+ {
342
+ text: fmt(Number(formatExclVat
343
+ ? item.original_subtotal
344
+ : item.original_total)),
345
+ style: "fromPriceStyle",
346
+ alignment: "right",
347
+ },
348
+ ]
349
+ : []),
350
+ {
351
+ text: fmt(Number(formatExclVat ? item.subtotal : item.total)),
352
+ style: "priceStyle",
353
+ alignment: "right",
354
+ },
355
+ ],
356
+ style: "lineItemStyle",
357
+ border: [false, false, false, true],
358
+ },
359
+ ];
360
+ }),
361
+ ],
362
+ },
363
+ },
364
+ {
365
+ layout: {
366
+ defaultBorder: false,
367
+ hLineWidth: () => 1,
368
+ vLineWidth: () => 0,
369
+ hLineColor: () => "#aaa",
370
+ paddingLeft: () => 5,
371
+ paddingRight: () => 5,
372
+ paddingTop: () => 0,
373
+ paddingBottom: () => 0,
374
+ },
375
+ table: {
376
+ headerRows: 1,
377
+ widths: ["*", "auto"],
378
+ body: [
379
+ [
380
+ {
381
+ text: t.invoice.subtotal,
382
+ bold: true,
383
+ border: false,
384
+ margin: [0, 7, 0, 5],
385
+ },
386
+ {
387
+ text: fmt(Number(formatExclVat
388
+ ? order.original_item_subtotal
389
+ : order.original_item_total)),
390
+ bold: true,
391
+ border: false,
392
+ alignment: "right",
393
+ margin: [0, 7, 0, 5],
394
+ },
395
+ ],
396
+ ...(order.discount_total && Number(order.discount_total) > 0
397
+ ? [
398
+ [
399
+ {
400
+ text: t.invoice.discount,
401
+ bold: true,
402
+ border: false,
403
+ margin: [0, 2, 0, 5],
404
+ },
405
+ {
406
+ text: `- ${fmt(Number(formatExclVat ? order.discount_subtotal : order.discount_total))}`,
407
+ bold: true,
408
+ border: false,
409
+ alignment: "right",
410
+ margin: [0, 2, 0, 5],
411
+ },
412
+ ],
413
+ ]
414
+ : []),
415
+ [
416
+ {
417
+ text: t.invoice.shipping,
418
+ bold: true,
419
+ border: false,
420
+ margin: [0, 2, 0, 5],
421
+ },
422
+ {
423
+ text: `${order.shipping_total === 0
424
+ ? t.invoice.free
425
+ : fmt(Number(formatExclVat
426
+ ? order.shipping_subtotal
427
+ : order.shipping_total))}`,
428
+ bold: true,
429
+ border: false,
430
+ alignment: "right",
431
+ margin: [0, 2, 0, 5],
432
+ },
433
+ ],
434
+ ...(formatExclVat
435
+ ? [
436
+ [
437
+ {
438
+ text: t.invoice.totalExclVat,
439
+ border: [false, true, false, false],
440
+ margin: [0, 7, 0, 2],
441
+ },
442
+ {
443
+ text: fmt(Number(order.total) +
444
+ Number(order.credit_line_total) -
445
+ Number(order.tax_total)),
446
+ alignment: "right",
447
+ border: [false, true, false, false],
448
+ margin: [0, 7, 0, 2],
449
+ },
450
+ ],
451
+ ...taxLinesPdf,
452
+ [
453
+ {
454
+ text: t.invoice.totalInclVat,
455
+ bold: true,
456
+ fontSize: 12,
457
+ border: false,
458
+ margin: [0, 2, 0, 5],
459
+ },
460
+ {
461
+ text: fmt(Number(order.total) + Number(order.credit_line_total)),
462
+ bold: true,
463
+ fontSize: 12,
464
+ alignment: "right",
465
+ border: false,
466
+ margin: [0, 2, 0, 5],
467
+ },
468
+ ],
469
+ ]
470
+ : [
471
+ [
472
+ {
473
+ text: t.invoice.totalInclVat,
474
+ bold: true,
475
+ fontSize: 12,
476
+ border: [false, true, false, false],
477
+ margin: [0, 7, 0, 2],
478
+ },
479
+ {
480
+ text: fmt(Number(order.total) + Number(order.credit_line_total)),
481
+ bold: true,
482
+ fontSize: 12,
483
+ alignment: "right",
484
+ border: [false, true, false, false],
485
+ margin: [0, 7, 0, 2],
486
+ },
487
+ ],
488
+ ...taxLinesPdf,
489
+ ]),
490
+ ],
491
+ },
492
+ },
493
+ ];
494
+ };
495
+ exports.default = invoiceContent;
496
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS1jb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvcmUvY2xhc3Nlcy9wZGYtZ2VuZXJhdG9yL3RlbXBsYXRlcy9pbnZvaWNlLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSwyQ0FBK0Q7QUFDL0Qsa0dBQXVFO0FBRXZFLHVDQUE0QztBQUc1QyxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQzFCLEtBQXdCLEVBQ3hCLE9BQXNCLEVBQ0osRUFBRTtJQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFBLG9CQUFhLEVBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sQ0FBQyxHQUFHLElBQUEsc0JBQWUsRUFBQyxNQUFNLENBQUMsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQzdCLElBQUEsOEJBQWtCLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFJLEtBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUMvQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixLQUFLLEtBQUssQ0FDcEMsQ0FBQTtJQUVELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO0lBRTVDLE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBZSxFQUFFLEVBQUU7UUFDMUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7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