UNPKG

@open-tender/utils

Version:

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

150 lines (149 loc) 6.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeConfirmationOrderType = exports.makeCheckoutTenderName = exports.makeTenderName = exports.makeCreditCardName = exports.updateTenders = exports.adjustTenders = void 0; const types_1 = require("@open-tender/types"); const cart_1 = require("./cart"); const adjustTenders = (tenders, isPaid, amountRemaining, updateForm) => { if (!tenders.length || isPaid) return; const gift = tenders.filter(i => i.tender_type === 'GIFT_CARD'); const nonGift = tenders.filter(i => i.tender_type !== 'GIFT_CARD'); if (amountRemaining > 0) { if (!nonGift.length) return; const newTenders = nonGift.map(i => { const newAmount = parseFloat(i.amount) + amountRemaining; amountRemaining = 0.0; return Object.assign(Object.assign({}, i), { amount: newAmount.toFixed(2) }); }); updateForm({ tenders: [...gift, ...newTenders] }); isPaid = Math.abs(amountRemaining).toFixed(2) === '0.00'; } else { const newTenders = nonGift.map(i => { const newAmount = Math.max(parseFloat(i.amount) + amountRemaining, 0.0); amountRemaining += parseFloat(i.amount) - newAmount; return Object.assign(Object.assign({}, i), { amount: newAmount.toFixed(2) }); }); isPaid = Math.abs(amountRemaining).toFixed(2) === '0.00'; if (isPaid) { const nonZero = newTenders.filter(i => i.amount !== '0.00'); updateForm({ tenders: [...gift, ...nonZero] }); } else { const newGift = gift.map(i => { const newAmount = Math.max(parseFloat(i.amount) + amountRemaining, 0.0); amountRemaining += parseFloat(i.amount) - newAmount; return Object.assign(Object.assign({}, i), { amount: newAmount.toFixed(2) }); }); const allNew = [...newGift, ...newTenders].filter(i => i.amount !== '0.00'); updateForm({ tenders: allNew }); isPaid = Math.abs(amountRemaining).toFixed(2) === '0.00'; } } }; exports.adjustTenders = adjustTenders; const updateTenders = (tenders, total) => { if (!total || !tenders || !tenders.length) return null; let amountRemaining = (0, cart_1.checkAmountRemaining)(total, tenders); if (amountRemaining === 0) return null; const gift = tenders.filter(i => i.tender_type === 'GIFT_CARD'); const nonGift = tenders.filter(i => i.tender_type !== 'GIFT_CARD'); if (amountRemaining > 0) { if (!nonGift.length) return null; const newTenders = nonGift.map(i => { const newAmount = parseFloat(i.amount) + amountRemaining; amountRemaining = 0.0; return Object.assign(Object.assign({}, i), { amount: newAmount.toFixed(2) }); }); return [...gift, ...newTenders]; } else { const newTenders = nonGift.map(i => { const newAmount = Math.max(parseFloat(i.amount) + amountRemaining, 0.0); amountRemaining += parseFloat(i.amount) - newAmount; return Object.assign(Object.assign({}, i), { amount: newAmount.toFixed(2) }); }); const isPaid = Math.abs(amountRemaining).toFixed(2) === '0.00'; if (isPaid) { const nonZero = newTenders.filter(i => i.amount !== '0.00'); return [...gift, ...nonZero]; } else { const newGift = gift.map(i => { const newAmount = Math.max(parseFloat(i.amount) + amountRemaining, 0.0); amountRemaining += parseFloat(i.amount) - newAmount; return Object.assign(Object.assign({}, i), { amount: newAmount.toFixed(2) }); }); return [...newGift, ...newTenders].filter(i => i.amount !== '0.00'); } } }; exports.updateTenders = updateTenders; const makeCreditCardName = (creditCard) => { const { card_type_name, last4 } = creditCard; return last4 ? `${card_type_name} ending in ${last4}` : card_type_name; }; exports.makeCreditCardName = makeCreditCardName; const makeTenderName = (tender) => { if ((0, types_1.isCreditTender)(tender)) { return (0, exports.makeCreditCardName)(tender.credit_card); } else if ((0, types_1.isGiftCardTender)(tender)) { return `Gift Card ${tender.card_number}`; } else if ((0, types_1.isHouseAccountTender)(tender)) { return `${tender.house_account.name} House Account`; } else { return ''; } }; exports.makeTenderName = makeTenderName; const makeCheckoutTenderName = (tender) => { if ((0, types_1.isCreditCustomerCheckoutTender)(tender)) { const { card_type_name, last4 } = tender; return last4 ? `${card_type_name} ending in ${last4}` : card_type_name; } else if ((0, types_1.isCreditGuestCheckoutTender)(tender)) { const { card_type_name, last4 } = tender; return last4 ? `${card_type_name} ending in ${last4}` : card_type_name; } else if ((0, types_1.isGiftCardCheckoutTender)(tender)) { return `Gift Card ${tender.card_number}`; } else if ((0, types_1.isHouseAccountCheckoutTender)(tender)) { return `${tender.name} House Account`; } else { return ''; } }; exports.makeCheckoutTenderName = makeCheckoutTenderName; const makeConfirmationOrderType = (order) => { if (!order) return null; const { order_type, service_type, order_fulfillment, revenue_center, details } = order; const { notes_internal } = details || {}; const isWalkIn = service_type === 'WALKIN'; if (isWalkIn) { if (notes_internal && notes_internal.includes('TAKE OUT')) { return 'takeOut'; } return 'dineIn'; } if (order_type === 'CATERING') return 'catering'; if (revenue_center.is_outpost) return 'outpost'; if (service_type === 'DELIVERY') return 'delivery'; if (service_type === 'PICKUP' && order_fulfillment) { return 'curbside'; } return 'pickup'; }; exports.makeConfirmationOrderType = makeConfirmationOrderType;