diff --git a/addons/laundry_management/static/src/js/laundry_pricing_hook.js b/addons/laundry_management/static/src/js/laundry_pricing_hook.js new file mode 100644 index 0000000..1a93b7a --- /dev/null +++ b/addons/laundry_management/static/src/js/laundry_pricing_hook.js @@ -0,0 +1,47 @@ +/** @odoo-module + * + * Pricing hook (PREPARE-ONLY). + * + * Reads the per-type and per-attribute extra_price values for the + * current order. Returned values are NEVER applied to the order. + * This module exists so future pricing logic can plug into a single + * stable surface without touching order.lines / pricing / taxes today. + * + * Usage example (NOT wired anywhere): + * import { computeLaundryExtras } from "@laundry_management/js/laundry_pricing_hook"; + * const { typeExtra, attributeExtras, total } = computeLaundryExtras(pos, order); + */ + +export function computeLaundryExtras(pos, order) { + const empty = { typeExtra: 0, attributeExtras: [], total: 0 }; + if (!pos || !order) return empty; + + const typeId = order.laundry_order_type_id; + const attrIds = Array.isArray(order.laundry_order_attribute_ids) + ? order.laundry_order_attribute_ids + : []; + + let typeExtra = 0; + if (typeId) { + const type = pos.models["laundry.order.type"]?.get(typeId); + typeExtra = Number(type?.extra_price) || 0; + } + + const attrModel = pos.models["laundry.order.attribute"]; + const attributeExtras = []; + let attrTotal = 0; + for (const id of attrIds) { + const rec = attrModel?.get(id); + const price = Number(rec?.extra_price) || 0; + if (price) { + attributeExtras.push({ id, name: rec?.name || "", price }); + attrTotal += price; + } + } + + return { + typeExtra, + attributeExtras, + total: typeExtra + attrTotal, + }; +}