UNPKG

@wallfar/ocd-studio-core-sdk

Version:

Helper SDK for our OneClick Studio modules

81 lines (78 loc) 1.96 kB
import { c as clampMoney } from './shared/ocd-studio-core-sdk.D3EQiCxo.mjs'; function createDraftOrder(input) { const order = { ...input, reservations: input.reservations.map((r) => { const line = { ...r, adjustments: [...r.adjustments || []], metadata: { ...r.metadata || {} } }; return enhanceTarget(line); }), adjustments: [...input.adjustments || []], metadata: { ...input.metadata || {} } }; return enhanceTarget(order); } function addFixed(target, amount, label) { target.adjustments.push({ type: "fixed", value: amount, label }); } function addPercent(target, percent, label) { target.adjustments.push({ type: "percent", value: percent, label }); } function enhanceTarget(target) { Object.defineProperties(target, { addFixed: { enumerable: false, value(amount, label) { addFixed(target, amount, label); } }, addPercent: { enumerable: false, value(percent, label) { addPercent(target, percent, label); } } }); return target; } function calculateTotals(order) { const calculatedReservations = order.reservations.map((res) => { let total = res.basePrice + (res.addOnsPrice || 0); for (const adj of res.adjustments) { if (adj.type === "fixed") { total += adj.value; } else { total += total * (adj.value / 100); } } return { ...res, finalPrice: clampMoney(total) }; }); let orderTotal = calculatedReservations.reduce((sum, r) => sum + r.finalPrice, 0); for (const adj of order.adjustments) { if (adj.type === "fixed") { orderTotal += adj.value; } else { orderTotal += orderTotal * (adj.value / 100); } } return { ...order, reservations: calculatedReservations, total: clampMoney(orderTotal) }; } export { addFixed, addPercent, calculateTotals, createDraftOrder };