From 1959eaad532a4219d3a330b20bb89e8590916e7e Mon Sep 17 00:00:00 2001 From: Souheil Bejaoui Date: Wed, 25 Mar 2026 10:45:03 +0100 Subject: [PATCH 1/2] [IMP] uom_unece: cache UNECE code mapping add an ormcache based helper to map UNECE codes to UoM --- uom_unece/models/uom_uom.py | 33 ++++++++++++++++++++++- uom_unece/tests/__init__.py | 1 + uom_unece/tests/test_uom_unece.py | 44 +++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 uom_unece/tests/__init__.py create mode 100644 uom_unece/tests/test_uom_unece.py diff --git a/uom_unece/models/uom_uom.py b/uom_unece/models/uom_uom.py index ab0e0419c..905027268 100644 --- a/uom_unece/models/uom_uom.py +++ b/uom_unece/models/uom_uom.py @@ -2,7 +2,8 @@ # @author: Alexis de Lattre # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import api, fields, models +from odoo.tools import ormcache class UomUom(models.Model): @@ -13,3 +14,33 @@ class UomUom(models.Model): help="Standard nomenclature of the United Nations Economic " "Commission for Europe (UNECE).", ) + + @api.model + @ormcache() + def _get_uom_id_by_unece_code(self): + uoms = self.with_context(active_test=False).search( + [("unece_code", "!=", False)] + ) + return {u.unece_code: u.id for u in uoms} + + def get_uom_id_by_unece_code(self, unece_code): + uom_ids_by_code = self._get_uom_id_by_unece_code() + return uom_ids_by_code.get(unece_code) + + @api.model_create_multi + def create(self, vals_list): + records = super().create(vals_list) + if records.filtered("unece_code"): + self.env.registry.clear_cache() + return records + + def write(self, vals): + res = super().write(vals) + if "unece_code" in vals: + self.env.registry.clear_cache() + return res + + def unlink(self): + res = super().unlink() + self.env.registry.clear_cache() + return res diff --git a/uom_unece/tests/__init__.py b/uom_unece/tests/__init__.py new file mode 100644 index 000000000..fe1997c6f --- /dev/null +++ b/uom_unece/tests/__init__.py @@ -0,0 +1 @@ +from . import test_uom_unece diff --git a/uom_unece/tests/test_uom_unece.py b/uom_unece/tests/test_uom_unece.py new file mode 100644 index 000000000..e8146b459 --- /dev/null +++ b/uom_unece/tests/test_uom_unece.py @@ -0,0 +1,44 @@ +# Copyright 2026 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestUomUnece(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.uom_model = cls.env["uom.uom"] + cls.uom_unit = cls.env.ref("uom.product_uom_unit") + cls.uom_dozen = cls.env.ref("uom.product_uom_dozen") + cls.uom_hour = cls.env.ref("uom.product_uom_hour") + + def test_get_uom_id_by_unece_code(self): + self.assertEqual( + self.uom_model.get_uom_id_by_unece_code("C62"), self.uom_unit.id + ) + self.assertEqual( + self.uom_model.get_uom_id_by_unece_code("DPC"), self.uom_dozen.id + ) + self.assertEqual( + self.uom_model.get_uom_id_by_unece_code("HUR"), self.uom_hour.id + ) + + def test_get_uom_id_by_unece_code_unknown(self): + self.assertFalse(self.uom_model.get_uom_id_by_unece_code("UNKNOWN")) + + def test_get_uom_id_by_unece_code_cache_invalidation_on_write(self): + self.assertEqual( + self.uom_model.get_uom_id_by_unece_code("C62"), self.uom_unit.id + ) + self.uom_unit.write({"unece_code": "C62_NEW"}) + self.assertFalse(self.uom_model.get_uom_id_by_unece_code("C62")) + self.assertEqual( + self.uom_model.get_uom_id_by_unece_code("C62_NEW"), self.uom_unit.id + ) + + def test_get_uom_id_by_unece_code_cache_invalidation_on_unlink(self): + uom = self.uom_hour.copy({"name": "Test Hour Copy", "unece_code": "ZZZ"}) + self.assertEqual(self.uom_model.get_uom_id_by_unece_code("ZZZ"), uom.id) + uom.unlink() + self.assertFalse(self.uom_model.get_uom_id_by_unece_code("ZZZ")) From 4cfd21ebfe55c17b737e6e218c92d8e7f37ecc55 Mon Sep 17 00:00:00 2001 From: bosd <5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me> Date: Mon, 11 May 2026 18:42:37 +0200 Subject: [PATCH 2/2] oca-port: blacklist PR(s) 185 for uom_unece --- .oca/oca-port/blacklist/uom_unece.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .oca/oca-port/blacklist/uom_unece.json diff --git a/.oca/oca-port/blacklist/uom_unece.json b/.oca/oca-port/blacklist/uom_unece.json new file mode 100644 index 000000000..2980a2a85 --- /dev/null +++ b/.oca/oca-port/blacklist/uom_unece.json @@ -0,0 +1,5 @@ +{ + "pull_requests": { + "OCA/community-data-files#185": "(auto) Nothing to port from PR #185" + } +}