From 2c3a88e40e7eb5f06bdc54e014f8c6fd453fc3fb Mon Sep 17 00:00:00 2001 From: vlst Date: Tue, 19 Sep 2023 09:57:39 +0200 Subject: [PATCH] [REF] point_of_sale: handle dblClick In the ticket screen the user has the option to double click on an order in order to continue editing it. This functionality is implemented using custom code for handling the double click. This is cumbersome and error prone. In this PR we replace the custom double click logic with the default `t-on-dblclick` from `owl`. closes odoo/odoo#135856 Task: 3512282 Signed-off-by: Joseph Caburnay (jcb) --- .../generic_components/orderline/orderline.js | 3 -- .../screens/ticket_screen/ticket_screen.js | 38 ++++--------------- .../screens/ticket_screen/ticket_screen.xml | 6 ++- .../tours/helpers/TicketScreenTourMethods.js | 8 ++++ .../static/tests/tours/TicketScreen.tour.js | 3 +- 5 files changed, 21 insertions(+), 37 deletions(-) diff --git a/addons/point_of_sale/static/src/app/generic_components/orderline/orderline.js b/addons/point_of_sale/static/src/app/generic_components/orderline/orderline.js index 5376c340fb7..7f1e53b470a 100644 --- a/addons/point_of_sale/static/src/app/generic_components/orderline/orderline.js +++ b/addons/point_of_sale/static/src/app/generic_components/orderline/orderline.js @@ -2,9 +2,6 @@ import { Component } from "@odoo/owl"; -/** - * How to extend this component: - */ export class Orderline extends Component { static template = "point_of_sale.Orderline"; static props = { diff --git a/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.js b/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.js index 937e279bc8b..99555c73835 100644 --- a/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.js +++ b/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.js @@ -117,32 +117,14 @@ export class TicketScreen extends Component { } } onClickOrder(clickedOrder) { - if (!clickedOrder || clickedOrder.locked) { - this._state.ui.selectedOrder = clickedOrder; - if (!this.getSelectedOrderlineId()) { - // Automatically select the first orderline of the selected order. - const firstLine = this._state.ui.selectedOrder.get_orderlines()[0]; - if (firstLine) { - this._state.ui.selectedOrderlineIds[clickedOrder.backendId] = firstLine.id; - } + this._state.ui.selectedOrder = clickedOrder; + this.numberBuffer.reset(); + if ((!clickedOrder || clickedOrder.locked) && !this.getSelectedOrderlineId()) { + // Automatically select the first orderline of the selected order. + const firstLine = this._state.ui.selectedOrder.get_orderlines()[0]; + if (firstLine) { + this._state.ui.selectedOrderlineIds[clickedOrder.backendId] = firstLine.id; } - this.numberBuffer.reset(); - } else { - if ( - !this._state.ui.selectedOrder || - clickedOrder.uid !== this._state.ui.selectedOrder.uid - ) { - this.dbclk_time = new Date().getTime(); - } else if (!this.dbclk_time) { - this.dbclk_time = new Date().getTime(); - } else if (this.dbclk_time + 500 > new Date().getTime()) { - this._setOrder(clickedOrder); - this.dbclk_time = 0; - } else { - this.dbclk_time = new Date().getTime(); - } - this._state.ui.selectedOrder = clickedOrder; - this.numberBuffer.reset(); } } onCreateNewOrder() { @@ -191,9 +173,6 @@ export class TicketScreen extends Component { if (this.pos.isOpenOrderShareable()) { this.pos._removeOrdersFromServer(); } - // When deleting an order, the double click time should be reset, so that it's not taken into account - // when clicking on another order. - this.dbclk_time = 0; } async onNextPage() { if (this._state.syncedOrders.currentPage < this._getLastPage()) { @@ -650,8 +629,7 @@ export class TicketScreen extends Component { modelField: "pos_reference", }, DATE: { - repr: (order) => - deserializeDate(order.date_order).toFormat("yyyy-MM-dd HH:mm a"), + repr: (order) => deserializeDate(order.date_order).toFormat("yyyy-MM-dd HH:mm a"), displayName: _t("Date"), modelField: "date_order", }, diff --git a/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.xml b/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.xml index e8916302632..dd5a97f3236 100644 --- a/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.xml +++ b/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.xml @@ -59,7 +59,8 @@
-
+
@@ -88,7 +89,8 @@
-
+
diff --git a/addons/point_of_sale/static/tests/tours/helpers/TicketScreenTourMethods.js b/addons/point_of_sale/static/tests/tours/helpers/TicketScreenTourMethods.js index d1900666e66..b2ccc0af477 100644 --- a/addons/point_of_sale/static/tests/tours/helpers/TicketScreenTourMethods.js +++ b/addons/point_of_sale/static/tests/tours/helpers/TicketScreenTourMethods.js @@ -41,6 +41,14 @@ class Do { }, ]; } + doubleClickOrder(orderName) { + return [ + { + trigger: `.ticket-screen .order-row > .col:nth-child(2):contains("${orderName}")`, + run: "dblclick", + }, + ]; + } loadSelectedOrder() { return [ { diff --git a/addons/pos_restaurant/static/tests/tours/TicketScreen.tour.js b/addons/pos_restaurant/static/tests/tours/TicketScreen.tour.js index e78d447201f..d993b17156c 100644 --- a/addons/pos_restaurant/static/tests/tours/TicketScreen.tour.js +++ b/addons/pos_restaurant/static/tests/tours/TicketScreen.tour.js @@ -47,8 +47,7 @@ registry Chrome.do.clickTicketButton(); TicketScreen.do.deleteOrder("-0003"); Chrome.do.confirmPopup(); - TicketScreen.do.selectOrder("-0002"); - TicketScreen.do.loadSelectedOrder(); + TicketScreen.do.doubleClickOrder("-0002"); ProductScreen.check.isShown(); ProductScreen.check.totalAmountIs("2.0"); Chrome.do.backToFloor();