From 407deb5985ce9f4e538262fed5917c8d2cf9b79d Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Mon, 27 Aug 2018 13:47:15 +0200 Subject: [PATCH 001/161] [10.0][ADD] product_assortment --- product_assortment/README.rst | 88 ++++ product_assortment/__init__.py | 1 + product_assortment/__manifest__.py | 21 + .../i18n/product_assortment.pot | 88 ++++ product_assortment/models/__init__.py | 1 + product_assortment/models/ir_filters.py | 86 ++++ product_assortment/readme/CONTRIBUTORS.rst | 2 + product_assortment/readme/DESCRIPTION.rst | 6 + product_assortment/readme/USAGE.rst | 5 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 434 ++++++++++++++++++ product_assortment/tests/__init__.py | 1 + .../tests/test_product_assortment.py | 66 +++ .../views/product_assortment.xml | 88 ++++ 14 files changed, 887 insertions(+) create mode 100644 product_assortment/README.rst create mode 100644 product_assortment/__init__.py create mode 100644 product_assortment/__manifest__.py create mode 100644 product_assortment/i18n/product_assortment.pot create mode 100644 product_assortment/models/__init__.py create mode 100644 product_assortment/models/ir_filters.py create mode 100644 product_assortment/readme/CONTRIBUTORS.rst create mode 100644 product_assortment/readme/DESCRIPTION.rst create mode 100644 product_assortment/readme/USAGE.rst create mode 100644 product_assortment/static/description/icon.png create mode 100644 product_assortment/static/description/index.html create mode 100644 product_assortment/tests/__init__.py create mode 100644 product_assortment/tests/test_product_assortment.py create mode 100644 product_assortment/views/product_assortment.xml diff --git a/product_assortment/README.rst b/product_assortment/README.rst new file mode 100644 index 00000000000..a0e93c720ea --- /dev/null +++ b/product_assortment/README.rst @@ -0,0 +1,88 @@ +================== +Product Assortment +================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/10.0/product_assortment + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-10-0/product-attribute-10-0-product_assortment + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/135/10.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This addon intends to manage product assortment. In Odoo you can only define +some filters defined by a domain but it can be sometimes really complicated. +With this addon you will be able to define a domain but also add some +products to include or to exclude through a white list and a black list. +This is done by overriding ir.capability but without influencing its standard +behaviour. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + + +To use this module, you need to: + +#. Enter the menu through Product Assortment Icon +#. Create a new filter where you can define your domain and add whitelisted and blacklisted products + +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 +~~~~~~~~~~~~ + +* Denis Roussel +* Cédric Pigeon + +Maintainers +~~~~~~~~~~~ + +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/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_assortment/__init__.py b/product_assortment/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_assortment/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_assortment/__manifest__.py b/product_assortment/__manifest__.py new file mode 100644 index 00000000000..fbc3fe66a25 --- /dev/null +++ b/product_assortment/__manifest__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Product Assortment', + 'summary': """ + Adds the ability to manage products assortment""", + 'version': '10.0.1.0.0', + 'license': 'AGPL-3', + 'author': 'ACSONE SA/NV,Odoo Community Association (OCA)', + 'website': 'https://acsone.eu', + 'depends': [ + 'base', + 'product', + 'web_widget_domain_v11', + ], + 'data': [ + 'views/product_assortment.xml', + ], +} diff --git a/product_assortment/i18n/product_assortment.pot b/product_assortment/i18n/product_assortment.pot new file mode 100644 index 00000000000..9083bb8ea21 --- /dev/null +++ b/product_assortment/i18n/product_assortment.pot @@ -0,0 +1,88 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_assortment +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.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_assortment +#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +msgid "Products" +msgstr "" + +#. module: product_assortment +#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_search +msgid "Assortment Name" +msgstr "" + +#. module: product_assortment +#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_search +msgid "Assortments" +msgstr "" + +#. module: product_assortment +#: model:ir.model.fields,field_description:product_assortment.field_ir_filters_blacklist_product_ids +msgid "Blacklist product ids" +msgstr "" + +#. module: product_assortment +#: model:ir.model,name:product_assortment.model_ir_filters +#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +msgid "Filters" +msgstr "" + +#. module: product_assortment +#: model:ir.model.fields,field_description:product_assortment.field_ir_filters_is_assortment +msgid "Is assortment" +msgstr "" + +#. module: product_assortment +#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +msgid "Product" +msgstr "" + +#. module: product_assortment +#: model:ir.ui.menu,name:product_assortment.menu_product_assortments +msgid "Product Assortment" +msgstr "" + +#. module: product_assortment +#: model:ir.actions.act_window,name:product_assortment.actions_product_assortment_view +msgid "Product assortment" +msgstr "" + +#. module: product_assortment +#: code:addons/product_assortment/models/ir_filters.py:79 +#, python-format +msgid "Products" +msgstr "" + +#. module: product_assortment +#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +msgid "Products to exclude" +msgstr "" + +#. module: product_assortment +#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +msgid "Products to include" +msgstr "" + +#. module: product_assortment +#: model:ir.model.fields,field_description:product_assortment.field_ir_filters_record_count +msgid "Record count" +msgstr "" + +#. module: product_assortment +#: model:ir.model.fields,field_description:product_assortment.field_ir_filters_whitelist_product_ids +msgid "Whitelist product ids" +msgstr "" + diff --git a/product_assortment/models/__init__.py b/product_assortment/models/__init__.py new file mode 100644 index 00000000000..4c520abbe48 --- /dev/null +++ b/product_assortment/models/__init__.py @@ -0,0 +1 @@ +from . import ir_filters diff --git a/product_assortment/models/ir_filters.py b/product_assortment/models/ir_filters.py new file mode 100644 index 00000000000..8096173af24 --- /dev/null +++ b/product_assortment/models/ir_filters.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, fields, models, _ +from odoo.osv import expression + + +class ProductAssortment(models.Model): + _inherit = 'ir.filters' + + @api.model + def _get_default_model(self): + if self.env.context.get('product_assortment', False): + model = self.env.ref('product.model_product_product') + return model.model + return '' + + @api.model + def _get_default_is_assortment(self): + if self.env.context.get('product_assortment', False): + return True + return False + + model_id = fields.Selection( + default=lambda x: x._get_default_model()) + + blacklist_product_ids = fields.Many2many( + comodel_name='product.product', + relation='assortment_product_blacklisted') + + whitelist_product_ids = fields.Many2many( + comodel_name='product.product', + relation='assortment_product_whitelisted') + + record_count = fields.Integer(compute='_compute_record_count') + + is_assortment = fields.Boolean( + default=lambda x: x._get_default_is_assortment()) + + @api.multi + def _get_eval_domain(self): + res = super(ProductAssortment, self)._get_eval_domain() + + if self.whitelist_product_ids and res: + result_domain = [('id', 'in', self.whitelist_product_ids.ids)] + res = expression.OR([result_domain, res]) + + if self.blacklist_product_ids: + result_domain = [('id', 'not in', self.blacklist_product_ids.ids)] + res = expression.AND([result_domain, res]) + + return res + + @api.multi + def _compute_record_count(self): + for record in self: + domain = record._get_eval_domain() + record.record_count = self.env[ + record.model_id].search_count(domain) + + @api.model + def _get_action_domain(self, action_id=None): + # tricky way to act on get_filter method to prevent returning + # assortment in search view filters + domain = super(ProductAssortment, + self)._get_action_domain(action_id=action_id) + domain = expression.AND([ + [('is_assortment', '=', False)], + domain, + ]) + + return domain + + @api.multi + def show_products(self): + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'name': _("Products"), + 'res_model': 'product.product', + 'domain': self._get_eval_domain(), + 'view_type': 'form', + 'view_mode': 'tree, form', + 'context': self.env.context, + 'target': 'current', + } diff --git a/product_assortment/readme/CONTRIBUTORS.rst b/product_assortment/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..3e696282f39 --- /dev/null +++ b/product_assortment/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Denis Roussel +* Cédric Pigeon diff --git a/product_assortment/readme/DESCRIPTION.rst b/product_assortment/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..6a94b870f58 --- /dev/null +++ b/product_assortment/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +This addon intends to manage product assortment. In Odoo you can only define +some filters defined by a domain but it can be sometimes really complicated. +With this addon you will be able to define a domain but also add some +products to include or to exclude through a white list and a black list. +This is done by overriding ir.capability but without influencing its standard +behaviour. diff --git a/product_assortment/readme/USAGE.rst b/product_assortment/readme/USAGE.rst new file mode 100644 index 00000000000..9791683313b --- /dev/null +++ b/product_assortment/readme/USAGE.rst @@ -0,0 +1,5 @@ + +To use this module, you need to: + +#. Enter the menu through Product Assortment Icon +#. Create a new filter where you can define your domain and add whitelisted and blacklisted products diff --git a/product_assortment/static/description/icon.png b/product_assortment/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_assortment/static/description/index.html b/product_assortment/static/description/index.html new file mode 100644 index 00000000000..6ab1cab3ef5 --- /dev/null +++ b/product_assortment/static/description/index.html @@ -0,0 +1,434 @@ + + + + + + +Product Assortment + + + +
+

Product Assortment

+ + +

Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

+

This addon intends to manage product assortment. In Odoo you can only define +some filters defined by a domain but it can be sometimes really complicated. +With this addon you will be able to define a domain but also add some +products to include or to exclude through a white list and a black list. +This is done by overriding ir.capability but without influencing its standard +behaviour.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Enter the menu through Product Assortment Icon
  2. +
  3. Create a new filter where you can define your domain and add whitelisted and blacklisted products
  4. +
+
+
+

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 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/product-attribute project on GitHub.

+

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

+
+
+
+ + diff --git a/product_assortment/tests/__init__.py b/product_assortment/tests/__init__.py new file mode 100644 index 00000000000..7c6e5f94694 --- /dev/null +++ b/product_assortment/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_assortment diff --git a/product_assortment/tests/test_product_assortment.py b/product_assortment/tests/test_product_assortment.py new file mode 100644 index 00000000000..0e5d7daff0e --- /dev/null +++ b/product_assortment/tests/test_product_assortment.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestProductAssortment(TransactionCase): + + def setUp(self): + super(TestProductAssortment, self).setUp() + self.filter_obj = self.env['ir.filters'] + self.product_obj = self.env['product.product'] + self.assortment = self.filter_obj.create({ + 'name': 'Test Assortment', + 'model_id': 'product.product', + 'is_assortment': True, + 'domain': [], + }) + + def test_assortment(self): + products = self.product_obj.search([]) + domain = self.assortment._get_eval_domain() + products_filtered = self.product_obj.search(domain) + self.assertEqual(products.ids, products_filtered.ids) + + # reduce assortment to services products + domain = [('type', '=', 'service')] + self.assortment.domain = domain + + products = self.product_obj.search(domain) + domain = self.assortment._get_eval_domain() + products_filtered = self.product_obj.search(domain) + self.assertEqual(products.ids, products_filtered.ids) + + # include one product not in initial filter + included_product = self.env.ref('product.product_product_7') + self.assortment.write({ + 'whitelist_product_ids': [(4, included_product.id)]}) + domain = self.assortment._get_eval_domain() + products_filtered = self.product_obj.search(domain) + self.assertIn(included_product.id, products_filtered.ids) + + # exclude one product not in initial filter + excluded_product = self.env.ref('product.service_delivery') + domain = self.assortment._get_eval_domain() + products_filtered = self.product_obj.search(domain) + self.assertIn(excluded_product.id, products_filtered.ids) + self.assortment.write({ + 'blacklist_product_ids': [(4, excluded_product.id)]}) + domain = self.assortment._get_eval_domain() + products_filtered = self.product_obj.search(domain) + self.assertNotIn(excluded_product.id, products_filtered.ids) + + def test_assortment_not_available_search_view(self): + model = self.env.ref('product.model_product_product') + filters = self.filter_obj.get_filters(model.id) + self.assertFalse(filters) + + def test_create_assortment_with_context(self): + assortment = self.filter_obj.with_context( + product_assortment=True).create({ + 'name': 'Test Assortment Context', + 'domain': []}) + self.assertTrue(assortment.is_assortment) + self.assertEqual(assortment.model_id, 'product.product') diff --git a/product_assortment/views/product_assortment.xml b/product_assortment/views/product_assortment.xml new file mode 100644 index 00000000000..e70f8e0424f --- /dev/null +++ b/product_assortment/views/product_assortment.xml @@ -0,0 +1,88 @@ + + + + + + product.assortment.search + ir.filters + + + + + + + + + + ir.filters + + + + + + + + + ir.filters + +
+ +
+ +
+ + + + + + + + + + +
+ + + + + + +
+
+ + + + + + +
+
+
+
+
+
+ + + Product assortment + ir.actions.act_window + ir.filters + [('is_assortment', '=', True)] + {'product_assortment': True, + 'default_is_assortment': 1} + + + + +
\ No newline at end of file From 81b7790c5178d82463cca301b89eb5b6772502db Mon Sep 17 00:00:00 2001 From: tbaden Date: Sat, 4 May 2019 19:50:11 +0200 Subject: [PATCH 002/161] [FIX][10.0] product_assortment travis warning --- product_assortment/views/product_assortment.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_assortment/views/product_assortment.xml b/product_assortment/views/product_assortment.xml index e70f8e0424f..ccb355d9781 100644 --- a/product_assortment/views/product_assortment.xml +++ b/product_assortment/views/product_assortment.xml @@ -85,4 +85,4 @@ - \ No newline at end of file + From e39bf5ac38306efb0844a00b65de514f51245283 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Mon, 3 Jun 2019 16:12:01 +0200 Subject: [PATCH 003/161] [12.0][MIG] product_assortment --- product_assortment/README.rst | 36 ++++++++----- product_assortment/__manifest__.py | 10 ++-- .../i18n/product_assortment.pot | 41 ++++++++------- product_assortment/models/ir_filters.py | 3 +- product_assortment/readme/HISTORY.rst | 9 ++++ .../static/description/index.html | 52 +++++++++++++------ .../tests/test_product_assortment.py | 5 +- 7 files changed, 99 insertions(+), 57 deletions(-) create mode 100644 product_assortment/readme/HISTORY.rst diff --git a/product_assortment/README.rst b/product_assortment/README.rst index a0e93c720ea..a45f47b7a44 100644 --- a/product_assortment/README.rst +++ b/product_assortment/README.rst @@ -7,23 +7,20 @@ Product Assortment !! 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 +.. |badge1| 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-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/10.0/product_assortment +.. |badge2| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/12.0/product_assortment :alt: OCA/product-attribute -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-10-0/product-attribute-10-0-product_assortment +.. |badge3| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-12-0/product-attribute-12-0-product_assortment :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/10.0 +.. |badge4| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/135/12.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| This addon intends to manage product assortment. In Odoo you can only define some filters defined by a domain but it can be sometimes really complicated. @@ -46,13 +43,26 @@ To use this module, you need to: #. Enter the menu through Product Assortment Icon #. Create a new filter where you can define your domain and add whitelisted and blacklisted products +Changelog +========= + +10.0.1.0.0 (2018-08-27) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [10.0][ADD] product_assortment + +12.0.1.0.0 (2019-06-03) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [12.0][MIG] product_assortment + 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -83,6 +93,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/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_assortment/__manifest__.py b/product_assortment/__manifest__.py index fbc3fe66a25..4f1790c3708 100644 --- a/product_assortment/__manifest__.py +++ b/product_assortment/__manifest__.py @@ -1,21 +1,21 @@ -# -*- coding: utf-8 -*- -# Copyright 2018 ACSONE SA/NV +# Copyright 2018-2019 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { 'name': 'Product Assortment', 'summary': """ Adds the ability to manage products assortment""", - 'version': '10.0.1.0.0', + 'version': '12.0.1.0.0', 'license': 'AGPL-3', + 'development_status': 'Stable/Production', 'author': 'ACSONE SA/NV,Odoo Community Association (OCA)', - 'website': 'https://acsone.eu', + 'website': 'https://github.com/OCA/product-attribute', 'depends': [ 'base', 'product', - 'web_widget_domain_v11', ], 'data': [ 'views/product_assortment.xml', ], + 'installable': True, } diff --git a/product_assortment/i18n/product_assortment.pot b/product_assortment/i18n/product_assortment.pot index 9083bb8ea21..d04407c9445 100644 --- a/product_assortment/i18n/product_assortment.pot +++ b/product_assortment/i18n/product_assortment.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -14,39 +14,44 @@ msgstr "" "Plural-Forms: \n" #. module: product_assortment -#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +#: model_terms:ir.ui.view,arch_db:product_assortment.product_assortment_view_form msgid "Products" msgstr "" #. module: product_assortment -#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form -#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_search +#: model_terms:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +#: model_terms:ir.ui.view,arch_db:product_assortment.product_assortment_view_search msgid "Assortment Name" msgstr "" #. module: product_assortment -#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_search +#: model_terms:ir.ui.view,arch_db:product_assortment.product_assortment_view_search msgid "Assortments" msgstr "" #. module: product_assortment -#: model:ir.model.fields,field_description:product_assortment.field_ir_filters_blacklist_product_ids -msgid "Blacklist product ids" +#: model:ir.model.fields,field_description:product_assortment.field_ir_filters__blacklist_product_ids +msgid "Blacklist Product" msgstr "" #. module: product_assortment #: model:ir.model,name:product_assortment.model_ir_filters -#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +#: model_terms:ir.ui.view,arch_db:product_assortment.product_assortment_view_form msgid "Filters" msgstr "" #. module: product_assortment -#: model:ir.model.fields,field_description:product_assortment.field_ir_filters_is_assortment -msgid "Is assortment" +#: model:ir.model.fields,field_description:product_assortment.field_ir_filters__is_assortment +msgid "Is Assortment" msgstr "" #. module: product_assortment -#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +#: model:ir.model.fields,field_description:product_assortment.field_ir_filters__model_id +msgid "Model" +msgstr "" + +#. module: product_assortment +#: model_terms:ir.ui.view,arch_db:product_assortment.product_assortment_view_form msgid "Product" msgstr "" @@ -61,28 +66,28 @@ msgid "Product assortment" msgstr "" #. module: product_assortment -#: code:addons/product_assortment/models/ir_filters.py:79 +#: code:addons/product_assortment/models/ir_filters.py:78 #, python-format msgid "Products" msgstr "" #. module: product_assortment -#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +#: model_terms:ir.ui.view,arch_db:product_assortment.product_assortment_view_form msgid "Products to exclude" msgstr "" #. module: product_assortment -#: model:ir.ui.view,arch_db:product_assortment.product_assortment_view_form +#: model_terms:ir.ui.view,arch_db:product_assortment.product_assortment_view_form msgid "Products to include" msgstr "" #. module: product_assortment -#: model:ir.model.fields,field_description:product_assortment.field_ir_filters_record_count -msgid "Record count" +#: model:ir.model.fields,field_description:product_assortment.field_ir_filters__record_count +msgid "Record Count" msgstr "" #. module: product_assortment -#: model:ir.model.fields,field_description:product_assortment.field_ir_filters_whitelist_product_ids -msgid "Whitelist product ids" +#: model:ir.model.fields,field_description:product_assortment.field_ir_filters__whitelist_product_ids +msgid "Whitelist Product" msgstr "" diff --git a/product_assortment/models/ir_filters.py b/product_assortment/models/ir_filters.py index 8096173af24..92824568508 100644 --- a/product_assortment/models/ir_filters.py +++ b/product_assortment/models/ir_filters.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -# Copyright 2018 ACSONE SA/NV +# Copyright 2018-2019 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models, _ from odoo.osv import expression diff --git a/product_assortment/readme/HISTORY.rst b/product_assortment/readme/HISTORY.rst new file mode 100644 index 00000000000..13f4794e2e0 --- /dev/null +++ b/product_assortment/readme/HISTORY.rst @@ -0,0 +1,9 @@ +10.0.1.0.0 (2018-08-27) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [10.0][ADD] product_assortment + +12.0.1.0.0 (2019-06-03) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [12.0][MIG] product_assortment diff --git a/product_assortment/static/description/index.html b/product_assortment/static/description/index.html index 6ab1cab3ef5..3c96edbcff3 100644 --- a/product_assortment/static/description/index.html +++ b/product_assortment/static/description/index.html @@ -3,7 +3,7 @@ - + Product Assortment -
-

Product Assortment

+
+ + +Odoo Community Association + +
+

Product Assortment

-

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

+

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

This addon intends to manage product assortment. In Odoo you can only define some filters defined by a domain but it can be sometimes really complicated. With this addon you will be able to define a domain but @@ -397,7 +402,7 @@

Product Assortment

-

Usage

+

Usage

To use this module, you need to:

  1. Enter the menu through Product Assortment Icon
  2. @@ -406,34 +411,34 @@

    Usage

-

Changelog

+

Changelog

-

10.0.1.0.0 (2018-08-27)

+

10.0.1.0.0 (2018-08-27)

  • [10.0][ADD] productassortment
-

12.0.1.0.0 (2019-06-03)

+

12.0.1.0.0 (2019-06-03)

  • [12.0][MIG] productassortment
-

14.0.1.0.0 (2019-06-03)

+

14.0.1.0.0 (2019-06-03)

  • [14.0][MIG] productassortment
-

16.0.1.0.0 (2022-09-15)

+

16.0.1.0.0 (2022-09-15)

  • [16.0][MIG] productassortment
-

Bug Tracker

+

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 to smash it by providing a detailed and welcomed @@ -441,15 +446,15 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • ACSONE SA/NV
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -475,5 +480,6 @@

Maintainers

+
From 161a9ee57064227fbd733f15ed4f9e637e0f1e52 Mon Sep 17 00:00:00 2001 From: CarlosRoca13 Date: Mon, 13 Dec 2021 13:32:09 +0100 Subject: [PATCH 060/161] [IMP] product_assortment: Add demo data for product_assortment module --- product_assortment/__manifest__.py | 1 + product_assortment/demo/assortments.xml | 40 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 product_assortment/demo/assortments.xml diff --git a/product_assortment/__manifest__.py b/product_assortment/__manifest__.py index 8cd58360da8..5c8746e197d 100644 --- a/product_assortment/__manifest__.py +++ b/product_assortment/__manifest__.py @@ -18,5 +18,6 @@ "views/product_assortment.xml", "views/res_partner_view.xml", ], + "demo": ["demo/assortments.xml"], "installable": True, } diff --git a/product_assortment/demo/assortments.xml b/product_assortment/demo/assortments.xml new file mode 100644 index 00000000000..f1f02a14419 --- /dev/null +++ b/product_assortment/demo/assortments.xml @@ -0,0 +1,40 @@ + + + + + + product.product + + Assortment Desk + + ["|","|",("default_code","ilike","desk"),("name","ilike","desk"),("barcode","ilike","desk")] + + + + product.product + + Assortment Chair + + ["|","|",("default_code","ilike","chair"),("name","ilike","chair"),("barcode","ilike","chair")] + + + + product.product + + Assortment Service + + + + + From 6e94d675b2368125d14395c6c71b25475cc0b5fc Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Fri, 22 Mar 2024 00:40:29 +0100 Subject: [PATCH 061/161] [FIX] product_assortment: All assortments are applied to original partner when partner is duplicated TT48358 --- product_assortment/models/res_partner.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/product_assortment/models/res_partner.py b/product_assortment/models/res_partner.py index dd6721400cd..39947546fdb 100644 --- a/product_assortment/models/res_partner.py +++ b/product_assortment/models/res_partner.py @@ -12,6 +12,7 @@ class ResPartner(models.Model): relation="ir_filter_all_partner_rel", column1="partner_id", column2="filter_id", + copy=False, ) def action_define_product_assortment(self): @@ -41,9 +42,7 @@ def _update_partner_assortments(self): # Use ids instead of record to improve performance (Remove in next versions) partner_assortment_ids = [] for assortment in assortments: - if partner in assortment.partner_ids or partner.filtered_domain( - assortment._get_eval_partner_domain() - ): + if partner in assortment.all_partner_ids: partner_assortment_ids.append(assortment.id) partner.applied_assortment_ids = assortments.browse(partner_assortment_ids) From 3da6ee8c8e1d535aacd5032888cfa073450f4827 Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Mon, 30 Sep 2024 22:48:56 +0200 Subject: [PATCH 062/161] [IMP] product_assortment: Add security group to only show assortments to managers TT51064 --- product_assortment/models/__init__.py | 1 + product_assortment/models/ir_rule.py | 36 +++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 product_assortment/models/ir_rule.py diff --git a/product_assortment/models/__init__.py b/product_assortment/models/__init__.py index c03968c0074..40f9898560a 100644 --- a/product_assortment/models/__init__.py +++ b/product_assortment/models/__init__.py @@ -1,2 +1,3 @@ from . import ir_filters +from . import ir_rule from . import res_partner diff --git a/product_assortment/models/ir_rule.py b/product_assortment/models/ir_rule.py new file mode 100644 index 00000000000..48c80a52225 --- /dev/null +++ b/product_assortment/models/ir_rule.py @@ -0,0 +1,36 @@ +# Copyright 2024 Tecnativa - Sergio Teruel +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html + +from odoo import api, models, tools +from odoo.osv import expression +from odoo.tools import config + + +class IrRule(models.Model): + _inherit = "ir.rule" + + @api.model + @tools.conditional( + "xml" not in config["dev_mode"], + tools.ormcache( + "self.env.uid", + "self.env.su", + "model_name", + "mode", + "tuple(self._compute_domain_context_values())", + ), + ) + def _compute_domain(self, model_name, mode="read"): + """Inject extra domain for restricting filter (Assortments) when the user + has not the group 'Product Assortment Manager'. + """ + res = super()._compute_domain(model_name, mode=mode) + user = self.env.user + if model_name == "ir.filters" and not self.env.su: + if not user.has_group( + "product_assortment.group_product_assortment_manager" + ): + extra_domain = [("is_assortment", "=", False)] + extra_domain = expression.normalize_domain(extra_domain) + res = expression.AND([extra_domain] + [res]) + return res From bc1c997ad794b4309c77bb73da3676fd9281e4e6 Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 1 Feb 2025 14:41:06 +0100 Subject: [PATCH 063/161] [IMP] product_assortment: Migration leftovers to 18.0 --- product_assortment/README.rst | 39 +++++++----- product_assortment/i18n/ca.po | 2 +- product_assortment/i18n/de.po | 2 +- product_assortment/i18n/fr.po | 2 +- product_assortment/i18n/it.po | 2 +- product_assortment/i18n/nl.po | 2 +- product_assortment/models/ir_filters.py | 12 ++-- product_assortment/readme/HISTORY.md | 12 +++- product_assortment/readme/USAGE.md | 2 +- .../static/description/index.html | 63 ++++++++++--------- .../tests/test_product_assortment.py | 15 +++++ 11 files changed, 95 insertions(+), 58 deletions(-) diff --git a/product_assortment/README.rst b/product_assortment/README.rst index e59527f5e7c..aadb5eb0d72 100644 --- a/product_assortment/README.rst +++ b/product_assortment/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ================== Product Assortment ================== @@ -17,7 +13,7 @@ Product Assortment .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status :alt: Production/Stable -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |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-OCA%2Fproduct--attribute-lightgray.png?logo=github @@ -49,7 +45,7 @@ Usage To use this module, you need to: -1. Enter the menu through Product Assortment Icon +1. Enter the menu through the Product Assortment Icon 2. Create a new filter where you can define your domain and add allowed and restricted products @@ -59,22 +55,33 @@ Changelog 10.0.1.0.0 (2018-08-27) ----------------------- -- [10.0][ADD] productassortment +- [10.0][ADD] productassortment 12.0.1.0.0 (2019-06-03) ----------------------- -- [12.0][MIG] productassortment +- [12.0][MIG] productassortment 14.0.1.0.0 (2019-06-03) ----------------------- -- [14.0][MIG] productassortment +- [14.0][MIG] productassortment 16.0.1.0.0 (2022-09-15) ----------------------- -- [16.0][MIG] productassortment +- [16.0][MIG] product_assortment + +18.0.1.0.0 (2025-03-06) +----------------------- + +- [18.0][MIG] product_assortment +- Forward port demo data +- Forward port Only Show assortments to managers +- Forward port Fix All assortments are applied to original partner when + partner is duplicated +- Adjust test code to new API behavior, for info: odoo/odoo@450f5c9 +- added test for combined black list and whitelisted product Bug Tracker =========== @@ -97,13 +104,13 @@ Authors Contributors ------------ -- Denis Roussel -- Cédric Pigeon -- Xavier Bouquiaux -- `Tecnativa `__: +- Denis Roussel +- Cédric Pigeon +- Xavier Bouquiaux +- `Tecnativa `__: - - Carlos Roca - - Sergio Teruel + - Carlos Roca + - Sergio Teruel Maintainers ----------- diff --git a/product_assortment/i18n/ca.po b/product_assortment/i18n/ca.po index acc0fc5d49a..375f25f8d9a 100644 --- a/product_assortment/i18n/ca.po +++ b/product_assortment/i18n/ca.po @@ -117,7 +117,7 @@ msgid "Partners to apply" msgstr "Socis a aplicar" #. module: product_assortment -#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_tree +#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_list msgid "Product" msgstr "Producte" diff --git a/product_assortment/i18n/de.po b/product_assortment/i18n/de.po index d2680cdcdba..4cdb4bd86df 100644 --- a/product_assortment/i18n/de.po +++ b/product_assortment/i18n/de.po @@ -124,7 +124,7 @@ msgid "Partners to apply" msgstr "" #. module: product_assortment -#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_tree +#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_list msgid "Product" msgstr "Produkt" diff --git a/product_assortment/i18n/fr.po b/product_assortment/i18n/fr.po index ebd062220a0..7d3686c522e 100644 --- a/product_assortment/i18n/fr.po +++ b/product_assortment/i18n/fr.po @@ -123,7 +123,7 @@ msgid "Partners to apply" msgstr "Appliquer aux partenaires" #. module: product_assortment -#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_tree +#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_list msgid "Product" msgstr "Produit" diff --git a/product_assortment/i18n/it.po b/product_assortment/i18n/it.po index ab71abd1bad..5af4acf6e87 100644 --- a/product_assortment/i18n/it.po +++ b/product_assortment/i18n/it.po @@ -124,7 +124,7 @@ msgid "Partners to apply" msgstr "Partner da applicare" #. module: product_assortment -#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_tree +#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_list msgid "Product" msgstr "Prodotto" diff --git a/product_assortment/i18n/nl.po b/product_assortment/i18n/nl.po index 05eb306e293..a82eed0ea15 100644 --- a/product_assortment/i18n/nl.po +++ b/product_assortment/i18n/nl.po @@ -123,7 +123,7 @@ msgid "Partners to apply" msgstr "Partners om toe te passen" #. module: product_assortment -#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_tree +#: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_list msgid "Product" msgstr "Product" diff --git a/product_assortment/models/ir_filters.py b/product_assortment/models/ir_filters.py index 99766efb358..d8651e7bc2a 100644 --- a/product_assortment/models/ir_filters.py +++ b/product_assortment/models/ir_filters.py @@ -2,7 +2,7 @@ # Copyright 2023 Tecnativa - Carlos Dauden # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, api, fields, models +from odoo import api, fields, models from odoo.osv import expression from odoo.tools import ormcache from odoo.tools.safe_eval import datetime, safe_eval @@ -52,9 +52,7 @@ class IrFilters(models.Model): @api.model def _get_default_is_assortment(self): - if self.env.context.get("product_assortment", False): - return True - return False + return self.env.context.get("product_assortment", False) @api.model def _update_assortment_default_values(self, vals_list): @@ -90,10 +88,10 @@ def get_partner_domain_fields(self): @api.depends("partner_ids", "partner_domain") def _compute_all_partner_ids(self): """Summarize selected partners and partners from partner domain field""" - for ir_filter in self: + for ir_filter in self.sudo(): if not ir_filter.is_assortment: ir_filter.all_partner_ids = False - elif ir_filter.partner_domain != "[]": + if ir_filter.partner_domain != []: ir_filter.all_partner_ids = ( self.env["res.partner"].search(ir_filter._get_eval_partner_domain()) + ir_filter.partner_ids @@ -169,7 +167,7 @@ def show_products(self): action.update( { "domain": self._get_eval_domain(), - "name": _("Products"), + "name": self.env._("Products"), "context": self.env.context, "target": "current", } diff --git a/product_assortment/readme/HISTORY.md b/product_assortment/readme/HISTORY.md index 0cc1722371d..9eefcec32b1 100644 --- a/product_assortment/readme/HISTORY.md +++ b/product_assortment/readme/HISTORY.md @@ -12,4 +12,14 @@ ## 16.0.1.0.0 (2022-09-15) -- \[16.0\]\[MIG\] productassortment +- \[16.0\]\[MIG\] product_assortment + +## 18.0.1.0.0 (2025-03-06) + +- \[18.0\]\[MIG\] product_assortment +- Forward port demo data +- Forward port Only Show assortments to managers +- Forward port Fix All assortments are applied to original partner when partner is duplicated +- Adjust test code to new API behavior, for info: odoo/odoo@450f5c9 +- added test for combined black list and whitelisted product + diff --git a/product_assortment/readme/USAGE.md b/product_assortment/readme/USAGE.md index dbc0b08586f..dc83a2ad52c 100644 --- a/product_assortment/readme/USAGE.md +++ b/product_assortment/readme/USAGE.md @@ -1,5 +1,5 @@ To use this module, you need to: -1. Enter the menu through Product Assortment Icon +1. Enter the menu through the Product Assortment Icon 2. Create a new filter where you can define your domain and add allowed and restricted products diff --git a/product_assortment/static/description/index.html b/product_assortment/static/description/index.html index f1fef7568d3..42bde133348 100644 --- a/product_assortment/static/description/index.html +++ b/product_assortment/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Product Assortment -
+
+

Product Assortment

- - -Odoo Community Association - -
-

Product Assortment

-

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

+

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

This addon intends to manage product assortment. In Odoo you can only define some filters defined by a domain but it can be sometimes really complicated. With this addon you will be able to define a domain but @@ -390,55 +385,68 @@

Product Assortment

  • 12.0.1.0.0 (2019-06-03)
  • 14.0.1.0.0 (2019-06-03)
  • 16.0.1.0.0 (2022-09-15)
  • +
  • 18.0.1.0.0 (2025-03-06)
  • -
  • Bug Tracker
  • -
  • Credits
  • -

    Usage

    +

    Usage

    To use this module, you need to:

      -
    1. Enter the menu through Product Assortment Icon
    2. +
    3. Enter the menu through the Product Assortment Icon
    4. Create a new filter where you can define your domain and add allowed and restricted products
    -

    Changelog

    +

    Changelog

    -

    10.0.1.0.0 (2018-08-27)

    +

    10.0.1.0.0 (2018-08-27)

    • [10.0][ADD] productassortment
    -

    12.0.1.0.0 (2019-06-03)

    +

    12.0.1.0.0 (2019-06-03)

    • [12.0][MIG] productassortment
    -

    14.0.1.0.0 (2019-06-03)

    +

    14.0.1.0.0 (2019-06-03)

    • [14.0][MIG] productassortment
    -

    16.0.1.0.0 (2022-09-15)

    +

    16.0.1.0.0 (2022-09-15)

    +
      +
    • [16.0][MIG] product_assortment
    • +
    +
    +
    +

    18.0.1.0.0 (2025-03-06)

      -
    • [16.0][MIG] productassortment
    • +
    • [18.0][MIG] product_assortment
    • +
    • Forward port demo data
    • +
    • Forward port Only Show assortments to managers
    • +
    • Forward port Fix All assortments are applied to original partner when +partner is duplicated
    • +
    • Adjust test code to new API behavior, for info: odoo/odoo@450f5c9
    • +
    • added test for combined black list and whitelisted product
    -

    Bug Tracker

    +

    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 to smash it by providing a detailed and welcomed @@ -446,15 +454,15 @@

    Bug Tracker

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • ACSONE SA/NV
    -

    Contributors

    +

    Contributors

    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -480,6 +488,5 @@

    Maintainers

    -
    diff --git a/product_assortment/tests/test_product_assortment.py b/product_assortment/tests/test_product_assortment.py index 083f400fdca..483c38146f3 100644 --- a/product_assortment/tests/test_product_assortment.py +++ b/product_assortment/tests/test_product_assortment.py @@ -115,6 +115,21 @@ def test_product_assortment_mixed_view(self): res = self.assortment.show_products() self.assertEqual(res["domain"], [("id", "not in", excluded_product.ids)]) + def test_product_assortment_filter_combination(self): + """Combine a whitelisted and a blacklisted product in order + to validate the combination of both filters. The result should be a + simple domain with the excluded product. + """ + # Add a default no product filter to the assortment + self.assortment.write({"domain": [("id", "=", 0)]}) + included_product = self.env.ref("product.product_product_7") + self.assortment.write({"whitelist_product_ids": [(4, included_product.id)]}) + excluded_product = self.env.ref("product.product_product_2") + self.assortment.write({"blacklist_product_ids": [(4, excluded_product.id)]}) + res = self.assortment.show_products() + self.assertIn(("id", "not in", [excluded_product.id]), res["domain"]) + self.assertIn(("id", "in", [included_product.id]), res["domain"]) + def test_record_count(self): products = self.product_obj.search([]) self.assertEqual(self.assortment.record_count, len(products)) From 4658a4da9c56aad422f41d0f5147f5c7d69a2c31 Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 1 Feb 2025 21:27:53 +0100 Subject: [PATCH 064/161] [FIX] product_assortment: Show all applied assortments from partner smartbutton. Before this commit, the assortments which where applied to the partner using the partner domain, where not shown. --- product_assortment/README.rst | 3 +++ product_assortment/models/res_partner.py | 2 +- product_assortment/readme/HISTORY.md | 2 ++ product_assortment/static/description/index.html | 3 +++ product_assortment/tests/test_product_assortment.py | 5 ++++- 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/product_assortment/README.rst b/product_assortment/README.rst index aadb5eb0d72..5c8ab343727 100644 --- a/product_assortment/README.rst +++ b/product_assortment/README.rst @@ -82,6 +82,9 @@ Changelog partner is duplicated - Adjust test code to new API behavior, for info: odoo/odoo@450f5c9 - added test for combined black list and whitelisted product +- Fix: Navigating to the product assortment using the smartbutton on + the partner does not show all applicable assortments. (The + assortments with the partner defined as a domain where missing.) Bug Tracker =========== diff --git a/product_assortment/models/res_partner.py b/product_assortment/models/res_partner.py index 39947546fdb..812011ddd2a 100644 --- a/product_assortment/models/res_partner.py +++ b/product_assortment/models/res_partner.py @@ -20,7 +20,7 @@ def action_define_product_assortment(self): xmlid = "product_assortment.actions_product_assortment_view" action = self.env["ir.actions.act_window"]._for_xml_id(xmlid) action["domain"] = [ - ("partner_ids", "in", self.ids), + ("all_partner_ids", "in", self.ids), ("is_assortment", "=", True), ] ctx = self.env.context.copy() diff --git a/product_assortment/readme/HISTORY.md b/product_assortment/readme/HISTORY.md index 9eefcec32b1..589bbea5c99 100644 --- a/product_assortment/readme/HISTORY.md +++ b/product_assortment/readme/HISTORY.md @@ -22,4 +22,6 @@ - Forward port Fix All assortments are applied to original partner when partner is duplicated - Adjust test code to new API behavior, for info: odoo/odoo@450f5c9 - added test for combined black list and whitelisted product +- Fix: Navigating to the product assortment using the smartbutton on the partner does not show all applicable assortments. + (The assortments with the partner defined as a domain where missing.) diff --git a/product_assortment/static/description/index.html b/product_assortment/static/description/index.html index 42bde133348..ce178c6db58 100644 --- a/product_assortment/static/description/index.html +++ b/product_assortment/static/description/index.html @@ -442,6 +442,9 @@

    18.0.1.0.0 (2025-03-06)

    partner is duplicated
  • Adjust test code to new API behavior, for info: odoo/odoo@450f5c9
  • added test for combined black list and whitelisted product
  • +
  • Fix: Navigating to the product assortment using the smartbutton on +the partner does not show all applicable assortments. (The +assortments with the partner defined as a domain where missing.)
  • diff --git a/product_assortment/tests/test_product_assortment.py b/product_assortment/tests/test_product_assortment.py index 483c38146f3..367ad9a89dd 100644 --- a/product_assortment/tests/test_product_assortment.py +++ b/product_assortment/tests/test_product_assortment.py @@ -84,7 +84,10 @@ def test_search_assortment_with_partner(self): search_domain = self.partner.action_define_product_assortment()["domain"] self.assertEqual( search_domain, - [("partner_ids", "in", [self.partner.id]), ("is_assortment", "=", True)], + [ + ("all_partner_ids", "in", [self.partner.id]), + ("is_assortment", "=", True), + ], ) def test_product_assortment_view(self): From 80d4b8562c712b813d037276fdb4a1d4e4de6835 Mon Sep 17 00:00:00 2001 From: Ruchir Shukla Date: Tue, 13 Jan 2026 14:12:20 +0530 Subject: [PATCH 065/161] [MIG] product_assortment: Migration to 19.0 --- product_assortment/README.rst | 24 ++++++-- product_assortment/__manifest__.py | 2 +- .../migrations/18.0.1.0.0/pre-migrate.py | 37 ------------ product_assortment/models/ir_filters.py | 15 +++-- product_assortment/models/ir_rule.py | 7 +-- .../static/description/index.html | 42 +++++++------ .../tests/test_product_assortment.py | 60 +++++++++++++------ .../views/product_assortment.xml | 7 --- 8 files changed, 94 insertions(+), 100 deletions(-) delete mode 100644 product_assortment/migrations/18.0.1.0.0/pre-migrate.py diff --git a/product_assortment/README.rst b/product_assortment/README.rst index 5c8ab343727..29ace043841 100644 --- a/product_assortment/README.rst +++ b/product_assortment/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ================== Product Assortment ================== @@ -13,17 +17,17 @@ Product Assortment .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status :alt: Production/Stable -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-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-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/18.0/product_assortment + :target: https://github.com/OCA/product-attribute/tree/19.0/product_assortment :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-18-0/product-attribute-18-0-product_assortment + :target: https://translation.odoo-community.org/projects/product-attribute-19-0/product-attribute-19-0-product_assortment :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -57,21 +61,29 @@ Changelog - [10.0][ADD] productassortment +.. _section-1: + 12.0.1.0.0 (2019-06-03) ----------------------- - [12.0][MIG] productassortment +.. _section-2: + 14.0.1.0.0 (2019-06-03) ----------------------- - [14.0][MIG] productassortment +.. _section-3: + 16.0.1.0.0 (2022-09-15) ----------------------- - [16.0][MIG] product_assortment +.. _section-4: + 18.0.1.0.0 (2025-03-06) ----------------------- @@ -92,7 +104,7 @@ 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 to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -128,6 +140,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/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_assortment/__manifest__.py b/product_assortment/__manifest__.py index 5c8746e197d..e5c6bab5775 100644 --- a/product_assortment/__manifest__.py +++ b/product_assortment/__manifest__.py @@ -6,7 +6,7 @@ "name": "Product Assortment", "summary": """ Adds the ability to manage products assortment""", - "version": "18.0.1.0.1", + "version": "19.0.1.0.0", "license": "AGPL-3", "development_status": "Production/Stable", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", diff --git a/product_assortment/migrations/18.0.1.0.0/pre-migrate.py b/product_assortment/migrations/18.0.1.0.0/pre-migrate.py deleted file mode 100644 index 94354337fbe..00000000000 --- a/product_assortment/migrations/18.0.1.0.0/pre-migrate.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 2025 The O-team -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from openupgradelib import openupgrade - - -def migrate(cr, version): - """Update the `domain` value to `[(1, "=", 0)]`. - - This is needed to retain the behavior of the module available in older versions of - the module. In older versions, the `whitelist_product_ids` field was not required - to be set explicitly to a void domain when used in combination with the - 'whitelisted_product_ids' field. When the `whitelist_product_ids` field was empty, - the `domain` field was ignored. - - However, due to a change in the ORM, the `domain` field is now always applied, - even if the `whitelist_product_ids` field is empty. This change has caused the - behavior to differ from previous versions of the module. - - To restore the previous behavior, we need to set the `domain` field to a - non-empty domain, such as `[(1, "=", 0)]`, which will always return False and - effectively ignore the `domain` field. - """ - openupgrade.logged_query( - cr, - """ - UPDATE ir_filters irf - SET domain = '[("id", "=", 0)]' - WHERE irf.is_assortment = True - AND irf.domain = '[]' - AND EXISTS( - SELECT 1 - FROM assortment_product_whitelisted apw - WHERE apw.ir_filters_id = irf.id - ) - """, - ) diff --git a/product_assortment/models/ir_filters.py b/product_assortment/models/ir_filters.py index d8651e7bc2a..315571ffb9b 100644 --- a/product_assortment/models/ir_filters.py +++ b/product_assortment/models/ir_filters.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models -from odoo.osv import expression +from odoo.fields import Domain from odoo.tools import ormcache from odoo.tools.safe_eval import datetime, safe_eval @@ -103,17 +103,15 @@ def _get_eval_domain(self): res = super()._get_eval_domain() if self.apply_black_list_product_domain: black_list_domain = self._get_eval_black_list_domain() - res = expression.AND( - [expression.distribute_not(["!"] + black_list_domain), res] - ) + res = Domain.AND([~Domain(black_list_domain), Domain(res)]) if self.whitelist_product_ids: result_domain = [("id", "in", self.whitelist_product_ids.ids)] - res = expression.OR([result_domain, res]) + res = Domain.OR([result_domain, Domain(res)]) if self.blacklist_product_ids: result_domain = [("id", "not in", self.blacklist_product_ids.ids)] - res = expression.AND([result_domain, res]) + res = Domain.AND([result_domain, Domain(res)]) return res @@ -133,7 +131,8 @@ def _get_eval_partner_domain(self): def _compute_record_count(self): for record in self: - if not record.is_assortment: + # model_id may be unset on new records, skip count to prevent errors + if not record.is_assortment or not record.model_id: record.record_count = 0 continue domain = record._get_eval_domain() @@ -150,7 +149,7 @@ def _get_action_domain( embedded_action_id=embedded_action_id, embedded_parent_res_id=embedded_parent_res_id, ) - domain = expression.AND([[("is_assortment", "=", False)], domain]) + domain = Domain.AND([Domain([("is_assortment", "=", False)]), Domain(domain)]) return domain diff --git a/product_assortment/models/ir_rule.py b/product_assortment/models/ir_rule.py index 48c80a52225..e077978cb42 100644 --- a/product_assortment/models/ir_rule.py +++ b/product_assortment/models/ir_rule.py @@ -2,7 +2,7 @@ # License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html from odoo import api, models, tools -from odoo.osv import expression +from odoo.fields import Domain from odoo.tools import config @@ -30,7 +30,6 @@ def _compute_domain(self, model_name, mode="read"): if not user.has_group( "product_assortment.group_product_assortment_manager" ): - extra_domain = [("is_assortment", "=", False)] - extra_domain = expression.normalize_domain(extra_domain) - res = expression.AND([extra_domain] + [res]) + extra_domain = Domain([("is_assortment", "=", False)]) + res = Domain.AND([extra_domain] + [res]) return res diff --git a/product_assortment/static/description/index.html b/product_assortment/static/description/index.html index ce178c6db58..e12b3d47927 100644 --- a/product_assortment/static/description/index.html +++ b/product_assortment/static/description/index.html @@ -3,7 +3,7 @@ -Product Assortment +README.rst -
    -

    Product Assortment

    +
    + + +Odoo Community Association + +
    +

    Product Assortment

    -

    Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    +

    Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This addon intends to manage product assortment. In Odoo you can only define some filters defined by a domain but it can be sometimes really complicated. With this addon you will be able to define a domain but @@ -398,7 +403,7 @@

    Product Assortment

    -

    Usage

    +

    Usage

    To use this module, you need to:

    1. Enter the menu through the Product Assortment Icon
    2. @@ -407,33 +412,33 @@

      Usage

    -

    Changelog

    +

    Changelog

    -

    10.0.1.0.0 (2018-08-27)

    +

    10.0.1.0.0 (2018-08-27)

    • [10.0][ADD] productassortment
    -

    12.0.1.0.0 (2019-06-03)

    +

    12.0.1.0.0 (2019-06-03)

    • [12.0][MIG] productassortment
    -

    14.0.1.0.0 (2019-06-03)

    +

    14.0.1.0.0 (2019-06-03)

    • [14.0][MIG] productassortment
    -

    16.0.1.0.0 (2022-09-15)

    +

    16.0.1.0.0 (2022-09-15)

    • [16.0][MIG] product_assortment
    -

    18.0.1.0.0 (2025-03-06)

    +

    18.0.1.0.0 (2025-03-06)

    -

    Bug Tracker

    +

    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 to smash it by providing a detailed and welcomed -feedback.

    +feedback.

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • ACSONE SA/NV
    -

    Contributors

    +

    Contributors

    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -486,10 +491,11 @@

    Maintainers

    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/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    +
    diff --git a/product_assortment/tests/test_product_assortment.py b/product_assortment/tests/test_product_assortment.py index 367ad9a89dd..88df4e9131e 100644 --- a/product_assortment/tests/test_product_assortment.py +++ b/product_assortment/tests/test_product_assortment.py @@ -7,11 +7,30 @@ class TestProductAssortment(TransactionCase): - def setUp(self): - super().setUp() - self.filter_obj = self.env["ir.filters"] - self.product_obj = self.env["product.product"] - self.assortment = self.filter_obj.create( + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.filter_obj = cls.env["ir.filters"] + cls.product_obj = cls.env["product.product"] + cls.product_storage_box = cls.product_obj.create( + { + "name": "Storage Box", + "type": "consu", + "standard_price": 14.0, + "list_price": 15.8, + "default_code": "E-COM08", + } + ) + cls.product_virtual_home_staging = cls.product_obj.create( + { + "name": "Virtual Home Staging", + "type": "service", + "standard_price": 25.5, + "list_price": 38.25, + } + ) + cls.assortment = cls.filter_obj.create( { "name": "Test Assortment", "model_id": "product.product", @@ -19,8 +38,8 @@ def setUp(self): "domain": [], } ) - self.partner = self.env["res.partner"].create({"name": "Test partner"}) - self.partner2 = self.env["res.partner"].create({"name": "Test partner 2"}) + cls.partner = cls.env["res.partner"].create({"name": "Test partner"}) + cls.partner2 = cls.env["res.partner"].create({"name": "Test partner 2"}) def test_assortment(self): products = self.product_obj.search([]) @@ -38,14 +57,14 @@ def test_assortment(self): self.assertEqual(products.ids, products_filtered.ids) # include one product not in initial filter - included_product = self.env.ref("product.product_product_7") + included_product = self.product_storage_box self.assortment.write({"whitelist_product_ids": [(4, included_product.id)]}) domain = self.assortment._get_eval_domain() products_filtered = self.product_obj.search(domain) self.assertIn(included_product.id, products_filtered.ids) # exclude one product not in initial filter - excluded_product = self.env.ref("product.product_product_2") + excluded_product = self.product_virtual_home_staging domain = self.assortment._get_eval_domain() products_filtered = self.product_obj.search(domain) self.assertIn(excluded_product.id, products_filtered.ids) @@ -91,24 +110,26 @@ def test_search_assortment_with_partner(self): ) def test_product_assortment_view(self): - included_product = self.env.ref("product.product_product_7") + included_product = self.product_storage_box self.assortment.write({"whitelist_product_ids": [(4, included_product.id)]}) res = self.assortment.show_products() - self.assertEqual(res["domain"], [(1, "=", 1)]) + domain = [tuple(condition) for condition in res["domain"]] + self.assertEqual(domain, [(1, "=", 1)]) def test_product_assortment_view_with_black_list(self): - excluded_product = self.env.ref("product.product_product_7") + excluded_product = self.product_virtual_home_staging self.assortment.write( { "blacklist_product_ids": [(4, excluded_product.id)], } ) res = self.assortment.show_products() - self.assertEqual(res["domain"], [("id", "not in", excluded_product.ids)]) + domain = [tuple(condition) for condition in res["domain"]] + self.assertEqual(domain, [("id", "not in", excluded_product.ids)]) def test_product_assortment_mixed_view(self): - included_product = self.env.ref("product.product_product_7") - excluded_product = self.env.ref("product.product_product_2") + included_product = self.product_storage_box + excluded_product = self.product_virtual_home_staging self.assortment.write( { "whitelist_product_ids": [(4, included_product.id)], @@ -116,7 +137,8 @@ def test_product_assortment_mixed_view(self): } ) res = self.assortment.show_products() - self.assertEqual(res["domain"], [("id", "not in", excluded_product.ids)]) + domain = [tuple(condition) for condition in res["domain"]] + self.assertEqual(domain, [("id", "not in", excluded_product.ids)]) def test_product_assortment_filter_combination(self): """Combine a whitelisted and a blacklisted product in order @@ -125,9 +147,9 @@ def test_product_assortment_filter_combination(self): """ # Add a default no product filter to the assortment self.assortment.write({"domain": [("id", "=", 0)]}) - included_product = self.env.ref("product.product_product_7") + included_product = self.product_storage_box self.assortment.write({"whitelist_product_ids": [(4, included_product.id)]}) - excluded_product = self.env.ref("product.product_product_2") + excluded_product = self.product_virtual_home_staging self.assortment.write({"blacklist_product_ids": [(4, excluded_product.id)]}) res = self.assortment.show_products() self.assertIn(("id", "not in", [excluded_product.id]), res["domain"]) @@ -170,7 +192,7 @@ def test_assortment_update_with_multiple_partner(self): self.assertEqual(assortment.all_partner_ids, self.partner + self.partner2) def test_assortment_with_black_list_product_domain(self): - excluded_product = self.env.ref("product.product_product_7") + excluded_product = self.product_virtual_home_staging assortment = self.filter_obj.with_context(product_assortment=True).create( { "name": "Test Assortment black product domain", diff --git a/product_assortment/views/product_assortment.xml b/product_assortment/views/product_assortment.xml index 6b298911f48..1336c65c5ea 100644 --- a/product_assortment/views/product_assortment.xml +++ b/product_assortment/views/product_assortment.xml @@ -60,13 +60,6 @@ - - - - - - - Date: Tue, 3 Aug 2021 15:57:51 +0200 Subject: [PATCH 066/161] [ADD][12.0] new module product_net_weight. - Add new net_weight field on product models; - Rename weight field with 'Gross Weight' string; --- product_net_weight/README.rst | 102 ++++ product_net_weight/__init__.py | 1 + product_net_weight/__manifest__.py | 25 + product_net_weight/demo/product_product.xml | 19 + product_net_weight/i18n/fr.po | 84 ++++ .../i18n/product_net_weight.pot | 77 +++ product_net_weight/models/__init__.py | 2 + product_net_weight/models/product_product.py | 19 + product_net_weight/models/product_template.py | 21 + product_net_weight/readme/CONTRIBUTORS.rst | 1 + product_net_weight/readme/DESCRIPTION.rst | 2 + product_net_weight/readme/ROADMAP.rst | 5 + product_net_weight/readme/USAGE.rst | 7 + .../static/description/index.html | 441 ++++++++++++++++++ .../static/description/product_form.png | Bin 0 -> 67209 bytes .../views/view_product_product.xml | 23 + .../views/view_product_template.xml | 23 + 17 files changed, 852 insertions(+) create mode 100644 product_net_weight/README.rst create mode 100644 product_net_weight/__init__.py create mode 100644 product_net_weight/__manifest__.py create mode 100644 product_net_weight/demo/product_product.xml create mode 100644 product_net_weight/i18n/fr.po create mode 100644 product_net_weight/i18n/product_net_weight.pot create mode 100644 product_net_weight/models/__init__.py create mode 100644 product_net_weight/models/product_product.py create mode 100644 product_net_weight/models/product_template.py create mode 100644 product_net_weight/readme/CONTRIBUTORS.rst create mode 100644 product_net_weight/readme/DESCRIPTION.rst create mode 100644 product_net_weight/readme/ROADMAP.rst create mode 100644 product_net_weight/readme/USAGE.rst create mode 100644 product_net_weight/static/description/index.html create mode 100644 product_net_weight/static/description/product_form.png create mode 100644 product_net_weight/views/view_product_product.xml create mode 100644 product_net_weight/views/view_product_template.xml diff --git a/product_net_weight/README.rst b/product_net_weight/README.rst new file mode 100644 index 00000000000..8b13e993d6b --- /dev/null +++ b/product_net_weight/README.rst @@ -0,0 +1,102 @@ +===================== +Products - Net Weight +===================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/12.0/product_net_weight + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-12-0/product-attribute-12-0-product_net_weight + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/135/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of stock module to support net weight. (container excluded) + + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +* Go to 'Inventory > Master Data > Product' and edit items. + +* Go to 'Inventory' tab, and fill the "Net Weight" value. + +.. figure:: https://raw.githubusercontent.com/OCA/product-attribute/12.0/product_net_weight/static/description/product_form.png + +**Note**: The original weight field is renamed to "Gross Weight", to be more explicit. + +Known issues / Roadmap +====================== + +In futur version (> 12.0), allow to compute Weight Price +(Net weight / Price). +For that purpose, refactor with ``product_logistics_uom``. + +Ref : https://github.com/OCA/product-attribute/pull/894#issuecomment-895930887 + +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 +~~~~~~~ + +* GRAP + +Contributors +~~~~~~~~~~~~ + +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) + +Maintainers +~~~~~~~~~~~ + +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. + +.. |maintainer-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px + :target: https://github.com/legalsylvain + :alt: legalsylvain + +Current `maintainer `__: + +|maintainer-legalsylvain| + +This module is part of the `OCA/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_net_weight/__init__.py b/product_net_weight/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_net_weight/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_net_weight/__manifest__.py b/product_net_weight/__manifest__.py new file mode 100644 index 00000000000..8a86725dc65 --- /dev/null +++ b/product_net_weight/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright (C) 2021 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Products - Net Weight", + "summary": "Add 'Net Weight' on product models", + "version": "12.0.1.0.1", + "category": "Product", + "author": "GRAP,Odoo Community Association (OCA)", + "maintainers": ["legalsylvain"], + "website": "https://github.com/OCA/product-attribute", + "license": "AGPL-3", + "depends": ["product"], + "data": [ + "views/view_product_product.xml", + "views/view_product_template.xml", + ], + "demo": [ + "demo/product_product.xml", + ], + "images": [ + "static/description/product_product_form.png", + ], + "installable": True, +} diff --git a/product_net_weight/demo/product_product.xml b/product_net_weight/demo/product_product.xml new file mode 100644 index 00000000000..03f5afc7897 --- /dev/null +++ b/product_net_weight/demo/product_product.xml @@ -0,0 +1,19 @@ + + + + + + Strawberry Jam (Jar of 250 grams) + + + 0.250 + 0.410 + 1.97 + 2.70 + + + diff --git a/product_net_weight/i18n/fr.po b/product_net_weight/i18n/fr.po new file mode 100644 index 00000000000..1d0976ea708 --- /dev/null +++ b/product_net_weight/i18n/fr.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_net_weight +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-08-13 18:38+0000\n" +"PO-Revision-Date: 2021-08-13 18:38+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_product__weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_template__weight +msgid "Gross Weight" +msgstr "Poids brut" + +#. module: product_net_weight +#: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "Liter(s)" +msgstr "" + +#. module: product_net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_product__net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_template__net_weight +msgid "Net Weight" +msgstr "Poids net" + +#. module: product_net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_product__net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_template__net_weight +msgid "Net Weight of the product, container excluded." +msgstr "Poids net du produit, contenant exclus." + +#. module: product_net_weight +#: model:ir.model,name:product_net_weight.model_product_product +msgid "Product" +msgstr "Article" + +#. module: product_net_weight +#: model:ir.model,name:product_net_weight.model_product_template +msgid "Product Template" +msgstr "Modèle d'article" + +#. module: product_net_weight +#: model:product.product,name:product_net_weight.product_strawberry_jam +#: model:product.template,name:product_net_weight.product_strawberry_jam_product_template +msgid "Strawberry Jam (Jar of 250 grams)" +msgstr "Confiture de fraise (Pot de 250 grammes)" + +#. module: product_net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_template__weight +#, fuzzy +msgid "The weight of the contents, not including any packaging, etc." +msgstr "Le poids du contenu en kilogrammes, sans compter tout emballage, etc." + +#. module: product_net_weight +#: model:product.product,uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "Unit(s)" +msgstr "Unité(s)" + +#. module: product_net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_product__weight +msgid "" +"Weight of the product, packaging not included. The unit of measure can be " +"changed in the general settings" +msgstr "" +"Poids du produit, sans le conditionnement. L'unité de mesure peut être " +"changée dans les paramètres généraux." + +#. module: product_net_weight +#: model:product.product,weight_uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,weight_uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "kg" +msgstr "" diff --git a/product_net_weight/i18n/product_net_weight.pot b/product_net_weight/i18n/product_net_weight.pot new file mode 100644 index 00000000000..d8707098b42 --- /dev/null +++ b/product_net_weight/i18n/product_net_weight.pot @@ -0,0 +1,77 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_net_weight +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_product__weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_template__weight +msgid "Gross Weight" +msgstr "" + +#. module: product_net_weight +#: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "Liter(s)" +msgstr "" + +#. module: product_net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_product__net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_template__net_weight +msgid "Net Weight" +msgstr "" + +#. module: product_net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_product__net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_template__net_weight +msgid "Net Weight of the product, container excluded." +msgstr "" + +#. module: product_net_weight +#: model:ir.model,name:product_net_weight.model_product_product +msgid "Product" +msgstr "" + +#. module: product_net_weight +#: model:ir.model,name:product_net_weight.model_product_template +msgid "Product Template" +msgstr "" + +#. module: product_net_weight +#: model:product.product,name:product_net_weight.product_strawberry_jam +#: model:product.template,name:product_net_weight.product_strawberry_jam_product_template +msgid "Strawberry Jam (Jar of 250 grams)" +msgstr "" + +#. module: product_net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_template__weight +msgid "The weight of the contents, not including any packaging, etc." +msgstr "" + +#. module: product_net_weight +#: model:product.product,uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "Unit(s)" +msgstr "" + +#. module: product_net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_product__weight +msgid "Weight of the product, packaging not included. The unit of measure can be changed in the general settings" +msgstr "" + +#. module: product_net_weight +#: model:product.product,weight_uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,weight_uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "kg" +msgstr "" + diff --git a/product_net_weight/models/__init__.py b/product_net_weight/models/__init__.py new file mode 100644 index 00000000000..18b37e85320 --- /dev/null +++ b/product_net_weight/models/__init__.py @@ -0,0 +1,2 @@ +from . import product_product +from . import product_template diff --git a/product_net_weight/models/product_product.py b/product_net_weight/models/product_product.py new file mode 100644 index 00000000000..f3a7696b9e9 --- /dev/null +++ b/product_net_weight/models/product_product.py @@ -0,0 +1,19 @@ +# Copyright (C) 2021 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models +from odoo.addons import decimal_precision as dp + + +class ProductProduct(models.Model): + _inherit = "product.product" + + net_weight = fields.Float( + string="Net Weight", + digits=dp.get_precision("Stock Weight"), + help="Net Weight of the product, container excluded.", + ) + + # Explicit field, renaming it + weight = fields.Float(string="Gross Weight") diff --git a/product_net_weight/models/product_template.py b/product_net_weight/models/product_template.py new file mode 100644 index 00000000000..120e30fa1e2 --- /dev/null +++ b/product_net_weight/models/product_template.py @@ -0,0 +1,21 @@ +# Copyright (C) 2021 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models +from odoo.addons import decimal_precision as dp + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + net_weight = fields.Float( + string="Net Weight", + related="product_variant_ids.net_weight", + digits=dp.get_precision("Stock Weight"), + help="Net Weight of the product, container excluded.", + readonly=False, + ) + + # Explicit field, renaming it + weight = fields.Float(string="Gross Weight") diff --git a/product_net_weight/readme/CONTRIBUTORS.rst b/product_net_weight/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..e1525ce042b --- /dev/null +++ b/product_net_weight/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) diff --git a/product_net_weight/readme/DESCRIPTION.rst b/product_net_weight/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..43cb00103e2 --- /dev/null +++ b/product_net_weight/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of stock module to support net weight. (container excluded) + diff --git a/product_net_weight/readme/ROADMAP.rst b/product_net_weight/readme/ROADMAP.rst new file mode 100644 index 00000000000..e14be535544 --- /dev/null +++ b/product_net_weight/readme/ROADMAP.rst @@ -0,0 +1,5 @@ +In futur version (> 12.0), allow to compute Weight Price +(Net weight / Price). +For that purpose, refactor with ``product_logistics_uom``. + +Ref : https://github.com/OCA/product-attribute/pull/894#issuecomment-895930887 diff --git a/product_net_weight/readme/USAGE.rst b/product_net_weight/readme/USAGE.rst new file mode 100644 index 00000000000..4dfa73c47c5 --- /dev/null +++ b/product_net_weight/readme/USAGE.rst @@ -0,0 +1,7 @@ +* Go to 'Inventory > Master Data > Product' and edit items. + +* Go to 'Inventory' tab, and fill the "Net Weight" value. + +.. figure:: ../static/description/product_form.png + +**Note**: The original weight field is renamed to "Gross Weight", to be more explicit. diff --git a/product_net_weight/static/description/index.html b/product_net_weight/static/description/index.html new file mode 100644 index 00000000000..9f8f206f32f --- /dev/null +++ b/product_net_weight/static/description/index.html @@ -0,0 +1,441 @@ + + + + + + +Products - Net Weight + + + +
    +

    Products - Net Weight

    + + +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    This module extends the functionality of stock module to support net weight. (container excluded)

    +

    Table of contents

    + +
    +

    Usage

    +
      +
    • Go to ‘Inventory > Master Data > Product’ and edit items.
    • +
    • Go to ‘Inventory’ tab, and fill the “Net Weight” value.
    • +
    +
    +https://raw.githubusercontent.com/OCA/product-attribute/12.0/product_net_weight/static/description/product_form.png +
    +

    Note: The original weight field is renamed to “Gross Weight”, to be more explicit.

    +
    +
    +

    Known issues / Roadmap

    +

    In futur version (> 12.0), allow to compute Weight Price +(Net weight / Price). +For that purpose, refactor with product_logistics_uom.

    +

    Ref : https://github.com/OCA/product-attribute/pull/894#issuecomment-895930887

    +
    +
    +

    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

    +
      +
    • GRAP
    • +
    +
    + +
    +

    Maintainers

    +

    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.

    +

    Current maintainer:

    +

    legalsylvain

    +

    This module is part of the OCA/product-attribute project on GitHub.

    +

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

    +
    +
    +
    + + diff --git a/product_net_weight/static/description/product_form.png b/product_net_weight/static/description/product_form.png new file mode 100644 index 0000000000000000000000000000000000000000..f50a84dac093ff304e417a0b804798bb35526a0b GIT binary patch literal 67209 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 + + + + + product.product + + + +

    + + +
    + +
    + + + diff --git a/product_net_weight/views/view_product_template.xml b/product_net_weight/views/view_product_template.xml new file mode 100644 index 00000000000..40f56dee8c4 --- /dev/null +++ b/product_net_weight/views/view_product_template.xml @@ -0,0 +1,23 @@ + + + + + + product.template + + + + + + + + From e1f0c26442d3a59c93d92c739fc4c91d8ef36238 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 19 Aug 2021 22:24:04 +0000 Subject: [PATCH 067/161] [ADD] icon.png --- product_net_weight/static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 product_net_weight/static/description/icon.png diff --git a/product_net_weight/static/description/icon.png b/product_net_weight/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 From d4f863d16ef9dbfae9e3dac4cc62cceedc15d4d1 Mon Sep 17 00:00:00 2001 From: manu Date: Tue, 11 Jan 2022 14:01:03 +0100 Subject: [PATCH 068/161] [IMP]product_net_weight: black, isort, prettier --- product_net_weight/demo/product_product.xml | 2 +- product_net_weight/models/product_product.py | 1 + product_net_weight/models/product_template.py | 1 + product_net_weight/readme/DESCRIPTION.rst | 1 - .../views/view_product_product.xml | 8 ++++---- .../views/view_product_template.xml | 17 ++++++++++++----- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/product_net_weight/demo/product_product.xml b/product_net_weight/demo/product_product.xml index 03f5afc7897..b8d72cf57d5 100644 --- a/product_net_weight/demo/product_product.xml +++ b/product_net_weight/demo/product_product.xml @@ -1,4 +1,4 @@ - + -

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    This module extends the functionality of stock module to support net weight. (container excluded)

    Table of contents

    @@ -390,7 +390,7 @@

    Usage

  • Go to ‘Inventory’ tab, and fill the “Net Weight” value.
  • -https://raw.githubusercontent.com/OCA/product-attribute/12.0/product_net_weight/static/description/product_form.png +https://raw.githubusercontent.com/OCA/product-attribute/14.0/product_net_weight/static/description/product_form.png

    Note: The original weight field is renamed to “Gross Weight”, to be more explicit.

    @@ -406,7 +406,7 @@

    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.

    +feedback.

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

    @@ -432,7 +432,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    legalsylvain

    -

    This module is part of the OCA/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    From 1893e896a1d6af2a76a7d080690cf77cf382bf56 Mon Sep 17 00:00:00 2001 From: Fernando La Chica Date: Wed, 25 May 2022 15:37:48 +0200 Subject: [PATCH 070/161] [MIG][15.0] Standard migration product_net_weight --- product_net_weight/__manifest__.py | 2 +- product_net_weight/models/product_product.py | 1 - product_net_weight/readme/CONTRIBUTORS.rst | 3 +++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/product_net_weight/__manifest__.py b/product_net_weight/__manifest__.py index 5bca8bf3a4a..4e70e8ba3bc 100644 --- a/product_net_weight/__manifest__.py +++ b/product_net_weight/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Products - Net Weight", "summary": "Add 'Net Weight' on product models", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "category": "Product", "author": "GRAP,Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], diff --git a/product_net_weight/models/product_product.py b/product_net_weight/models/product_product.py index 923fb4d9548..05eb887010d 100644 --- a/product_net_weight/models/product_product.py +++ b/product_net_weight/models/product_product.py @@ -11,7 +11,6 @@ class ProductProduct(models.Model): _inherit = "product.product" net_weight = fields.Float( - string="Net Weight", digits=dp.get_precision("Stock Weight"), help="Net Weight of the product, container excluded.", ) diff --git a/product_net_weight/readme/CONTRIBUTORS.rst b/product_net_weight/readme/CONTRIBUTORS.rst index e1525ce042b..7187c07b1db 100644 --- a/product_net_weight/readme/CONTRIBUTORS.rst +++ b/product_net_weight/readme/CONTRIBUTORS.rst @@ -1 +1,4 @@ * Sylvain LE GAL (https://www.twitter.com/legalsylvain) +* `Greenice `_: + + * Fernando La Chica From fb0788e7ad4ca810c42bdb700aeac8795ff35de8 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Sun, 29 May 2022 09:05:05 +0000 Subject: [PATCH 071/161] [UPD] Update product_net_weight.pot --- .../i18n/product_net_weight.pot | 32 +------------------ 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/product_net_weight/i18n/product_net_weight.pot b/product_net_weight/i18n/product_net_weight.pot index 2d6b27e9f5b..c8682b9a804 100644 --- a/product_net_weight/i18n/product_net_weight.pot +++ b/product_net_weight/i18n/product_net_weight.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,30 +13,12 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: product_net_weight -#: model:ir.model.fields,field_description:product_net_weight.field_product_product__display_name -#: model:ir.model.fields,field_description:product_net_weight.field_product_template__display_name -msgid "Display Name" -msgstr "" - #. module: product_net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_product__weight #: model:ir.model.fields,field_description:product_net_weight.field_product_template__weight msgid "Gross Weight" msgstr "" -#. module: product_net_weight -#: model:ir.model.fields,field_description:product_net_weight.field_product_product__id -#: model:ir.model.fields,field_description:product_net_weight.field_product_template__id -msgid "ID" -msgstr "" - -#. module: product_net_weight -#: model:ir.model.fields,field_description:product_net_weight.field_product_product____last_update -#: model:ir.model.fields,field_description:product_net_weight.field_product_template____last_update -msgid "Last Modified on" -msgstr "" - #. module: product_net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_product__net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_template__net_weight @@ -70,15 +52,3 @@ msgstr "" #: model:product.template,uom_name:product_net_weight.product_strawberry_jam_product_template msgid "Units" msgstr "" - -#. module: product_net_weight -#: model:product.product,weight_uom_name:product_net_weight.product_strawberry_jam -#: model:product.template,weight_uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "kg" -msgstr "" - -#. module: product_net_weight -#: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam -#: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "m³" -msgstr "" From d2f6080ff67dfd744373c26831ebc31410895e65 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 29 May 2022 09:08:13 +0000 Subject: [PATCH 072/161] [UPD] README.rst --- product_net_weight/README.rst | 15 +++++++++------ product_net_weight/static/description/index.html | 12 ++++++++---- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/product_net_weight/README.rst b/product_net_weight/README.rst index 2257c2e355c..b1621238682 100644 --- a/product_net_weight/README.rst +++ b/product_net_weight/README.rst @@ -14,13 +14,13 @@ Products - Net Weight :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/14.0/product_net_weight + :target: https://github.com/OCA/product-attribute/tree/15.0/product_net_weight :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_net_weight + :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_net_weight :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/14.0 + :target: https://runbot.odoo-community.org/runbot/135/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -39,7 +39,7 @@ Usage * Go to 'Inventory' tab, and fill the "Net Weight" value. -.. figure:: https://raw.githubusercontent.com/OCA/product-attribute/14.0/product_net_weight/static/description/product_form.png +.. figure:: https://raw.githubusercontent.com/OCA/product-attribute/15.0/product_net_weight/static/description/product_form.png **Note**: The original weight field is renamed to "Gross Weight", to be more explicit. @@ -58,7 +58,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -74,6 +74,9 @@ Contributors ~~~~~~~~~~~~ * Sylvain LE GAL (https://www.twitter.com/legalsylvain) +* `Greenice `_: + + * Fernando La Chica Maintainers ~~~~~~~~~~~ @@ -96,6 +99,6 @@ Current `maintainer `__: |maintainer-legalsylvain| -This module is part of the `OCA/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_net_weight/static/description/index.html b/product_net_weight/static/description/index.html index de968a3626a..01a89d5eeda 100644 --- a/product_net_weight/static/description/index.html +++ b/product_net_weight/static/description/index.html @@ -367,7 +367,7 @@

    Products - Net Weight

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

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    This module extends the functionality of stock module to support net weight. (container excluded)

    Table of contents

    @@ -390,7 +390,7 @@

    Usage

  • Go to ‘Inventory’ tab, and fill the “Net Weight” value.
  • -https://raw.githubusercontent.com/OCA/product-attribute/14.0/product_net_weight/static/description/product_form.png +https://raw.githubusercontent.com/OCA/product-attribute/15.0/product_net_weight/static/description/product_form.png

    Note: The original weight field is renamed to “Gross Weight”, to be more explicit.

    @@ -406,7 +406,7 @@

    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.

    +feedback.

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

    @@ -421,6 +421,10 @@

    Authors

    Contributors

    @@ -432,7 +436,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    legalsylvain

    -

    This module is part of the OCA/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    From 2ed11cf9a5a7b145bca7c4d9843d33a8e4aaf3ed Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 29 May 2022 09:08:14 +0000 Subject: [PATCH 073/161] product_net_weight 15.0.1.0.1 --- product_net_weight/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_net_weight/__manifest__.py b/product_net_weight/__manifest__.py index 4e70e8ba3bc..944c88fb2e9 100644 --- a/product_net_weight/__manifest__.py +++ b/product_net_weight/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Products - Net Weight", "summary": "Add 'Net Weight' on product models", - "version": "15.0.1.0.0", + "version": "15.0.1.0.1", "category": "Product", "author": "GRAP,Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], From c85364233dd5d1355d84fb2d59148bcaf9a4aa7b Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 20 Oct 2022 07:00:35 +0000 Subject: [PATCH 074/161] [UPD] Update product_net_weight.pot --- product_net_weight/i18n/product_net_weight.pot | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/product_net_weight/i18n/product_net_weight.pot b/product_net_weight/i18n/product_net_weight.pot index c8682b9a804..c3658c33cf2 100644 --- a/product_net_weight/i18n/product_net_weight.pot +++ b/product_net_weight/i18n/product_net_weight.pot @@ -52,3 +52,15 @@ msgstr "" #: model:product.template,uom_name:product_net_weight.product_strawberry_jam_product_template msgid "Units" msgstr "" + +#. module: product_net_weight +#: model:product.product,weight_uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,weight_uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "kg" +msgstr "" + +#. module: product_net_weight +#: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "m³" +msgstr "" From b07c51dcd4e4dfcdd7e480bfba31295cc38fc5de Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 20 Oct 2022 07:04:03 +0000 Subject: [PATCH 075/161] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: product-attribute-15.0/product-attribute-15.0-product_net_weight Translate-URL: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_net_weight/ --- product_net_weight/i18n/fr.po | 44 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/product_net_weight/i18n/fr.po b/product_net_weight/i18n/fr.po index 1d0976ea708..69f6884f1ca 100644 --- a/product_net_weight/i18n/fr.po +++ b/product_net_weight/i18n/fr.po @@ -22,12 +22,6 @@ msgstr "" msgid "Gross Weight" msgstr "Poids brut" -#. module: product_net_weight -#: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam -#: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "Liter(s)" -msgstr "" - #. module: product_net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_product__net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_template__net_weight @@ -56,29 +50,35 @@ msgstr "Modèle d'article" msgid "Strawberry Jam (Jar of 250 grams)" msgstr "Confiture de fraise (Pot de 250 grammes)" -#. module: product_net_weight -#: model:ir.model.fields,help:product_net_weight.field_product_template__weight -#, fuzzy -msgid "The weight of the contents, not including any packaging, etc." -msgstr "Le poids du contenu en kilogrammes, sans compter tout emballage, etc." - #. module: product_net_weight #: model:product.product,uom_name:product_net_weight.product_strawberry_jam #: model:product.template,uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "Unit(s)" -msgstr "Unité(s)" - -#. module: product_net_weight -#: model:ir.model.fields,help:product_net_weight.field_product_product__weight -msgid "" -"Weight of the product, packaging not included. The unit of measure can be " -"changed in the general settings" +msgid "Units" msgstr "" -"Poids du produit, sans le conditionnement. L'unité de mesure peut être " -"changée dans les paramètres généraux." #. module: product_net_weight #: model:product.product,weight_uom_name:product_net_weight.product_strawberry_jam #: model:product.template,weight_uom_name:product_net_weight.product_strawberry_jam_product_template msgid "kg" msgstr "" + +#. module: product_net_weight +#: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "m³" +msgstr "" + +#, fuzzy +#~ msgid "The weight of the contents, not including any packaging, etc." +#~ msgstr "" +#~ "Le poids du contenu en kilogrammes, sans compter tout emballage, etc." + +#~ msgid "Unit(s)" +#~ msgstr "Unité(s)" + +#~ msgid "" +#~ "Weight of the product, packaging not included. The unit of measure can be " +#~ "changed in the general settings" +#~ msgstr "" +#~ "Poids du produit, sans le conditionnement. L'unité de mesure peut être " +#~ "changée dans les paramètres généraux." From 648fe0ba6cfeaf1c824a0c62c330f25d7bada1ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Tue, 22 Nov 2022 08:18:03 +0100 Subject: [PATCH 076/161] [FIX] product_net_weight: Fix digits parameter. --- product_net_weight/models/product_product.py | 4 +--- product_net_weight/models/product_template.py | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/product_net_weight/models/product_product.py b/product_net_weight/models/product_product.py index 05eb887010d..1e9143e323d 100644 --- a/product_net_weight/models/product_product.py +++ b/product_net_weight/models/product_product.py @@ -4,14 +4,12 @@ from odoo import fields, models -from odoo.addons import decimal_precision as dp - class ProductProduct(models.Model): _inherit = "product.product" net_weight = fields.Float( - digits=dp.get_precision("Stock Weight"), + digits="Stock Weight", help="Net Weight of the product, container excluded.", ) diff --git a/product_net_weight/models/product_template.py b/product_net_weight/models/product_template.py index 9111aad8d32..6c8e3f7b696 100644 --- a/product_net_weight/models/product_template.py +++ b/product_net_weight/models/product_template.py @@ -4,8 +4,6 @@ from odoo import fields, models -from odoo.addons import decimal_precision as dp - class ProductTemplate(models.Model): _inherit = "product.template" @@ -13,7 +11,7 @@ class ProductTemplate(models.Model): net_weight = fields.Float( string="Net Weight", related="product_variant_ids.net_weight", - digits=dp.get_precision("Stock Weight"), + digits="Stock Weight", help="Net Weight of the product, container excluded.", readonly=False, ) From 32930e9aa156971cd6a6a318f3cb50fc663f1c63 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 22 Nov 2022 11:22:19 +0000 Subject: [PATCH 077/161] product_net_weight 15.0.1.0.2 --- product_net_weight/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_net_weight/__manifest__.py b/product_net_weight/__manifest__.py index 944c88fb2e9..83e11a007fb 100644 --- a/product_net_weight/__manifest__.py +++ b/product_net_weight/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Products - Net Weight", "summary": "Add 'Net Weight' on product models", - "version": "15.0.1.0.1", + "version": "15.0.1.0.2", "category": "Product", "author": "GRAP,Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], From b3877c7560852b591e0294825ae358c576c101eb Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Mon, 9 Jan 2023 11:38:17 +0000 Subject: [PATCH 078/161] Added translation using Weblate (Spanish) --- product_net_weight/i18n/es.po | 67 +++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 product_net_weight/i18n/es.po diff --git a/product_net_weight/i18n/es.po b/product_net_weight/i18n/es.po new file mode 100644 index 00000000000..540f57a79c7 --- /dev/null +++ b/product_net_weight/i18n/es.po @@ -0,0 +1,67 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_net_weight +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: product_net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_product__weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_template__weight +msgid "Gross Weight" +msgstr "" + +#. module: product_net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_product__net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_template__net_weight +msgid "Net Weight" +msgstr "" + +#. module: product_net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_product__net_weight +#: model:ir.model.fields,help:product_net_weight.field_product_template__net_weight +msgid "Net Weight of the product, container excluded." +msgstr "" + +#. module: product_net_weight +#: model:ir.model,name:product_net_weight.model_product_product +msgid "Product" +msgstr "" + +#. module: product_net_weight +#: model:ir.model,name:product_net_weight.model_product_template +msgid "Product Template" +msgstr "" + +#. module: product_net_weight +#: model:product.product,name:product_net_weight.product_strawberry_jam +#: model:product.template,name:product_net_weight.product_strawberry_jam_product_template +msgid "Strawberry Jam (Jar of 250 grams)" +msgstr "" + +#. module: product_net_weight +#: model:product.product,uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "Units" +msgstr "" + +#. module: product_net_weight +#: model:product.product,weight_uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,weight_uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "kg" +msgstr "" + +#. module: product_net_weight +#: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam +#: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template +msgid "m³" +msgstr "" From 5399d07da528e6e8622795aeecc02c5283b0d4b9 Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Mon, 9 Jan 2023 11:39:09 +0000 Subject: [PATCH 079/161] Translated using Weblate (Spanish) Currently translated at 88.8% (8 of 9 strings) Translation: product-attribute-15.0/product-attribute-15.0-product_net_weight Translate-URL: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_net_weight/es/ --- product_net_weight/i18n/es.po | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/product_net_weight/i18n/es.po b/product_net_weight/i18n/es.po index 540f57a79c7..bd94d950e0e 100644 --- a/product_net_weight/i18n/es.po +++ b/product_net_weight/i18n/es.po @@ -6,41 +6,43 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2023-01-09 13:45+0000\n" +"Last-Translator: Carlos Dauden \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" #. module: product_net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_product__weight #: model:ir.model.fields,field_description:product_net_weight.field_product_template__weight msgid "Gross Weight" -msgstr "" +msgstr "Peso bruto" #. module: product_net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_product__net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_template__net_weight msgid "Net Weight" -msgstr "" +msgstr "Peso neto" #. module: product_net_weight #: model:ir.model.fields,help:product_net_weight.field_product_product__net_weight #: model:ir.model.fields,help:product_net_weight.field_product_template__net_weight msgid "Net Weight of the product, container excluded." -msgstr "" +msgstr "Peso neto del producto, contenedor excluido." #. module: product_net_weight #: model:ir.model,name:product_net_weight.model_product_product msgid "Product" -msgstr "" +msgstr "Producto" #. module: product_net_weight #: model:ir.model,name:product_net_weight.model_product_template msgid "Product Template" -msgstr "" +msgstr "Plantilla de producto" #. module: product_net_weight #: model:product.product,name:product_net_weight.product_strawberry_jam @@ -52,16 +54,16 @@ msgstr "" #: model:product.product,uom_name:product_net_weight.product_strawberry_jam #: model:product.template,uom_name:product_net_weight.product_strawberry_jam_product_template msgid "Units" -msgstr "" +msgstr "Unidades" #. module: product_net_weight #: model:product.product,weight_uom_name:product_net_weight.product_strawberry_jam #: model:product.template,weight_uom_name:product_net_weight.product_strawberry_jam_product_template msgid "kg" -msgstr "" +msgstr "kg" #. module: product_net_weight #: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam #: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template msgid "m³" -msgstr "" +msgstr "m³" From 4686d4bc7f8ecc80160e8fb314be996e85f778fe Mon Sep 17 00:00:00 2001 From: RabbitJon-S73 Date: Mon, 27 Feb 2023 10:16:19 +0100 Subject: [PATCH 080/161] [MIG] product_net_weight: Migration to 16.0 --- product_net_weight/__manifest__.py | 4 +- .../tests/test_product_net_weight.py | 70 +++++++++++++++++++ .../views/view_product_product.xml | 13 ++++ .../views/view_product_template.xml | 9 ++- 4 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 product_net_weight/tests/test_product_net_weight.py diff --git a/product_net_weight/__manifest__.py b/product_net_weight/__manifest__.py index 83e11a007fb..4aefab7f2db 100644 --- a/product_net_weight/__manifest__.py +++ b/product_net_weight/__manifest__.py @@ -4,13 +4,13 @@ { "name": "Products - Net Weight", "summary": "Add 'Net Weight' on product models", - "version": "15.0.1.0.2", + "version": "16.0.1.0.0", "category": "Product", "author": "GRAP,Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], "website": "https://github.com/OCA/product-attribute", "license": "AGPL-3", - "depends": ["product"], + "depends": ["stock"], "data": [ "views/view_product_product.xml", "views/view_product_template.xml", diff --git a/product_net_weight/tests/test_product_net_weight.py b/product_net_weight/tests/test_product_net_weight.py new file mode 100644 index 00000000000..f9b196e792b --- /dev/null +++ b/product_net_weight/tests/test_product_net_weight.py @@ -0,0 +1,70 @@ +# Copyright 2023 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.exceptions import ValidationError +from odoo.tests.common import Form, TransactionCase + + +class TestProductNetWeight(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.attribute = cls.env["product.attribute"].create( + { + "name": "test attribute", + "display_type": "select", + } + ) + + def test_create_product_template(self): + product_form = Form(self.env["product.template"]) + product_form.name = "Test net weight" + product_form.net_weight = 25.0 + product = product_form.save() + self.assertEqual(product.net_weight, 25.0) + self.assertEqual(product.product_variant_id.net_weight, 25.0) + product.write( + { + "attribute_line_ids": [ + ( + 0, + 0, + { + "attribute_id": self.attribute.id, + "value_ids": [ + ( + 0, + 0, + { + "attribute_id": self.attribute.id, + "name": "test value 1", + }, + ), + ( + 0, + 0, + { + "attribute_id": self.attribute.id, + "name": "test value 2", + }, + ), + ], + }, + ) + ] + } + ) + self.assertEqual(product.net_weight, 0.0) + + def test_create_product_product(self): + product_form = Form(self.env["product.product"]) + product_form.name = "Test net weight" + product_form.net_weight = 25.0 + product = product_form.save() + self.assertEqual(product.net_weight, 25.0) + self.assertEqual(product.product_variant_id.net_weight, 25.0) + + def test_product_constraint(self): + with self.assertRaises(ValidationError): + self.env["product.product"].create( + {"name": "Test net weight", "net_weight": 25.0, "weight": 22.0} + ) diff --git a/product_net_weight/views/view_product_product.xml b/product_net_weight/views/view_product_product.xml index dda47f1d9fd..a9e371d8c2d 100644 --- a/product_net_weight/views/view_product_product.xml +++ b/product_net_weight/views/view_product_product.xml @@ -19,5 +19,18 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    + + product.product + + + + + + diff --git a/product_net_weight/views/view_product_template.xml b/product_net_weight/views/view_product_template.xml index d4e82e892f0..07d3058fa04 100644 --- a/product_net_weight/views/view_product_template.xml +++ b/product_net_weight/views/view_product_template.xml @@ -8,9 +8,12 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). product.template - + - + From af299d5aba931780b6e23b948c11fb8825855797 Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Wed, 1 Mar 2023 22:57:31 +0100 Subject: [PATCH 081/161] [IMP] product_net_weight: Adapt module like Odoo manage weight field with multiple variants --- product_net_weight/README.rst | 16 ++++--- product_net_weight/i18n/es.po | 43 +++++++------------ .../i18n/product_net_weight.pot | 30 +++++-------- product_net_weight/models/product_product.py | 11 ++++- product_net_weight/models/product_template.py | 33 +++++++++++--- product_net_weight/readme/CONTRIBUTORS.rst | 4 ++ .../static/description/index.html | 8 +++- product_net_weight/tests/__init__.py | 2 + 8 files changed, 85 insertions(+), 62 deletions(-) create mode 100644 product_net_weight/tests/__init__.py diff --git a/product_net_weight/README.rst b/product_net_weight/README.rst index b1621238682..ebadda9bb14 100644 --- a/product_net_weight/README.rst +++ b/product_net_weight/README.rst @@ -14,16 +14,16 @@ Products - Net Weight :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/15.0/product_net_weight + :target: https://github.com/OCA/product-attribute/tree/16.0/product_net_weight :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_net_weight :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/15.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/webui/builds.html?repo=OCA/product-attribute&target_branch=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module extends the functionality of stock module to support net weight. (container excluded) @@ -78,6 +78,10 @@ Contributors * Fernando La Chica +* `Tecnativa `_: + + * Sergio Teruel + Maintainers ~~~~~~~~~~~ @@ -97,7 +101,7 @@ promote its widespread use. Current `maintainer `__: -|maintainer-legalsylvain| +|maintainer-legalsylvain| This module is part of the `OCA/product-attribute `_ project on GitHub. diff --git a/product_net_weight/i18n/es.po b/product_net_weight/i18n/es.po index bd94d950e0e..9263531fe7d 100644 --- a/product_net_weight/i18n/es.po +++ b/product_net_weight/i18n/es.po @@ -4,17 +4,16 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0+e\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-01-09 13:45+0000\n" -"Last-Translator: Carlos Dauden \n" -"Language-Team: none\n" -"Language: es\n" +"POT-Creation-Date: 2023-03-02 08:36+0000\n" +"PO-Revision-Date: 2023-03-02 08:36+0000\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: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" +"Plural-Forms: \n" #. module: product_net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_product__weight @@ -35,35 +34,23 @@ msgid "Net Weight of the product, container excluded." msgstr "Peso neto del producto, contenedor excluido." #. module: product_net_weight -#: model:ir.model,name:product_net_weight.model_product_product +#: model:ir.model,name:product_net_weight.model_product_template msgid "Product" msgstr "Producto" #. module: product_net_weight -#: model:ir.model,name:product_net_weight.model_product_template -msgid "Product Template" -msgstr "Plantilla de producto" +#: model:ir.model,name:product_net_weight.model_product_product +msgid "Product Variant" +msgstr "Variantes de producto" #. module: product_net_weight -#: model:product.product,name:product_net_weight.product_strawberry_jam #: model:product.template,name:product_net_weight.product_strawberry_jam_product_template msgid "Strawberry Jam (Jar of 250 grams)" msgstr "" #. module: product_net_weight -#: model:product.product,uom_name:product_net_weight.product_strawberry_jam -#: model:product.template,uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "Units" -msgstr "Unidades" - -#. module: product_net_weight -#: model:product.product,weight_uom_name:product_net_weight.product_strawberry_jam -#: model:product.template,weight_uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "kg" -msgstr "kg" - -#. module: product_net_weight -#: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam -#: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "m³" -msgstr "m³" +#. odoo-python +#: code:addons/product_net_weight/models/product_product.py:0 +#, python-format +msgid "The net weight of product must be lower than gross weight." +msgstr "El peso neto tiene que ser menor que el peso bruto." diff --git a/product_net_weight/i18n/product_net_weight.pot b/product_net_weight/i18n/product_net_weight.pot index c3658c33cf2..2a8c6150c65 100644 --- a/product_net_weight/i18n/product_net_weight.pot +++ b/product_net_weight/i18n/product_net_weight.pot @@ -4,8 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0+e\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-02 08:36+0000\n" +"PO-Revision-Date: 2023-03-02 08:36+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -32,35 +34,23 @@ msgid "Net Weight of the product, container excluded." msgstr "" #. module: product_net_weight -#: model:ir.model,name:product_net_weight.model_product_product +#: model:ir.model,name:product_net_weight.model_product_template msgid "Product" msgstr "" #. module: product_net_weight -#: model:ir.model,name:product_net_weight.model_product_template -msgid "Product Template" +#: model:ir.model,name:product_net_weight.model_product_product +msgid "Product Variant" msgstr "" #. module: product_net_weight -#: model:product.product,name:product_net_weight.product_strawberry_jam #: model:product.template,name:product_net_weight.product_strawberry_jam_product_template msgid "Strawberry Jam (Jar of 250 grams)" msgstr "" #. module: product_net_weight -#: model:product.product,uom_name:product_net_weight.product_strawberry_jam -#: model:product.template,uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "Units" -msgstr "" - -#. module: product_net_weight -#: model:product.product,weight_uom_name:product_net_weight.product_strawberry_jam -#: model:product.template,weight_uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "kg" -msgstr "" - -#. module: product_net_weight -#: model:product.product,volume_uom_name:product_net_weight.product_strawberry_jam -#: model:product.template,volume_uom_name:product_net_weight.product_strawberry_jam_product_template -msgid "m³" +#. odoo-python +#: code:addons/product_net_weight/models/product_product.py:0 +#, python-format +msgid "The net weight of product must be lower than gross weight." msgstr "" diff --git a/product_net_weight/models/product_product.py b/product_net_weight/models/product_product.py index 1e9143e323d..8ca02cf3955 100644 --- a/product_net_weight/models/product_product.py +++ b/product_net_weight/models/product_product.py @@ -2,7 +2,8 @@ # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, models +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError class ProductProduct(models.Model): @@ -15,3 +16,11 @@ class ProductProduct(models.Model): # Explicit field, renaming it weight = fields.Float(string="Gross Weight") + + @api.constrains("net_weight", "weight") + def _check_net_weight(self): + for product in self: + if product.weight and product.net_weight > product.weight: + raise ValidationError( + _("The net weight of product must be lower than gross weight.") + ) diff --git a/product_net_weight/models/product_template.py b/product_net_weight/models/product_template.py index 6c8e3f7b696..346b4715718 100644 --- a/product_net_weight/models/product_template.py +++ b/product_net_weight/models/product_template.py @@ -1,20 +1,43 @@ # Copyright (C) 2021 - Today: GRAP (http://www.grap.coop) # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# Copyright 2023 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import fields, models +from odoo import api, fields, models class ProductTemplate(models.Model): _inherit = "product.template" net_weight = fields.Float( - string="Net Weight", - related="product_variant_ids.net_weight", + compute="_compute_net_weight", + inverse="_inverse_net_weight", digits="Stock Weight", help="Net Weight of the product, container excluded.", - readonly=False, + store=True, ) # Explicit field, renaming it weight = fields.Float(string="Gross Weight") + + @api.depends("product_variant_ids", "product_variant_ids.net_weight") + def _compute_net_weight(self): + for template in self: + if template.product_variant_count == 1: + template.net_weight = template.product_variant_ids.net_weight + else: + template.net_weight = 0.0 + + def _inverse_net_weight(self): + for template in self: + if len(template.product_variant_ids) == 1: + template.product_variant_ids.net_weight = template.net_weight + + @api.model_create_multi + def create(self, vals_list): + templates = super(ProductTemplate, self).create(vals_list) + # This is needed to set given values to first variant after creation + for template, vals in zip(templates, vals_list): + if vals.get("net_weight"): + template.write({"net_weight": vals["net_weight"]}) + return templates diff --git a/product_net_weight/readme/CONTRIBUTORS.rst b/product_net_weight/readme/CONTRIBUTORS.rst index 7187c07b1db..01d367d04b7 100644 --- a/product_net_weight/readme/CONTRIBUTORS.rst +++ b/product_net_weight/readme/CONTRIBUTORS.rst @@ -2,3 +2,7 @@ * `Greenice `_: * Fernando La Chica + +* `Tecnativa `_: + + * Sergio Teruel diff --git a/product_net_weight/static/description/index.html b/product_net_weight/static/description/index.html index 01a89d5eeda..a25ced3f85d 100644 --- a/product_net_weight/static/description/index.html +++ b/product_net_weight/static/description/index.html @@ -3,7 +3,7 @@ - + Products - Net Weight -
    -

    Products - Net Weight

    +
    + + +Odoo Community Association + +
    +

    Products - Net Weight

    -

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module extends the functionality of stock module to support net weight. (container excluded)

    Table of contents

    @@ -387,40 +392,40 @@

    Products - Net Weight

    -

    Usage

    +

    Usage

    • Go to ‘Inventory > Master Data > Product’ and edit items.
    • Go to ‘Inventory’ tab, and fill the “Net Weight” value.
    -

    image1

    +

    image1

    Note: The original weight field is renamed to “Gross Weight”, to be more explicit.

    -

    Known issues / Roadmap

    +

    Known issues / Roadmap

    In futur version (> 12.0), allow to compute Weight Price (Net weight / Price). For that purpose, refactor with product_logistics_uom.

    Ref : https://github.com/OCA/product-attribute/pull/894#issuecomment-895930887

    -

    Bug Tracker

    +

    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 to smash it by providing a detailed and welcomed -feedback.

    +feedback.

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • GRAP
    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -444,10 +449,11 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    legalsylvain

    -

    This module is part of the OCA/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    +
    From 2cb3789e827dc796c1ee5e15cce62c482032f006 Mon Sep 17 00:00:00 2001 From: Vicent-S73 Date: Thu, 2 Oct 2025 15:28:54 +0200 Subject: [PATCH 099/161] [MIG] product_net_weight: Migration to 19.0 --- product_net_weight/tests/test_product_net_weight.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/product_net_weight/tests/test_product_net_weight.py b/product_net_weight/tests/test_product_net_weight.py index 13f987712b4..17c554dc441 100644 --- a/product_net_weight/tests/test_product_net_weight.py +++ b/product_net_weight/tests/test_product_net_weight.py @@ -2,10 +2,11 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo.exceptions import ValidationError from odoo.tests import Form -from odoo.tests.common import TransactionCase +from odoo.addons.base.tests.common import BaseCommon -class TestProductNetWeight(TransactionCase): + +class TestProductNetWeight(BaseCommon): @classmethod def setUpClass(cls): super().setUpClass() From 4acc15f023188adea93ee398ff62ab265bd3b70f Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 2 Oct 2025 13:42:30 +0000 Subject: [PATCH 100/161] [UPD] Update product_net_weight.pot --- .../i18n/product_net_weight.pot | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/product_net_weight/i18n/product_net_weight.pot b/product_net_weight/i18n/product_net_weight.pot index 2a1309da3b1..5ee66ec09e7 100644 --- a/product_net_weight/i18n/product_net_weight.pot +++ b/product_net_weight/i18n/product_net_weight.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,12 +13,24 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: product_net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_product__display_name +#: model:ir.model.fields,field_description:product_net_weight.field_product_template__display_name +msgid "Display Name" +msgstr "" + #. module: product_net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_product__weight #: model:ir.model.fields,field_description:product_net_weight.field_product_template__weight msgid "Gross Weight" msgstr "" +#. module: product_net_weight +#: model:ir.model.fields,field_description:product_net_weight.field_product_product__id +#: model:ir.model.fields,field_description:product_net_weight.field_product_template__id +msgid "ID" +msgstr "" + #. module: product_net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_product__net_weight #: model:ir.model.fields,field_description:product_net_weight.field_product_template__net_weight @@ -35,11 +47,6 @@ msgstr "" msgid "Product Variant" msgstr "" -#. module: product_net_weight -#: model:product.template,name:product_net_weight.product_strawberry_jam_product_template -msgid "Strawberry Jam (Jar of 250 grams)" -msgstr "" - #. module: product_net_weight #. odoo-python #: code:addons/product_net_weight/models/product_product.py:0 From 2bdffdaf4295b1a4cee9be80e5c36b48aedd9805 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 2 Oct 2025 13:44:29 +0000 Subject: [PATCH 101/161] [BOT] post-merge updates --- README.md | 6 +++++- product_net_weight/README.rst | 2 +- product_net_weight/static/description/index.html | 2 +- setup/_metapackage/pyproject.toml | 11 +++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 setup/_metapackage/pyproject.toml diff --git a/README.md b/README.md index c5a40503160..469aaf81b2f 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,11 @@ product-attribute [//]: # (addons) -This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[product_net_weight](product_net_weight/) | 19.0.1.0.0 | legalsylvain | Add 'Net Weight' on product models [//]: # (end addons) diff --git a/product_net_weight/README.rst b/product_net_weight/README.rst index d9e0c4270f9..885823fd267 100644 --- a/product_net_weight/README.rst +++ b/product_net_weight/README.rst @@ -11,7 +11,7 @@ Products - Net Weight !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:9eaa8b5a2e4d76a9504da39c8d4e17f370d737bc6e3716bd8ae18f8085255d17 + !! source digest: sha256:6cecd3e69838f7d430818c3eb70cfda51ae25c46038eaa06270f4d0498742dd5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/product_net_weight/static/description/index.html b/product_net_weight/static/description/index.html index a7b9c4b5470..0e8498dde60 100644 --- a/product_net_weight/static/description/index.html +++ b/product_net_weight/static/description/index.html @@ -372,7 +372,7 @@

    Products - Net Weight

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:9eaa8b5a2e4d76a9504da39c8d4e17f370d737bc6e3716bd8ae18f8085255d17 +!! source digest: sha256:6cecd3e69838f7d430818c3eb70cfda51ae25c46038eaa06270f4d0498742dd5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module extends the functionality of stock module to support net diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml new file mode 100644 index 00000000000..c2c56632c6a --- /dev/null +++ b/setup/_metapackage/pyproject.toml @@ -0,0 +1,11 @@ +[project] +name = "odoo-addons-oca-product-attribute" +version = "19.0.20251002.0" +dependencies = [ + "odoo-addon-product_net_weight==19.0.*", +] +classifiers=[ + "Programming Language :: Python", + "Framework :: Odoo", + "Framework :: Odoo :: 19.0", +] From 60aa48fb2f64b169659caac50ac4080bc45f4586 Mon Sep 17 00:00:00 2001 From: Aungkokolin1997 Date: Wed, 6 Sep 2023 13:28:43 +0630 Subject: [PATCH 102/161] [ADD] product_company_default --- product_company_default/README.rst | 68 +++ product_company_default/__init__.py | 1 + product_company_default/__manifest__.py | 13 + .../data/ir_config_parameter.xml | 8 + .../demo/demo_ir_config_parameter.xml | 8 + product_company_default/models/__init__.py | 1 + .../models/product_template.py | 22 + .../readme/DESCRIPTION.rst | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 412 ++++++++++++++++++ product_company_default/tests/__init__.py | 1 + .../tests/test_product_company_default.py | 16 + 12 files changed, 552 insertions(+) create mode 100644 product_company_default/README.rst create mode 100644 product_company_default/__init__.py create mode 100644 product_company_default/__manifest__.py create mode 100644 product_company_default/data/ir_config_parameter.xml create mode 100644 product_company_default/demo/demo_ir_config_parameter.xml create mode 100644 product_company_default/models/__init__.py create mode 100644 product_company_default/models/product_template.py create mode 100644 product_company_default/readme/DESCRIPTION.rst create mode 100644 product_company_default/static/description/icon.png create mode 100644 product_company_default/static/description/index.html create mode 100644 product_company_default/tests/__init__.py create mode 100644 product_company_default/tests/test_product_company_default.py diff --git a/product_company_default/README.rst b/product_company_default/README.rst new file mode 100644 index 00000000000..93e5a8de78f --- /dev/null +++ b/product_company_default/README.rst @@ -0,0 +1,68 @@ +======================= +Product Company Default +======================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/16.0/product_company_default + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_company_default + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/135/16.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module assigns default company to product.template. + +**Table of contents** + +.. contents:: + :local: + +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 +~~~~~~~ + +* Quartile Limited + +Maintainers +~~~~~~~~~~~ + +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/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_company_default/__init__.py b/product_company_default/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_company_default/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_company_default/__manifest__.py b/product_company_default/__manifest__.py new file mode 100644 index 00000000000..fc3f18fc91c --- /dev/null +++ b/product_company_default/__manifest__.py @@ -0,0 +1,13 @@ +# Copyright 2023 Quartile Limited +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Product Company Default", + "version": "16.0.1.0.0", + "author": "Quartile Limited, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/product-attribute", + "depends": ["product"], + "license": "AGPL-3", + "data": ["data/ir_config_parameter.xml"], + "demo": ["demo/demo_ir_config_parameter.xml"], + "installable": True, +} diff --git a/product_company_default/data/ir_config_parameter.xml b/product_company_default/data/ir_config_parameter.xml new file mode 100644 index 00000000000..6777b7829ba --- /dev/null +++ b/product_company_default/data/ir_config_parameter.xml @@ -0,0 +1,8 @@ + + + + + product_company_default.default_company_enable + 1 + + diff --git a/product_company_default/demo/demo_ir_config_parameter.xml b/product_company_default/demo/demo_ir_config_parameter.xml new file mode 100644 index 00000000000..0ac5f959632 --- /dev/null +++ b/product_company_default/demo/demo_ir_config_parameter.xml @@ -0,0 +1,8 @@ + + + + + product_company_default.default_company_enable + 0 + + diff --git a/product_company_default/models/__init__.py b/product_company_default/models/__init__.py new file mode 100644 index 00000000000..e8fa8f6bf1e --- /dev/null +++ b/product_company_default/models/__init__.py @@ -0,0 +1 @@ +from . import product_template diff --git a/product_company_default/models/product_template.py b/product_company_default/models/product_template.py new file mode 100644 index 00000000000..fab5f479189 --- /dev/null +++ b/product_company_default/models/product_template.py @@ -0,0 +1,22 @@ +# Copyright 2023 Quartile Limited +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + company_id = fields.Many2one(default=lambda self: self._default_company_id()) + + @api.model + def _default_company_id(self): + # Get the system parameter configuration + param = ( + self.env["ir.config_parameter"] + .sudo() + .get_param("product_company_default.default_company_enable") + ) + if param == "1": + return self.env.company + return False diff --git a/product_company_default/readme/DESCRIPTION.rst b/product_company_default/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..0c846568d47 --- /dev/null +++ b/product_company_default/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module populates the company field with user's company as the default value when +creating new products. diff --git a/product_company_default/static/description/icon.png b/product_company_default/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_company_default/static/description/index.html b/product_company_default/static/description/index.html new file mode 100644 index 00000000000..049dc90c411 --- /dev/null +++ b/product_company_default/static/description/index.html @@ -0,0 +1,412 @@ + + + + + + +Product Company Default + + + +

    +

    Product Company Default

    + + +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    This module assigns default company to product.template.

    +

    Table of contents

    + +
    +

    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

    +
      +
    • Quartile Limited
    • +
    +
    +
    +

    Maintainers

    +

    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/product-attribute project on GitHub.

    +

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

    +
    +
    +
    + + diff --git a/product_company_default/tests/__init__.py b/product_company_default/tests/__init__.py new file mode 100644 index 00000000000..c1bcf9f65ae --- /dev/null +++ b/product_company_default/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_company_default diff --git a/product_company_default/tests/test_product_company_default.py b/product_company_default/tests/test_product_company_default.py new file mode 100644 index 00000000000..670fe791a38 --- /dev/null +++ b/product_company_default/tests/test_product_company_default.py @@ -0,0 +1,16 @@ +from odoo.tests.common import TransactionCase + + +class TestProductCompanyDefault(TransactionCase): + @classmethod + def setUpClass(cls): + super(TestProductCompanyDefault, cls).setUpClass() + # Enable the configuration using ir.config_parameter + cls.env["ir.config_parameter"].sudo().set_param( + "product_company_default.default_company_enable", "1" + ) + + def test_product_company(self): + # Create a sample product + product = self.env["product.product"].create({"name": "Test Product"}) + self.assertEqual(product.company_id, self.env.company) From a2a1139b74d577a5a1f9868f7e3a8990b96df81f Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 6 Nov 2023 21:06:28 +0000 Subject: [PATCH 103/161] [UPD] Update product_company_default.pot --- .../i18n/product_company_default.pot | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 product_company_default/i18n/product_company_default.pot diff --git a/product_company_default/i18n/product_company_default.pot b/product_company_default/i18n/product_company_default.pot new file mode 100644 index 00000000000..f18a184881c --- /dev/null +++ b/product_company_default/i18n/product_company_default.pot @@ -0,0 +1,25 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_company_default +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.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_company_default +#: model:ir.model.fields,field_description:product_company_default.field_product_product__company_id +#: model:ir.model.fields,field_description:product_company_default.field_product_template__company_id +msgid "Company" +msgstr "" + +#. module: product_company_default +#: model:ir.model,name:product_company_default.model_product_template +msgid "Product" +msgstr "" From 07e5ab174fa82357b7ebf2806a0bc60f73db2769 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 6 Nov 2023 21:10:18 +0000 Subject: [PATCH 104/161] [BOT] post-merge updates --- product_company_default/README.rst | 18 ++++++---- .../static/description/index.html | 33 ++++++++++--------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/product_company_default/README.rst b/product_company_default/README.rst index 93e5a8de78f..29a500a0162 100644 --- a/product_company_default/README.rst +++ b/product_company_default/README.rst @@ -2,10 +2,13 @@ Product Company Default ======================= -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:d1775ceb80c8eb6e0c4c8689c19f97df927830171283af4c7ffc9f4fe22419f5 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,13 +22,14 @@ Product Company Default .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_company_default :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/16.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/product-attribute&target_branch=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| -This module assigns default company to product.template. +This module populates the company field with user's company as the default value when +creating new products. **Table of contents** @@ -37,7 +41,7 @@ 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 +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. diff --git a/product_company_default/static/description/index.html b/product_company_default/static/description/index.html index 049dc90c411..b0370488338 100644 --- a/product_company_default/static/description/index.html +++ b/product_company_default/static/description/index.html @@ -1,20 +1,20 @@ - + - + Product Company Default -
    -

    Product Company Default

    +
    + + +Odoo Community Association + +
    +

    Product Company Default

    -

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module populates the company field with user’s company as the default value when creating new products.

    Table of contents

    @@ -384,23 +389,23 @@

    Product Company Default

    -

    Bug Tracker

    +

    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 to smash it by providing a detailed and welcomed -feedback.

    +feedback.

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • Quartile Limited
    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -408,10 +413,11 @@

    Maintainers

    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/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    +
    From 462816a3e77c2a61019225356c57b04a964c3b89 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 6 Oct 2025 11:20:43 +0000 Subject: [PATCH 112/161] [UPD] Update product_company_default.pot --- .../i18n/product_company_default.pot | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/product_company_default/i18n/product_company_default.pot b/product_company_default/i18n/product_company_default.pot index 90b17779020..5081df6c3aa 100644 --- a/product_company_default/i18n/product_company_default.pot +++ b/product_company_default/i18n/product_company_default.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -19,6 +19,16 @@ msgstr "" msgid "Company" msgstr "" +#. module: product_company_default +#: model:ir.model.fields,field_description:product_company_default.field_product_template__display_name +msgid "Display Name" +msgstr "" + +#. module: product_company_default +#: model:ir.model.fields,field_description:product_company_default.field_product_template__id +msgid "ID" +msgstr "" + #. module: product_company_default #: model:ir.model,name:product_company_default.model_product_template msgid "Product" From ab59915676143ac8453bb973a2c3d6408ec24dbb Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 6 Oct 2025 11:22:30 +0000 Subject: [PATCH 113/161] [BOT] post-merge updates --- README.md | 1 + product_company_default/README.rst | 2 +- product_company_default/static/description/index.html | 2 +- setup/_metapackage/pyproject.toml | 3 ++- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 469aaf81b2f..3ae6fc30121 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Available addons ---------------- addon | version | maintainers | summary --- | --- | --- | --- +[product_company_default](product_company_default/) | 19.0.1.0.0 | | Product Company Default [product_net_weight](product_net_weight/) | 19.0.1.0.0 | legalsylvain | Add 'Net Weight' on product models [//]: # (end addons) diff --git a/product_company_default/README.rst b/product_company_default/README.rst index 7d8b1364e4b..766323dc6a4 100644 --- a/product_company_default/README.rst +++ b/product_company_default/README.rst @@ -11,7 +11,7 @@ Product Company Default !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:cf63f12e685ecd178ef04277c40a846a490e5de067ed1a6c0e596df75b5e0501 + !! source digest: sha256:b862939b839d32b8d5f756be1dc6d90acf9c6dc3eaaf883817075f19a659fbca !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/product_company_default/static/description/index.html b/product_company_default/static/description/index.html index b057684ee60..cca526a2fab 100644 --- a/product_company_default/static/description/index.html +++ b/product_company_default/static/description/index.html @@ -372,7 +372,7 @@

    Product Company Default

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:cf63f12e685ecd178ef04277c40a846a490e5de067ed1a6c0e596df75b5e0501 +!! source digest: sha256:b862939b839d32b8d5f756be1dc6d90acf9c6dc3eaaf883817075f19a659fbca !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module populates the company field with user’s company as the diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index c2c56632c6a..882bdf3833a 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -1,7 +1,8 @@ [project] name = "odoo-addons-oca-product-attribute" -version = "19.0.20251002.0" +version = "19.0.20251006.0" dependencies = [ + "odoo-addon-product_company_default==19.0.*", "odoo-addon-product_net_weight==19.0.*", ] classifiers=[ From a1f84f8782540956cea0897c4ccdd73b835d4d04 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Wed, 7 Apr 2021 17:38:23 +0200 Subject: [PATCH 114/161] [14.0][ADD] product_category_code --- product_category_code/README.rst | 81 ++++ product_category_code/__init__.py | 1 + product_category_code/__manifest__.py | 19 + product_category_code/models/__init__.py | 1 + .../models/product_category.py | 20 + product_category_code/readme/CONTRIBUTORS.rst | 1 + product_category_code/readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 421 ++++++++++++++++++ product_category_code/tests/__init__.py | 1 + .../tests/test_category_code.py | 23 + .../views/product_category.xml | 30 ++ 12 files changed, 599 insertions(+) create mode 100644 product_category_code/README.rst create mode 100644 product_category_code/__init__.py create mode 100644 product_category_code/__manifest__.py create mode 100644 product_category_code/models/__init__.py create mode 100644 product_category_code/models/product_category.py create mode 100644 product_category_code/readme/CONTRIBUTORS.rst create mode 100644 product_category_code/readme/DESCRIPTION.rst create mode 100644 product_category_code/static/description/icon.png create mode 100644 product_category_code/static/description/index.html create mode 100644 product_category_code/tests/__init__.py create mode 100644 product_category_code/tests/test_category_code.py create mode 100644 product_category_code/views/product_category.xml diff --git a/product_category_code/README.rst b/product_category_code/README.rst new file mode 100644 index 00000000000..3707e6dada8 --- /dev/null +++ b/product_category_code/README.rst @@ -0,0 +1,81 @@ +===================== +Product Category Code +===================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/14.0/product_category_code + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_category_code + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/135/14.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds a field 'code' on product category level. + +**Table of contents** + +.. contents:: + :local: + +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 +~~~~~~~~~~~~ + +* Denis Roussel + +Maintainers +~~~~~~~~~~~ + +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. + +.. |maintainer-rousseldenis| image:: https://github.com/rousseldenis.png?size=40px + :target: https://github.com/rousseldenis + :alt: rousseldenis + +Current `maintainer `__: + +|maintainer-rousseldenis| + +This module is part of the `OCA/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_category_code/__init__.py b/product_category_code/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_category_code/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_category_code/__manifest__.py b/product_category_code/__manifest__.py new file mode 100644 index 00000000000..5e8e0b1995b --- /dev/null +++ b/product_category_code/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2020 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Product Category Code", + "summary": """ + Allows to define a code on product categories""", + "version": "14.0.1.0.0", + "license": "AGPL-3", + "author": "ACSONE SA/NV,Odoo Community Association (OCA)", + "maintainers": ["rousseldenis"], + "website": "https://github.com/OCA/product-attribute", + "depends": [ + "product", + ], + "data": [ + "views/product_category.xml", + ], +} diff --git a/product_category_code/models/__init__.py b/product_category_code/models/__init__.py new file mode 100644 index 00000000000..53553f3f2de --- /dev/null +++ b/product_category_code/models/__init__.py @@ -0,0 +1 @@ +from . import product_category diff --git a/product_category_code/models/product_category.py b/product_category_code/models/product_category.py new file mode 100644 index 00000000000..e0c00487d81 --- /dev/null +++ b/product_category_code/models/product_category.py @@ -0,0 +1,20 @@ +# Copyright 2021 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models + + +class ProductCategory(models.Model): + + _inherit = "product.category" + + code = fields.Char( + default="/", + index=True, + ) + + @api.returns("self", lambda value: value.id) + def copy(self, default=None): + default = default or {} + default.setdefault("code", self.code + _("-copy")) + return super().copy(default) diff --git a/product_category_code/readme/CONTRIBUTORS.rst b/product_category_code/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..9179ee4b8fa --- /dev/null +++ b/product_category_code/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Denis Roussel diff --git a/product_category_code/readme/DESCRIPTION.rst b/product_category_code/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..464f90a6ee8 --- /dev/null +++ b/product_category_code/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module adds a field 'code' on product category level. diff --git a/product_category_code/static/description/icon.png b/product_category_code/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/product_category_code/static/description/index.html b/product_category_code/static/description/index.html new file mode 100644 index 00000000000..89014a3f5e6 --- /dev/null +++ b/product_category_code/static/description/index.html @@ -0,0 +1,421 @@ + + + + + + +Product Category Code + + + +

    +

    Product Category Code

    + + +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    This module adds a field ‘code’ on product category level.

    +

    Table of contents

    + +
    +

    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 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.

    +

    Current maintainer:

    +

    rousseldenis

    +

    This module is part of the OCA/product-attribute project on GitHub.

    +

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

    +
    +
    +
    + + diff --git a/product_category_code/tests/__init__.py b/product_category_code/tests/__init__.py new file mode 100644 index 00000000000..c7952bfdb4f --- /dev/null +++ b/product_category_code/tests/__init__.py @@ -0,0 +1 @@ +from . import test_category_code diff --git a/product_category_code/tests/test_category_code.py b/product_category_code/tests/test_category_code.py new file mode 100644 index 00000000000..8a0f79cb0a5 --- /dev/null +++ b/product_category_code/tests/test_category_code.py @@ -0,0 +1,23 @@ +# Copyright 2021 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import odoo.tests.common as common + + +class TestProductCategoryCode(common.SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + vals = { + "name": "Category Test", + "code": "TEST", + } + cls.category = cls.env["product.category"].create(vals) + + def test_category(self): + new_category = self.category.copy() + + self.assertEqual( + "TEST-copy", + new_category.code, + ) diff --git a/product_category_code/views/product_category.xml b/product_category_code/views/product_category.xml new file mode 100644 index 00000000000..3e4626c0d08 --- /dev/null +++ b/product_category_code/views/product_category.xml @@ -0,0 +1,30 @@ + + + + + + product.category.form (in product_category_code) + product.category + + + + + + + + + + + product.category.search (in product_category_code) + product.category + + + + + + + + + + From 2c49e7fe86cb3e9064359ba5883cc7d2a24842c5 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Thu, 8 Apr 2021 08:25:20 +0200 Subject: [PATCH 115/161] [14.0][IMP] product_category_code: Add code in list view --- .../i18n/product_category_code.pot | 45 +++++++++++++++++++ .../views/product_category.xml | 10 +++++ 2 files changed, 55 insertions(+) create mode 100644 product_category_code/i18n/product_category_code.pot diff --git a/product_category_code/i18n/product_category_code.pot b/product_category_code/i18n/product_category_code.pot new file mode 100644 index 00000000000..ebd1db5c415 --- /dev/null +++ b/product_category_code/i18n/product_category_code.pot @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_code +# +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_category_code +#: code:addons/product_category_code/models/product_category.py:0 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_category_code +#: model:ir.model.fields,field_description:product_category_code.field_product_category__code +msgid "Code" +msgstr "" + +#. module: product_category_code +#: model:ir.model.fields,field_description:product_category_code.field_product_category__display_name +msgid "Display Name" +msgstr "" + +#. module: product_category_code +#: model:ir.model.fields,field_description:product_category_code.field_product_category__id +msgid "ID" +msgstr "" + +#. module: product_category_code +#: model:ir.model.fields,field_description:product_category_code.field_product_category____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_category_code +#: model:ir.model,name:product_category_code.model_product_category +msgid "Product Category" +msgstr "" diff --git a/product_category_code/views/product_category.xml b/product_category_code/views/product_category.xml index 3e4626c0d08..22fedb2595a 100644 --- a/product_category_code/views/product_category.xml +++ b/product_category_code/views/product_category.xml @@ -26,5 +26,15 @@
    + + product.category.list (in product_category_code) + product.category + + + + + + + From 866e7e1c7ab64671712df5b0ebc8ce78a905301d Mon Sep 17 00:00:00 2001 From: Rad0van Date: Mon, 14 Mar 2022 19:24:46 +0100 Subject: [PATCH 116/161] [MIG] product_category_code: Migration to 15.0 --- product_category_code/README.rst | 10 +++++----- product_category_code/__manifest__.py | 2 +- .../i18n/product_category_code.pot | 17 +---------------- .../static/description/index.html | 6 +++--- .../tests/test_category_code.py | 2 +- 5 files changed, 11 insertions(+), 26 deletions(-) diff --git a/product_category_code/README.rst b/product_category_code/README.rst index 3707e6dada8..8ff3d676bee 100644 --- a/product_category_code/README.rst +++ b/product_category_code/README.rst @@ -14,13 +14,13 @@ Product Category Code :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/14.0/product_category_code + :target: https://github.com/OCA/product-attribute/tree/15.0/product_category_code :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_category_code + :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_category_code :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/14.0 + :target: https://runbot.odoo-community.org/runbot/135/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -38,7 +38,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -76,6 +76,6 @@ Current `maintainer `__: |maintainer-rousseldenis| -This module is part of the `OCA/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_category_code/__manifest__.py b/product_category_code/__manifest__.py index 5e8e0b1995b..26132613928 100644 --- a/product_category_code/__manifest__.py +++ b/product_category_code/__manifest__.py @@ -5,7 +5,7 @@ "name": "Product Category Code", "summary": """ Allows to define a code on product categories""", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "maintainers": ["rousseldenis"], diff --git a/product_category_code/i18n/product_category_code.pot b/product_category_code/i18n/product_category_code.pot index ebd1db5c415..ed96b0dfdab 100644 --- a/product_category_code/i18n/product_category_code.pot +++ b/product_category_code/i18n/product_category_code.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -24,21 +24,6 @@ msgstr "" msgid "Code" msgstr "" -#. module: product_category_code -#: model:ir.model.fields,field_description:product_category_code.field_product_category__display_name -msgid "Display Name" -msgstr "" - -#. module: product_category_code -#: model:ir.model.fields,field_description:product_category_code.field_product_category__id -msgid "ID" -msgstr "" - -#. module: product_category_code -#: model:ir.model.fields,field_description:product_category_code.field_product_category____last_update -msgid "Last Modified on" -msgstr "" - #. module: product_category_code #: model:ir.model,name:product_category_code.model_product_category msgid "Product Category" diff --git a/product_category_code/static/description/index.html b/product_category_code/static/description/index.html index 89014a3f5e6..b9a226de3ae 100644 --- a/product_category_code/static/description/index.html +++ b/product_category_code/static/description/index.html @@ -367,7 +367,7 @@

    Product Category Code

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

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    This module adds a field ‘code’ on product category level.

    Table of contents

    @@ -386,7 +386,7 @@

    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.

    +feedback.

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

    @@ -412,7 +412,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    rousseldenis

    -

    This module is part of the OCA/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    diff --git a/product_category_code/tests/test_category_code.py b/product_category_code/tests/test_category_code.py index 8a0f79cb0a5..4d5cf411df5 100644 --- a/product_category_code/tests/test_category_code.py +++ b/product_category_code/tests/test_category_code.py @@ -4,7 +4,7 @@ import odoo.tests.common as common -class TestProductCategoryCode(common.SavepointCase): +class TestProductCategoryCode(common.TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() From 67a82ada17cf127692d8f97e583aa0ce376c5bc2 Mon Sep 17 00:00:00 2001 From: July Chacko Date: Mon, 17 Oct 2022 15:22:24 +0200 Subject: [PATCH 117/161] [MIG] product_category_code : Migration to 16.0 --- product_category_code/README.rst | 10 +++++----- product_category_code/__manifest__.py | 2 +- product_category_code/i18n/product_category_code.pot | 3 ++- product_category_code/static/description/index.html | 6 +++--- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/product_category_code/README.rst b/product_category_code/README.rst index 8ff3d676bee..58e281a99e5 100644 --- a/product_category_code/README.rst +++ b/product_category_code/README.rst @@ -14,13 +14,13 @@ Product Category Code :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/15.0/product_category_code + :target: https://github.com/OCA/product-attribute/tree/16.0/product_category_code :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_category_code + :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_category_code :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/15.0 + :target: https://runbot.odoo-community.org/runbot/135/16.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -38,7 +38,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -76,6 +76,6 @@ Current `maintainer `__: |maintainer-rousseldenis| -This module is part of the `OCA/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_category_code/__manifest__.py b/product_category_code/__manifest__.py index 26132613928..abf328c5947 100644 --- a/product_category_code/__manifest__.py +++ b/product_category_code/__manifest__.py @@ -5,7 +5,7 @@ "name": "Product Category Code", "summary": """ Allows to define a code on product categories""", - "version": "15.0.1.0.0", + "version": "16.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "maintainers": ["rousseldenis"], diff --git a/product_category_code/i18n/product_category_code.pot b/product_category_code/i18n/product_category_code.pot index ed96b0dfdab..23f1f7728e6 100644 --- a/product_category_code/i18n/product_category_code.pot +++ b/product_category_code/i18n/product_category_code.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -14,6 +14,7 @@ msgstr "" "Plural-Forms: \n" #. module: product_category_code +#. odoo-python #: code:addons/product_category_code/models/product_category.py:0 #, python-format msgid "-copy" diff --git a/product_category_code/static/description/index.html b/product_category_code/static/description/index.html index b9a226de3ae..bf718d9f700 100644 --- a/product_category_code/static/description/index.html +++ b/product_category_code/static/description/index.html @@ -367,7 +367,7 @@

    Product Category Code

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

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    This module adds a field ‘code’ on product category level.

    Table of contents

    @@ -386,7 +386,7 @@

    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.

    +feedback.

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

    @@ -412,7 +412,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    rousseldenis

    -

    This module is part of the OCA/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    From 653ed53cf138590ab424348ea1ccf0299c0aea44 Mon Sep 17 00:00:00 2001 From: Sebastiano Picchi Date: Thu, 27 Apr 2023 10:01:30 +0000 Subject: [PATCH 118/161] Added translation using Weblate (Italian) --- product_category_code/i18n/it.po | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 product_category_code/i18n/it.po diff --git a/product_category_code/i18n/it.po b/product_category_code/i18n/it.po new file mode 100644 index 00000000000..966ac2653ac --- /dev/null +++ b/product_category_code/i18n/it.po @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_code +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-04-27 10:06+0000\n" +"Last-Translator: Sebastiano Picchi \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" + +#. module: product_category_code +#. odoo-python +#: code:addons/product_category_code/models/product_category.py:0 +#, python-format +msgid "-copy" +msgstr "-copia" + +#. module: product_category_code +#: model:ir.model.fields,field_description:product_category_code.field_product_category__code +msgid "Code" +msgstr "Codice" + +#. module: product_category_code +#: model:ir.model,name:product_category_code.model_product_category +msgid "Product Category" +msgstr "Categoria prodotto" From 0946a1d8c2adb0c047e2b596902334572b4b0f94 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 15:24:29 +0000 Subject: [PATCH 119/161] [UPD] README.rst --- product_category_code/README.rst | 15 ++++---- .../static/description/index.html | 36 ++++++++++--------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/product_category_code/README.rst b/product_category_code/README.rst index 58e281a99e5..136ea041b3f 100644 --- a/product_category_code/README.rst +++ b/product_category_code/README.rst @@ -2,10 +2,13 @@ Product Category Code ===================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f8b237f1b383e37e237ae3f95db29fa9749a16c197a4cc757b04203f31c890b6 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Product Category Code .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_category_code :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/16.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/product-attribute&target_branch=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module adds a field 'code' on product category level. @@ -37,7 +40,7 @@ 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 +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. diff --git a/product_category_code/static/description/index.html b/product_category_code/static/description/index.html index bf718d9f700..3d95841ec6f 100644 --- a/product_category_code/static/description/index.html +++ b/product_category_code/static/description/index.html @@ -1,20 +1,20 @@ - + - + Product Category Code -
    -

    Product Category Code

    +
    + + +Odoo Community Association + +
    +

    Product Category Code

    -

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module adds a field ‘code’ on product category level.

    Table of contents

    @@ -384,29 +389,29 @@

    Product Category Code

    -

    Bug Tracker

    +

    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 to smash it by providing a detailed and welcomed -feedback.

    +feedback.

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • ACSONE SA/NV
    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -416,10 +421,11 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    rousseldenis

    -

    This module is part of the OCA/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    +
    From 9446c6b1c8aefb1d52d1807291232a8c83f8631b Mon Sep 17 00:00:00 2001 From: oca-ci Date: Sun, 30 Nov 2025 20:59:08 +0000 Subject: [PATCH 129/161] [UPD] Update product_category_code.pot --- product_category_code/i18n/product_category_code.pot | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/product_category_code/i18n/product_category_code.pot b/product_category_code/i18n/product_category_code.pot index abfb2d14a70..7189fbe899d 100644 --- a/product_category_code/i18n/product_category_code.pot +++ b/product_category_code/i18n/product_category_code.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -24,6 +24,16 @@ msgstr "" msgid "Code" msgstr "" +#. module: product_category_code +#: model:ir.model.fields,field_description:product_category_code.field_product_category__display_name +msgid "Display Name" +msgstr "" + +#. module: product_category_code +#: model:ir.model.fields,field_description:product_category_code.field_product_category__id +msgid "ID" +msgstr "" + #. module: product_category_code #: model:ir.model,name:product_category_code.model_product_category msgid "Product Category" From 81283b09bb74a7f4a31cdc3069aae339628531fa Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 30 Nov 2025 21:01:02 +0000 Subject: [PATCH 130/161] [BOT] post-merge updates --- README.md | 1 + product_category_code/README.rst | 2 +- product_category_code/static/description/index.html | 2 +- setup/_metapackage/pyproject.toml | 3 ++- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3ae6fc30121..fabe455266a 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Available addons ---------------- addon | version | maintainers | summary --- | --- | --- | --- +[product_category_code](product_category_code/) | 19.0.1.0.0 | rousseldenis | Allows to define a code on product categories [product_company_default](product_company_default/) | 19.0.1.0.0 | | Product Company Default [product_net_weight](product_net_weight/) | 19.0.1.0.0 | legalsylvain | Add 'Net Weight' on product models diff --git a/product_category_code/README.rst b/product_category_code/README.rst index a0abc5bafba..64f969014fe 100644 --- a/product_category_code/README.rst +++ b/product_category_code/README.rst @@ -11,7 +11,7 @@ Product Category Code !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:52a45170e311e55b6085a514831b676dc7c46a8bd05b14d70720b7203f26dca0 + !! source digest: sha256:7b359f8034ed5ebc6eb877ddf938838ca8c05356d4bc841170bbb57d466ae41a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/product_category_code/static/description/index.html b/product_category_code/static/description/index.html index 0fd8c21e8f6..768c4e04a4e 100644 --- a/product_category_code/static/description/index.html +++ b/product_category_code/static/description/index.html @@ -372,7 +372,7 @@

    Product Category Code

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:52a45170e311e55b6085a514831b676dc7c46a8bd05b14d70720b7203f26dca0 +!! source digest: sha256:7b359f8034ed5ebc6eb877ddf938838ca8c05356d4bc841170bbb57d466ae41a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module adds a field ‘code’ on product category level.

    diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index 882bdf3833a..576da5cb4e9 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -1,7 +1,8 @@ [project] name = "odoo-addons-oca-product-attribute" -version = "19.0.20251006.0" +version = "19.0.20251130.0" dependencies = [ + "odoo-addon-product_category_code==19.0.*", "odoo-addon-product_company_default==19.0.*", "odoo-addon-product_net_weight==19.0.*", ] From 45618bbad3b9033af1c42134f790130427f18f5d Mon Sep 17 00:00:00 2001 From: Antonio Yamuta Date: Tue, 27 Feb 2018 23:40:42 -0800 Subject: [PATCH 131/161] [ADD] Module to add a constraint on the internal reference of the product to make it unique across the database. --- product_code_unique/README.rst | 64 ++++++++++++++++++ product_code_unique/__init__.py | 19 ++++++ product_code_unique/__manifest__.py | 19 ++++++ .../i18n/product_code_unique.pot | 25 +++++++ product_code_unique/models/__init__.py | 4 ++ product_code_unique/models/product.py | 12 ++++ .../static/description/icon.png | Bin 0 -> 9455 bytes 7 files changed, 143 insertions(+) create mode 100644 product_code_unique/README.rst create mode 100644 product_code_unique/__init__.py create mode 100644 product_code_unique/__manifest__.py create mode 100644 product_code_unique/i18n/product_code_unique.pot create mode 100644 product_code_unique/models/__init__.py create mode 100644 product_code_unique/models/product.py create mode 100644 product_code_unique/static/description/icon.png diff --git a/product_code_unique/README.rst b/product_code_unique/README.rst new file mode 100644 index 00000000000..24246fb8b48 --- /dev/null +++ b/product_code_unique/README.rst @@ -0,0 +1,64 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +================================= +Unique Product Internal Reference +================================= + +This module adds a constraint on the internal reference of the product +to make it unique across the database. + +Usage +===== +* Unable to save a product when a new internal reference or default_code value is + the same with an existing record. +* A pre_init_hook process is initiated when there exist records without an internal reference(default_code). + A default value is generated to populate empty field as a temporary value. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/135/11.0 + +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 smash it by providing detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Antonio Yamuta + +Funders +------- + +The development of this module has been financially supported by: + +* Open Source Integrators + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/product_code_unique/__init__.py b/product_code_unique/__init__.py new file mode 100644 index 00000000000..9bab8a354d0 --- /dev/null +++ b/product_code_unique/__init__.py @@ -0,0 +1,19 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models + + +def pre_init_product_code(cr): + cr.execute("""UPDATE product_product + SET default_code = 'DEFAULT' || nextval('ir_default_id_seq') + WHERE id in (SELECT distinct(pp.id) + FROM product_product pp + INNER JOIN (SELECT default_code, COUNT(*) + FROM product_product + GROUP BY default_code + HAVING COUNT(*)>1 + )pp1 on pp.default_code=pp1.default_code + or pp.default_code is NULL + or LENGTH(pp.default_code) = 0)""") + return True diff --git a/product_code_unique/__manifest__.py b/product_code_unique/__manifest__.py new file mode 100644 index 00000000000..aa59465dac6 --- /dev/null +++ b/product_code_unique/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Unique Product Internal Reference", + "summary": "Set Product Internal Reference as Unique", + "version": "11.0.1.0.0", + "license": "AGPL-3", + "author": "Open Source Integrators, Odoo Community Association (OCA)", + "category": "Product", + "website": "https://github.com/OCA/product-attribute", + "depends": ["product"], + "data": [ + ], + 'demo': [ + ], + "pre_init_hook": 'pre_init_product_code', + "installable": True, +} diff --git a/product_code_unique/i18n/product_code_unique.pot b/product_code_unique/i18n/product_code_unique.pot new file mode 100644 index 00000000000..c3fb3f260e0 --- /dev/null +++ b/product_code_unique/i18n/product_code_unique.pot @@ -0,0 +1,25 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_code_unique +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.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_code_unique +#: sql_constraint:product.product:0 +msgid "Internal Reference must be unique across the database!" +msgstr "" + +#. module: product_code_unique +#: model:ir.model,name:product_code_unique.model_product_product +msgid "Product" +msgstr "" + diff --git a/product_code_unique/models/__init__.py b/product_code_unique/models/__init__.py new file mode 100644 index 00000000000..2c3319d8df1 --- /dev/null +++ b/product_code_unique/models/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import product diff --git a/product_code_unique/models/product.py b/product_code_unique/models/product.py new file mode 100644 index 00000000000..6469901f1df --- /dev/null +++ b/product_code_unique/models/product.py @@ -0,0 +1,12 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class ProductProduct(models.Model): + _inherit = 'product.product' + + _sql_constraints = [ + ('default_code_uniq', 'unique(default_code)', + 'Internal Reference must be unique across the database!'), ] diff --git a/product_code_unique/static/description/icon.png b/product_code_unique/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 From 7ebb10e836328ef99bec8a82adfe22caa91c4640 Mon Sep 17 00:00:00 2001 From: Ruchir Shukla Date: Sun, 25 Nov 2018 09:51:17 +0530 Subject: [PATCH 132/161] [MIG]product_code_unique: migration from 11 to 12 --- product_code_unique/__init__.py | 16 +--------------- product_code_unique/__manifest__.py | 6 +----- product_code_unique/hook.py | 17 +++++++++++++++++ .../i18n/product_code_unique.pot | 2 +- 4 files changed, 20 insertions(+), 21 deletions(-) create mode 100644 product_code_unique/hook.py diff --git a/product_code_unique/__init__.py b/product_code_unique/__init__.py index 9bab8a354d0..798718f389a 100644 --- a/product_code_unique/__init__.py +++ b/product_code_unique/__init__.py @@ -2,18 +2,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models - - -def pre_init_product_code(cr): - cr.execute("""UPDATE product_product - SET default_code = 'DEFAULT' || nextval('ir_default_id_seq') - WHERE id in (SELECT distinct(pp.id) - FROM product_product pp - INNER JOIN (SELECT default_code, COUNT(*) - FROM product_product - GROUP BY default_code - HAVING COUNT(*)>1 - )pp1 on pp.default_code=pp1.default_code - or pp.default_code is NULL - or LENGTH(pp.default_code) = 0)""") - return True +from .hook import pre_init_product_code diff --git a/product_code_unique/__manifest__.py b/product_code_unique/__manifest__.py index aa59465dac6..c37d4582af8 100644 --- a/product_code_unique/__manifest__.py +++ b/product_code_unique/__manifest__.py @@ -4,16 +4,12 @@ { "name": "Unique Product Internal Reference", "summary": "Set Product Internal Reference as Unique", - "version": "11.0.1.0.0", + "version": "12.0.1.0.0", "license": "AGPL-3", "author": "Open Source Integrators, Odoo Community Association (OCA)", "category": "Product", "website": "https://github.com/OCA/product-attribute", "depends": ["product"], - "data": [ - ], - 'demo': [ - ], "pre_init_hook": 'pre_init_product_code', "installable": True, } diff --git a/product_code_unique/hook.py b/product_code_unique/hook.py new file mode 100644 index 00000000000..e311211925c --- /dev/null +++ b/product_code_unique/hook.py @@ -0,0 +1,17 @@ +# Copyright (C) 2019 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +def pre_init_product_code(cr): + cr.execute("""UPDATE product_product + SET default_code = 'DEFAULT' || nextval('ir_default_id_seq') + WHERE id in (SELECT distinct(pp.id) + FROM product_product pp + INNER JOIN (SELECT default_code, COUNT(*) + FROM product_product + GROUP BY default_code + HAVING COUNT(*)>1 + )pp1 on pp.default_code=pp1.default_code + or pp.default_code is NULL + or LENGTH(pp.default_code) = 0)""") + return True diff --git a/product_code_unique/i18n/product_code_unique.pot b/product_code_unique/i18n/product_code_unique.pot index c3fb3f260e0..4b8b11ecaf0 100644 --- a/product_code_unique/i18n/product_code_unique.pot +++ b/product_code_unique/i18n/product_code_unique.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" From 60abd4b839785630a1058487e7a9e6772c04ad36 Mon Sep 17 00:00:00 2001 From: Raf Ven Date: Tue, 1 Oct 2019 10:27:56 +0200 Subject: [PATCH 133/161] [MIG] product_code_unique: Migration to 13.0 --- product_code_unique/README.rst | 75 +-- product_code_unique/__manifest__.py | 4 +- product_code_unique/hook.py | 6 +- .../i18n/product_code_unique.pot | 9 +- product_code_unique/models/product.py | 10 +- product_code_unique/readme/CONTRIBUTORS.rst | 2 + product_code_unique/readme/DESCRIPTION.rst | 2 + product_code_unique/readme/USAGE.rst | 4 + .../static/description/index.html | 431 ++++++++++++++++++ product_code_unique/tests/__init__.py | 1 + product_code_unique/tests/test_code_unique.py | 28 ++ 11 files changed, 532 insertions(+), 40 deletions(-) create mode 100644 product_code_unique/readme/CONTRIBUTORS.rst create mode 100644 product_code_unique/readme/DESCRIPTION.rst create mode 100644 product_code_unique/readme/USAGE.rst create mode 100644 product_code_unique/static/description/index.html create mode 100644 product_code_unique/tests/__init__.py create mode 100644 product_code_unique/tests/test_code_unique.py diff --git a/product_code_unique/README.rst b/product_code_unique/README.rst index 24246fb8b48..9bf3584b17d 100644 --- a/product_code_unique/README.rst +++ b/product_code_unique/README.rst @@ -1,64 +1,83 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 - ================================= Unique Product Internal Reference ================================= -This module adds a constraint on the internal reference of the product +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/13.0/product_code_unique + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-13-0/product-attribute-13-0-product_code_unique + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/135/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds a constraint on the internal reference of the product to make it unique across the database. +**Table of contents** + +.. contents:: + :local: + Usage ===== + * Unable to save a product when a new internal reference or default_code value is the same with an existing record. * A pre_init_hook process is initiated when there exist records without an internal reference(default_code). A default value is generated to populate empty field as a temporary value. -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/135/11.0 - 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 smash it by providing detailed and welcomed feedback. +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 ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* Open Source Integrators Contributors ------------- +~~~~~~~~~~~~ * Antonio Yamuta +* Raf Ven -Funders -------- +Maintainers +~~~~~~~~~~~ -The development of this module has been financially supported by: - -* Open Source Integrators - -Maintainer ----------- +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - 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. -To contribute to this module, please visit https://odoo-community.org. +This module is part of the `OCA/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_code_unique/__manifest__.py b/product_code_unique/__manifest__.py index c37d4582af8..68afdd0f269 100644 --- a/product_code_unique/__manifest__.py +++ b/product_code_unique/__manifest__.py @@ -4,12 +4,12 @@ { "name": "Unique Product Internal Reference", "summary": "Set Product Internal Reference as Unique", - "version": "12.0.1.0.0", + "version": "13.0.1.0.0", "license": "AGPL-3", "author": "Open Source Integrators, Odoo Community Association (OCA)", "category": "Product", "website": "https://github.com/OCA/product-attribute", "depends": ["product"], - "pre_init_hook": 'pre_init_product_code', + "pre_init_hook": "pre_init_product_code", "installable": True, } diff --git a/product_code_unique/hook.py b/product_code_unique/hook.py index e311211925c..33d6127d0b5 100644 --- a/product_code_unique/hook.py +++ b/product_code_unique/hook.py @@ -3,7 +3,8 @@ def pre_init_product_code(cr): - cr.execute("""UPDATE product_product + cr.execute( + """UPDATE product_product SET default_code = 'DEFAULT' || nextval('ir_default_id_seq') WHERE id in (SELECT distinct(pp.id) FROM product_product pp @@ -13,5 +14,6 @@ def pre_init_product_code(cr): HAVING COUNT(*)>1 )pp1 on pp.default_code=pp1.default_code or pp.default_code is NULL - or LENGTH(pp.default_code) = 0)""") + or LENGTH(pp.default_code) = 0)""" + ) return True diff --git a/product_code_unique/i18n/product_code_unique.pot b/product_code_unique/i18n/product_code_unique.pot index 4b8b11ecaf0..6934bfd6238 100644 --- a/product_code_unique/i18n/product_code_unique.pot +++ b/product_code_unique/i18n/product_code_unique.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_code_unique +# * product_code_unique # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,7 +14,7 @@ msgstr "" "Plural-Forms: \n" #. module: product_code_unique -#: sql_constraint:product.product:0 +#: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq msgid "Internal Reference must be unique across the database!" msgstr "" @@ -22,4 +22,3 @@ msgstr "" #: model:ir.model,name:product_code_unique.model_product_product msgid "Product" msgstr "" - diff --git a/product_code_unique/models/product.py b/product_code_unique/models/product.py index 6469901f1df..46744403d12 100644 --- a/product_code_unique/models/product.py +++ b/product_code_unique/models/product.py @@ -5,8 +5,12 @@ class ProductProduct(models.Model): - _inherit = 'product.product' + _inherit = "product.product" _sql_constraints = [ - ('default_code_uniq', 'unique(default_code)', - 'Internal Reference must be unique across the database!'), ] + ( + "default_code_uniq", + "unique(default_code)", + "Internal Reference must be unique across the database!", + ) + ] diff --git a/product_code_unique/readme/CONTRIBUTORS.rst b/product_code_unique/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..4462d3a8255 --- /dev/null +++ b/product_code_unique/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Antonio Yamuta +* Raf Ven diff --git a/product_code_unique/readme/DESCRIPTION.rst b/product_code_unique/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..a9cbc2adc0d --- /dev/null +++ b/product_code_unique/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module adds a constraint on the internal reference of the product +to make it unique across the database. diff --git a/product_code_unique/readme/USAGE.rst b/product_code_unique/readme/USAGE.rst new file mode 100644 index 00000000000..932c15a487a --- /dev/null +++ b/product_code_unique/readme/USAGE.rst @@ -0,0 +1,4 @@ +* Unable to save a product when a new internal reference or default_code value is + the same with an existing record. +* A pre_init_hook process is initiated when there exist records without an internal reference(default_code). + A default value is generated to populate empty field as a temporary value. diff --git a/product_code_unique/static/description/index.html b/product_code_unique/static/description/index.html new file mode 100644 index 00000000000..d097b808590 --- /dev/null +++ b/product_code_unique/static/description/index.html @@ -0,0 +1,431 @@ + + + + + + +Unique Product Internal Reference + + + +
    +

    Unique Product Internal Reference

    + + +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    This module adds a constraint on the internal reference of the product +to make it unique across the database.

    +

    Table of contents

    + +
    +

    Usage

    +
      +
    • Unable to save a product when a new internal reference or default_code value is +the same with an existing record.
    • +
    • A pre_init_hook process is initiated when there exist records without an internal reference(default_code). +A default value is generated to populate empty field as a temporary value.
    • +
    +
    +
    +

    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

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    Maintainers

    +

    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/product-attribute project on GitHub.

    +

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

    +
    +
    +
    + + diff --git a/product_code_unique/tests/__init__.py b/product_code_unique/tests/__init__.py new file mode 100644 index 00000000000..424cd39e07a --- /dev/null +++ b/product_code_unique/tests/__init__.py @@ -0,0 +1 @@ +from . import test_code_unique diff --git a/product_code_unique/tests/test_code_unique.py b/product_code_unique/tests/test_code_unique.py new file mode 100644 index 00000000000..e641631f7d7 --- /dev/null +++ b/product_code_unique/tests/test_code_unique.py @@ -0,0 +1,28 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import psycopg2 + +from odoo.tests.common import SavepointCase +from odoo.tools.misc import mute_logger + + +class TestCodeUnique(SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.product_obj = cls.env["product.product"] + cls.product1 = cls.product_obj.create( + {"name": "Test Product 1", "default_code": "TSTP1"} + ) + + def test_01_check_code_other(self): + self.product2 = self.product_obj.create( + {"name": "Test Product 2", "default_code": "TSTP2"} + ) + + def test_02_check_code_unique(self): + with self.assertRaises(psycopg2.IntegrityError): + with mute_logger("odoo.sql_db"), self.cr.savepoint(): + self.product2 = self.product_obj.create( + {"name": "Test Product 2", "default_code": "TSTP1"} + ) From 5d4619b38a4523c11e9590e9cdaae71271fa6af5 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Tue, 4 Feb 2020 21:17:45 +0100 Subject: [PATCH 134/161] [MIG] product_supplierinfo_for_customer: Migration to v13.0 --- product_code_unique/tests/test_code_unique.py | 1 - 1 file changed, 1 deletion(-) diff --git a/product_code_unique/tests/test_code_unique.py b/product_code_unique/tests/test_code_unique.py index e641631f7d7..7e7cde93b03 100644 --- a/product_code_unique/tests/test_code_unique.py +++ b/product_code_unique/tests/test_code_unique.py @@ -1,7 +1,6 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import psycopg2 - from odoo.tests.common import SavepointCase from odoo.tools.misc import mute_logger From 855c1bcaa30df94c214bdc7e9ebb8462293d0235 Mon Sep 17 00:00:00 2001 From: hveficent Date: Wed, 26 Feb 2020 09:01:02 +0100 Subject: [PATCH 135/161] [13.0][FIXUP] .isort.cfg --- product_code_unique/tests/test_code_unique.py | 1 + 1 file changed, 1 insertion(+) diff --git a/product_code_unique/tests/test_code_unique.py b/product_code_unique/tests/test_code_unique.py index 7e7cde93b03..e641631f7d7 100644 --- a/product_code_unique/tests/test_code_unique.py +++ b/product_code_unique/tests/test_code_unique.py @@ -1,6 +1,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import psycopg2 + from odoo.tests.common import SavepointCase from odoo.tools.misc import mute_logger From 251018b4c3ee029e2fcf5df492737fcf00b2f161 Mon Sep 17 00:00:00 2001 From: watthanun Date: Tue, 10 Nov 2020 10:26:27 +0700 Subject: [PATCH 136/161] [MIG] product_code_unique: Migration to 14.0 --- product_code_unique/README.rst | 11 ++++++----- product_code_unique/__manifest__.py | 2 +- .../i18n/product_code_unique.pot | 17 ++++++++++++++++- product_code_unique/readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 7 ++++--- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/product_code_unique/README.rst b/product_code_unique/README.rst index 9bf3584b17d..93acae4865e 100644 --- a/product_code_unique/README.rst +++ b/product_code_unique/README.rst @@ -14,13 +14,13 @@ Unique Product Internal Reference :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/13.0/product_code_unique + :target: https://github.com/OCA/product-attribute/tree/14.0/product_code_unique :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-13-0/product-attribute-13-0-product_code_unique + :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_code_unique :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/13.0 + :target: https://runbot.odoo-community.org/runbot/135/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -47,7 +47,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -64,6 +64,7 @@ Contributors * Antonio Yamuta * Raf Ven +* Watthanun Khorchai Maintainers ~~~~~~~~~~~ @@ -78,6 +79,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/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_code_unique/__manifest__.py b/product_code_unique/__manifest__.py index 68afdd0f269..989a946a482 100644 --- a/product_code_unique/__manifest__.py +++ b/product_code_unique/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Unique Product Internal Reference", "summary": "Set Product Internal Reference as Unique", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "license": "AGPL-3", "author": "Open Source Integrators, Odoo Community Association (OCA)", "category": "Product", diff --git a/product_code_unique/i18n/product_code_unique.pot b/product_code_unique/i18n/product_code_unique.pot index 6934bfd6238..acaa5b301c0 100644 --- a/product_code_unique/i18n/product_code_unique.pot +++ b/product_code_unique/i18n/product_code_unique.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,11 +13,26 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product__display_name +msgid "Display Name" +msgstr "" + +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product__id +msgid "ID" +msgstr "" + #. module: product_code_unique #: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq msgid "Internal Reference must be unique across the database!" msgstr "" +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product____last_update +msgid "Last Modified on" +msgstr "" + #. module: product_code_unique #: model:ir.model,name:product_code_unique.model_product_product msgid "Product" diff --git a/product_code_unique/readme/CONTRIBUTORS.rst b/product_code_unique/readme/CONTRIBUTORS.rst index 4462d3a8255..c357d79e5aa 100644 --- a/product_code_unique/readme/CONTRIBUTORS.rst +++ b/product_code_unique/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Antonio Yamuta * Raf Ven +* Watthanun Khorchai diff --git a/product_code_unique/static/description/index.html b/product_code_unique/static/description/index.html index d097b808590..da3adb80dd5 100644 --- a/product_code_unique/static/description/index.html +++ b/product_code_unique/static/description/index.html @@ -367,7 +367,7 @@

    Unique Product Internal Reference

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

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    This module adds a constraint on the internal reference of the product to make it unique across the database.

    Table of contents

    @@ -397,7 +397,7 @@

    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.

    +feedback.

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

    @@ -413,6 +413,7 @@

    Contributors

    @@ -422,7 +423,7 @@

    Maintainers

    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/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    From 629820e232c6be5abd49d4e3644594bdf174d777 Mon Sep 17 00:00:00 2001 From: Yves Le Doeuff Date: Sat, 10 Apr 2021 09:02:48 +0000 Subject: [PATCH 137/161] Added translation using Weblate (French) --- product_code_unique/i18n/fr.po | 42 +++++++++++++++++++++++++++++++ product_code_unique/i18n/fr_FR.po | 42 +++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 product_code_unique/i18n/fr.po create mode 100644 product_code_unique/i18n/fr_FR.po diff --git a/product_code_unique/i18n/fr.po b/product_code_unique/i18n/fr.po new file mode 100644 index 00000000000..9f89a690ace --- /dev/null +++ b/product_code_unique/i18n/fr.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_code_unique +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-04-10 11:46+0000\n" +"Last-Translator: Yves Le Doeuff \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product__id +msgid "ID" +msgstr "" + +#. module: product_code_unique +#: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq +msgid "Internal Reference must be unique across the database!" +msgstr "La référence interne doit être unique !" + +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product____last_update +msgid "Last Modified on" +msgstr "Dernière modification" + +#. module: product_code_unique +#: model:ir.model,name:product_code_unique.model_product_product +msgid "Product" +msgstr "Article" diff --git a/product_code_unique/i18n/fr_FR.po b/product_code_unique/i18n/fr_FR.po new file mode 100644 index 00000000000..7c59efa45ed --- /dev/null +++ b/product_code_unique/i18n/fr_FR.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_code_unique +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-04-10 15:46+0000\n" +"Last-Translator: Yves Le Doeuff \n" +"Language-Team: none\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product__id +msgid "ID" +msgstr "" + +#. module: product_code_unique +#: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq +msgid "Internal Reference must be unique across the database!" +msgstr "La référence interne doit être unique !" + +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product____last_update +msgid "Last Modified on" +msgstr "Dernière modification" + +#. module: product_code_unique +#: model:ir.model,name:product_code_unique.model_product_product +msgid "Product" +msgstr "Article" From 8e5978f5ea9f511302901273d8caf4b0a076abdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nedas=20=C5=BDilinskas?= Date: Mon, 24 Jan 2022 12:44:26 +0000 Subject: [PATCH 138/161] [MIG] product_code_unique: Migration to 15.0 --- product_code_unique/README.rst | 16 ++++++--- product_code_unique/__manifest__.py | 2 +- .../i18n/product_code_unique.pot | 17 +--------- product_code_unique/readme/CONTRIBUTORS.rst | 1 + product_code_unique/readme/ROADMAP.rst | 1 + .../static/description/index.html | 34 ++++++++++++------- product_code_unique/tests/test_code_unique.py | 4 +-- 7 files changed, 38 insertions(+), 37 deletions(-) create mode 100644 product_code_unique/readme/ROADMAP.rst diff --git a/product_code_unique/README.rst b/product_code_unique/README.rst index 93acae4865e..999b494757a 100644 --- a/product_code_unique/README.rst +++ b/product_code_unique/README.rst @@ -14,13 +14,13 @@ Unique Product Internal Reference :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/14.0/product_code_unique + :target: https://github.com/OCA/product-attribute/tree/15.0/product_code_unique :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_code_unique + :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_code_unique :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/14.0 + :target: https://runbot.odoo-community.org/runbot/135/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -41,13 +41,18 @@ Usage * A pre_init_hook process is initiated when there exist records without an internal reference(default_code). A default value is generated to populate empty field as a temporary value. +Known issues / Roadmap +====================== + +* Avoid duplicate warnings. Odoo has a warning for duplicate "Internal Reference" of its own (it doesn't block from saving). Now both warnings are displayed when trying to save a duplicate "Internal Reference". + 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -65,6 +70,7 @@ Contributors * Antonio Yamuta * Raf Ven * Watthanun Khorchai +* Nedas Žilinskas Maintainers ~~~~~~~~~~~ @@ -79,6 +85,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/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_code_unique/__manifest__.py b/product_code_unique/__manifest__.py index 989a946a482..3fdc6425868 100644 --- a/product_code_unique/__manifest__.py +++ b/product_code_unique/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Unique Product Internal Reference", "summary": "Set Product Internal Reference as Unique", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "license": "AGPL-3", "author": "Open Source Integrators, Odoo Community Association (OCA)", "category": "Product", diff --git a/product_code_unique/i18n/product_code_unique.pot b/product_code_unique/i18n/product_code_unique.pot index acaa5b301c0..88d3ab8cd31 100644 --- a/product_code_unique/i18n/product_code_unique.pot +++ b/product_code_unique/i18n/product_code_unique.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,26 +13,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: product_code_unique -#: model:ir.model.fields,field_description:product_code_unique.field_product_product__display_name -msgid "Display Name" -msgstr "" - -#. module: product_code_unique -#: model:ir.model.fields,field_description:product_code_unique.field_product_product__id -msgid "ID" -msgstr "" - #. module: product_code_unique #: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq msgid "Internal Reference must be unique across the database!" msgstr "" -#. module: product_code_unique -#: model:ir.model.fields,field_description:product_code_unique.field_product_product____last_update -msgid "Last Modified on" -msgstr "" - #. module: product_code_unique #: model:ir.model,name:product_code_unique.model_product_product msgid "Product" diff --git a/product_code_unique/readme/CONTRIBUTORS.rst b/product_code_unique/readme/CONTRIBUTORS.rst index c357d79e5aa..8e3a64d28b5 100644 --- a/product_code_unique/readme/CONTRIBUTORS.rst +++ b/product_code_unique/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * Antonio Yamuta * Raf Ven * Watthanun Khorchai +* Nedas Žilinskas diff --git a/product_code_unique/readme/ROADMAP.rst b/product_code_unique/readme/ROADMAP.rst new file mode 100644 index 00000000000..66b1180936c --- /dev/null +++ b/product_code_unique/readme/ROADMAP.rst @@ -0,0 +1 @@ +* Avoid duplicate warnings. Odoo has a warning for duplicate "Internal Reference" of its own (it doesn't block from saving). Now both warnings are displayed when trying to save a duplicate "Internal Reference". diff --git a/product_code_unique/static/description/index.html b/product_code_unique/static/description/index.html index da3adb80dd5..30438f34fb3 100644 --- a/product_code_unique/static/description/index.html +++ b/product_code_unique/static/description/index.html @@ -367,18 +367,19 @@

    Unique Product Internal Reference

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

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    This module adds a constraint on the internal reference of the product to make it unique across the database.

    Table of contents

    +
    +

    Known issues / Roadmap

    +
      +
    • Avoid duplicate warnings. Odoo has a warning for duplicate “Internal Reference” of its own (it doesn’t block from saving). Now both warnings are displayed when trying to save a duplicate “Internal Reference”.
    • +
    +
    -

    Bug Tracker

    +

    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.

    +feedback.

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • Open Source Integrators
    -

    Maintainers

    +

    Maintainers

    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/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    diff --git a/product_code_unique/tests/test_code_unique.py b/product_code_unique/tests/test_code_unique.py index e641631f7d7..e90c168e4ed 100644 --- a/product_code_unique/tests/test_code_unique.py +++ b/product_code_unique/tests/test_code_unique.py @@ -2,11 +2,11 @@ import psycopg2 -from odoo.tests.common import SavepointCase +from odoo.tests.common import TransactionCase from odoo.tools.misc import mute_logger -class TestCodeUnique(SavepointCase): +class TestCodeUnique(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() From fc143aaa791754058de402aaacc23601f8e4b4c2 Mon Sep 17 00:00:00 2001 From: pablontura Date: Fri, 22 Apr 2022 08:13:48 +0000 Subject: [PATCH 139/161] Added translation using Weblate (Catalan) --- product_code_unique/i18n/ca.po | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 product_code_unique/i18n/ca.po diff --git a/product_code_unique/i18n/ca.po b/product_code_unique/i18n/ca.po new file mode 100644 index 00000000000..06261c146af --- /dev/null +++ b/product_code_unique/i18n/ca.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_code_unique +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-04-22 10:05+0000\n" +"Last-Translator: pablontura \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_code_unique +#: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq +msgid "Internal Reference must be unique across the database!" +msgstr "La referència interna ha de ser única a tota la base de dades!" + +#. module: product_code_unique +#: model:ir.model,name:product_code_unique.model_product_product +msgid "Product" +msgstr "Producte" From cb33b54375e30af79bcc9f3835cc7fed7aa86909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Est=C3=A9banez?= Date: Thu, 28 Apr 2022 12:19:50 +0000 Subject: [PATCH 140/161] Added translation using Weblate (German) --- product_code_unique/i18n/de.po | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 product_code_unique/i18n/de.po diff --git a/product_code_unique/i18n/de.po b/product_code_unique/i18n/de.po new file mode 100644 index 00000000000..521c7707942 --- /dev/null +++ b/product_code_unique/i18n/de.po @@ -0,0 +1,28 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_code_unique +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-04-28 15:05+0000\n" +"Last-Translator: Álvaro Estébanez \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_code_unique +#: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq +msgid "Internal Reference must be unique across the database!" +msgstr "" +"Die Interne Referenz muss eindeutig sein, Duplikate sind nicht zugelassen!" + +#. module: product_code_unique +#: model:ir.model,name:product_code_unique.model_product_product +msgid "Product" +msgstr "Produkt" From a42f9b1cfe99abe13a9051d6e2f9091283931e73 Mon Sep 17 00:00:00 2001 From: mle Date: Wed, 21 Sep 2022 10:43:39 +0200 Subject: [PATCH 141/161] [MIG] product_code_unique: Migration to 16.0 --- product_code_unique/README.rst | 10 +++++----- product_code_unique/__manifest__.py | 2 +- product_code_unique/i18n/ca.po | 2 +- product_code_unique/i18n/de.po | 2 +- product_code_unique/i18n/product_code_unique.pot | 4 ++-- product_code_unique/static/description/index.html | 6 +++--- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/product_code_unique/README.rst b/product_code_unique/README.rst index 999b494757a..017f56b2315 100644 --- a/product_code_unique/README.rst +++ b/product_code_unique/README.rst @@ -14,13 +14,13 @@ Unique Product Internal Reference :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/15.0/product_code_unique + :target: https://github.com/OCA/product-attribute/tree/16.0/product_code_unique :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_code_unique + :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_code_unique :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/15.0 + :target: https://runbot.odoo-community.org/runbot/135/16.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -52,7 +52,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -85,6 +85,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/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_code_unique/__manifest__.py b/product_code_unique/__manifest__.py index 3fdc6425868..547a3db6b10 100644 --- a/product_code_unique/__manifest__.py +++ b/product_code_unique/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Unique Product Internal Reference", "summary": "Set Product Internal Reference as Unique", - "version": "15.0.1.0.0", + "version": "16.0.1.0.0", "license": "AGPL-3", "author": "Open Source Integrators, Odoo Community Association (OCA)", "category": "Product", diff --git a/product_code_unique/i18n/ca.po b/product_code_unique/i18n/ca.po index 06261c146af..199ff1d01de 100644 --- a/product_code_unique/i18n/ca.po +++ b/product_code_unique/i18n/ca.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: 2022-04-22 10:05+0000\n" "Last-Translator: pablontura \n" diff --git a/product_code_unique/i18n/de.po b/product_code_unique/i18n/de.po index 521c7707942..6ceb1cbf6d4 100644 --- a/product_code_unique/i18n/de.po +++ b/product_code_unique/i18n/de.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: 2022-04-28 15:05+0000\n" "Last-Translator: Álvaro Estébanez \n" diff --git a/product_code_unique/i18n/product_code_unique.pot b/product_code_unique/i18n/product_code_unique.pot index 88d3ab8cd31..6bbc44fae91 100644 --- a/product_code_unique/i18n/product_code_unique.pot +++ b/product_code_unique/i18n/product_code_unique.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -20,5 +20,5 @@ msgstr "" #. module: product_code_unique #: model:ir.model,name:product_code_unique.model_product_product -msgid "Product" +msgid "Product Variant" msgstr "" diff --git a/product_code_unique/static/description/index.html b/product_code_unique/static/description/index.html index 30438f34fb3..51c4bc4803e 100644 --- a/product_code_unique/static/description/index.html +++ b/product_code_unique/static/description/index.html @@ -367,7 +367,7 @@

    Unique Product Internal Reference

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

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

    This module adds a constraint on the internal reference of the product to make it unique across the database.

    Table of contents

    @@ -404,7 +404,7 @@

    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.

    +feedback.

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

    @@ -431,7 +431,7 @@

    Maintainers

    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/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    From b7ca15307cd0fa6e80c9ab66dfb704f4a31ff3fb Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 19 Oct 2022 11:18:02 +0000 Subject: [PATCH 142/161] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: product-attribute-16.0/product-attribute-16.0-product_code_unique Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_code_unique/ --- product_code_unique/i18n/ca.po | 7 +++++-- product_code_unique/i18n/de.po | 7 +++++-- product_code_unique/i18n/fr.po | 28 +++++++++++----------------- product_code_unique/i18n/fr_FR.po | 28 +++++++++++----------------- 4 files changed, 32 insertions(+), 38 deletions(-) diff --git a/product_code_unique/i18n/ca.po b/product_code_unique/i18n/ca.po index 199ff1d01de..137b1919407 100644 --- a/product_code_unique/i18n/ca.po +++ b/product_code_unique/i18n/ca.po @@ -23,5 +23,8 @@ msgstr "La referència interna ha de ser única a tota la base de dades!" #. module: product_code_unique #: model:ir.model,name:product_code_unique.model_product_product -msgid "Product" -msgstr "Producte" +msgid "Product Variant" +msgstr "" + +#~ msgid "Product" +#~ msgstr "Producte" diff --git a/product_code_unique/i18n/de.po b/product_code_unique/i18n/de.po index 6ceb1cbf6d4..60e734198b9 100644 --- a/product_code_unique/i18n/de.po +++ b/product_code_unique/i18n/de.po @@ -24,5 +24,8 @@ msgstr "" #. module: product_code_unique #: model:ir.model,name:product_code_unique.model_product_product -msgid "Product" -msgstr "Produkt" +msgid "Product Variant" +msgstr "" + +#~ msgid "Product" +#~ msgstr "Produkt" diff --git a/product_code_unique/i18n/fr.po b/product_code_unique/i18n/fr.po index 9f89a690ace..f4e089a464a 100644 --- a/product_code_unique/i18n/fr.po +++ b/product_code_unique/i18n/fr.po @@ -16,27 +16,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.3.2\n" -#. module: product_code_unique -#: model:ir.model.fields,field_description:product_code_unique.field_product_product__display_name -msgid "Display Name" -msgstr "Nom affiché" - -#. module: product_code_unique -#: model:ir.model.fields,field_description:product_code_unique.field_product_product__id -msgid "ID" -msgstr "" - #. module: product_code_unique #: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq msgid "Internal Reference must be unique across the database!" msgstr "La référence interne doit être unique !" -#. module: product_code_unique -#: model:ir.model.fields,field_description:product_code_unique.field_product_product____last_update -msgid "Last Modified on" -msgstr "Dernière modification" - #. module: product_code_unique #: model:ir.model,name:product_code_unique.model_product_product -msgid "Product" -msgstr "Article" +msgid "Product Variant" +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Nom affiché" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification" + +#~ msgid "Product" +#~ msgstr "Article" diff --git a/product_code_unique/i18n/fr_FR.po b/product_code_unique/i18n/fr_FR.po index 7c59efa45ed..a80b46051d4 100644 --- a/product_code_unique/i18n/fr_FR.po +++ b/product_code_unique/i18n/fr_FR.po @@ -16,27 +16,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.3.2\n" -#. module: product_code_unique -#: model:ir.model.fields,field_description:product_code_unique.field_product_product__display_name -msgid "Display Name" -msgstr "Nom affiché" - -#. module: product_code_unique -#: model:ir.model.fields,field_description:product_code_unique.field_product_product__id -msgid "ID" -msgstr "" - #. module: product_code_unique #: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq msgid "Internal Reference must be unique across the database!" msgstr "La référence interne doit être unique !" -#. module: product_code_unique -#: model:ir.model.fields,field_description:product_code_unique.field_product_product____last_update -msgid "Last Modified on" -msgstr "Dernière modification" - #. module: product_code_unique #: model:ir.model,name:product_code_unique.model_product_product -msgid "Product" -msgstr "Article" +msgid "Product Variant" +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Nom affiché" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification" + +#~ msgid "Product" +#~ msgstr "Article" From 327381984ca9e2e6d5705c68672add0dc8f27aa1 Mon Sep 17 00:00:00 2001 From: Maria Sparenberg Date: Fri, 4 Nov 2022 12:11:57 +0000 Subject: [PATCH 143/161] Translated using Weblate (German) Currently translated at 100.0% (2 of 2 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_code_unique Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_code_unique/de/ --- product_code_unique/i18n/de.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/product_code_unique/i18n/de.po b/product_code_unique/i18n/de.po index 60e734198b9..ff5acb7de06 100644 --- a/product_code_unique/i18n/de.po +++ b/product_code_unique/i18n/de.po @@ -6,15 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2022-04-28 15:05+0000\n" -"Last-Translator: Álvaro Estébanez \n" +"PO-Revision-Date: 2022-11-04 14:44+0000\n" +"Last-Translator: Maria Sparenberg \n" "Language-Team: none\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Weblate 4.14.1\n" #. module: product_code_unique #: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq @@ -25,7 +25,7 @@ msgstr "" #. module: product_code_unique #: model:ir.model,name:product_code_unique.model_product_product msgid "Product Variant" -msgstr "" +msgstr "Produktvariante" #~ msgid "Product" #~ msgstr "Produkt" From 95b628ba0fc1e0b7d18d1b85ab39f04dae46bb21 Mon Sep 17 00:00:00 2001 From: Sebastiano Picchi Date: Thu, 27 Apr 2023 09:49:07 +0000 Subject: [PATCH 144/161] Added translation using Weblate (Italian) --- product_code_unique/i18n/it.po | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 product_code_unique/i18n/it.po diff --git a/product_code_unique/i18n/it.po b/product_code_unique/i18n/it.po new file mode 100644 index 00000000000..a2b669f3e99 --- /dev/null +++ b/product_code_unique/i18n/it.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_code_unique +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-04-27 10:06+0000\n" +"Last-Translator: Sebastiano Picchi \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" + +#. module: product_code_unique +#: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq +msgid "Internal Reference must be unique across the database!" +msgstr "Il riferimento interno deve essere unico in tutti il database!" + +#. module: product_code_unique +#: model:ir.model,name:product_code_unique.model_product_product +msgid "Product Variant" +msgstr "Variante prodotto" From 7cd78d90d9d75b4acc7c0ae94c733d6fc3148fad Mon Sep 17 00:00:00 2001 From: Pedro Castro Silva Date: Wed, 12 Jul 2023 21:27:40 +0000 Subject: [PATCH 145/161] Added translation using Weblate (Portuguese) --- product_code_unique/README.rst | 15 ++++--- product_code_unique/i18n/pt.po | 27 ++++++++++++ .../static/description/index.html | 42 ++++++++++--------- 3 files changed, 58 insertions(+), 26 deletions(-) create mode 100644 product_code_unique/i18n/pt.po diff --git a/product_code_unique/README.rst b/product_code_unique/README.rst index 017f56b2315..ef4ea08d94a 100644 --- a/product_code_unique/README.rst +++ b/product_code_unique/README.rst @@ -2,10 +2,13 @@ Unique Product Internal Reference ================================= -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:4a4cc9ef73a7dd17a2564b4c82ecbc08e787afcb2ca8779ed357dc38b2a7f792 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Unique Product Internal Reference .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_code_unique :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/16.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/product-attribute&target_branch=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module adds a constraint on the internal reference of the product to make it unique across the database. @@ -51,7 +54,7 @@ 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 +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. diff --git a/product_code_unique/i18n/pt.po b/product_code_unique/i18n/pt.po new file mode 100644 index 00000000000..8099bbc77e9 --- /dev/null +++ b/product_code_unique/i18n/pt.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_code_unique +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-13 00:11+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: product_code_unique +#: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq +msgid "Internal Reference must be unique across the database!" +msgstr "A Referência Interna tem que ser única na base de dados!" + +#. module: product_code_unique +#: model:ir.model,name:product_code_unique.model_product_product +msgid "Product Variant" +msgstr "Variante de Produto" diff --git a/product_code_unique/static/description/index.html b/product_code_unique/static/description/index.html index 51c4bc4803e..caa7921e58b 100644 --- a/product_code_unique/static/description/index.html +++ b/product_code_unique/static/description/index.html @@ -1,20 +1,20 @@ - + - + Unique Product Internal Reference -
    -

    Unique Product Internal Reference

    +
    + + +Odoo Community Association + +
    +

    Unique Product Internal Reference

    -

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    +

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module adds a constraint on the internal reference of the product to make it unique across the database.

    Table of contents

    @@ -387,7 +392,7 @@

    Unique Product Internal Reference

    -

    Usage

    +

    Usage

    • Unable to save a product when a new internal reference or default_code value is the same with an existing record.
    • @@ -397,7 +402,7 @@

      Usage

    -

    Known issues / Roadmap

    +

    Known issues / Roadmap

    • Avoid duplicate warnings. Odoo has a warning for duplicate “Internal Reference” of its own (it doesn’t block from saving). Now both @@ -406,23 +411,23 @@

      Known issues / Roadmap

    -

    Bug Tracker

    +

    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 to smash it by providing a detailed and welcomed -feedback.

    +feedback.

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • Open Source Integrators
    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -439,10 +444,11 @@

    Maintainers

    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/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    +
    From ddbc9869ffc913bcd3a4f851d0ab720f1b735caf Mon Sep 17 00:00:00 2001 From: oca-ci Date: Sun, 30 Nov 2025 21:03:31 +0000 Subject: [PATCH 157/161] [UPD] Update product_code_unique.pot --- product_code_unique/i18n/product_code_unique.pot | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/product_code_unique/i18n/product_code_unique.pot b/product_code_unique/i18n/product_code_unique.pot index 9677e04e422..2f04b3bdb68 100644 --- a/product_code_unique/i18n/product_code_unique.pot +++ b/product_code_unique/i18n/product_code_unique.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,6 +13,16 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product__display_name +msgid "Display Name" +msgstr "" + +#. module: product_code_unique +#: model:ir.model.fields,field_description:product_code_unique.field_product_product__id +msgid "ID" +msgstr "" + #. module: product_code_unique #: model:ir.model.constraint,message:product_code_unique.constraint_product_product_default_code_uniq msgid "Internal Reference must be unique across the database!" From 86b694ecc9f9b6216587c52cc12f5401e49d4faf Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 30 Nov 2025 21:05:35 +0000 Subject: [PATCH 158/161] [BOT] post-merge updates --- README.md | 1 + product_code_unique/README.rst | 2 +- product_code_unique/static/description/index.html | 2 +- setup/_metapackage/pyproject.toml | 3 ++- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fabe455266a..72661ae76e3 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Available addons addon | version | maintainers | summary --- | --- | --- | --- [product_category_code](product_category_code/) | 19.0.1.0.0 | rousseldenis | Allows to define a code on product categories +[product_code_unique](product_code_unique/) | 19.0.1.0.0 | | Set Product Internal Reference as Unique [product_company_default](product_company_default/) | 19.0.1.0.0 | | Product Company Default [product_net_weight](product_net_weight/) | 19.0.1.0.0 | legalsylvain | Add 'Net Weight' on product models diff --git a/product_code_unique/README.rst b/product_code_unique/README.rst index b5c2f160757..4c74252b5bb 100644 --- a/product_code_unique/README.rst +++ b/product_code_unique/README.rst @@ -11,7 +11,7 @@ Unique Product Internal Reference !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2411c34fd0d840a48ffb9394342205a62242c5bac0972eb3bf676d77ea8da4a4 + !! source digest: sha256:90cf542b3aa17d2e63af1129f939979af06497a6b2e5685f276a36ef0a2ce203 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/product_code_unique/static/description/index.html b/product_code_unique/static/description/index.html index 9c224e12834..fa3b44887da 100644 --- a/product_code_unique/static/description/index.html +++ b/product_code_unique/static/description/index.html @@ -372,7 +372,7 @@

    Unique Product Internal Reference

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2411c34fd0d840a48ffb9394342205a62242c5bac0972eb3bf676d77ea8da4a4 +!! source digest: sha256:90cf542b3aa17d2e63af1129f939979af06497a6b2e5685f276a36ef0a2ce203 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module adds a constraint on the internal reference of the product diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index 576da5cb4e9..145ac390655 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -1,8 +1,9 @@ [project] name = "odoo-addons-oca-product-attribute" -version = "19.0.20251130.0" +version = "19.0.20251130.1" dependencies = [ "odoo-addon-product_category_code==19.0.*", + "odoo-addon-product_code_unique==19.0.*", "odoo-addon-product_company_default==19.0.*", "odoo-addon-product_net_weight==19.0.*", ] From 5108cc806d06a4868ef9b0255638b98e8d173e4b Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Mon, 22 Dec 2025 20:32:18 +0100 Subject: [PATCH 159/161] [IMP] product_net_weight: adopt native style of 19.0 --- product_net_weight/README.rst | 14 +++++++------- product_net_weight/views/view_product_product.xml | 2 +- product_net_weight/views/view_product_template.xml | 6 +++++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/product_net_weight/README.rst b/product_net_weight/README.rst index 885823fd267..bcba6d04356 100644 --- a/product_net_weight/README.rst +++ b/product_net_weight/README.rst @@ -43,8 +43,8 @@ weight. (container excluded) Usage ===== -- Go to 'Inventory > Master Data > Product' and edit items. -- Go to 'Inventory' tab, and fill the "Net Weight" value. +- Go to 'Inventory > Master Data > Product' and edit items. +- Go to 'Inventory' tab, and fill the "Net Weight" value. |image1| @@ -83,14 +83,14 @@ Authors Contributors ------------ -- Sylvain LE GAL (https://www.twitter.com/legalsylvain) -- `Greenice `__: +- Sylvain LE GAL (https://www.twitter.com/legalsylvain) +- `Greenice `__: - - Fernando La Chica + - Fernando La Chica -- `Tecnativa `__: +- `Tecnativa `__: - - Sergio Teruel + - Sergio Teruel Maintainers ----------- diff --git a/product_net_weight/views/view_product_product.xml b/product_net_weight/views/view_product_product.xml index 4de9440080a..6827c1476fa 100644 --- a/product_net_weight/views/view_product_product.xml +++ b/product_net_weight/views/view_product_product.xml @@ -11,7 +11,7 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

    +
    diff --git a/product_net_weight/views/view_product_template.xml b/product_net_weight/views/view_product_template.xml index 66e34bcd149..40c2e78573c 100644 --- a/product_net_weight/views/view_product_template.xml +++ b/product_net_weight/views/view_product_template.xml @@ -22,7 +22,11 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). name="net_weight" invisible="product_variant_count > 1 and not is_product_variant" > - +
    From a0c59c35b3f8709b86f605ce7477d2e5ea1da95c Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 22 Dec 2025 20:08:22 +0000 Subject: [PATCH 160/161] [BOT] post-merge updates --- README.md | 2 +- product_net_weight/README.rst | 16 ++++++++-------- product_net_weight/__manifest__.py | 2 +- product_net_weight/static/description/index.html | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 72661ae76e3..6b6c4e7545f 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ addon | version | maintainers | summary [product_category_code](product_category_code/) | 19.0.1.0.0 | rousseldenis | Allows to define a code on product categories [product_code_unique](product_code_unique/) | 19.0.1.0.0 | | Set Product Internal Reference as Unique [product_company_default](product_company_default/) | 19.0.1.0.0 | | Product Company Default -[product_net_weight](product_net_weight/) | 19.0.1.0.0 | legalsylvain | Add 'Net Weight' on product models +[product_net_weight](product_net_weight/) | 19.0.1.0.1 | legalsylvain | Add 'Net Weight' on product models [//]: # (end addons) diff --git a/product_net_weight/README.rst b/product_net_weight/README.rst index bcba6d04356..882e50f7668 100644 --- a/product_net_weight/README.rst +++ b/product_net_weight/README.rst @@ -11,7 +11,7 @@ Products - Net Weight !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:6cecd3e69838f7d430818c3eb70cfda51ae25c46038eaa06270f4d0498742dd5 + !! source digest: sha256:c3f19cb07b960ac9c212abcfc24c98bfd63994b5f92649817c42a47e3f1d9237 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -43,8 +43,8 @@ weight. (container excluded) Usage ===== -- Go to 'Inventory > Master Data > Product' and edit items. -- Go to 'Inventory' tab, and fill the "Net Weight" value. +- Go to 'Inventory > Master Data > Product' and edit items. +- Go to 'Inventory' tab, and fill the "Net Weight" value. |image1| @@ -83,14 +83,14 @@ Authors Contributors ------------ -- Sylvain LE GAL (https://www.twitter.com/legalsylvain) -- `Greenice `__: +- Sylvain LE GAL (https://www.twitter.com/legalsylvain) +- `Greenice `__: - - Fernando La Chica + - Fernando La Chica -- `Tecnativa `__: +- `Tecnativa `__: - - Sergio Teruel + - Sergio Teruel Maintainers ----------- diff --git a/product_net_weight/__manifest__.py b/product_net_weight/__manifest__.py index 1240465700e..d2681753895 100644 --- a/product_net_weight/__manifest__.py +++ b/product_net_weight/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Products - Net Weight", "summary": "Add 'Net Weight' on product models", - "version": "19.0.1.0.0", + "version": "19.0.1.0.1", "category": "Product", "author": "GRAP,Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], diff --git a/product_net_weight/static/description/index.html b/product_net_weight/static/description/index.html index 0e8498dde60..f71e30bdb8b 100644 --- a/product_net_weight/static/description/index.html +++ b/product_net_weight/static/description/index.html @@ -372,7 +372,7 @@

    Products - Net Weight

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:6cecd3e69838f7d430818c3eb70cfda51ae25c46038eaa06270f4d0498742dd5 +!! source digest: sha256:c3f19cb07b960ac9c212abcfc24c98bfd63994b5f92649817c42a47e3f1d9237 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module extends the functionality of stock module to support net From 9c92d2f6a30f929ea8a5948b147f8b22a905715d Mon Sep 17 00:00:00 2001 From: Lindsay Date: Wed, 4 Feb 2026 11:32:02 +0100 Subject: [PATCH 161/161] [FIX][19.0] product_assortment: fix demo data --- product_assortment/README.rst | 48 ++++++++----------- product_assortment/demo/assortments.xml | 9 ++-- .../static/description/index.html | 14 +++--- 3 files changed, 30 insertions(+), 41 deletions(-) diff --git a/product_assortment/README.rst b/product_assortment/README.rst index 29ace043841..b4b81824572 100644 --- a/product_assortment/README.rst +++ b/product_assortment/README.rst @@ -59,44 +59,36 @@ Changelog 10.0.1.0.0 (2018-08-27) ----------------------- -- [10.0][ADD] productassortment - -.. _section-1: +- [10.0][ADD] productassortment 12.0.1.0.0 (2019-06-03) ----------------------- -- [12.0][MIG] productassortment - -.. _section-2: +- [12.0][MIG] productassortment 14.0.1.0.0 (2019-06-03) ----------------------- -- [14.0][MIG] productassortment - -.. _section-3: +- [14.0][MIG] productassortment 16.0.1.0.0 (2022-09-15) ----------------------- -- [16.0][MIG] product_assortment - -.. _section-4: +- [16.0][MIG] product_assortment 18.0.1.0.0 (2025-03-06) ----------------------- -- [18.0][MIG] product_assortment -- Forward port demo data -- Forward port Only Show assortments to managers -- Forward port Fix All assortments are applied to original partner when - partner is duplicated -- Adjust test code to new API behavior, for info: odoo/odoo@450f5c9 -- added test for combined black list and whitelisted product -- Fix: Navigating to the product assortment using the smartbutton on - the partner does not show all applicable assortments. (The - assortments with the partner defined as a domain where missing.) +- [18.0][MIG] product_assortment +- Forward port demo data +- Forward port Only Show assortments to managers +- Forward port Fix All assortments are applied to original partner when + partner is duplicated +- Adjust test code to new API behavior, for info: odoo/odoo@450f5c9 +- added test for combined black list and whitelisted product +- Fix: Navigating to the product assortment using the smartbutton on the + partner does not show all applicable assortments. (The assortments + with the partner defined as a domain where missing.) Bug Tracker =========== @@ -119,13 +111,13 @@ Authors Contributors ------------ -- Denis Roussel -- Cédric Pigeon -- Xavier Bouquiaux -- `Tecnativa `__: +- Denis Roussel +- Cédric Pigeon +- Xavier Bouquiaux +- `Tecnativa `__: - - Carlos Roca - - Sergio Teruel + - Carlos Roca + - Sergio Teruel Maintainers ----------- diff --git a/product_assortment/demo/assortments.xml b/product_assortment/demo/assortments.xml index f1f02a14419..67e093d8458 100644 --- a/product_assortment/demo/assortments.xml +++ b/product_assortment/demo/assortments.xml @@ -21,7 +21,7 @@ ["|","|",("default_code","ilike","chair"),("name","ilike","chair"),("barcode","ilike","chair")] - + product.product @@ -30,11 +30,8 @@ - + diff --git a/product_assortment/static/description/index.html b/product_assortment/static/description/index.html index e12b3d47927..e0d9c8a8ac5 100644 --- a/product_assortment/static/description/index.html +++ b/product_assortment/static/description/index.html @@ -420,25 +420,25 @@

    10.0.1.0.0 (2018-08-27)

    -

    12.0.1.0.0 (2019-06-03)

    +

    12.0.1.0.0 (2019-06-03)

    • [12.0][MIG] productassortment
    -

    14.0.1.0.0 (2019-06-03)

    +

    14.0.1.0.0 (2019-06-03)

    • [14.0][MIG] productassortment
    -

    16.0.1.0.0 (2022-09-15)

    +

    16.0.1.0.0 (2022-09-15)

    • [16.0][MIG] product_assortment
    -

    18.0.1.0.0 (2025-03-06)

    +

    18.0.1.0.0 (2025-03-06)

    • [18.0][MIG] product_assortment
    • Forward port demo data
    • @@ -447,9 +447,9 @@

      10.0.1.0.0 (2018-08-27)

      partner is duplicated
    • Adjust test code to new API behavior, for info: odoo/odoo@450f5c9
    • added test for combined black list and whitelisted product
    • -
    • Fix: Navigating to the product assortment using the smartbutton on -the partner does not show all applicable assortments. (The -assortments with the partner defined as a domain where missing.)
    • +
    • Fix: Navigating to the product assortment using the smartbutton on the +partner does not show all applicable assortments. (The assortments +with the partner defined as a domain where missing.)