UNPKG

medusa-invoice

Version:
150 lines 21.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateInvoiceTable = exports.amountToDisplay = void 0; const path_1 = __importDefault(require("path")); const currency_1 = require("../../../../utils/currency"); const amountToDisplay = (amount, currencyCode) => { const decimalDigits = (0, currency_1.getDecimalDigits)(currencyCode); return `₹${(amount / Math.pow(10, decimalDigits)).toFixed(decimalDigits)}`; }; exports.amountToDisplay = amountToDisplay; // helper to resolve effective rate function getEffectiveTaxRate(order, fallbackRate) { var _a, _b, _c; const cutoff = new Date("2025-09-25T00:00:00Z"); const createdAt = new Date(order.created_at); if (createdAt < cutoff) { return fallbackRate; } // else fetch from first item tax line const firstItemTaxLine = (_c = (_b = (_a = order.items) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.tax_lines) === null || _c === void 0 ? void 0 : _c[0]; return firstItemTaxLine ? firstItemTaxLine.rate / 2 : fallbackRate; } function generateTableRow(doc, y, item, hsn, quantity, unitCost, lineTotal, bg, bold) { if (bg) { doc .roundedRect(50, y - 3, 500, 20, 3) .fillColor("#111111") .fill(); doc.fillColor("#FFFFFF"); } else { doc.fillColor("#111111"); } doc .fontSize(10) .font("Bold") .text(item, 58, y) .font(bold ? "Bold" : "Regular") .text(hsn, 240, y, { width: 60, align: "left" }) .text(quantity, 300, y, { width: 90, align: "left" }) .text(unitCost, 340, y, { width: 130, align: "right" }) .text(lineTotal, 0, y, { align: "right" }); } function generateInvoiceTable(doc, y, order, items) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6; doc.registerFont("Regular", path_1.default.resolve(__dirname, "../../../../../fonts/NotoSans-Regular.ttf")); doc.registerFont("Bold", path_1.default.resolve(__dirname, "../../../../../fonts/NotoSans-Bold.ttf")); doc.font("Regular"); const invoiceTableTop = y + 10; // Check if order is after October 8th, 2025 and from Maharashtra const cutoffDate = new Date("2025-10-08T00:00:00Z"); const orderDate = order.created_at ? new Date(order.created_at) : null; const isAfterCutoff = orderDate instanceof Date && !isNaN(orderDate.getTime()) && orderDate.getTime() > cutoffDate.getTime(); const isMaharashtra = ((_b = (_a = order.shipping_address) === null || _a === void 0 ? void 0 : _a.province) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === "maharashtra"; const shouldShowIGST = isAfterCutoff && !isMaharashtra; const getCodValue = () => { var _a, _b, _c, _d; if (!(orderDate instanceof Date) || isNaN(orderDate.getTime())) { return; } const orderTime = orderDate.getTime(); const beforeDec8End = new Date("2025-12-08T23:59:59Z").getTime(); const dec9Start = new Date("2025-12-09T00:00:00Z").getTime(); const dec15Morning = new Date("2025-12-15T07:00:00Z").getTime(); if (orderTime <= beforeDec8End) { return (0, exports.amountToDisplay)(300 * 100, order === null || order === void 0 ? void 0 : order.currency_code); } if (orderTime >= dec9Start && orderTime <= dec15Morning) { return (0, exports.amountToDisplay)(200 * 100, order === null || order === void 0 ? void 0 : order.currency_code); } return (0, exports.amountToDisplay)(parseInt((_d = (_c = (_b = (_a = order === null || order === void 0 ? void 0 : order.shipping_methods) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.shipping_option) === null || _c === void 0 ? void 0 : _c.metadata) === null || _d === void 0 ? void 0 : _d.cod_charges) * 100, order === null || order === void 0 ? void 0 : order.currency_code); }; // Header row generateTableRow(doc, invoiceTableTop, "Item", "HSN", "Quantity", "Description", "Amount(₹)", true, false); let position = invoiceTableTop; let totalTax = 0; for (let i = 0; i < items.length; i++) { const item = items[i]; // Item row position += 24; generateTableRow(doc, position, (_c = item === null || item === void 0 ? void 0 : item.variant) === null || _c === void 0 ? void 0 : _c.title, (_d = item === null || item === void 0 ? void 0 : item.variant) === null || _d === void 0 ? void 0 : _d.hs_code, item.quantity, "Unit Price (Before GST)", (0, exports.amountToDisplay)(item.unit_price, order.currency_code), false, false); if (shouldShowIGST) { // IGST row position += 16; generateTableRow(doc, position, "", "", "", `IGST (${(_f = (_e = item.tax_lines) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.rate}%)`, (0, exports.amountToDisplay)(Math.round(item.original_tax_total), order.currency_code), false, false); } else { // CGST row position += 16; generateTableRow(doc, position, "", "", "", `CGST (${((_h = (_g = item.tax_lines) === null || _g === void 0 ? void 0 : _g[0]) === null || _h === void 0 ? void 0 : _h.rate) / 2}%)`, (0, exports.amountToDisplay)(Math.round(item.original_tax_total / 2), order.currency_code), false, false); // SGST row position += 16; generateTableRow(doc, position, "", "", "", `SGST (${((_k = (_j = item.tax_lines) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.rate) / 2}%)`, (0, exports.amountToDisplay)(Math.round(item.original_tax_total / 2), order.currency_code), false, false); } totalTax += item.original_tax_total; } // Subtotal row position += 30; generateTableRow(doc, position, "", "", "", `Subtotal (${items.reduce((acc, item) => acc + item.quantity, 0)} ${items.reduce((acc, item) => acc + item.quantity, 0) > 1 ? "units" : "unit"})`, (0, exports.amountToDisplay)(order.subtotal, order.currency_code), false, false); // Total (incl. GST) position += 22; generateTableRow(doc, position, "", "", "", "Total (incl. GST)", (0, exports.amountToDisplay)(order.subtotal + totalTax, order.currency_code), false, true); // Discount (if any) if (order.discounts.length > 0) { position += 22; const discount = order.discounts[0]; let discountLabel = "Discount"; let discountValue = 0; if (((_l = discount.rule) === null || _l === void 0 ? void 0 : _l.type) === "percentage") { discountLabel += ` (${(_m = discount.rule) === null || _m === void 0 ? void 0 : _m.value}%)`; discountValue = (order.subtotal + totalTax) * (((_o = discount.rule) === null || _o === void 0 ? void 0 : _o.value) / 100); } else if (((_p = discount.rule) === null || _p === void 0 ? void 0 : _p.type) === "fixed") { discountLabel += ` (${((_q = discount.rule) === null || _q === void 0 ? void 0 : _q.value) / 100})`; discountValue = (_r = discount.rule) === null || _r === void 0 ? void 0 : _r.value; } else if (((_s = discount.rule) === null || _s === void 0 ? void 0 : _s.type) === "free_shipping") { discountLabel += ` (Free Shipping)`; discountValue = ((_u = (_t = order === null || order === void 0 ? void 0 : order.shipping_methods) === null || _t === void 0 ? void 0 : _t[0]) === null || _u === void 0 ? void 0 : _u.price) + ((_y = (_x = (_w = (_v = order === null || order === void 0 ? void 0 : order.shipping_methods) === null || _v === void 0 ? void 0 : _v[0]) === null || _w === void 0 ? void 0 : _w.tax_lines) === null || _x === void 0 ? void 0 : _x[0]) === null || _y === void 0 ? void 0 : _y.rate) || 0; } generateTableRow(doc, position, "", "", "", discountLabel, "-" + (0, exports.amountToDisplay)(discountValue, order.currency_code), false, false); } // Shipping Fee position += 22; generateTableRow(doc, position, "", "", "", "Shipping Fee (Flat)", (0, exports.amountToDisplay)(((_z = order === null || order === void 0 ? void 0 : order.discounts[0]) === null || _z === void 0 ? void 0 : _z.code) === "SISTERHOOD" || ((_0 = order === null || order === void 0 ? void 0 : order.discounts[0]) === null || _0 === void 0 ? void 0 : _0.code) === "SISTER-HOOD" ? 0 : Math.round((((_1 = order === null || order === void 0 ? void 0 : order.shipping_methods[0]) === null || _1 === void 0 ? void 0 : _1.price) + (order === null || order === void 0 ? void 0 : order.shipping_tax_total)) / 100) > ((_4 = (_3 = (_2 = order === null || order === void 0 ? void 0 : order.shipping_methods[0]) === null || _2 === void 0 ? void 0 : _2.shipping_option) === null || _3 === void 0 ? void 0 : _3.metadata) === null || _4 === void 0 ? void 0 : _4.cod_charges) ? (((_5 = order === null || order === void 0 ? void 0 : order.shipping_methods[0]) === null || _5 === void 0 ? void 0 : _5.price) + (order === null || order === void 0 ? void 0 : order.shipping_tax_total)) / 3 : Math.round(((_6 = order === null || order === void 0 ? void 0 : order.shipping_methods[0]) === null || _6 === void 0 ? void 0 : _6.price) + (order === null || order === void 0 ? void 0 : order.shipping_tax_total)), order.currency_code), false, false); // COD Charges position += 22; generateTableRow(doc, position, "", "", "", order.payment_status === "captured" ? "" : "COD Charges", order.payment_status === "captured" ? "" : getCodValue(), false, false); // Final Total Payable position += 22; generateTableRow(doc, position, "", "", "", "Total Payable", (0, exports.amountToDisplay)(Math.round(order.total), order.currency_code), false, true); return position + 30; } exports.generateInvoiceTable = generateInvoiceTable; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvdGVtcGxhdGVzL2ludm9pY2VzL2Jhc2ljL3BhcnRzL3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLGdEQUF3QjtBQUN4Qix5REFBOEQ7QUFFdkQsTUFBTSxlQUFlLEdBQUcsQ0FDN0IsTUFBYyxFQUNkLFlBQW9CLEVBQ1osRUFBRTtJQUNWLE1BQU0sYUFBYSxHQUFHLElBQUEsMkJBQWdCLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFDckQsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7QUFDN0UsQ0FBQyxDQUFDO0FBTlcsUUFBQSxlQUFlLG1CQU0xQjtBQUVGLG1DQUFtQztBQUNuQyxTQUFTLG1CQUFtQixDQUFDLEtBQVksRUFBRSxZQUFvQjs7SUFDN0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFN0MsSUFBSSxTQUFTLEdBQUcsTUFBTSxFQUFFO1FBQ3RCLE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0lBRUQsc0NBQXNDO0lBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBQSxNQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUcsQ0FBQyxDQUFDLDBDQUFFLFNBQVMsMENBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0FBQ3JFLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixHQUFH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