From ea55c00f6a88ea7171a11b97bc0e0c37e76c66fb Mon Sep 17 00:00:00 2001 From: sonhd91 <sonhd@trobz.com> Date: Mon, 26 Feb 2024 16:37:39 +0700 Subject: [PATCH] [IMP]product_packaging_level: recover name_get policy flow --- .../models/product_packaging.py | 24 ++++++++++++++++--- .../tests/test_product_packaging_level.py | 5 +--- .../views/product_packaging_view.xml | 6 +++++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/product_packaging_level/models/product_packaging.py b/product_packaging_level/models/product_packaging.py index 95e128ac92b..849a4963e3a 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,28 @@ 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.change_name_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.change_name_policy() + else: + return super()._compute_display_name() + + def change_name_policy(self): new_name = self.name if self.name_policy == "by_package_level": 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/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_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 @@ <field name="model">product.packaging</field> <field name="inherit_id" ref="stock.product_packaging_form_view" /> <field name="arch" type="xml"> + <field name="name" position="before"> + <field name="display_name" string="Packaging" /> + </field> + <field name="name" position="attributes"> + <attribute name="invisible">1</attribute> + </field> <xpath expr="//field[@name='product_id']" position="before"> <field name="name_policy" invisible="1" /> </xpath>