changeset 036e51122f92 in modules/product:default
details: https://hg.tryton.org/modules/product?cmd=changeset&node=036e51122f92
description:
        Add identifier_get to product

        issue11811
        review445321003
diffstat:

 CHANGELOG            |   2 +
 product.py           |   8 ++++
 tests/test_module.py |  87 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 97 insertions(+), 0 deletions(-)

diffs (123 lines):

diff -r a93c305f948c -r 036e51122f92 CHANGELOG
--- a/CHANGELOG Mon Oct 31 16:50:50 2022 +0100
+++ b/CHANGELOG Sat Nov 05 10:06:27 2022 +0100
@@ -1,3 +1,5 @@
+* Add identifier_get to product
+
 Version 6.6.0 - 2022-10-31
 --------------------------
 * Bug fixes (see mercurial logs for details)
diff -r a93c305f948c -r 036e51122f92 product.py
--- a/product.py        Mon Oct 31 16:50:50 2022 +0100
+++ b/product.py        Sat Nov 05 10:06:27 2022 +0100
@@ -603,6 +603,14 @@
     def get_code_readonly(self, name):
         return self.default_code_readonly()
 
+    def identifier_get(self, types=None):
+        "Return the first identifier for the given types"
+        if isinstance(types, str) or types is None:
+            types = {types}
+        for identifier in self.identifiers:
+            if identifier.type in types:
+                return identifier
+
     @classmethod
     def _new_suffix_code(cls):
         pool = Pool()
diff -r a93c305f948c -r 036e51122f92 tests/test_module.py
--- a/tests/test_module.py      Mon Oct 31 16:50:50 2022 +0100
+++ b/tests/test_module.py      Sat Nov 05 10:06:27 2022 +0100
@@ -498,5 +498,92 @@
             with self.subTest(value=value):
                 self.assertEqual(round_price(value), result)
 
+    @with_transaction()
+    def test_product_identifier_get_single_type(self):
+        "Test identifier get with a single type"
+        pool = Pool()
+        Identifier = pool.get('product.identifier')
+        Product = pool.get('product.product')
+        Template = pool.get('product.template')
+        Uom = pool.get('product.uom')
+
+        uom, = Uom.search([], limit=1)
+        template = Template(name="Product", default_uom=uom)
+        template.save()
+        product = Product(template=template)
+        product.identifiers = [
+            Identifier(code='FOO'),
+            Identifier(type='ean', code='978-0-471-11709-4'),
+            ]
+        product.save()
+
+        self.assertEqual(
+            product.identifier_get('ean').code,
+            '978-0-471-11709-4')
+
+    @with_transaction()
+    def test_product_identifier_get_many_types(self):
+        "Test identifier get with many types"
+        pool = Pool()
+        Identifier = pool.get('product.identifier')
+        Product = pool.get('product.product')
+        Template = pool.get('product.template')
+        Uom = pool.get('product.uom')
+
+        uom, = Uom.search([], limit=1)
+        template = Template(name="Product", default_uom=uom)
+        template.save()
+        product = Product(template=template)
+        product.identifiers = [
+            Identifier(code='FOO'),
+            Identifier(type='isbn', code='0-6332-4980-7'),
+            Identifier(type='ean', code='978-0-471-11709-4'),
+            ]
+        product.save()
+
+        self.assertEqual(
+            product.identifier_get({'ean', 'isbn'}).code,
+            '0-6332-4980-7')
+
+    @with_transaction()
+    def test_product_identifier_get_any(self):
+        "Test identifier get for any type"
+        pool = Pool()
+        Identifier = pool.get('product.identifier')
+        Product = pool.get('product.product')
+        Template = pool.get('product.template')
+        Uom = pool.get('product.uom')
+
+        uom, = Uom.search([], limit=1)
+        template = Template(name="Product", default_uom=uom)
+        template.save()
+        product = Product(template=template)
+        product.identifiers = [
+            Identifier(code='FOO'),
+            ]
+        product.save()
+
+        self.assertEqual(product.identifier_get(None).code, 'FOO')
+
+    @with_transaction()
+    def test_product_identifier_get_unknown_type(self):
+        "Test identifier get with a unknown type"
+        pool = Pool()
+        Identifier = pool.get('product.identifier')
+        Product = pool.get('product.product')
+        Template = pool.get('product.template')
+        Uom = pool.get('product.uom')
+
+        uom, = Uom.search([], limit=1)
+        template = Template(name="Product", default_uom=uom)
+        template.save()
+        product = Product(template=template)
+        product.identifiers = [
+            Identifier(code='FOO'),
+            ]
+        product.save()
+
+        self.assertEqual(product.identifier_get('ean'), None)
+
 
 del ModuleTestCase

Reply via email to