From a04adfac938eb4c73dcf1acf26f8d497cfd9f84b Mon Sep 17 00:00:00 2001 From: "Adrien Guilliams (adgu)" Date: Thu, 27 Apr 2023 13:30:01 +0000 Subject: [PATCH] [FIX] pos: fix pos traceback when delete order This commit resolves 2 bugs. The first one is that, in a PoS without pos_restaurant installed, if we delete the last order of the list, we get a traceback. This is resolved by adding an empty order if there is no order left in the order list. task-id: task-id: 3291831 The second bug is that, with pos_restaurant installed, when going to a retail PoS, if we createan order with some products, then create a new order from the TicketScreen, add some products, go the the TicketScreen and delete the current order and then click back, we have in the ProductScreen the order that is supposed to be deleted. This order doesn't show up in the ticket screen anymore. This comes from the fact that the _selectNextOrder function is not correctly implemented, leading to the next order not being chosen because we do not have a table (we are in classic PoS). This fix resolves this problem by changing the _selectNextOrder function and the newly added addOrderIfEmpty function in models.js. closes odoo/odoo#122269 Task-id: 3291821 X-original-commit: cd956daf21695bef4753301fe29a6ece1e97d32a Signed-off-by: Monnom David (moda) Signed-off-by: Guilliams Adrien (adgu) --- .../point_of_sale/static/src/app/pos_store.js | 7 ++++ .../static/tests/tours/TicketScreen.tour.js | 38 ++++++++++++++----- .../static/src/app/pos_store.js | 5 +++ .../static/src/js/Screens/TicketScreen.js | 6 --- 4 files changed, 41 insertions(+), 15 deletions(-) diff --git a/addons/point_of_sale/static/src/app/pos_store.js b/addons/point_of_sale/static/src/app/pos_store.js index 3bd14b15478..04292576d89 100644 --- a/addons/point_of_sale/static/src/app/pos_store.js +++ b/addons/point_of_sale/static/src/app/pos_store.js @@ -78,10 +78,17 @@ export class PosStore extends Reactive { order.updateLastOrderChange(); } closeScreen() { + this.addOrderIfEmpty(); const { name: screenName } = this.globalState.get_order().get_screen_data(); this.showScreen(screenName); } + addOrderIfEmpty() { + if (!this.globalState.get_order()) { + this.globalState.add_new_order(); + } + } + connectToProxy() { return new Promise((resolve, reject) => { this.barcodeReader?.disconnectFromProxy(); diff --git a/addons/point_of_sale/static/tests/tours/TicketScreen.tour.js b/addons/point_of_sale/static/tests/tours/TicketScreen.tour.js index efc5f8e66ca..dea24a75eae 100644 --- a/addons/point_of_sale/static/tests/tours/TicketScreen.tour.js +++ b/addons/point_of_sale/static/tests/tours/TicketScreen.tour.js @@ -14,6 +14,26 @@ startSteps(); ProductScreen.do.confirmOpeningPopup(); ProductScreen.do.clickHomeCategory(); +Chrome.do.clickMenuButton(); +Chrome.do.clickTicketButton(); +TicketScreen.do.clickNewTicket(); +ProductScreen.exec.addOrderline("Desk Pad", "1", "3"); +Chrome.do.clickMenuButton(); +Chrome.do.clickTicketButton(); +TicketScreen.do.deleteOrder("-0002"); +Chrome.do.confirmPopup(); +TicketScreen.do.clickDiscard(); +ProductScreen.check.orderIsEmpty(); +ProductScreen.exec.addOrderline("Desk Pad", "1", "2"); +Chrome.do.clickMenuButton(); +Chrome.do.clickTicketButton(); +TicketScreen.do.deleteOrder("-0001"); +Chrome.do.confirmPopup(); +TicketScreen.do.clickDiscard(); +Chrome.do.clickMenuButton(); +Chrome.do.clickTicketButton(); +TicketScreen.check.nthRowContains(2, "-0003"); +TicketScreen.do.clickDiscard(); ProductScreen.exec.addOrderline("Desk Pad", "1", "2"); ProductScreen.do.clickPartnerButton(); ProductScreen.do.clickCustomer("Nicole Ford"); @@ -50,7 +70,7 @@ TicketScreen.do.search("Customer", "Nicole"); TicketScreen.check.nthRowContains(2, "Nicole"); TicketScreen.do.search("Customer", "Brandon"); TicketScreen.check.nthRowContains(2, "Brandon"); -TicketScreen.do.search("Receipt Number", "-0003"); +TicketScreen.do.search("Receipt Number", "-0005"); TicketScreen.check.nthRowContains(2, "Receipt"); // Close the TicketScreen to see the current order which is in ReceiptScreen. // This is just to remove the search string in the search bar. @@ -60,10 +80,10 @@ ReceiptScreen.check.isShown(); Chrome.do.clickMenuButton(); Chrome.do.clickTicketButton(); TicketScreen.do.selectFilter("Paid"); -TicketScreen.check.nthRowContains(2, "-0003"); +TicketScreen.check.nthRowContains(2, "-0005"); // Pay the order that was in PaymentScreen. TicketScreen.do.selectFilter("Payment"); -TicketScreen.do.selectOrder("-0002"); +TicketScreen.do.selectOrder("-0004"); PaymentScreen.do.clickPaymentMethod("Cash"); PaymentScreen.do.clickValidate(); ReceiptScreen.check.isShown(); @@ -74,9 +94,9 @@ Chrome.do.clickMenuButton(); Chrome.do.clickTicketButton(); TicketScreen.do.selectFilter("Paid"); TicketScreen.check.nthRowContains(3, "Brandon Freeman"); -TicketScreen.check.nthRowContains(2, "-0003"); +TicketScreen.check.nthRowContains(2, "-0005"); // Invoice order -TicketScreen.do.selectOrder("-0003"); +TicketScreen.do.selectOrder("-0005"); TicketScreen.check.orderWidgetIsNotEmpty(); TicketScreen.do.clickControlButton("Invoice"); Chrome.do.confirmPopup(); @@ -97,7 +117,7 @@ ProductScreen.check.orderIsEmpty(); ProductScreen.do.clickRefund(); // Filter should be automatically 'Paid'. TicketScreen.check.filterIs("Paid"); -TicketScreen.do.selectOrder("-0003"); +TicketScreen.do.selectOrder("-0005"); TicketScreen.check.partnerIs("Colleen Diaz"); TicketScreen.do.clickOrderline("Desk Pad"); TicketScreen.do.pressNumpad("3"); @@ -108,7 +128,7 @@ TicketScreen.do.clickDiscard(); ProductScreen.check.isShown(); ProductScreen.check.orderIsEmpty(); ProductScreen.do.clickRefund(); -TicketScreen.do.selectOrder("-0003"); +TicketScreen.do.selectOrder("-0005"); TicketScreen.do.clickOrderline("Desk Pad"); TicketScreen.do.pressNumpad("1"); TicketScreen.check.toRefundTextContains("To Refund: 1.00"); @@ -128,7 +148,7 @@ ProductScreen.do.pressNumpad("+/- 2"); ProductScreen.check.selectedOrderlineHas("Desk Pad", "-2.00"); // Check if the amount being refunded changed to 2. ProductScreen.do.clickRefund(); -TicketScreen.do.selectOrder("-0003"); +TicketScreen.do.selectOrder("-0005"); TicketScreen.check.toRefundTextContains("Refunding 2.00"); TicketScreen.do.clickDiscard(); // Pay the refund order. @@ -139,7 +159,7 @@ ReceiptScreen.check.isShown(); ReceiptScreen.do.clickNextOrder(); // Check refunded quantity. ProductScreen.do.clickRefund(); -TicketScreen.do.selectOrder("-0003"); +TicketScreen.do.selectOrder("-0005"); TicketScreen.check.refundedNoteContains("2.00 Refunded"); registry.category("web_tour.tours").add("TicketScreenTour", { test: true, url: "/pos/ui", steps: getSteps() }); diff --git a/addons/pos_restaurant/static/src/app/pos_store.js b/addons/pos_restaurant/static/src/app/pos_store.js index cde032ae44c..119a3cea933 100644 --- a/addons/pos_restaurant/static/src/app/pos_store.js +++ b/addons/pos_restaurant/static/src/app/pos_store.js @@ -77,6 +77,11 @@ patch(PosStore.prototype, "pos_restaurant.PosStore", { } return this._super(...arguments); }, + addOrderIfEmpty() { + if (!this.globalState.config.module_pos_restaurant) { + return this._super(...arguments); + } + }, /** * @override * Before closing pos, we remove the event listeners set on window diff --git a/addons/pos_restaurant/static/src/js/Screens/TicketScreen.js b/addons/pos_restaurant/static/src/js/Screens/TicketScreen.js index 5fad0f13b46..e8c9bf7140b 100644 --- a/addons/pos_restaurant/static/src/js/Screens/TicketScreen.js +++ b/addons/pos_restaurant/static/src/js/Screens/TicketScreen.js @@ -72,12 +72,6 @@ patch(TicketScreen.prototype, "pos_restaurant.TicketScreen", { } }, //@override - _selectNextOrder(currentOrder) { - if (this.pos.globalState.config.module_pos_restaurant && this.pos.globalState.table) { - return this._super(...arguments); - } - }, - //@override async onDeleteOrder(order) { const _super = this._super; const { globalState } = this.pos;