{"version":3,"sources":["../../src/utils/helper.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","subtotal","discountAmount","taxAmount","discountedSubtotal","items","total","i","price","quantity","discount","tax","fees","subTotal","parsedFee","f","amount","args"],"mappings":"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","file":"helper.mjs","sourcesContent":["import type { ItemInfo, Fee } from \"../../global\";\n\ninterface Helpers {\n\tcalcItemTotal(item: ItemInfo): number | string;\n\tcalcItemTotalDiscount(item: ItemInfo[]): number | string;\n\tcalcTax(items: ItemInfo[]): number | string;\n\tcalcSubTotal(items: ItemInfo[]): number | string;\n\tcalcFinalTotal(\n\t\titems: ItemInfo[],\n\t\tdiscount?: number,\n\t\tfees?: Fee[],\n\t): number | string;\n\tformatCurrency(\n\t\tamount: number | string,\n\t\targs?: Record<string, string>,\n\t): string;\n}\n\nconst helper: Helpers = {\n\t/**\n\t * Item total price calculation.\n\t *\n\t * Displayed in the items table (not the invoice sub/grand total).\n\t *\n\t * @param {ItemInfo} item.\n\t * @returns {number} total.\n\t * @since 1.0.0\n\t */\n\tcalcItemTotal: function (item: ItemInfo): number | string {\n\t\tconst subtotal = item.quantity * item.price;\n\t\tlet discountAmount = 0;\n\t\tlet taxAmount = 0;\n\n\t\tif (item.discount) {\n\t\t\tdiscountAmount = subtotal * (item.discount / 100);\n\t\t}\n\t\tconst discountedSubtotal = subtotal - discountAmount;\n\n\t\tif (item.tax) {\n\t\t\ttaxAmount = discountedSubtotal * (item.tax / 100);\n\t\t}\n\n\t\treturn discountedSubtotal + taxAmount;\n\t},\n\n\t/**\n\t * Calculate subtotal.\n\t *\n\t * @param {ItemInfo[]} items.\n\t * @returns {number} total.\n\t * @since 1.0.0\n\t */\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\n\t\tif (!items || !items.length) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet total = 0;\n\n\t\titems.forEach((item) => {\n\t\t\ttotal += Number(this.calcItemTotal(item));\n\t\t});\n\n\t\treturn total.toFixed(2);\n\t},\n\n\t/**\n\t * Item total discount calculation.\n\t *\n\t * Note: This method is not used currently in the invoice.\n\t *\n\t * @param {ItemInfo} item.\n\t * @returns {number} total.\n\t * @since 1.0.11\n\t */\n\tcalcItemTotalDiscount: function (item: ItemInfo[]): string {\n\t\tif (!item || !item.length) {\n\t\t\treturn \"0.00\";\n\t\t}\n\n\t\tlet total = 0;\n\n\t\titem.forEach((i) => {\n\t\t\tconst price = i.price || 0;\n\t\t\tconst quantity = i.quantity || 1;\n\t\t\tconst discount = i.discount || 0;\n\t\t\ttotal += (price * quantity * discount) / 100;\n\t\t});\n\n\t\treturn total.toFixed(2);\n\t},\n\n\t/**\n\t * Calculate tax.\n\t *\n\t * @param {ItemInfo[]} items.\n\t * @returns {number} total.\n\t * @since 1.0.0\n\t */\n\tcalcTax: function (items: ItemInfo[]): number | string {\n\t\tif (!items || !items.length) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet total = 0;\n\n\t\titems.forEach((item) => {\n\t\t\tconst price = item.price;\n\t\t\tconst quantity = item.quantity;\n\t\t\tconst tax = item.tax || 0;\n\t\t\ttotal += (price * quantity * tax) / 100;\n\t\t});\n\n\t\treturn total.toFixed(2);\n\t},\n\n\t/**\n\t * Calculate total final price.\n\t *\n\t * @param {ItemInfo[]} items.\n\t * @returns {number} total.\n\t * @since 1.0.0\n\t */\n\tcalcFinalTotal: function (\n\t\titems: ItemInfo[],\n\t\tdiscount?: number,\n\t\tfees?: Fee[],\n\t): number | string {\n\t\tif (!items || !items.length) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet subTotal = Number(this.calcSubTotal(items));\n\n\t\tlet parsedFee = 0;\n\n\t\tif (fees) {\n\t\t\tfees.forEach((f) => {\n\t\t\t\tif (f.operation === \"+\") {\n\t\t\t\t\tparsedFee += f.amount;\n\t\t\t\t} else {\n\t\t\t\t\tparsedFee -= f.amount;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (!discount || isNaN(Number(discount))) {\n\t\t\treturn (subTotal + parsedFee).toFixed(2);\n\t\t}\n\n\t\tsubTotal = subTotal + parsedFee;\n\n\t\treturn subTotal - Number(discount) < 0\n\t\t\t? \"0.00\"\n\t\t\t: (subTotal - Number(discount)).toFixed(2);\n\t},\n\n\t/**\n\t * Format currency in international format.\n\t *\n\t * @ref https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n\t *\n\t * @param {number | string} amount.\n\t * @param {Record<string, string>} args.\n\t * @returns {string} string.\n\t * @since 1.0.10\n\t */\n\tformatCurrency: function (\n\t\tamount: number | string,\n\t\targs: Record<string, string> = { locale: \"en-US\", currency: \"USD\" },\n\t): string {\n\t\tamount = Number(amount);\n\n\t\tif (!amount || isNaN(amount)) {\n\t\t\treturn new Intl.NumberFormat(args.locale, {\n\t\t\t\tstyle: \"currency\",\n\t\t\t\tcurrency: args.currency,\n\t\t\t}).format(0);\n\t\t}\n\n\t\tamount = amount.toFixed(2);\n\n\t\treturn new Intl.NumberFormat(args.locale, {\n\t\t\tstyle: \"currency\",\n\t\t\tcurrency: args.currency,\n\t\t}).format(Number(amount));\n\t},\n};\n\nmodule.exports = helper;\n"]}