From 0c3d7dc0928906694d203e41385b38d0379ce16f Mon Sep 17 00:00:00 2001 From: Simone Rubino Date: Mon, 2 Dec 2024 14:21:52 +0100 Subject: [PATCH] [FIX] product_configurator_sale: Allow user to configure sale products --- product_configurator_sale/__manifest__.py | 7 ++- .../security/ir.model.access.csv | 1 + .../tests/test_sale_order_line.py | 56 ++++++++++++++++++- .../wizard/product_configurator.py | 9 +-- 4 files changed, 64 insertions(+), 9 deletions(-) diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py index 0759141da0..b437ff2bbd 100644 --- a/product_configurator_sale/__manifest__.py +++ b/product_configurator_sale/__manifest__.py @@ -8,7 +8,12 @@ "author": "Pledra, Odoo Community Association (OCA)", "license": "AGPL-3", "website": "https://github.com/OCA/product-configurator", - "depends": ["sale_management", "product_configurator", "stock"], + "depends": [ + "onchange_helper", + "product_configurator", + "sale_management", + "stock", + ], "data": [ "security/ir.model.access.csv", "data/menu_product.xml", diff --git a/product_configurator_sale/security/ir.model.access.csv b/product_configurator_sale/security/ir.model.access.csv index 443de5193e..95b34f18ce 100644 --- a/product_configurator_sale/security/ir.model.access.csv +++ b/product_configurator_sale/security/ir.model.access.csv @@ -1,3 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_product_configurator_sale,product_configurator_sale,model_product_configurator_sale,base.group_user,1,0,0,0 +access_product_configurator_sale_user,Product Configurator User for Product Configurator Sale wizard,model_product_configurator_sale,product_configurator.group_product_configurator,1,1,1,0 access_product_configurator_sale_manager,product_configurator_sale,model_product_configurator_sale,product_configurator.group_product_configurator_manager,1,1,1,1 diff --git a/product_configurator_sale/tests/test_sale_order_line.py b/product_configurator_sale/tests/test_sale_order_line.py index d7831a9268..7f7f614105 100644 --- a/product_configurator_sale/tests/test_sale_order_line.py +++ b/product_configurator_sale/tests/test_sale_order_line.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo.fields import first -from odoo.tests import Form +from odoo.tests import Form, new_test_user from odoo.addons.base.tests.common import BaseCommon @@ -11,6 +11,24 @@ class TestSaleOrderLine(BaseCommon): @classmethod def setUpClass(cls): super().setUpClass() + cls.configurator_manager_group_xmlid = ( + "product_configurator.group_product_configurator_manager" + ) + cls.configurator_user_group_xmlid = ( + "product_configurator.group_product_configurator" + ) + cls.sale_user_group_xmlid = "sales_team.group_sale_salesman" + cls.configurator_user = new_test_user( + cls.env, + login="sale configurator user", + groups=",".join( + [ + cls.configurator_user_group_xmlid, + cls.sale_user_group_xmlid, + ] + ), + ) + cls.customer = cls.env["res.partner"].create( { "name": "Test partner", @@ -118,3 +136,39 @@ def test_config_session_change_price_unit(self): # Changing the configuration session changes the unit price order_line_20.config_session_id = config_session_10 self.assertEqual(config_session_10.price, order_line_20.price_unit) + + def test_user_access(self): + """A configurator and sale user + can configure and add products to sale orders.""" + # Arrange + configurator_user = self.configurator_user + product_template = self.product_template + ptavs = product_template.attribute_line_ids.product_template_value_ids + ptav_10 = first(ptavs) + attribute = ptav_10.attribute_id + + with self.with_user(configurator_user.login): + sale_order = self.env["sale.order"].create( + { + "partner_id": self.customer.id, + } + ) + # pre-condition + self.assertFalse(sale_order.order_line) + self.assertFalse( + self.env.user.has_group(self.configurator_manager_group_xmlid) + ) + self.assertTrue(self.env.user.has_group(self.configurator_user_group_xmlid)) + self.assertTrue(self.env.user.has_group(self.sale_user_group_xmlid)) + + # Act + self._configure_product( + sale_order, + product_template, + { + attribute: ptav_10, + }, + ) + + # Assert + self.assertTrue(sale_order.order_line) diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py index 56da7b142a..7195aebcb0 100644 --- a/product_configurator_sale/wizard/product_configurator.py +++ b/product_configurator_sale/wizard/product_configurator.py @@ -34,14 +34,9 @@ def action_config_done(self): model_name = "sale.order.line" line_vals = self._get_order_line_vals(res["res_id"]) - # Call onchange explicite as write and create + # Call onchange explicitly as write and create # will not trigger onchange automatically - order_line_obj = self.env[model_name] - cfg_session = self.config_session_id - specs = cfg_session.get_onchange_specifications(model=model_name) - updates = order_line_obj.onchange(line_vals, ["product_id"], specs) - values = updates.get("value", {}) - values = cfg_session.get_vals_to_write(values=values, model=model_name) + values = self.env[model_name].play_onchanges(line_vals, ["product_id"]) values.update(line_vals) if self.order_line_id: