/** @odoo-module * * LaundrySettleBanner — prominent visual indicator that POS is currently * locked into settle-due mode. Provides the explicit "Exit" affordance * and toggles a document.body class so global CSS can dim/disable * irrelevant POS chrome (non-active order tabs, "+" button) for the * duration of settle mode. * * Reactive source: order.uiState.is_laundry_settle_due (seeded in * pos_order_patch.js initState so OWL tracks future writes). */ import { Component, useEffect } from "@odoo/owl"; import { usePos } from "@point_of_sale/app/hooks/pos_hook"; const BODY_CLASS = "pos-laundry-settle-active"; export class LaundrySettleBanner extends Component { static template = "laundry_management.LaundrySettleBanner"; static props = {}; setup() { this.pos = usePos(); useEffect( (active) => { if (active) { document.body.classList.add(BODY_CLASS); return () => document.body.classList.remove(BODY_CLASS); } document.body.classList.remove(BODY_CLASS); return () => {}; }, () => [this.isActive] ); } get order() { return this.pos.getOrder(); } get isActive() { return this.pos.isSettleDueOrder(this.order); } get partnerName() { return this.order?.getPartner()?.name || ""; } get amountLabel() { const order = this.order; if (!order) return ""; const total = order.priceIncl ?? 0; return this.pos.env.utils.formatCurrency(total); } onClickExit() { this.pos.exitSettleDueMode(); } }