From 3eb6ceb5c79e7b2618a4e04d41057bce7721b701 Mon Sep 17 00:00:00 2001 From: "David Monnom (moda)" Date: Fri, 8 Mar 2024 11:13:49 +0100 Subject: [PATCH] [FIX] pos_self_order, pos_online_payment_self_order: conf page behavior The confirmation page wasn't displayed and the order wasn't sent to the preparation display when confirming an order with a total of 0. Now the confirmation page is displayed and the order is send to the preparation display when the order is confirmed regardless of the total amount. closes odoo/odoo#157028 Related: odoo/enterprise#58348 Signed-off-by: Quentin Lejeune (qle) --- .../components/order_widget/order_widget.js | 2 +- .../src/pages/payment_page/payment_page.js | 5 +--- .../static/src/app/self_order_service.js | 23 ++++++++----------- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/addons/pos_online_payment_self_order/static/src/components/order_widget/order_widget.js b/addons/pos_online_payment_self_order/static/src/components/order_widget/order_widget.js index ad166f5c9c6..088a84af891 100644 --- a/addons/pos_online_payment_self_order/static/src/components/order_widget/order_widget.js +++ b/addons/pos_online_payment_self_order/static/src/components/order_widget/order_widget.js @@ -18,7 +18,7 @@ patch(OrderWidget.prototype, { return super.buttonToShow; } - if (order.amount_total === 0 && !isNoLine) { + if (order.amount_total === 0 && !isNoLine && mode !== "each") { return { label: _t("Order"), disabled: false }; } diff --git a/addons/pos_online_payment_self_order/static/src/pages/payment_page/payment_page.js b/addons/pos_online_payment_self_order/static/src/pages/payment_page/payment_page.js index cabe3f2c770..234eb4a4b1e 100644 --- a/addons/pos_online_payment_self_order/static/src/pages/payment_page/payment_page.js +++ b/addons/pos_online_payment_self_order/static/src/pages/payment_page/payment_page.js @@ -24,10 +24,7 @@ patch(PaymentPage.prototype, { }, get selectedPaymentIsOnline() { const paymentMethods = this.selectedPaymentMethod; - return ( - paymentMethods && - paymentMethods.is_online_payment - ); + return paymentMethods && paymentMethods.is_online_payment; }, generateQrcodeImg(url) { const codeWriter = new window.ZXing.BrowserQRCodeSvgWriter(); diff --git a/addons/pos_self_order/static/src/app/self_order_service.js b/addons/pos_self_order/static/src/app/self_order_service.js index aa35e1332f7..fe090f0d18a 100644 --- a/addons/pos_self_order/static/src/app/self_order_service.js +++ b/addons/pos_self_order/static/src/app/self_order_service.js @@ -134,9 +134,9 @@ export class SelfOrder extends Reactive { // If a command line does not have a quantity greater than 0, we consider it deleted this.currentOrder.lines = this.currentOrder.lines.filter((o) => o.qty > 0); } - async confirmationPage(screen_mode, device) { + async confirmationPage(screen_mode, device, access_token = "") { this.router.navigate("confirmation", { - orderAccessToken: this.currentOrder.access_token, + orderAccessToken: access_token || this.currentOrder.access_token, screenMode: screen_mode, }); if (device === "kiosk") { @@ -165,8 +165,8 @@ export class SelfOrder extends Reactive { // if the amount is 0, we don't need to go to the payment page // this directive works for both mode each and meal if (order.amount_total === 0 && order.lines.length > 0) { - await this.sendDraftOrderToServer(); - this.confirmationPage("order", device); + const order = await this.sendDraftOrderToServer(); + this.confirmationPage("order", device, order.access_token); return; } @@ -195,13 +195,7 @@ export class SelfOrder extends Reactive { } get currentOrder() { - if ( - this.editedOrder && - (this.editedOrder.state === "draft" || - (this.editedOrder.state === "paid" && - this.editedOrder.amount_total === 0 && - this.config.self_ordering_mode === "kiosk")) - ) { + if (this.editedOrder && this.editedOrder.state === "draft") { return this.editedOrder; } const existingOrder = this.orders.find( @@ -444,7 +438,7 @@ export class SelfOrder extends Reactive { this.updateOrdersFromServer([order], [order.access_token]); this.editedOrder.updateLastChanges(); - if (this.config.self_ordering_pay_after === "each") { + if (this.config.self_ordering_pay_after === "each" && order.amount_total > 0) { this.editedOrder = null; } @@ -531,7 +525,10 @@ export class SelfOrder extends Reactive { this.notification.add(message, { type: "success", }); - this.router.navigate("default"); + + if (this.router.activeSlot !== "confirmation") { + this.router.navigate("default"); + } } updateOrderFromServer(order) {