Skip to content
Open
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
5 changes: 5 additions & 0 deletions .oca/oca-port/blacklist/uom_unece.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"pull_requests": {
"OCA/community-data-files#185": "(auto) Nothing to port from PR #185"
}
}
33 changes: 32 additions & 1 deletion uom_unece/models/uom_uom.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# 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):
Expand All @@ -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
1 change: 1 addition & 0 deletions uom_unece/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import test_uom_unece
44 changes: 44 additions & 0 deletions uom_unece/tests/test_uom_unece.py
Original file line number Diff line number Diff line change
@@ -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"))
Loading