59 lines
1.7 KiB
JavaScript
59 lines
1.7 KiB
JavaScript
/** @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();
|
|
}
|
|
}
|