[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) <moda@odoo.com>
Signed-off-by: Guilliams Adrien (adgu) <adgu@odoo.com>
This commit is contained in:
Adrien Guilliams (adgu)
2023-05-24 14:28:25 +02:00
parent 314b19610c
commit a04adfac93
4 changed files with 41 additions and 15 deletions
@@ -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();
@@ -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() });
@@ -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
@@ -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;