From 3fcfc9d636cd00dd9bdfdb5616b6d36784687105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Pigeon?= Date: Thu, 11 Jun 2020 15:16:09 +0200 Subject: [PATCH 01/21] [10.0][ADD] add new addon to allow searches based on a list of values [UPD] README.rst --- product_search_multi_value/README.rst | 76 +++ product_search_multi_value/__init__.py | 1 + product_search_multi_value/__manifest__.py | 14 + .../data/search_field_data.xml | 6 + product_search_multi_value/models/__init__.py | 1 + .../models/product_template.py | 48 ++ .../readme/CONFIGURE.rst | 2 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 2 + product_search_multi_value/readme/ROADMAP.rst | 2 + product_search_multi_value/readme/USAGE.rst | 2 + .../static/description/index.html | 435 ++++++++++++++++++ product_search_multi_value/tests/__init__.py | 1 + .../tests/test_product_search_multi_value.py | 31 ++ .../views/product_template_view.xml | 17 + 15 files changed, 639 insertions(+) create mode 100644 product_search_multi_value/README.rst create mode 100644 product_search_multi_value/__init__.py create mode 100644 product_search_multi_value/__manifest__.py create mode 100644 product_search_multi_value/data/search_field_data.xml create mode 100644 product_search_multi_value/models/__init__.py create mode 100644 product_search_multi_value/models/product_template.py create mode 100644 product_search_multi_value/readme/CONFIGURE.rst create mode 100644 product_search_multi_value/readme/CONTRIBUTORS.rst create mode 100644 product_search_multi_value/readme/DESCRIPTION.rst create mode 100644 product_search_multi_value/readme/ROADMAP.rst create mode 100644 product_search_multi_value/readme/USAGE.rst create mode 100644 product_search_multi_value/static/description/index.html create mode 100644 product_search_multi_value/tests/__init__.py create mode 100644 product_search_multi_value/tests/test_product_search_multi_value.py create mode 100644 product_search_multi_value/views/product_template_view.xml diff --git a/product_search_multi_value/README.rst b/product_search_multi_value/README.rst new file mode 100644 index 000000000..4591093ed --- /dev/null +++ b/product_search_multi_value/README.rst @@ -0,0 +1,76 @@ +========================== +Product Search Multi Value +========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-shopinvader%2Fodoo--pim-lightgray.png?logo=github + :target: https://github.com/shopinvader/odoo-pim/tree/10.0/product_search_multi_value + :alt: shopinvader/odoo-pim + +|badge1| |badge2| |badge3| + +This module allows users to search products based on a list of default codes or barcodes. +It can be extended to other values if needed. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +By default, the multi value search looks on default_code and barcode properties. +If you need to extend to other property, you just need to adapt the related system parameter: 'product_search_multi_value.search_field'. + +Usage +===== + +Go on the product search view and search on a list of default_code separated by a space. +The search must be based on "Multiple search" field. + +Known issues / Roadmap +====================== + +* The searched fields should not be related non stored ones where the target + model has an 'active' field as it can leads to not found records. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ACSONE SA/NV + +Contributors +~~~~~~~~~~~~ + +* Cédric PIGEON + +Maintainers +~~~~~~~~~~~ + +This module is part of the `shopinvader/odoo-pim `_ project on GitHub. + +You are welcome to contribute. diff --git a/product_search_multi_value/__init__.py b/product_search_multi_value/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/product_search_multi_value/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_search_multi_value/__manifest__.py b/product_search_multi_value/__manifest__.py new file mode 100644 index 000000000..bf35c9a39 --- /dev/null +++ b/product_search_multi_value/__manifest__.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Product Search Multi Value", + "version": "10.0.1.0.0", + "license": "AGPL-3", + "author": "ACSONE SA/NV", + "website": "https://acsone.eu", + "depends": ["product"], + "data": ["data/search_field_data.xml", "views/product_template_view.xml"], + "demo": [], +} diff --git a/product_search_multi_value/data/search_field_data.xml b/product_search_multi_value/data/search_field_data.xml new file mode 100644 index 000000000..c5153230f --- /dev/null +++ b/product_search_multi_value/data/search_field_data.xml @@ -0,0 +1,6 @@ + + + product_search_multi_value.search_fields + ['default_code', 'description'] + + diff --git a/product_search_multi_value/models/__init__.py b/product_search_multi_value/models/__init__.py new file mode 100644 index 000000000..e8fa8f6bf --- /dev/null +++ b/product_search_multi_value/models/__init__.py @@ -0,0 +1 @@ +from . import product_template diff --git a/product_search_multi_value/models/product_template.py b/product_search_multi_value/models/product_template.py new file mode 100644 index 000000000..702766dea --- /dev/null +++ b/product_search_multi_value/models/product_template.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models +from odoo.osv.expression import AND, FALSE_DOMAIN, OR +from odoo.tools.safe_eval import safe_eval + + +class ProductTemplate(models.Model): + + _inherit = "product.template" + + search_multi = fields.Char( + "Multiple search", + compute="_compute_search_multi", + search="_search_multi", + ) + + @api.multi + def _compute_search_multi(self): + self.search_multi = False + + @api.multi + def _search_multi(self, operator, value): + default_res = FALSE_DOMAIN + if operator in ["=", "ilike"]: + operator = "in" + comparator = OR + elif operator in ["!=", "not ilike"]: + operator = "not in" + comparator = AND + else: + return default_res + value_list = value.split(" ") if " " in value else [value] + + search_fields = ( + self.env["ir.config_parameter"] + .sudo() + .get_param("product_search_multi_value.search_fields") + ) + search_fields = safe_eval(search_fields) + + domain_list = [] + for search_field in search_fields: + domain_search_field = [(search_field, operator, value_list)] + domain_list.append(domain_search_field) + return comparator(domain_list) diff --git a/product_search_multi_value/readme/CONFIGURE.rst b/product_search_multi_value/readme/CONFIGURE.rst new file mode 100644 index 000000000..d66dbc734 --- /dev/null +++ b/product_search_multi_value/readme/CONFIGURE.rst @@ -0,0 +1,2 @@ +By default, the multi value search looks on default_code and barcode properties. +If you need to extend to other property, you just need to adapt the related system parameter: 'product_search_multi_value.search_field'. diff --git a/product_search_multi_value/readme/CONTRIBUTORS.rst b/product_search_multi_value/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..fe309b7d3 --- /dev/null +++ b/product_search_multi_value/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Cédric PIGEON diff --git a/product_search_multi_value/readme/DESCRIPTION.rst b/product_search_multi_value/readme/DESCRIPTION.rst new file mode 100644 index 000000000..04d89477d --- /dev/null +++ b/product_search_multi_value/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows users to search products based on a list of default codes or barcodes. +It can be extended to other values if needed. diff --git a/product_search_multi_value/readme/ROADMAP.rst b/product_search_multi_value/readme/ROADMAP.rst new file mode 100644 index 000000000..986835f71 --- /dev/null +++ b/product_search_multi_value/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +* The searched fields should not be related non stored ones where the target + model has an 'active' field as it can leads to not found records. diff --git a/product_search_multi_value/readme/USAGE.rst b/product_search_multi_value/readme/USAGE.rst new file mode 100644 index 000000000..b9bf0e167 --- /dev/null +++ b/product_search_multi_value/readme/USAGE.rst @@ -0,0 +1,2 @@ +Go on the product search view and search on a list of default_code separated by a space. +The search must be based on "Multiple search" field. diff --git a/product_search_multi_value/static/description/index.html b/product_search_multi_value/static/description/index.html new file mode 100644 index 000000000..f63d4a81a --- /dev/null +++ b/product_search_multi_value/static/description/index.html @@ -0,0 +1,435 @@ + + + + + + +Product Search Multi Value + + + +
+

Product Search Multi Value

+ + +

Beta License: AGPL-3 shopinvader/odoo-pim

+

This module allows users to search products based on a list of default codes or barcodes. +It can be extended to other values if needed.

+

Table of contents

+ +
+

Configuration

+

By default, the multi value search looks on default_code and barcode properties. +If you need to extend to other property, you just need to adapt the related system parameter: ‘product_search_multi_value.search_field’.

+
+
+

Usage

+

Go on the product search view and search on a list of default_code separated by a space. +The search must be based on “Multiple search” field.

+
+
+

Known issues / Roadmap

+
    +
  • The searched fields should not be related non stored ones where the target +model has an ‘active’ field as it can leads to not found records.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ACSONE SA/NV
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is part of the shopinvader/odoo-pim project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/product_search_multi_value/tests/__init__.py b/product_search_multi_value/tests/__init__.py new file mode 100644 index 000000000..bbe069aca --- /dev/null +++ b/product_search_multi_value/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_search_multi_value diff --git a/product_search_multi_value/tests/test_product_search_multi_value.py b/product_search_multi_value/tests/test_product_search_multi_value.py new file mode 100644 index 000000000..02247aa2f --- /dev/null +++ b/product_search_multi_value/tests/test_product_search_multi_value.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.osv.expression import TRUE_DOMAIN +from odoo.tests.common import TransactionCase + + +class TestProductSearchMultiValue(TransactionCase): + def setUp(self): + super(TestProductSearchMultiValue, self).setUp() + self.default_code_list = ["E-COM08", "E-COM10", "CONS_DEL03"] + + def test_search_multi_value(self): + total_products = self.env["product.template"].search_count(TRUE_DOMAIN) + default_code_values = " ".join(self.default_code_list) + + domain = [("search_multi", "ilike", default_code_values)] + res = self.env["product.template"].search_count(domain) + self.assertEqual(res, 3) + + domain = [("search_multi", "=", default_code_values)] + res = self.env["product.template"].search_count(domain) + self.assertEqual(res, 3) + + domain = [("search_multi", "not ilike", default_code_values)] + res = self.env["product.template"].search_count(domain) + self.assertEqual(res, total_products - 3) + + domain = [("search_multi", "!=", default_code_values)] + res = self.env["product.template"].search_count(domain) + self.assertEqual(res, total_products - 3) diff --git a/product_search_multi_value/views/product_template_view.xml b/product_search_multi_value/views/product_template_view.xml new file mode 100644 index 000000000..b054e9980 --- /dev/null +++ b/product_search_multi_value/views/product_template_view.xml @@ -0,0 +1,17 @@ + + + + + product.template.search (in product_search_multi_value) + product.template + + + + + + + + From 49bfd07ccc7e8e1c8349af4c6f517dcc56da8be6 Mon Sep 17 00:00:00 2001 From: shopinvader-git-bot Date: Mon, 22 Jun 2020 11:40:33 +0000 Subject: [PATCH 02/21] product_search_multi_value 10.0.1.0.1 --- product_search_multi_value/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_search_multi_value/__manifest__.py b/product_search_multi_value/__manifest__.py index bf35c9a39..bc69a7173 100644 --- a/product_search_multi_value/__manifest__.py +++ b/product_search_multi_value/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Product Search Multi Value", - "version": "10.0.1.0.0", + "version": "10.0.1.0.1", "license": "AGPL-3", "author": "ACSONE SA/NV", "website": "https://acsone.eu", From f0f50c1dcff371740bea46aa5e49fabea613ea49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Fri, 26 Jun 2020 16:32:12 +0200 Subject: [PATCH 03/21] Apply pre-commit changes --- product_search_multi_value/__init__.py | 1 + product_search_multi_value/models/__init__.py | 1 + product_search_multi_value/models/product_template.py | 4 +--- product_search_multi_value/tests/__init__.py | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/product_search_multi_value/__init__.py b/product_search_multi_value/__init__.py index 0650744f6..a0fdc10fe 100644 --- a/product_search_multi_value/__init__.py +++ b/product_search_multi_value/__init__.py @@ -1 +1,2 @@ +# -*- coding: utf-8 -*- from . import models diff --git a/product_search_multi_value/models/__init__.py b/product_search_multi_value/models/__init__.py index e8fa8f6bf..2757b3ab6 100644 --- a/product_search_multi_value/models/__init__.py +++ b/product_search_multi_value/models/__init__.py @@ -1 +1,2 @@ +# -*- coding: utf-8 -*- from . import product_template diff --git a/product_search_multi_value/models/product_template.py b/product_search_multi_value/models/product_template.py index 702766dea..29a8be68f 100644 --- a/product_search_multi_value/models/product_template.py +++ b/product_search_multi_value/models/product_template.py @@ -12,9 +12,7 @@ class ProductTemplate(models.Model): _inherit = "product.template" search_multi = fields.Char( - "Multiple search", - compute="_compute_search_multi", - search="_search_multi", + "Multiple search", compute="_compute_search_multi", search="_search_multi", ) @api.multi diff --git a/product_search_multi_value/tests/__init__.py b/product_search_multi_value/tests/__init__.py index bbe069aca..707bd7a85 100644 --- a/product_search_multi_value/tests/__init__.py +++ b/product_search_multi_value/tests/__init__.py @@ -1 +1,2 @@ +# -*- coding: utf-8 -*- from . import test_product_search_multi_value From 4d0583c5612ed7bb1d16fb8a5106e4e2215bf185 Mon Sep 17 00:00:00 2001 From: xavier-bouquiaux Date: Tue, 22 Jun 2021 08:49:38 +0200 Subject: [PATCH 04/21] [IMP] product_search_multi_value: black, isort, prettier --- product_search_multi_value/__init__.py | 1 - product_search_multi_value/__manifest__.py | 3 +-- product_search_multi_value/models/__init__.py | 1 - product_search_multi_value/models/product_template.py | 5 +++-- product_search_multi_value/tests/__init__.py | 1 - .../tests/test_product_search_multi_value.py | 1 - 6 files changed, 4 insertions(+), 8 deletions(-) diff --git a/product_search_multi_value/__init__.py b/product_search_multi_value/__init__.py index a0fdc10fe..0650744f6 100644 --- a/product_search_multi_value/__init__.py +++ b/product_search_multi_value/__init__.py @@ -1,2 +1 @@ -# -*- coding: utf-8 -*- from . import models diff --git a/product_search_multi_value/__manifest__.py b/product_search_multi_value/__manifest__.py index bc69a7173..0e638312b 100644 --- a/product_search_multi_value/__manifest__.py +++ b/product_search_multi_value/__manifest__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2020 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -7,7 +6,7 @@ "version": "10.0.1.0.1", "license": "AGPL-3", "author": "ACSONE SA/NV", - "website": "https://acsone.eu", + "website": "https://github.com/OCA/odoo-pim", "depends": ["product"], "data": ["data/search_field_data.xml", "views/product_template_view.xml"], "demo": [], diff --git a/product_search_multi_value/models/__init__.py b/product_search_multi_value/models/__init__.py index 2757b3ab6..e8fa8f6bf 100644 --- a/product_search_multi_value/models/__init__.py +++ b/product_search_multi_value/models/__init__.py @@ -1,2 +1 @@ -# -*- coding: utf-8 -*- from . import product_template diff --git a/product_search_multi_value/models/product_template.py b/product_search_multi_value/models/product_template.py index 29a8be68f..e0f480cad 100644 --- a/product_search_multi_value/models/product_template.py +++ b/product_search_multi_value/models/product_template.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2020 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -12,7 +11,9 @@ class ProductTemplate(models.Model): _inherit = "product.template" search_multi = fields.Char( - "Multiple search", compute="_compute_search_multi", search="_search_multi", + "Multiple search", + compute="_compute_search_multi", + search="_search_multi", ) @api.multi diff --git a/product_search_multi_value/tests/__init__.py b/product_search_multi_value/tests/__init__.py index 707bd7a85..bbe069aca 100644 --- a/product_search_multi_value/tests/__init__.py +++ b/product_search_multi_value/tests/__init__.py @@ -1,2 +1 @@ -# -*- coding: utf-8 -*- from . import test_product_search_multi_value diff --git a/product_search_multi_value/tests/test_product_search_multi_value.py b/product_search_multi_value/tests/test_product_search_multi_value.py index 02247aa2f..e680b20a4 100644 --- a/product_search_multi_value/tests/test_product_search_multi_value.py +++ b/product_search_multi_value/tests/test_product_search_multi_value.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2020 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo.osv.expression import TRUE_DOMAIN From ccc4591f7d69c8b1be8080979e8cdcce10aff7ad Mon Sep 17 00:00:00 2001 From: xavier-bouquiaux Date: Tue, 22 Jun 2021 15:38:48 +0200 Subject: [PATCH 05/21] [MIG][14.0] odoo-pim/product_search_multi_value operator ilike + not ilike removed -> should't be there since the beginning operator <> removed -> odoo bug with not in for translated fields so removed [UPD] Update product_search_multi_value.pot [UPD] README.rst [ADD] icon.png --- product_search_multi_value/README.rst | 35 +++++++++---- product_search_multi_value/__manifest__.py | 4 +- .../i18n/product_search_multi_value.pot | 46 ++++++++++++++++++ .../models/product_template.py | 18 +++---- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 16 ++++-- .../tests/test_product_search_multi_value.py | 13 +++-- 8 files changed, 99 insertions(+), 34 deletions(-) create mode 100644 product_search_multi_value/i18n/product_search_multi_value.pot create mode 100644 product_search_multi_value/static/description/icon.png diff --git a/product_search_multi_value/README.rst b/product_search_multi_value/README.rst index 4591093ed..aa69ff8fc 100644 --- a/product_search_multi_value/README.rst +++ b/product_search_multi_value/README.rst @@ -13,11 +13,17 @@ Product Search Multi Value .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-shopinvader%2Fodoo--pim-lightgray.png?logo=github - :target: https://github.com/shopinvader/odoo-pim/tree/10.0/product_search_multi_value - :alt: shopinvader/odoo-pim - -|badge1| |badge2| |badge3| +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fodoo--pim-lightgray.png?logo=github + :target: https://github.com/OCA/odoo-pim/tree/14.0/product_search_multi_value + :alt: OCA/odoo-pim +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/odoo-pim-14-0/odoo-pim-14-0-product_search_multi_value + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/295/14.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| This module allows users to search products based on a list of default codes or barcodes. It can be extended to other values if needed. @@ -48,10 +54,10 @@ Known issues / Roadmap Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -67,10 +73,21 @@ Contributors ~~~~~~~~~~~~ * Cédric PIGEON +* Xavier Bouquiaux Maintainers ~~~~~~~~~~~ -This module is part of the `shopinvader/odoo-pim `_ project on GitHub. +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/odoo-pim `_ project on GitHub. -You are welcome to contribute. +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_search_multi_value/__manifest__.py b/product_search_multi_value/__manifest__.py index 0e638312b..8d62abff0 100644 --- a/product_search_multi_value/__manifest__.py +++ b/product_search_multi_value/__manifest__.py @@ -3,9 +3,9 @@ { "name": "Product Search Multi Value", - "version": "10.0.1.0.1", + "version": "14.0.1.0.0", "license": "AGPL-3", - "author": "ACSONE SA/NV", + "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/odoo-pim", "depends": ["product"], "data": ["data/search_field_data.xml", "views/product_template_view.xml"], diff --git a/product_search_multi_value/i18n/product_search_multi_value.pot b/product_search_multi_value/i18n/product_search_multi_value.pot new file mode 100644 index 000000000..fb65a28b6 --- /dev/null +++ b/product_search_multi_value/i18n/product_search_multi_value.pot @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_search_multi_value +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_search_multi_value +#: model:ir.model.fields,field_description:product_search_multi_value.field_product_template__display_name +msgid "Display Name" +msgstr "" + +#. module: product_search_multi_value +#: model:ir.model.fields,field_description:product_search_multi_value.field_product_template__id +msgid "ID" +msgstr "" + +#. module: product_search_multi_value +#: model:ir.model.fields,field_description:product_search_multi_value.field_product_template____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_search_multi_value +#: model:ir.model.fields,field_description:product_search_multi_value.field_product_product__search_multi +#: model:ir.model.fields,field_description:product_search_multi_value.field_product_template__search_multi +msgid "Multiple search" +msgstr "" + +#. module: product_search_multi_value +#: code:addons/product_search_multi_value/models/product_template.py:0 +#, python-format +msgid "Operator %s is not usable with multisearch" +msgstr "" + +#. module: product_search_multi_value +#: model:ir.model,name:product_search_multi_value.model_product_template +msgid "Product Template" +msgstr "" diff --git a/product_search_multi_value/models/product_template.py b/product_search_multi_value/models/product_template.py index e0f480cad..c1a8721e8 100644 --- a/product_search_multi_value/models/product_template.py +++ b/product_search_multi_value/models/product_template.py @@ -1,8 +1,9 @@ # Copyright 2020 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields, models -from odoo.osv.expression import AND, FALSE_DOMAIN, OR +from odoo import _, fields, models +from odoo.exceptions import UserError +from odoo.osv.expression import OR from odoo.tools.safe_eval import safe_eval @@ -16,21 +17,16 @@ class ProductTemplate(models.Model): search="_search_multi", ) - @api.multi def _compute_search_multi(self): self.search_multi = False - @api.multi def _search_multi(self, operator, value): - default_res = FALSE_DOMAIN - if operator in ["=", "ilike"]: + if operator == "=" or operator == "ilike": operator = "in" comparator = OR - elif operator in ["!=", "not ilike"]: - operator = "not in" - comparator = AND else: - return default_res + raise UserError(_("Operator %s is not usable with multisearch", operator)) + value_list = value.split(" ") if " " in value else [value] search_fields = ( @@ -42,6 +38,6 @@ def _search_multi(self, operator, value): domain_list = [] for search_field in search_fields: - domain_search_field = [(search_field, operator, value_list)] + domain_search_field = [(search_field, operator, tuple(value_list))] domain_list.append(domain_search_field) return comparator(domain_list) diff --git a/product_search_multi_value/readme/CONTRIBUTORS.rst b/product_search_multi_value/readme/CONTRIBUTORS.rst index fe309b7d3..8bb53dbd1 100644 --- a/product_search_multi_value/readme/CONTRIBUTORS.rst +++ b/product_search_multi_value/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Cédric PIGEON +* Xavier Bouquiaux diff --git a/product_search_multi_value/static/description/icon.png b/product_search_multi_value/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/product_search_multi_value/static/description/index.html b/product_search_multi_value/static/description/index.html index f63d4a81a..cdecf8d0b 100644 --- a/product_search_multi_value/static/description/index.html +++ b/product_search_multi_value/static/description/index.html @@ -367,7 +367,7 @@

Product Search Multi Value

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 shopinvader/odoo-pim

+

Beta License: AGPL-3 OCA/odoo-pim Translate me on Weblate Try me on Runbot

This module allows users to search products based on a list of default codes or barcodes. It can be extended to other values if needed.

Table of contents

@@ -404,10 +404,10 @@

Known issues / Roadmap

Bug Tracker

-

Bugs are tracked on GitHub Issues. +

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -422,12 +422,18 @@

Authors

Contributors

Maintainers

-

This module is part of the shopinvader/odoo-pim project on GitHub.

-

You are welcome to contribute.

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/odoo-pim project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/product_search_multi_value/tests/test_product_search_multi_value.py b/product_search_multi_value/tests/test_product_search_multi_value.py index e680b20a4..636423d98 100644 --- a/product_search_multi_value/tests/test_product_search_multi_value.py +++ b/product_search_multi_value/tests/test_product_search_multi_value.py @@ -1,16 +1,15 @@ # Copyright 2020 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.osv.expression import TRUE_DOMAIN +from odoo.exceptions import UserError from odoo.tests.common import TransactionCase class TestProductSearchMultiValue(TransactionCase): def setUp(self): super(TestProductSearchMultiValue, self).setUp() - self.default_code_list = ["E-COM08", "E-COM10", "CONS_DEL03"] + self.default_code_list = ["E-COM08", "E-COM10", "E-COM06"] def test_search_multi_value(self): - total_products = self.env["product.template"].search_count(TRUE_DOMAIN) default_code_values = " ".join(self.default_code_list) domain = [("search_multi", "ilike", default_code_values)] @@ -22,9 +21,9 @@ def test_search_multi_value(self): self.assertEqual(res, 3) domain = [("search_multi", "not ilike", default_code_values)] - res = self.env["product.template"].search_count(domain) - self.assertEqual(res, total_products - 3) + with self.assertRaises(UserError): + self.env["product.template"].search_count(domain) domain = [("search_multi", "!=", default_code_values)] - res = self.env["product.template"].search_count(domain) - self.assertEqual(res, total_products - 3) + with self.assertRaises(UserError): + self.env["product.template"].search_count(domain) From cd77634781484d95ba2d86429d6b662e507254bf Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sat, 22 Oct 2022 12:00:06 +0000 Subject: [PATCH 06/21] product_search_multi_value 14.0.1.0.1 --- product_search_multi_value/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_search_multi_value/__manifest__.py b/product_search_multi_value/__manifest__.py index 8d62abff0..6ed1e2908 100644 --- a/product_search_multi_value/__manifest__.py +++ b/product_search_multi_value/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Search Multi Value", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/odoo-pim", From 5c92256394caa98e9bfc5af4cfacd5374e833932 Mon Sep 17 00:00:00 2001 From: sbejaoui Date: Tue, 14 Feb 2023 17:32:44 +0100 Subject: [PATCH 07/21] [MIG] - product_search_multi_value: 16.0 migration --- product_search_multi_value/__manifest__.py | 2 +- .../models/product_template.py | 31 +++++++++++++------ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/product_search_multi_value/__manifest__.py b/product_search_multi_value/__manifest__.py index 6ed1e2908..d703aadcc 100644 --- a/product_search_multi_value/__manifest__.py +++ b/product_search_multi_value/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Search Multi Value", - "version": "14.0.1.0.1", + "version": "16.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/odoo-pim", diff --git a/product_search_multi_value/models/product_template.py b/product_search_multi_value/models/product_template.py index c1a8721e8..126bb4775 100644 --- a/product_search_multi_value/models/product_template.py +++ b/product_search_multi_value/models/product_template.py @@ -1,11 +1,15 @@ # Copyright 2020 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, fields, models +import logging + +from odoo import _, api, fields, models from odoo.exceptions import UserError from odoo.osv.expression import OR from odoo.tools.safe_eval import safe_eval +_logger = logging.getLogger(__name__) + class ProductTemplate(models.Model): @@ -18,7 +22,21 @@ class ProductTemplate(models.Model): ) def _compute_search_multi(self): - self.search_multi = False + self.update({"search_multi": False}) + + @api.model + def _get_search_fields(self): + try: + search_fields = ( + self.env["ir.config_parameter"] + .sudo() + .get_param("product_search_multi_value.search_fields") + ) + return safe_eval(search_fields) + except SyntaxError as error: + _logger.error("Error while evaluating search fields") + _logger.error(error) + return [] def _search_multi(self, operator, value): if operator == "=" or operator == "ilike": @@ -28,14 +46,7 @@ def _search_multi(self, operator, value): raise UserError(_("Operator %s is not usable with multisearch", operator)) value_list = value.split(" ") if " " in value else [value] - - search_fields = ( - self.env["ir.config_parameter"] - .sudo() - .get_param("product_search_multi_value.search_fields") - ) - search_fields = safe_eval(search_fields) - + search_fields = self._get_search_fields() domain_list = [] for search_field in search_fields: domain_search_field = [(search_field, operator, tuple(value_list))] From 5ea4e40ee9dd8152de8cc3ae7f9df610d358b316 Mon Sep 17 00:00:00 2001 From: David Beal Date: Tue, 9 Jan 2024 17:13:34 +0100 Subject: [PATCH 08/21] MIG product_search_multi_value: typo --- product_search_multi_value/README.rst | 23 +++++---- .../static/description/index.html | 50 ++++++++++--------- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/product_search_multi_value/README.rst b/product_search_multi_value/README.rst index aa69ff8fc..63cd755f4 100644 --- a/product_search_multi_value/README.rst +++ b/product_search_multi_value/README.rst @@ -2,10 +2,13 @@ Product Search Multi Value ========================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:9d22337e1ca831145830acd08136f0828db22d5e868807321209fbba2c967d0f + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -14,16 +17,16 @@ Product Search Multi Value :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fodoo--pim-lightgray.png?logo=github - :target: https://github.com/OCA/odoo-pim/tree/14.0/product_search_multi_value + :target: https://github.com/OCA/odoo-pim/tree/16.0/product_search_multi_value :alt: OCA/odoo-pim .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/odoo-pim-14-0/odoo-pim-14-0-product_search_multi_value + :target: https://translation.odoo-community.org/projects/odoo-pim-16-0/odoo-pim-16-0-product_search_multi_value :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/295/14.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/odoo-pim&target_branch=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module allows users to search products based on a list of default codes or barcodes. It can be extended to other values if needed. @@ -56,8 +59,8 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -88,6 +91,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/odoo-pim `_ project on GitHub. +This module is part of the `OCA/odoo-pim `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_search_multi_value/static/description/index.html b/product_search_multi_value/static/description/index.html index cdecf8d0b..00f203b43 100644 --- a/product_search_multi_value/static/description/index.html +++ b/product_search_multi_value/static/description/index.html @@ -1,20 +1,20 @@ - + - + Product Search Multi Value