Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][IMP]product_packaging_level: recover name_get policy flow #1527

Merged
merged 1 commit into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 23 additions & 3 deletions product_packaging_level/models/product_packaging.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
12 changes: 12 additions & 0 deletions product_packaging_level/models/product_packaging_level.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
Expand Down
31 changes: 26 additions & 5 deletions product_packaging_level/tests/test_product_packaging_level.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ class TestProductPackagingLevel(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env.ref("base.lang_fr").active = True

cls.default_level = cls.env.ref(
"product_packaging_level.product_packaging_level_default"
)
Expand All @@ -18,13 +20,29 @@ def setUpClass(cls):
"sequence": 2,
}
)

cls.level_fr = cls.env["product.packaging.level"].create(
{
"name": "Packaging Level Test",
"code": "TEST3",
"sequence": 2,
"default_lang_id": cls.env.ref("base.lang_fr").id,
}
)
cls.level_fr.with_context(lang="fr_FR").name = "Packaging Level Test France"
cls.packaging_default = cls.env["product.packaging"].create(
{"name": "Packaging Default", "qty": 1.0}
)
cls.packaging = cls.env["product.packaging"].create(
{"name": "Packaging Test", "packaging_level_id": cls.level.id, "qty": 1.0}
)

cls.packaging_fr = cls.env["product.packaging"].create(
{
"name": "Packaging Test",
"packaging_level_id": cls.level_fr.id,
"qty": 1.0,
}
)
cls.product = cls.env["product.template"].create(
{"name": "Product Test", "packaging_ids": [(6, 0, cls.packaging.ids)]}
)
Expand All @@ -39,7 +57,13 @@ 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)")
self.assertEqual(self.packaging.display_name, "Packaging Level Test (TEST2)")
self.packaging_fr.name_policy = "by_package_level"
self.assertEqual(self.packaging_fr.name, "Packaging Level Test France (TEST3)")
self.assertEqual(
self.packaging_fr.display_name, "Packaging Level Test France (TEST3)"
)

def test_name_by_package_type(self):
# Required for `package_type_id` to be visible in the view
Expand All @@ -48,7 +72,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):
Expand All @@ -61,12 +84,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):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
<field name="code" />
<field name="has_gtin" />
<field name="name_policy" />
<field
name="default_lang_id"
help="Language option for packaging names used in case policy names is packaging by levels"
/>
</group>
<group name="misc">
<field name="sequence" />
Expand Down
6 changes: 6 additions & 0 deletions product_packaging_level/views/product_packaging_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
Loading