From f4e9dd9ec37cb31ae9b30b17776d535642aff8f7 Mon Sep 17 00:00:00 2001 From: Joseph Caburnay Date: Fri, 3 Nov 2023 16:14:08 +0100 Subject: [PATCH] [FIX] point_of_sale: discount product as special closes odoo/odoo#141001 Related: odoo/enterprise#50282 Signed-off-by: Adrien Guilliams (adgu) --- addons/point_of_sale/models/pos_config.py | 4 ++-- addons/point_of_sale/models/pos_session.py | 4 ++-- addons/pos_discount/models/pos_config.py | 8 ++++---- addons/pos_sale/models/pos_config.py | 7 +++---- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/addons/point_of_sale/models/pos_config.py b/addons/point_of_sale/models/pos_config.py index 9f878edd7b0..9972d59405a 100644 --- a/addons/point_of_sale/models/pos_config.py +++ b/addons/point_of_sale/models/pos_config.py @@ -798,5 +798,5 @@ class PosConfig(models.Model): return pm return False - def _get_special_products_ids(self): - return [self.env.ref('point_of_sale.product_product_tip').id] + def _get_special_products(self): + return self.env.ref('point_of_sale.product_product_tip', raise_if_not_found=False) or self.env['product.product'] diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py index 9680e391ed4..ef7545efae8 100644 --- a/addons/point_of_sale/models/pos_session.py +++ b/addons/point_of_sale/models/pos_session.py @@ -1681,7 +1681,7 @@ class PosSession(models.Model): loaded_data['attributes_by_ptal_id'] = self._get_attributes_by_ptal_id() loaded_data['base_url'] = self.get_base_url() loaded_data['pos_has_valid_product'] = self._pos_has_valid_product() - loaded_data['pos_special_products_ids'] = self.env['pos.config']._get_special_products_ids() + loaded_data['pos_special_products_ids'] = self.env['pos.config']._get_special_products().ids loaded_data['open_orders'] = self.env['pos.order'].search([('session_id', '=', self.id), ('state', '=', 'draft')]).export_for_ui() @api.model @@ -2215,7 +2215,7 @@ class PosSession(models.Model): self.message_post(body=body, author_id=partner_id) def _pos_has_valid_product(self): - return self.env['product.product'].sudo().search_count([('available_in_pos', '=', True), ('list_price', '>=', 0), ('id', 'not in', self.env['pos.config']._get_special_products_ids()), '|', ('active', '=', False), ('active', '=', True)], limit=1) > 0 + return self.env['product.product'].sudo().search_count([('available_in_pos', '=', True), ('list_price', '>=', 0), ('id', 'not in', self.env['pos.config']._get_special_products().ids), '|', ('active', '=', False), ('active', '=', True)], limit=1) > 0 @api.model def _load_onboarding_data(self): diff --git a/addons/pos_discount/models/pos_config.py b/addons/pos_discount/models/pos_config.py index b792a311d98..dbb90999138 100644 --- a/addons/pos_discount/models/pos_config.py +++ b/addons/pos_discount/models/pos_config.py @@ -32,7 +32,7 @@ class PosConfig(models.Model): raise UserError(_('A discount product is needed to use the Global Discount feature. Go to Point of Sale > Configuration > Settings to set it.')) return super().open_ui() - def _get_special_products_ids(self): - res = super()._get_special_products_ids() - res += self.env['pos.config'].search([]).mapped('discount_product_id').ids - return res + def _get_special_products(self): + res = super()._get_special_products() + default_discount_product = self.env.ref('point_of_sale.product_product_consumable', raise_if_not_found=False) or self.env['product.product'] + return res | self.env['pos.config'].search([]).mapped('discount_product_id') | default_discount_product diff --git a/addons/pos_sale/models/pos_config.py b/addons/pos_sale/models/pos_config.py index 01de9659ca7..af7233c4e82 100644 --- a/addons/pos_sale/models/pos_config.py +++ b/addons/pos_sale/models/pos_config.py @@ -14,7 +14,6 @@ class PosConfig(models.Model): string="Down Payment Product", help="This product will be used as down payment on a sale order.") - def _get_special_products_ids(self): - res = super()._get_special_products_ids() - res += self.env['pos.config'].search([]).mapped('down_payment_product_id').ids - return res + def _get_special_products(self): + res = super()._get_special_products() + return res | self.env['pos.config'].search([]).mapped('down_payment_product_id')