From 3afb21cc8178d71cd5cf107f3e7c9fc4b68f5a8b Mon Sep 17 00:00:00 2001 From: "David Monnom (moda)" Date: Tue, 11 Jul 2023 08:18:40 +0000 Subject: [PATCH] [IMP] pos_self_order: cancel order button Previously, users could not cancel/delete their order once it had begun. Only order lines not sent to the server could be deleted one by one. Now, a "cancel" button has been added to the self shopping cart screen. This button only appears when the order has not yet been sent to the server. If the order has already been sent, it can only be cancelled from a PoS. closes odoo/odoo#128044 Signed-off-by: Adrien Guilliams (adgu) --- .../pos_self_order/static/src/models/line.js | 2 +- .../pos_self_order/static/src/models/order.js | 4 +-- .../static/src/pages/order_cart/order_cart.js | 14 ++++++++ .../src/pages/order_cart/order_cart.scss | 4 +++ .../src/pages/order_cart/order_cart.xml | 36 ++++++++++++++----- .../product_main_view/product_main_view.js | 9 +++++ .../product_main_view/product_main_view.xml | 8 +++-- .../static/src/self_order_service.js | 25 ++++++++++++- .../tours/self_order_after_meal_cart_tour.js | 17 +++++---- .../static/tests/tours/tour_utils.js | 25 +++++++++++++ 10 files changed, 122 insertions(+), 22 deletions(-) create mode 100644 addons/pos_self_order/static/src/pages/order_cart/order_cart.scss diff --git a/addons/pos_self_order/static/src/models/line.js b/addons/pos_self_order/static/src/models/line.js index a4f27f17eab..f366a00e30b 100644 --- a/addons/pos_self_order/static/src/models/line.js +++ b/addons/pos_self_order/static/src/models/line.js @@ -28,7 +28,7 @@ export class Line extends Reactive { this.customer_note = line.customer_note; this.price_subtotal_incl = line.price_subtotal_incl || 0; this.price_subtotal = line.price_subtotal || 0; - this.selected_attributes = line.selected_attributes || []; + this.selected_attributes = line.selected_attributes || {}; } isChange(lastChange) { diff --git a/addons/pos_self_order/static/src/models/order.js b/addons/pos_self_order/static/src/models/order.js index 3c31e9abdb4..5dc3f29409d 100644 --- a/addons/pos_self_order/static/src/models/order.js +++ b/addons/pos_self_order/static/src/models/order.js @@ -49,7 +49,7 @@ export class Order extends Reactive { this.lines = this.lines.map((line) => new Line(line)); } - computelastChangesSent() { + updateLastChanges() { for (const changeIdx in this.lastChangesSent) { const changeFound = this.lines.find((line) => line.uuid === changeIdx); if (!changeFound) { @@ -60,7 +60,7 @@ export class Order extends Reactive { this.lastChangesSent = this.lines.reduce((acc, line) => { acc[line.uuid] = { qty: line.qty, - selected_attributes: line.selected_attributes, + selected_attributes: { ...line.selected_attributes }, customer_note: line.customer_note, }; return acc; diff --git a/addons/pos_self_order/static/src/pages/order_cart/order_cart.js b/addons/pos_self_order/static/src/pages/order_cart/order_cart.js index 889f67a3cd4..628dae9ad90 100644 --- a/addons/pos_self_order/static/src/pages/order_cart/order_cart.js +++ b/addons/pos_self_order/static/src/pages/order_cart/order_cart.js @@ -20,6 +20,7 @@ export class OrderCart extends Component { this.router = useService("router"); this.state = useState({ selectTable: false, + cancelConfirmation: false, }); onWillStart(() => { @@ -31,6 +32,10 @@ export class OrderCart extends Component { return this.selfOrder.self_order_mode === "each" ? "Pay" : "Order"; } + get orderToPay() { + return this.selfOrder.self_order_mode === "each"; + } + async selectTable(table) { if (table) { this.selfOrder.table = table; @@ -62,4 +67,13 @@ export class OrderCart extends Component { this.selfOrder.notification.add(_t("Not yet implemented!"), { type: "danger" }); } } + + cancelToggle() { + this.state.cancelConfirmation = !this.state.cancelConfirmation; + } + + cancelOrder() { + this.selfOrder.cancelOrder(); + this.cancelToggle(); + } } diff --git a/addons/pos_self_order/static/src/pages/order_cart/order_cart.scss b/addons/pos_self_order/static/src/pages/order_cart/order_cart.scss new file mode 100644 index 00000000000..e7cb592367a --- /dev/null +++ b/addons/pos_self_order/static/src/pages/order_cart/order_cart.scss @@ -0,0 +1,4 @@ +.o_self-cancel-toggle-btn { + height: 55px; + width: 55px; +} diff --git a/addons/pos_self_order/static/src/pages/order_cart/order_cart.xml b/addons/pos_self_order/static/src/pages/order_cart/order_cart.xml index 8af8525f6e5..0abbbf5abc1 100644 --- a/addons/pos_self_order/static/src/pages/order_cart/order_cart.xml +++ b/addons/pos_self_order/static/src/pages/order_cart/order_cart.xml @@ -3,21 +3,39 @@
- +
-
- +
+
+ + + +
diff --git a/addons/pos_self_order/static/src/pages/product_main_view/product_main_view.js b/addons/pos_self_order/static/src/pages/product_main_view/product_main_view.js index bd65604e921..a3bf4b369b3 100644 --- a/addons/pos_self_order/static/src/pages/product_main_view/product_main_view.js +++ b/addons/pos_self_order/static/src/pages/product_main_view/product_main_view.js @@ -39,6 +39,15 @@ export class ProductMainView extends Component { this.initState(); } + get disableAttributes() { + const order = this.selfOrder.currentOrder; + return ( + this.selfOrder.editedLine && + this.selfOrder.editedLine.uuid && + order.lastChangesSent[this.selfOrder.editedLine.uuid] + ); + } + initState() { const editedLine = this.selfOrder.editedLine; diff --git a/addons/pos_self_order/static/src/pages/product_main_view/product_main_view.xml b/addons/pos_self_order/static/src/pages/product_main_view/product_main_view.xml index a7ce0be80b1..1ac966ca626 100644 --- a/addons/pos_self_order/static/src/pages/product_main_view/product_main_view.xml +++ b/addons/pos_self_order/static/src/pages/product_main_view/product_main_view.xml @@ -39,6 +39,7 @@ t-att-value="value.name" t-attf-id="{{ attribute.id }}_{{ value.id }}" t-model="state.selectedVariants[attribute.name]" + t-att-disabled="disableAttributes" /> @@ -51,7 +52,7 @@