[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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user