From fde60bf9676ebb6933f0858d99f9aa6f108d49c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cmoda=E2=80=9D?= Date: Mon, 9 Oct 2023 12:59:30 +0200 Subject: [PATCH] [IMP] pos_self_order,pos_online_payment_self_order: improve success page Before, when ordering on the kiosk/mobile, no confirmation page was displayed, only a notification. Now, a confirmation page displays the tracking number, the amount paid and, if present, the customer's table... Part-of: odoo/odoo#138013 --- .../components/order_widget/order_widget.js | 2 +- .../static/src/pages/cart_page/cart_page.js | 34 +++++--- .../static/src/self_order_service.js | 16 +++- .../views/res_config_settings_views.xml | 2 +- .../data/pos_restaurant_data.xml | 2 + .../demo/pos_restaurant_demo.xml | 2 + addons/pos_self_order/models/pos_config.py | 6 +- .../pos_self_order/models/pos_restaurant.py | 6 +- .../components/cancel_popup/cancel_popup.js | 5 ++ .../components/cancel_popup/cancel_popup.xml | 3 +- .../components/order_widget/order_widget.js | 32 +++++++ .../components/order_widget/order_widget.xml | 6 +- .../components/popup_table/popup_table.xml | 4 +- .../src/app/pages/cart_page/cart_page.js | 12 +-- .../src/app/pages/cart_page/cart_page.xml | 6 +- .../confirmation_page/confirmation_page.js | 87 +++++++++++++++++++ .../confirmation_page.scss} | 0 .../confirmation_page/confirmation_page.xml | 33 +++++++ .../app/pages/landing_page/landing_page.js | 23 +++++ .../app/pages/landing_page/landing_page.xml | 11 ++- .../order_history_page/order_history_page.js | 6 +- .../order_history_page/order_history_page.xml | 8 +- .../app/pages/payment_page/payment_page.js | 12 ++- .../app/pages/payment_page/payment_page.xml | 20 ++--- .../payment_success_page.js | 44 ---------- .../payment_success_page.xml | 31 ------- .../product_list_page/product_list_page.xml | 4 +- .../static/src/app/self_order_bus_service.js | 5 +- .../static/src/app/self_order_index.js | 4 +- .../static/src/app/self_order_index.xml | 4 +- .../static/src/app/self_order_service.js | 6 +- 31 files changed, 283 insertions(+), 153 deletions(-) create mode 100644 addons/pos_self_order/static/src/app/pages/confirmation_page/confirmation_page.js rename addons/pos_self_order/static/src/app/pages/{payment_success_page/payment_success_page.scss => confirmation_page/confirmation_page.scss} (100%) create mode 100644 addons/pos_self_order/static/src/app/pages/confirmation_page/confirmation_page.xml delete mode 100644 addons/pos_self_order/static/src/app/pages/payment_success_page/payment_success_page.js delete mode 100644 addons/pos_self_order/static/src/app/pages/payment_success_page/payment_success_page.xml 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 1f4c6634071..f71899542e5 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 @@ -31,7 +31,7 @@ patch(OrderWidget.prototype, { } else { return { label: _t("Pay at cashier"), - disabled: this.router.activeSlot !== "product_list", + disabled: false, }; } } diff --git a/addons/pos_online_payment_self_order/static/src/pages/cart_page/cart_page.js b/addons/pos_online_payment_self_order/static/src/pages/cart_page/cart_page.js index d91a315a7dd..dccd01542b4 100644 --- a/addons/pos_online_payment_self_order/static/src/pages/cart_page/cart_page.js +++ b/addons/pos_online_payment_self_order/static/src/pages/cart_page/cart_page.js @@ -19,26 +19,35 @@ patch(CartPage.prototype, { const service = this.selfOrder.config.self_ordering_service_mode; const takeAway = this.selfOrder.currentOrder.take_away; + if (this.sendInProgress) { + return; + } + if (!this.selfOrder.table && service === "table" && !takeAway) { this.state.selectTable = true; return; } - if (mode === "meal" && isOnlinePayment) { + if (mode === "meal" && isOnlinePayment && order.isSavedOnServer) { if (!order) { this.selfOrder.notification.add(_t("The current order is invalid."), { type: "danger", }); return; } - if (!order.isSavedOnServer) { - this.sendInProgress = true; - await this.selfOrder.sendDraftOrderToServer(); - this.sendInProgress = false; - } else { - this.checkAndOpenPaymentPage(order); - } + + this.checkAndOpenPaymentPage(order); + } else if (mode === "meal" && !isOnlinePayment && order.isSavedOnServer) { + this.router.navigate("confirmation", { + orderAccessToken: order.access_token, + screenMode: "pay", + }); + return; } else if (mode === "each") { + this.sendInProgress = true; + const order = await this.selfOrder.sendDraftOrderToServer(); + this.sendInProgress = false; + this.checkAndOpenPaymentPage(order); } else { return super.pay(...arguments); @@ -50,10 +59,11 @@ patch(CartPage.prototype, { if (order) { if (order.state === "draft") { if (!isOnlinePayment) { - this.selfOrder.notification.add( - _t("The current order cannot be paid (no online payment method)."), - { type: "danger" } - ); + // if no payment method is available -> pay at cashier + this.router.navigate("confirmation", { + orderAccessToken: order.access_token, + screenMode: "pay", + }); return; } diff --git a/addons/pos_online_payment_self_order/static/src/self_order_service.js b/addons/pos_online_payment_self_order/static/src/self_order_service.js index de181bd44b7..dba94ef2128 100644 --- a/addons/pos_online_payment_self_order/static/src/self_order_service.js +++ b/addons/pos_online_payment_self_order/static/src/self_order_service.js @@ -10,12 +10,20 @@ patch(SelfOrder.prototype, { pos_config_id: order_pos_config_id, }) { const baseUrl = session.base_url; - let exitRouteUrl = - baseUrl + "/pos-self/" + order_pos_config_id + "?access_token=" + this.access_token; + const order = this.currentOrder; const tableIdentifier = this.table?.identifier; - if (tableIdentifier) { - exitRouteUrl += "&table_identifier=" + tableIdentifier; + let exitRouteUrl = `${baseUrl}/pos-self/${order_pos_config_id}`; + + if (this.config.self_ordering_pay_after === "each") { + exitRouteUrl += `/confirmation/${order.access_token}/order`; } + + exitRouteUrl += `?access_token=${this.access_token}`; + + if (tableIdentifier) { + exitRouteUrl += `&table_identifier=${tableIdentifier}`; + } + const exitRoute = encodeURIComponent(exitRouteUrl); window.open( baseUrl + diff --git a/addons/pos_online_payment_self_order/views/res_config_settings_views.xml b/addons/pos_online_payment_self_order/views/res_config_settings_views.xml index e3ddabc5b1d..99d4e6d3846 100644 --- a/addons/pos_online_payment_self_order/views/res_config_settings_views.xml +++ b/addons/pos_online_payment_self_order/views/res_config_settings_views.xml @@ -8,7 +8,7 @@
diff --git a/addons/pos_self_order/static/src/app/components/order_widget/order_widget.js b/addons/pos_self_order/static/src/app/components/order_widget/order_widget.js index 8e7a6b16bbc..80c599b9f58 100644 --- a/addons/pos_self_order/static/src/app/components/order_widget/order_widget.js +++ b/addons/pos_self_order/static/src/app/components/order_widget/order_widget.js @@ -90,4 +90,36 @@ export class OrderWidget extends Component { } ); } + + get leftButtonName() { + const order = this.selfOrder.currentOrder; + const back = + order.isSavedOnServer || this.router.activeSlot === "cart" || order.lines.length === 0; + + return { + name: back ? _t("Back") : _t("Cancel"), + icon: back ? "fa fa-arrow-left" : "btn-close", + }; + } + + leftButton() { + const order = this.selfOrder.currentOrder; + + if ( + order.lines.length === 0 || + order.isSavedOnServer || + this.router.activeSlot === "cart" + ) { + this.router.back(); + return; + } else { + this.dialog.add(CancelPopup, { + title: _t("Cancel order"), + confirm: () => { + this.selfOrder.cancelOrder(); + this.router.navigate("default"); + }, + }); + } + } } diff --git a/addons/pos_self_order/static/src/app/components/order_widget/order_widget.xml b/addons/pos_self_order/static/src/app/components/order_widget/order_widget.xml index 6344885ceaa..1f1d29f7f4f 100644 --- a/addons/pos_self_order/static/src/app/components/order_widget/order_widget.xml +++ b/addons/pos_self_order/static/src/app/components/order_widget/order_widget.xml @@ -6,12 +6,10 @@ t-att-class="{ 'shadow-lg border-top' : !props.removeTopClasses }"> - - +
diff --git a/addons/pos_self_order/static/src/app/pages/cart_page/cart_page.js b/addons/pos_self_order/static/src/app/pages/cart_page/cart_page.js index 18ad53fa73f..1cc1841fc70 100644 --- a/addons/pos_self_order/static/src/app/pages/cart_page/cart_page.js +++ b/addons/pos_self_order/static/src/app/pages/cart_page/cart_page.js @@ -71,11 +71,14 @@ export class CartPage extends Component { if (mode === "meal" && !order.isSavedOnServer) { this.sendInProgress = true; await this.selfOrder.sendDraftOrderToServer(); - this.sendInProgress = false; - if (type !== "kiosk") { + this.router.navigate("confirmation", { + orderAccessToken: order.access_token, + screenMode: "order", + }); return; } + this.sendInProgress = false; } if (orderingMode === "table" && !takeAway) { if (type === "kiosk") { @@ -95,10 +98,7 @@ export class CartPage extends Component { } this.state.selectTable = false; - - if (this.selfOrder.config.self_ordering_pay_after === "each") { - this.pay(); - } + this.pay(); } getChildLines(line) { diff --git a/addons/pos_self_order/static/src/app/pages/cart_page/cart_page.xml b/addons/pos_self_order/static/src/app/pages/cart_page/cart_page.xml index 2b0ddd43321..534a055721b 100644 --- a/addons/pos_self_order/static/src/app/pages/cart_page/cart_page.xml +++ b/addons/pos_self_order/static/src/app/pages/cart_page/cart_page.xml @@ -2,12 +2,8 @@
-
-