UNPKG

@open-tender/utils

Version:

A library of utils for use with Open Tender applications that utilize our cloud-based Order API.

99 lines (98 loc) 4.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeNetOrder = exports.adjustAmounts = exports.makeRefundLookup = exports.makeAmountsLookup = exports.makeRefundCartLookup = void 0; const makeRefundCartLookup = (cart) => { const lookup = {}; cart.forEach(item => { var _a; const { line_no, quantity, price_total } = item; lookup[line_no !== null && line_no !== void 0 ? line_no : 0] = { quantity, price_total }; (_a = item === null || item === void 0 ? void 0 : item.groups) === null || _a === void 0 ? void 0 : _a.forEach(group => group.options.forEach(option => { const { line_no, quantity, price } = option; lookup[line_no !== null && line_no !== void 0 ? line_no : 0] = { quantity, price }; })); }); return lookup; }; exports.makeRefundCartLookup = makeRefundCartLookup; const makeAmountsLookup = (items, key = 'id') => { return items.reduce((obj, i) => (Object.assign(Object.assign({}, obj), { [i[key]]: i.amount })), {}); }; exports.makeAmountsLookup = makeAmountsLookup; const makeRefundLookup = (order) => { const { cart, gift_cards, surcharges, discounts, taxes, totals, tenders } = order; const { subtotal, gift_card, surcharge, discount, tax, tip, shipping, total } = totals; return { cart: (0, exports.makeRefundCartLookup)(cart), gift_cards: gift_cards ? (0, exports.makeAmountsLookup)(gift_cards, 'code') : null, surcharges: (0, exports.makeAmountsLookup)(surcharges), discounts: (0, exports.makeAmountsLookup)(discounts), taxes: (0, exports.makeAmountsLookup)(taxes), tenders: (0, exports.makeAmountsLookup)(tenders, 'tender_index'), subtotal, gift_card, surcharge, discount, tax, tip, shipping, total }; }; exports.makeRefundLookup = makeRefundLookup; const adjustAmount = (amount, refundAmount) => { return (parseFloat(amount) + parseFloat(refundAmount)).toFixed(2); }; const adjustAmounts = (order, lookup, list, key = 'id') => { if (!order[list]) return order; order[list].forEach((i) => { const amount = lookup[list][i[key]]; if (amount) i.amount = adjustAmount(i.amount, amount); }); return order; }; exports.adjustAmounts = adjustAmounts; const amounts = [ 'subtotal', 'gift_card', 'surcharge', 'discount', 'tax', 'tip', 'shipping', 'total' ]; const makeNetOrder = (order, refunds) => { if (!refunds || !refunds.length) return order; let copy = JSON.parse(JSON.stringify(order)); refunds.forEach(refund => { const lookup = (0, exports.makeRefundLookup)(refund); copy.cart.forEach((i) => { var _a, _b, _c, _d, _e; const item = lookup.cart[(_a = i.line_no) !== null && _a !== void 0 ? _a : 0]; if (item) { i.quantity = (_c = ((_b = i.quantity) !== null && _b !== void 0 ? _b : 0) - item.quantity) !== null && _c !== void 0 ? _c : 0; i.price_total = adjustAmount(i.price_total, (_d = item.price_total) !== null && _d !== void 0 ? _d : '0.0'); } if (i.quantity === 0) { (_e = i.groups) === null || _e === void 0 ? void 0 : _e.forEach(group => group.options.forEach(option => { option.quantity = 0; option.price_total = '0.00'; })); } }); copy = (0, exports.adjustAmounts)(copy, lookup, 'gift_cards', 'code'); copy = (0, exports.adjustAmounts)(copy, lookup, 'surcharges'); copy = (0, exports.adjustAmounts)(copy, lookup, 'discounts'); copy = (0, exports.adjustAmounts)(copy, lookup, 'taxes'); copy = (0, exports.adjustAmounts)(copy, lookup, 'tenders', 'tender_index'); amounts.forEach(i => { copy.totals[i] = adjustAmount(copy.totals[i], lookup[i]); }); }); return copy; }; exports.makeNetOrder = makeNetOrder;