From e18eeca7d1b1cf47c72f8aa2c0348cdb8649d0d6 Mon Sep 17 00:00:00 2001 From: roen-odoo Date: Thu, 14 Apr 2022 15:29:29 +0000 Subject: [PATCH] [FIX] pos_hr: save cashier correctly in db Current behavior: In PoS restaurant cashier were not saved correctly in db if you switched table before making the payment of the order. Steps to reproduce: - Install PoS - Activate restaurant on one of your PoS - Activate Authorized employee - Start a PoS session, and select a cashier - Create an order on a table - Leave the table and comeback to it - Make the payment for the order - Go in the PoS orders, the cashier wasn't saved opw-2794574 closes odoo/odoo#91447 X-original-commit: 2c6ea058f9f8cfaf75529ff4028913a59f021ab8 Signed-off-by: Masereel Pierre Signed-off-by: Trinh Jacky (trj) Signed-off-by: Engels Robin (roen) --- addons/point_of_sale/models/pos_order.py | 3 +++ addons/pos_hr/models/pos_order.py | 5 +++++ addons/pos_hr/static/src/js/models.js | 2 +- addons/pos_restaurant/models/pos_order.py | 12 ++++++++---- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py index 33af3087e86..670c88b8613 100644 --- a/addons/point_of_sale/models/pos_order.py +++ b/addons/point_of_sale/models/pos_order.py @@ -104,6 +104,9 @@ class PosOrder(models.Model): return new_session + def _get_fields_for_draft_order(self): + """This method is here to be overridden in order to add fields that are required for draft orders.""" + return [] @api.model def _process_order(self, order, draft, existing_order): diff --git a/addons/pos_hr/models/pos_order.py b/addons/pos_hr/models/pos_order.py index f11c6c2e2d2..f702f57dee9 100644 --- a/addons/pos_hr/models/pos_order.py +++ b/addons/pos_hr/models/pos_order.py @@ -28,3 +28,8 @@ class PosOrder(models.Model): 'employee_id': order.employee_id.id, }) return result + + def _get_fields_for_draft_order(self): + fields = super(PosOrder, self)._get_fields_for_draft_order() + fields.append('employee_id') + return fields diff --git a/addons/pos_hr/static/src/js/models.js b/addons/pos_hr/static/src/js/models.js index e6af39c7e9c..328651bb7b4 100644 --- a/addons/pos_hr/static/src/js/models.js +++ b/addons/pos_hr/static/src/js/models.js @@ -65,7 +65,7 @@ const PosHrOrder = (Order) => class PosHrOrder extends Order { } init_from_JSON(json) { super.init_from_JSON(...arguments); - if (this.pos.config.module_pos_hr) { + if (this.pos.config.module_pos_hr && json.employee_id) { this.cashier = this.pos.employee_by_id[json.employee_id]; } } diff --git a/addons/pos_restaurant/models/pos_order.py b/addons/pos_restaurant/models/pos_order.py index dffd7e830a7..25cfd42d3fc 100644 --- a/addons/pos_restaurant/models/pos_order.py +++ b/addons/pos_restaurant/models/pos_order.py @@ -132,7 +132,8 @@ class PosOrder(models.Model): next(order for order in orders if order['id'] == order_id[0])['statement_ids'] = list(payment_lines) def _get_fields_for_draft_order(self): - return [ + fields = super(PosOrder, self)._get_fields_for_draft_order() + fields.extend([ 'id', 'pricelist_id', 'partner_id', @@ -146,7 +147,8 @@ class PosOrder(models.Model): 'table_id', 'to_invoice', 'multiprint_resume', - ] + ]) + return fields @api.model def get_table_draft_orders(self, table_id): @@ -160,8 +162,8 @@ class PosOrder(models.Model): :returns: list -- list of dict representing the table orders """ table_orders = self.search_read( - domain = [('state', '=', 'draft'), ('table_id', '=', table_id)], - fields = self._get_fields_for_draft_order()) + domain=[('state', '=', 'draft'), ('table_id', '=', table_id)], + fields=self._get_fields_for_draft_order()) self._get_order_lines(table_orders) self._get_payment_lines(table_orders) @@ -180,6 +182,8 @@ class PosOrder(models.Model): order['partner_id'] = order['partner_id'][0] if order['table_id']: order['table_id'] = order['table_id'][0] + if order['employee_id']: + order['employee_id'] = order['employee_id'][0] if order['employee_id'] else False if not 'lines' in order: order['lines'] = []