diff --git a/product_packaging_level/models/product_packaging.py b/product_packaging_level/models/product_packaging.py index 95e128ac92b..98d2d7ccdbb 100644 --- a/product_packaging_level/models/product_packaging.py +++ b/product_packaging_level/models/product_packaging.py @@ -10,6 +10,7 @@ class ProductPackaging(models.Model): _inherit = "product.packaging" _order = "product_id, level_sequence" + name = fields.Char(compute="_compute_name", store=True, readonly=False) packaging_level_id = fields.Many2one( "product.packaging.level", required=True, @@ -126,11 +127,30 @@ def _onchange_package_type(self): if package_type_level_id: self.packaging_level_id = package_type_level_id - @api.onchange("packaging_level_id", "package_type_id", "name", "name_policy") - def _onchange_name(self): + @api.depends( + "package_type_id", + "name_policy", + "packaging_level_id", + ) + def _compute_name(self): + for rec in self: + rec.name = rec._get_name_from_policy() + + # Keep this method to respect translations on level name + @api.depends("product_id", "packaging_level_id", "name_policy") + def _compute_display_name(self): + for record in self: + if record.product_id and record.packaging_level_id: + record.display_name = record._get_name_from_policy(lang=self.env.lang) + else: + return super()._compute_display_name() + + def _get_name_from_policy(self, lang=None): new_name = self.name if self.name_policy == "by_package_level": + lang = lang or self.packaging_level_id.default_lang_id.code + self = self.with_context(lang=lang) new_name = self.packaging_level_id.display_name elif self.name_policy == "by_package_type": new_name = self.package_type_id.name - self.name = new_name + return new_name diff --git a/product_packaging_level/models/product_packaging_level.py b/product_packaging_level/models/product_packaging_level.py index 10b81f17d6d..e9642dead4c 100644 --- a/product_packaging_level/models/product_packaging_level.py +++ b/product_packaging_level/models/product_packaging_level.py @@ -9,12 +9,24 @@ class ProductPackagingLevel(models.Model): _description = "Level management for product.packaging" _order = "sequence, code" + def _default_language(self): + lang_code = self.env["ir.default"].get("res.partner", "lang") + def_lang_id = self.env["res.lang"]._lang_get_id(lang_code) + return def_lang_id or self._active_languages()[0] + name = fields.Char(required=True, translate=True) code = fields.Char(required=True) sequence = fields.Integer(required=True) has_gtin = fields.Boolean() active = fields.Boolean(default=True) is_default = fields.Boolean() + default_lang_id = fields.Many2one( + "res.lang", + string="Default Language", + default=lambda self: self._default_language(), + required=True, + ) + name_policy = fields.Selection( selection=[ ("by_package_level", "Package Level Name"), diff --git a/product_packaging_level/tests/test_product_packaging_level.py b/product_packaging_level/tests/test_product_packaging_level.py index cbbaf6818e0..356b5cb5b5f 100644 --- a/product_packaging_level/tests/test_product_packaging_level.py +++ b/product_packaging_level/tests/test_product_packaging_level.py @@ -39,7 +39,7 @@ def test_display_name(self): def test_name_by_level(self): self.packaging.name_policy = "by_package_level" - self.assertEqual(self.packaging.name, "Packaging Test") + self.assertEqual(self.packaging.name, "Packaging Level Test (TEST2)") def test_name_by_package_type(self): # Required for `package_type_id` to be visible in the view @@ -48,7 +48,6 @@ def test_name_by_package_type(self): ) self.packaging.name_policy = "by_package_type" self.packaging.package_type_id = self.package_type_box - self.packaging._onchange_name() self.assertEqual(self.packaging.name, "Box") def test_name_by_user_defined(self): @@ -61,12 +60,10 @@ def test_name_by_user_defined(self): self.packaging.name = packaging_name # try to change package_type_id self.packaging.package_type_id = self.package_type_box - self.packaging._onchange_name() self.assertEqual(self.packaging.name, packaging_name) # try to change packaging level self.packaging.packaging_level_id = self.level - self.packaging._onchange_name() self.assertEqual(self.packaging.name, packaging_name) def test_name_by_package_type_without_group_tracking_lot(self): diff --git a/product_packaging_level/views/product_packaging_level_view.xml b/product_packaging_level/views/product_packaging_level_view.xml index 3360e574fdb..12ae00f226d 100644 --- a/product_packaging_level/views/product_packaging_level_view.xml +++ b/product_packaging_level/views/product_packaging_level_view.xml @@ -30,6 +30,10 @@ + diff --git a/product_packaging_level/views/product_packaging_view.xml b/product_packaging_level/views/product_packaging_view.xml index 8b8c89c7292..ea7dc3ce548 100644 --- a/product_packaging_level/views/product_packaging_view.xml +++ b/product_packaging_level/views/product_packaging_view.xml @@ -31,6 +31,12 @@ product.packaging + + + + + 1 +