[FIX] point_of_sale, pos_self_order: prevent duplicate orders in kiosk

Issue:
- when an order is created through the kiosk, the order appears several
times on the cashiers side.

Steps to Reproduce:
- Make an order in the POS kiosk.
- In the backend, navigate to the kiosk's session and select
  "Continue Selling."
- Click on "Orders" located on the top right.
- Observe that the order appears multiple times on the cashier's side.

Solution:
- added _get_shared_orders that retrieve orders without duplicates.

opw-3597973

closes odoo/odoo#149049

Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
This commit is contained in:
kdeb@odoo.com
2024-02-20 13:22:07 +00:00
parent 0751d887e6
commit 524ec9062e
4 changed files with 36 additions and 5 deletions
+6 -1
View File
@@ -1186,9 +1186,14 @@ class PosOrder(models.Model):
@api.model
def export_for_ui_shared_order(self, config_id):
orders = self._get_shared_orders(config_id)
return orders.export_for_ui()
@api.model
def _get_shared_orders(self, config_id):
config = self.env['pos.config'].browse(config_id)
orders = self.env['pos.order'].search(['&', ('state', '=', 'draft'), '|', ('config_id', '=', config_id), ('config_id', 'in', config.trusted_config_ids.ids)])
return orders.export_for_ui()
return orders
def export_for_ui(self):
""" Returns a list of dict with each item having similar signature as the return of
+4 -4
View File
@@ -161,10 +161,10 @@ class PosOrder(models.Model):
return orders
@api.model
def export_for_ui_shared_order(self, config_id):
orders = super().export_for_ui_shared_order(config_id)
self_orders = self.get_standalone_self_order().export_for_ui()
return orders + self_orders
def _get_shared_orders(self, config_id):
orders = super()._get_shared_orders(config_id)
self_orders = self.get_standalone_self_order()
return orders | self_orders
@api.model
def export_for_ui_table_draft(self, table_ids):
@@ -98,3 +98,17 @@ registry.category("web_tour.tours").add("self_order_kiosk_cancel", {
Utils.checkIsDisabledBtn("Order"),
],
});
registry.category("web_tour.tours").add("self_simple_order", {
test: true,
steps: () => [
Utils.checkIsNoBtn("My Order"),
Utils.clickBtn("Order Now"),
ProductPage.clickProduct("Coca-Cola"),
Utils.clickBtn("Order"),
CartPage.checkProduct("Coca-Cola", "2.53", "1"),
Utils.clickBtn("Pay"),
Utils.clickBtn("Close"),
Utils.checkIsNoBtn("My Order"),
],
});
@@ -32,3 +32,15 @@ class TestSelfOrderKiosk(SelfOrderCommonTest):
# Cancel behavior
self.start_tour(self_route, "self_order_kiosk_cancel")
def test_duplicate_order_kiosk(self):
self.pos_config.write({
'self_ordering_takeaway': False,
'self_ordering_mode': 'kiosk',
'self_ordering_pay_after': 'each',
})
self.pos_config.with_user(self.pos_user).open_ui()
self_route = self.pos_config._get_self_order_route()
self.start_tour(self_route, "self_simple_order")
orders = self.pos_config.current_session_id.order_ids
self.assertEqual(len(orders.export_for_ui_shared_order(self.pos_config.id)), 1)