From 8b8d7d87f952eeeca50e22a4a250269a40b90e1d Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Wed, 15 Sep 2021 16:00:38 +0200 Subject: [PATCH 0001/1692] [ADD] product_uom_measure_type module --- product_uom_measure_type/README.rst | 4 ++++ product_uom_measure_type/__init__.py | 2 ++ product_uom_measure_type/__manifest__.py | 21 +++++++++++++++++++ product_uom_measure_type/hooks.py | 21 +++++++++++++++++++ product_uom_measure_type/models/__init__.py | 1 + .../models/product_template.py | 13 ++++++++++++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 3 +++ product_uom_measure_type/readme/ROADMAP.rst | 2 ++ .../views/view_product_template.xml | 19 +++++++++++++++++ 10 files changed, 87 insertions(+) create mode 100644 product_uom_measure_type/README.rst create mode 100644 product_uom_measure_type/__init__.py create mode 100644 product_uom_measure_type/__manifest__.py create mode 100644 product_uom_measure_type/hooks.py create mode 100644 product_uom_measure_type/models/__init__.py create mode 100644 product_uom_measure_type/models/product_template.py create mode 100644 product_uom_measure_type/readme/CONTRIBUTORS.rst create mode 100644 product_uom_measure_type/readme/DESCRIPTION.rst create mode 100644 product_uom_measure_type/readme/ROADMAP.rst create mode 100644 product_uom_measure_type/views/view_product_template.xml diff --git a/product_uom_measure_type/README.rst b/product_uom_measure_type/README.rst new file mode 100644 index 00000000000..b97c09176ff --- /dev/null +++ b/product_uom_measure_type/README.rst @@ -0,0 +1,4 @@ +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/product_uom_measure_type/__init__.py b/product_uom_measure_type/__init__.py new file mode 100644 index 00000000000..6d58305f5dd --- /dev/null +++ b/product_uom_measure_type/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import pre_init_hook diff --git a/product_uom_measure_type/__manifest__.py b/product_uom_measure_type/__manifest__.py new file mode 100644 index 00000000000..dbfef196ccd --- /dev/null +++ b/product_uom_measure_type/__manifest__.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). + +{ + "name": "Product - UoM Measure Type", + "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_template.xml", + ], + "pre_init_hook": "pre_init_hook", + "installable": True, +} diff --git a/product_uom_measure_type/hooks.py b/product_uom_measure_type/hooks.py new file mode 100644 index 00000000000..0db817c4cdb --- /dev/null +++ b/product_uom_measure_type/hooks.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). + + +def pre_init_hook(cr): + """Quick populate new product.template field 'uom_measure_type' + to avoid slowness if this is done by the ORM, in the case of + installation of this module on a large database. + """ + + cr.execute(""" + ALTER TABLE product_template + ADD column uom_measure_type character varying; + """) + cr.execute(""" + UPDATE product_template + SET uom_measure_type = uom_uom.measure_type + FROM uom_uom + WHERE uom_uom.id = product_template.uom_id + """) diff --git a/product_uom_measure_type/models/__init__.py b/product_uom_measure_type/models/__init__.py new file mode 100644 index 00000000000..e8fa8f6bf1e --- /dev/null +++ b/product_uom_measure_type/models/__init__.py @@ -0,0 +1 @@ +from . import product_template diff --git a/product_uom_measure_type/models/product_template.py b/product_uom_measure_type/models/product_template.py new file mode 100644 index 00000000000..58ab384a6ea --- /dev/null +++ b/product_uom_measure_type/models/product_template.py @@ -0,0 +1,13 @@ +# 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 + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + uom_measure_type = fields.Selection( + string="UoM Measure Type", + related="uom_id.measure_type", store=True, readonly=True) diff --git a/product_uom_measure_type/readme/CONTRIBUTORS.rst b/product_uom_measure_type/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..e1525ce042b --- /dev/null +++ b/product_uom_measure_type/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) diff --git a/product_uom_measure_type/readme/DESCRIPTION.rst b/product_uom_measure_type/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..636e3f1ca18 --- /dev/null +++ b/product_uom_measure_type/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module add a simple related field ``uom_measure_type`` that is related to the field +``measure_type`` of the uom category of the main uom of the product. +It is a technical module that doesn't add any feature by itself. diff --git a/product_uom_measure_type/readme/ROADMAP.rst b/product_uom_measure_type/readme/ROADMAP.rst new file mode 100644 index 00000000000..b1e1534ead6 --- /dev/null +++ b/product_uom_measure_type/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +* For V14+, the field ``measure_type`` has been removed from odoo product module. + so when porting this module, we should add again this removed field on ``uom.category`` model. diff --git a/product_uom_measure_type/views/view_product_template.xml b/product_uom_measure_type/views/view_product_template.xml new file mode 100644 index 00000000000..4ebde70a0e1 --- /dev/null +++ b/product_uom_measure_type/views/view_product_template.xml @@ -0,0 +1,19 @@ + + + + + + product.template + + + + + + + + + From c96cfb77b859cb535bd958128ffde4ed620776f2 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 5 Nov 2021 21:50:28 +0000 Subject: [PATCH 0002/1692] [UPD] Update product_uom_measure_type.pot --- .../i18n/product_uom_measure_type.pot | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 product_uom_measure_type/i18n/product_uom_measure_type.pot diff --git a/product_uom_measure_type/i18n/product_uom_measure_type.pot b/product_uom_measure_type/i18n/product_uom_measure_type.pot new file mode 100644 index 00000000000..8d8ba2d58c7 --- /dev/null +++ b/product_uom_measure_type/i18n/product_uom_measure_type.pot @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_uom_measure_type +# +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_uom_measure_type +#: model:ir.model,name:product_uom_measure_type.model_product_template +msgid "Product Template" +msgstr "" + +#. module: product_uom_measure_type +#: model:ir.model.fields,field_description:product_uom_measure_type.field_product_product__uom_measure_type +#: model:ir.model.fields,field_description:product_uom_measure_type.field_product_template__uom_measure_type +msgid "UoM Measure Type" +msgstr "" + From f5e26081ab6ef4169bead473287f3c6342cdc3c4 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 5 Nov 2021 22:25:53 +0000 Subject: [PATCH 0003/1692] [UPD] README.rst --- product_uom_measure_type/README.rst | 85 ++++ .../static/description/index.html | 431 ++++++++++++++++++ 2 files changed, 516 insertions(+) create mode 100644 product_uom_measure_type/static/description/index.html diff --git a/product_uom_measure_type/README.rst b/product_uom_measure_type/README.rst index b97c09176ff..c167a34f171 100644 --- a/product_uom_measure_type/README.rst +++ b/product_uom_measure_type/README.rst @@ -1,4 +1,89 @@ +========================== +Product - UoM Measure Type +========================== + .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! 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_uom_measure_type + :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_uom_measure_type + :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 add a simple related field ``uom_measure_type`` that is related to the field +``measure_type`` of the uom category of the main uom of the product. +It is a technical module that doesn't add any feature by itself. + +**Table of contents** + +.. contents:: + :local: + +Known issues / Roadmap +====================== + +* For V14+, the field ``measure_type`` has been removed from odoo product module. + so when porting this module, we should add again this removed field on ``uom.category`` model. + +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_uom_measure_type/static/description/index.html b/product_uom_measure_type/static/description/index.html new file mode 100644 index 00000000000..2bac0941730 --- /dev/null +++ b/product_uom_measure_type/static/description/index.html @@ -0,0 +1,431 @@ + + + + + + +Product - UoM Measure Type + + + +
+

Product - UoM Measure Type

+ + +

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

+

This module add a simple related field uom_measure_type that is related to the field +measure_type of the uom category of the main uom of the product. +It is a technical module that doesn’t add any feature by itself.

+

Table of contents

+ +
+

Known issues / Roadmap

+
    +
  • For V14+, the field measure_type has been removed from odoo product module. +so when porting this module, we should add again this removed field on uom.category model.
  • +
+
+
+

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.

+
+
+
+ + From a08ee0f73aac9d4c0c6bad2a4f6c46e62587bb45 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 5 Nov 2021 22:25:53 +0000 Subject: [PATCH 0004/1692] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 product_uom_measure_type/static/description/icon.png diff --git a/product_uom_measure_type/static/description/icon.png b/product_uom_measure_type/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 5d65a2688e8dd811be5ce68b89986e52c9f60e60 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Wed, 9 Nov 2022 00:18:14 +0100 Subject: [PATCH 0005/1692] [IMP] product_uom_measure_type: black, isort, prettier --- product_uom_measure_type/hooks.py | 12 ++++++++---- product_uom_measure_type/models/product_template.py | 5 ++++- .../views/view_product_template.xml | 4 ++-- .../odoo/addons/product_uom_measure_type | 1 + setup/product_uom_measure_type/setup.py | 6 ++++++ 5 files changed, 21 insertions(+), 7 deletions(-) create mode 120000 setup/product_uom_measure_type/odoo/addons/product_uom_measure_type create mode 100644 setup/product_uom_measure_type/setup.py diff --git a/product_uom_measure_type/hooks.py b/product_uom_measure_type/hooks.py index 0db817c4cdb..ffe6f4dabf3 100644 --- a/product_uom_measure_type/hooks.py +++ b/product_uom_measure_type/hooks.py @@ -9,13 +9,17 @@ def pre_init_hook(cr): installation of this module on a large database. """ - cr.execute(""" + cr.execute( + """ ALTER TABLE product_template ADD column uom_measure_type character varying; - """) - cr.execute(""" + """ + ) + cr.execute( + """ UPDATE product_template SET uom_measure_type = uom_uom.measure_type FROM uom_uom WHERE uom_uom.id = product_template.uom_id - """) + """ + ) diff --git a/product_uom_measure_type/models/product_template.py b/product_uom_measure_type/models/product_template.py index 58ab384a6ea..c043ff66cf0 100644 --- a/product_uom_measure_type/models/product_template.py +++ b/product_uom_measure_type/models/product_template.py @@ -10,4 +10,7 @@ class ProductTemplate(models.Model): uom_measure_type = fields.Selection( string="UoM Measure Type", - related="uom_id.measure_type", store=True, readonly=True) + related="uom_id.measure_type", + store=True, + readonly=True, + ) diff --git a/product_uom_measure_type/views/view_product_template.xml b/product_uom_measure_type/views/view_product_template.xml index 4ebde70a0e1..7cd9a8d7eda 100644 --- a/product_uom_measure_type/views/view_product_template.xml +++ b/product_uom_measure_type/views/view_product_template.xml @@ -1,4 +1,4 @@ - + + + + + uom.category + + + + + + + + + diff --git a/product_uom_measure_type/views/view_uom_uom.xml b/product_uom_measure_type/views/view_uom_uom.xml new file mode 100644 index 00000000000..3e88e4d3e21 --- /dev/null +++ b/product_uom_measure_type/views/view_uom_uom.xml @@ -0,0 +1,19 @@ + + + + + + uom.uom + + + + + + + + + From acfce3cbe8e463ed080b483b00058941e533cada Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Wed, 30 Nov 2022 10:35:27 +0100 Subject: [PATCH 0007/1692] [IMP] product_packaging_dimension: Improve view in order to easy inheritance --- product_packaging_dimension/README.rst | 1 + .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 3 +- .../views/product_packaging.xml | 36 ++++++++++++------- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/product_packaging_dimension/README.rst b/product_packaging_dimension/README.rst index 2c723723845..223169e62b0 100644 --- a/product_packaging_dimension/README.rst +++ b/product_packaging_dimension/README.rst @@ -64,6 +64,7 @@ Contributors * Akim Juillerat * Kévin Roche * Fernando La Chica +* Denis Roussel Maintainers ~~~~~~~~~~~ diff --git a/product_packaging_dimension/readme/CONTRIBUTORS.rst b/product_packaging_dimension/readme/CONTRIBUTORS.rst index e8de7e6a166..02e7277fb98 100644 --- a/product_packaging_dimension/readme/CONTRIBUTORS.rst +++ b/product_packaging_dimension/readme/CONTRIBUTORS.rst @@ -2,3 +2,4 @@ * Akim Juillerat * Kévin Roche * Fernando La Chica +* Denis Roussel diff --git a/product_packaging_dimension/static/description/index.html b/product_packaging_dimension/static/description/index.html index 41ce44fa69e..90ce084ac90 100644 --- a/product_packaging_dimension/static/description/index.html +++ b/product_packaging_dimension/static/description/index.html @@ -3,7 +3,7 @@ - + Product Packaging Dimension + + +
+

Sale Product Template Tags

+ + +

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

+

Shows the Product Tags menu in Sales app

+

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

+
    +
  • Camptocamp SA
  • +
+
+
+

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:

+

ivantodorovich

+

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 4c731ef88db537e690c3834443bde2318b0755cf Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 16 Jul 2021 08:39:12 +0000 Subject: [PATCH 0011/1692] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 sale_product_template_tags/static/description/icon.png diff --git a/sale_product_template_tags/static/description/icon.png b/sale_product_template_tags/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 7313843e5c2e6f6bf4710a68d1300df8c3b55bb2 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 16 Jul 2021 08:39:15 +0000 Subject: [PATCH 0012/1692] sale_product_template_tags 14.0.1.1.0 --- sale_product_template_tags/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sale_product_template_tags/__manifest__.py b/sale_product_template_tags/__manifest__.py index 81dea4f0f97..38885965cc0 100644 --- a/sale_product_template_tags/__manifest__.py +++ b/sale_product_template_tags/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Sale Product Template Tags", "summary": "Show product tags menu in Sale app", - "version": "14.0.1.0.0", + "version": "14.0.1.1.0", "license": "AGPL-3", "author": "Camptocamp SA, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", From 034a114ba74cb6d86963ecf0c0eaee1e4cd57af0 Mon Sep 17 00:00:00 2001 From: Francesco Foresti Date: Tue, 25 Jan 2022 09:36:15 +0000 Subject: [PATCH 0013/1692] Added translation using Weblate (Italian) --- sale_product_template_tags/i18n/it.po | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 sale_product_template_tags/i18n/it.po diff --git a/sale_product_template_tags/i18n/it.po b/sale_product_template_tags/i18n/it.po new file mode 100644 index 00000000000..775ec28a92c --- /dev/null +++ b/sale_product_template_tags/i18n/it.po @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_template_tags +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: sale_product_template_tags +#: model:ir.ui.menu,name:sale_product_template_tags.menu_product_template_tag +msgid "Tags" +msgstr "" From bdc97f3fbf40a32b23e5c1ab1cd7d4a6fb977a63 Mon Sep 17 00:00:00 2001 From: Francesco Foresti Date: Tue, 25 Jan 2022 09:36:26 +0000 Subject: [PATCH 0014/1692] Translated using Weblate (Italian) Currently translated at 100.0% (1 of 1 strings) Translation: product-attribute-14.0/product-attribute-14.0-sale_product_template_tags Translate-URL: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-sale_product_template_tags/it/ --- sale_product_template_tags/i18n/it.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sale_product_template_tags/i18n/it.po b/sale_product_template_tags/i18n/it.po index 775ec28a92c..d9012470e28 100644 --- a/sale_product_template_tags/i18n/it.po +++ b/sale_product_template_tags/i18n/it.po @@ -6,15 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2022-01-25 11:40+0000\n" +"Last-Translator: Francesco Foresti \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.3.2\n" #. module: sale_product_template_tags #: model:ir.ui.menu,name:sale_product_template_tags.menu_product_template_tag msgid "Tags" -msgstr "" +msgstr "Tags" From 51cf80e46b6b405afcf31568a34b6dd7a466ef5b Mon Sep 17 00:00:00 2001 From: David Montull Date: Tue, 8 Mar 2022 08:25:49 +0100 Subject: [PATCH 0015/1692] [15.0][MIG] sale_product_template_tags: Migration to 15.0 --- sale_product_template_tags/__manifest__.py | 2 +- sale_product_template_tags/readme/CONTRIBUTORS.rst | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sale_product_template_tags/__manifest__.py b/sale_product_template_tags/__manifest__.py index 38885965cc0..f8b923dcc81 100644 --- a/sale_product_template_tags/__manifest__.py +++ b/sale_product_template_tags/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Sale Product Template Tags", "summary": "Show product tags menu in Sale app", - "version": "14.0.1.1.0", + "version": "15.0.1.0.0", "license": "AGPL-3", "author": "Camptocamp SA, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", diff --git a/sale_product_template_tags/readme/CONTRIBUTORS.rst b/sale_product_template_tags/readme/CONTRIBUTORS.rst index 902e23b0459..33633e7d2b1 100644 --- a/sale_product_template_tags/readme/CONTRIBUTORS.rst +++ b/sale_product_template_tags/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * `Camptocamp `_ * Iván Todorovich +* David Montull Guasch From 9077316f420127beed56647377cbf4bb9d601b0d Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 10 Mar 2022 07:40:53 +0000 Subject: [PATCH 0016/1692] [UPD] Update sale_product_template_tags.pot --- sale_product_template_tags/i18n/sale_product_template_tags.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sale_product_template_tags/i18n/sale_product_template_tags.pot b/sale_product_template_tags/i18n/sale_product_template_tags.pot index 1c32f556d09..1951e9c2e07 100644 --- a/sale_product_template_tags/i18n/sale_product_template_tags.pot +++ b/sale_product_template_tags/i18n/sale_product_template_tags.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" From 9a1f78e6c88f8f80500447cad324ed4a297c81ee Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 10 Mar 2022 07:43:34 +0000 Subject: [PATCH 0017/1692] [UPD] README.rst --- sale_product_template_tags/README.rst | 11 ++++++----- .../static/description/index.html | 7 ++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/sale_product_template_tags/README.rst b/sale_product_template_tags/README.rst index f3c0018015d..a56efd59ef9 100644 --- a/sale_product_template_tags/README.rst +++ b/sale_product_template_tags/README.rst @@ -14,13 +14,13 @@ Sale Product Template Tags :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/sale_product_template_tags + :target: https://github.com/OCA/product-attribute/tree/15.0/sale_product_template_tags :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-sale_product_template_tags + :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-sale_product_template_tags :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. @@ -56,6 +56,7 @@ Contributors * `Camptocamp `_ * Iván Todorovich +* David Montull Guasch Maintainers ~~~~~~~~~~~ @@ -78,6 +79,6 @@ Current `maintainer `__: |maintainer-ivantodorovich| -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/sale_product_template_tags/static/description/index.html b/sale_product_template_tags/static/description/index.html index c8299e16486..c3892a7a6d6 100644 --- a/sale_product_template_tags/static/description/index.html +++ b/sale_product_template_tags/static/description/index.html @@ -367,7 +367,7 @@

Sale Product Template Tags

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

Shows the Product Tags menu in Sales app

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.

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

Contributors

  • Iván Todorovich <ivan.todorovich@gmail.com>
  • +
  • David Montull Guasch <david.montull@bt-group.com>
  • @@ -415,7 +416,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    ivantodorovich

    -

    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 1758ccbb907f49ade2fc17f2ce4679058449518f Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 10 Mar 2022 07:43:35 +0000 Subject: [PATCH 0018/1692] sale_product_template_tags 15.0.1.0.1 --- sale_product_template_tags/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sale_product_template_tags/__manifest__.py b/sale_product_template_tags/__manifest__.py index f8b923dcc81..3904407f128 100644 --- a/sale_product_template_tags/__manifest__.py +++ b/sale_product_template_tags/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Sale Product Template Tags", "summary": "Show product tags menu in Sale app", - "version": "15.0.1.0.0", + "version": "15.0.1.0.1", "license": "AGPL-3", "author": "Camptocamp SA, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", From 257e43678497dadd4ccc77ac63eff43de1853795 Mon Sep 17 00:00:00 2001 From: pablontura Date: Fri, 22 Apr 2022 07:47:54 +0000 Subject: [PATCH 0019/1692] Added translation using Weblate (Catalan) --- sale_product_template_tags/i18n/ca.po | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 sale_product_template_tags/i18n/ca.po diff --git a/sale_product_template_tags/i18n/ca.po b/sale_product_template_tags/i18n/ca.po new file mode 100644 index 00000000000..9499ac3f092 --- /dev/null +++ b/sale_product_template_tags/i18n/ca.po @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_template_tags +# +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: 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" + +#. module: sale_product_template_tags +#: model:ir.ui.menu,name:sale_product_template_tags.menu_product_template_tag +msgid "Tags" +msgstr "" From 4a4525b0d746a2fb220f758803709fa4e8cb3963 Mon Sep 17 00:00:00 2001 From: pablontura Date: Fri, 22 Apr 2022 08:01:45 +0000 Subject: [PATCH 0020/1692] Translated using Weblate (Catalan) Currently translated at 100.0% (1 of 1 strings) Translation: product-attribute-15.0/product-attribute-15.0-sale_product_template_tags Translate-URL: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-sale_product_template_tags/ca/ --- sale_product_template_tags/i18n/ca.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sale_product_template_tags/i18n/ca.po b/sale_product_template_tags/i18n/ca.po index 9499ac3f092..39c696325b2 100644 --- a/sale_product_template_tags/i18n/ca.po +++ b/sale_product_template_tags/i18n/ca.po @@ -6,15 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\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: sale_product_template_tags #: model:ir.ui.menu,name:sale_product_template_tags.menu_product_template_tag msgid "Tags" -msgstr "" +msgstr "Etiquetes" From 578a4d2a99b10264ae2ed47191a9606f14450ca2 Mon Sep 17 00:00:00 2001 From: Pedro Castro Silva Date: Wed, 9 Nov 2022 22:26:00 +0000 Subject: [PATCH 0021/1692] Added translation using Weblate (Portuguese) --- sale_product_template_tags/i18n/pt.po | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 sale_product_template_tags/i18n/pt.po diff --git a/sale_product_template_tags/i18n/pt.po b/sale_product_template_tags/i18n/pt.po new file mode 100644 index 00000000000..72904e49a3d --- /dev/null +++ b/sale_product_template_tags/i18n/pt.po @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_template_tags +# +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: 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" + +#. module: sale_product_template_tags +#: model:ir.ui.menu,name:sale_product_template_tags.menu_product_template_tag +msgid "Tags" +msgstr "" From ca5077e8d344b9edbbf96b10b856d1fc5fcef6d5 Mon Sep 17 00:00:00 2001 From: Pedro Castro Silva Date: Wed, 9 Nov 2022 22:26:09 +0000 Subject: [PATCH 0022/1692] Translated using Weblate (Portuguese) Currently translated at 100.0% (1 of 1 strings) Translation: product-attribute-15.0/product-attribute-15.0-sale_product_template_tags Translate-URL: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-sale_product_template_tags/pt/ --- sale_product_template_tags/i18n/pt.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sale_product_template_tags/i18n/pt.po b/sale_product_template_tags/i18n/pt.po index 72904e49a3d..b0c17bca34f 100644 --- a/sale_product_template_tags/i18n/pt.po +++ b/sale_product_template_tags/i18n/pt.po @@ -6,15 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2022-11-10 00:48+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.14.1\n" #. module: sale_product_template_tags #: model:ir.ui.menu,name:sale_product_template_tags.menu_product_template_tag msgid "Tags" -msgstr "" +msgstr "Etiquetas" From 7ba7c234e5e279f7f7334d77ed115f94a9b6fa6b Mon Sep 17 00:00:00 2001 From: Mohammad Azeem Date: Fri, 2 Dec 2022 12:07:04 +0530 Subject: [PATCH 0023/1692] [IMP] sale_product_template_tags: pre-commit stuff --- .../odoo/addons/sale_product_template_tags | 1 + setup/sale_product_template_tags/setup.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 120000 setup/sale_product_template_tags/odoo/addons/sale_product_template_tags create mode 100644 setup/sale_product_template_tags/setup.py diff --git a/setup/sale_product_template_tags/odoo/addons/sale_product_template_tags b/setup/sale_product_template_tags/odoo/addons/sale_product_template_tags new file mode 120000 index 00000000000..0b17ba2730c --- /dev/null +++ b/setup/sale_product_template_tags/odoo/addons/sale_product_template_tags @@ -0,0 +1 @@ +../../../../sale_product_template_tags \ No newline at end of file diff --git a/setup/sale_product_template_tags/setup.py b/setup/sale_product_template_tags/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/sale_product_template_tags/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 66323ff7c5e962b3cfc2c9ae475c86bcd587259d Mon Sep 17 00:00:00 2001 From: Mohammad Azeem Date: Fri, 2 Dec 2022 17:16:11 +0530 Subject: [PATCH 0024/1692] [MIG] sale_product_template_tags: Migration to 16.0 --- sale_product_template_tags/__manifest__.py | 4 ++-- sale_product_template_tags/views/product_template_tag.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sale_product_template_tags/__manifest__.py b/sale_product_template_tags/__manifest__.py index 3904407f128..bdb5aed5765 100644 --- a/sale_product_template_tags/__manifest__.py +++ b/sale_product_template_tags/__manifest__.py @@ -5,11 +5,11 @@ { "name": "Sale Product Template Tags", "summary": "Show product tags menu in Sale app", - "version": "15.0.1.0.1", + "version": "16.0.1.0.0", "license": "AGPL-3", "author": "Camptocamp SA, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", - "depends": ["product_template_tags", "sale"], + "depends": ["sale"], "data": ["views/product_template_tag.xml"], "maintainers": ["ivantodorovich"], "auto_install": True, diff --git a/sale_product_template_tags/views/product_template_tag.xml b/sale_product_template_tags/views/product_template_tag.xml index a2f63e8e274..75d49932f05 100644 --- a/sale_product_template_tags/views/product_template_tag.xml +++ b/sale_product_template_tags/views/product_template_tag.xml @@ -10,7 +10,7 @@ id="menu_product_template_tag" name="Tags" parent="sale.prod_config_main" - action="product_template_tags.product_template_tag_act_window" + action="product.product_tag_action" sequence="10" /> From cf01cf44815568877febb001b9651fa7d266feb3 Mon Sep 17 00:00:00 2001 From: oihane Date: Thu, 18 Sep 2014 10:49:56 +0200 Subject: [PATCH 0025/1692] --- product_supplierinfo_for_customer/__init__.py | 19 +++ .../__openerp__.py | 41 +++++++ product_supplierinfo_for_customer/i18n/es.po | 57 +++++++++ .../product_supplierinfo_for_customer.pot | 57 +++++++++ .../models/__init__.py | 21 ++++ .../models/product_supplierinfo.py | 36 ++++++ .../models/product_template.py | 32 +++++ .../models/res_partner.py | 34 ++++++ .../views/product_view.xml | 113 ++++++++++++++++++ 9 files changed, 410 insertions(+) create mode 100644 product_supplierinfo_for_customer/__init__.py create mode 100644 product_supplierinfo_for_customer/__openerp__.py create mode 100644 product_supplierinfo_for_customer/i18n/es.po create mode 100644 product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot create mode 100644 product_supplierinfo_for_customer/models/__init__.py create mode 100644 product_supplierinfo_for_customer/models/product_supplierinfo.py create mode 100644 product_supplierinfo_for_customer/models/product_template.py create mode 100644 product_supplierinfo_for_customer/models/res_partner.py create mode 100644 product_supplierinfo_for_customer/views/product_view.xml diff --git a/product_supplierinfo_for_customer/__init__.py b/product_supplierinfo_for_customer/__init__.py new file mode 100644 index 00000000000..7fc7c09f9b0 --- /dev/null +++ b/product_supplierinfo_for_customer/__init__.py @@ -0,0 +1,19 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +############################################################################## + +from . import models diff --git a/product_supplierinfo_for_customer/__openerp__.py b/product_supplierinfo_for_customer/__openerp__.py new file mode 100644 index 00000000000..2fc53288647 --- /dev/null +++ b/product_supplierinfo_for_customer/__openerp__.py @@ -0,0 +1,41 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +############################################################################## + +{ + "name": "Use product supplier info for customers too", + "version": "1.0", + "depends": [ + "base", + "product", + ], + "author": "OdooMRP team", + "contributors": [ + "Oihane Crucelaegui ", + ], + "category": "Sales Management", + "website": "http://www.odoomrp.com", + "summary": "", + "description": """ +This module extends product.supplierinfo object with a combo to allow using +it for sale pricelists + """, + "data": [ + "views/product_view.xml", + ], + "installable": True, +} diff --git a/product_supplierinfo_for_customer/i18n/es.po b/product_supplierinfo_for_customer/i18n/es.po new file mode 100644 index 00000000000..1b8f413639d --- /dev/null +++ b/product_supplierinfo_for_customer/i18n/es.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_supplierinfo_for_customer +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0rc1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-05 11:46+0000\n" +"PO-Revision-Date: 2014-09-05 11:46+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: \n" + +#. module: product_supplierinfo_for_customer +#: selection:product.supplierinfo,type:0 +msgid "Customer" +msgstr "Cliente" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "Customers" +msgstr "Clientes" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Información de un proveedor de producto" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_template +msgid "Product Template" +msgstr "Plantilla de producto" + +#. module: product_supplierinfo_for_customer +#: selection:product.supplierinfo,type:0 +msgid "Supplier" +msgstr "Proveedor" + +#. module: product_supplierinfo_for_customer +#: field:product.supplierinfo,type:0 +msgid "Type" +msgstr "Tipo" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "[('type','=','supplier')]" +msgstr "[('type','=','supplier')]" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "{'default_search_type':'supplier','default_type':'supplier'}" +msgstr "{'default_search_type':'supplier','default_type':'supplier'}" + diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot new file mode 100644 index 00000000000..a48ab71467d --- /dev/null +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_supplierinfo_for_customer +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0rc1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-05 11:46+0000\n" +"PO-Revision-Date: 2014-09-05 11:46+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: \n" + +#. module: product_supplierinfo_for_customer +#: selection:product.supplierinfo,type:0 +msgid "Customer" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "Customers" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_template +msgid "Product Template" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: selection:product.supplierinfo,type:0 +msgid "Supplier" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: field:product.supplierinfo,type:0 +msgid "Type" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "[('type','=','supplier')]" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "{'default_search_type':'supplier','default_type':'supplier'}" +msgstr "" + diff --git a/product_supplierinfo_for_customer/models/__init__.py b/product_supplierinfo_for_customer/models/__init__.py new file mode 100644 index 00000000000..67021782557 --- /dev/null +++ b/product_supplierinfo_for_customer/models/__init__.py @@ -0,0 +1,21 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +############################################################################## + +from . import product_supplierinfo +from . import product_template +from . import res_partner diff --git a/product_supplierinfo_for_customer/models/product_supplierinfo.py b/product_supplierinfo_for_customer/models/product_supplierinfo.py new file mode 100644 index 00000000000..8d9f5f6538a --- /dev/null +++ b/product_supplierinfo_for_customer/models/product_supplierinfo.py @@ -0,0 +1,36 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +############################################################################## + +from openerp import models, fields, api + + +class ProductSupplierinfo(models.Model): + _inherit = 'product.supplierinfo' + + type = fields.Selection([('customer', 'Customer'), + ('supplier', 'Supplier')], string='Type', + default='supplier') + + @api.multi + @api.onchange('type') + def onchange_type(self): + if self.type == 'supplier': + return {'domain': {'name': [('supplier', '=', True)]}} + elif self.type == 'customer': + return {'domain': {'name': [('customer', '=', True)]}} + return {'domain': {'name': []}} diff --git a/product_supplierinfo_for_customer/models/product_template.py b/product_supplierinfo_for_customer/models/product_template.py new file mode 100644 index 00000000000..1c9fd3749d1 --- /dev/null +++ b/product_supplierinfo_for_customer/models/product_template.py @@ -0,0 +1,32 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +############################################################################## + +from openerp import models, fields + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + customer_ids = fields.One2many(comodel_name='product.supplierinfo', + inverse_name='product_tmpl_id', + string='Customer', + domain=[('type', '=', 'customer')]) + supplier_ids = fields.One2many(comodel_name='product.supplierinfo', + inverse_name='product_tmpl_id', + string='Supplier', + domain=[('type', '=', 'supplier')]) diff --git a/product_supplierinfo_for_customer/models/res_partner.py b/product_supplierinfo_for_customer/models/res_partner.py new file mode 100644 index 00000000000..97d8bb467a8 --- /dev/null +++ b/product_supplierinfo_for_customer/models/res_partner.py @@ -0,0 +1,34 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +############################################################################## + +from openerp import models, api + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + @api.model + def default_get(self, fields): + res = super(ResPartner, self).default_get(fields) + select_type = self.env.context.get('select_type', False) + if select_type: + res.update({ + 'customer': select_type == 'customer', + 'supplier': select_type == 'supplier', + }) + return res diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml new file mode 100644 index 00000000000..ca1f111fac5 --- /dev/null +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -0,0 +1,113 @@ + + + + + + product.supplierinfo.extended.form + product.supplierinfo + + + + Partner + {'select_type': type} + + + Partner Product Name + + + Partner Product Code + + + Partner Unit of Measure + + + + + + + + + product.supplierinfo.extended.tree + product.supplierinfo + + + + + + + Partner + + + + + + product.template.extended.form + product.template + + + + {'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id} + [('type','=','supplier')] + 1 + + + + + + + + + + + + + + product.supplierinfo.search + product.supplierinfo + + + + + + + + + + + + + + + + + + Information about a product + ir.actions.act_window + product.supplierinfo + tree,form + form + + [] + { + 'search_default_is_customer_filter': 1 + } + + +

    + Click to define a new product.supplierinfo. +

    +
    +
    + + + +
    +
    From 5e8f5f1ef7921a4fa91230dc541d4ce2671f1b8b Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 5 Feb 2015 17:30:02 +0100 Subject: [PATCH 0026/1692] product_supplierinfo_for_customer: Views and documentation --- product_supplierinfo_for_customer/README.rst | 19 +++++ .../__openerp__.py | 7 -- product_supplierinfo_for_customer/i18n/es.po | 71 +++++++++++++++---- .../product_supplierinfo_for_customer.pot | 67 +++++++++++++---- .../views/product_view.xml | 31 ++++---- 5 files changed, 147 insertions(+), 48 deletions(-) create mode 100644 product_supplierinfo_for_customer/README.rst diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst new file mode 100644 index 00000000000..35c4a20fab6 --- /dev/null +++ b/product_supplierinfo_for_customer/README.rst @@ -0,0 +1,19 @@ +Use product supplier info also for customers +============================================ + +This modules allows to use supplier info, available in _Procurements_ tab +from the product, also for customers, allowing to define prices per +customer and product. + +For these prices to be used in sale prices calculations, you will have +to create a pricelist with a rule with option "Based on" is "Supplier prices +on the product form" (although the text is not clear enough). + +Credits +======= + +Contributors +------------ +* Oihane Crucelaegui +* Pedro M. Baeza + diff --git a/product_supplierinfo_for_customer/__openerp__.py b/product_supplierinfo_for_customer/__openerp__.py index 2fc53288647..33cef3643c3 100644 --- a/product_supplierinfo_for_customer/__openerp__.py +++ b/product_supplierinfo_for_customer/__openerp__.py @@ -24,16 +24,9 @@ "product", ], "author": "OdooMRP team", - "contributors": [ - "Oihane Crucelaegui ", - ], "category": "Sales Management", "website": "http://www.odoomrp.com", "summary": "", - "description": """ -This module extends product.supplierinfo object with a combo to allow using -it for sale pricelists - """, "data": [ "views/product_view.xml", ], diff --git a/product_supplierinfo_for_customer/i18n/es.po b/product_supplierinfo_for_customer/i18n/es.po index 1b8f413639d..df5232cbaa4 100644 --- a/product_supplierinfo_for_customer/i18n/es.po +++ b/product_supplierinfo_for_customer/i18n/es.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0rc1\n" +"Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-05 11:46+0000\n" -"PO-Revision-Date: 2014-09-05 11:46+0000\n" +"POT-Creation-Date: 2015-02-05 14:08+0000\n" +"PO-Revision-Date: 2015-02-05 14:08+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,19 @@ msgstr "" "Plural-Forms: \n" #. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action +msgid "

    \n" +" Click to define a new product.supplierinfo.\n" +"

    \n" +" " +msgstr "

    \n" +"Pulse para definir una nueva definición de producto-empresa.\n" +"

    \n" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view #: selection:product.supplierinfo,type:0 +#: field:product.template,customer_ids:0 msgid "Customer" msgstr "Cliente" @@ -25,33 +37,66 @@ msgstr "Cliente" msgid "Customers" msgstr "Clientes" +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Group By" +msgstr "Agrupar por" + +#. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action +#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu +msgid "Information about a product" +msgstr "Información sobre un producto" + #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo msgid "Information about a product supplier" msgstr "Información de un proveedor de producto" +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Partner" +msgstr "Empresa" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Code" +msgstr "Código de producto para la empresa" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Name" +msgstr "Nombre de producto para la empresa" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Unit of Measure" +msgstr "Unidad de medida de empresa" + #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Product Template" msgstr "Plantilla de producto" #. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view #: selection:product.supplierinfo,type:0 +#: field:product.template,supplier_ids:0 msgid "Supplier" msgstr "Proveedor" #. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Supplierinfo search" +msgstr "Búsqueda de producto-empresa" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view #: field:product.supplierinfo,type:0 msgid "Type" msgstr "Tipo" -#. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "[('type','=','supplier')]" -msgstr "[('type','=','supplier')]" - -#. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "{'default_search_type':'supplier','default_type':'supplier'}" -msgstr "{'default_search_type':'supplier','default_type':'supplier'}" - diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index a48ab71467d..32dbe81b428 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0rc1\n" +"Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-05 11:46+0000\n" -"PO-Revision-Date: 2014-09-05 11:46+0000\n" +"POT-Creation-Date: 2015-02-05 14:08+0000\n" +"PO-Revision-Date: 2015-02-05 14:08+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,17 @@ msgstr "" "Plural-Forms: \n" #. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action +msgid "

    \n" +" Click to define a new product.supplierinfo.\n" +"

    \n" +" " +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view #: selection:product.supplierinfo,type:0 +#: field:product.template,customer_ids:0 msgid "Customer" msgstr "" @@ -25,33 +35,66 @@ msgstr "" msgid "Customers" msgstr "" +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Group By" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action +#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu +msgid "Information about a product" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo msgid "Information about a product supplier" msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Partner" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Code" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Name" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Unit of Measure" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Product Template" msgstr "" #. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view #: selection:product.supplierinfo,type:0 +#: field:product.template,supplier_ids:0 msgid "Supplier" msgstr "" #. module: product_supplierinfo_for_customer -#: field:product.supplierinfo,type:0 -msgid "Type" +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Supplierinfo search" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "[('type','=','supplier')]" -msgstr "" - -#. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "{'default_search_type':'supplier','default_type':'supplier'}" +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: field:product.supplierinfo,type:0 +msgid "Type" msgstr "" diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index ca1f111fac5..9024a2babf3 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -21,7 +21,7 @@ Partner Unit of Measure - + @@ -31,9 +31,6 @@ product.supplierinfo - - - Partner @@ -51,15 +48,14 @@ 1 - + - + + context="{'default_search_type':'customer','default_type':'customer','default_product_tmpl_id':id}"> @@ -75,13 +71,16 @@ - - + + - + From 184014c900d179d1812208b957e9f29a9605aa51 Mon Sep 17 00:00:00 2001 From: oihane Date: Wed, 11 Feb 2015 13:20:42 +0100 Subject: [PATCH 0027/1692] Related to #638 --- .../views/product_view.xml | 77 +++++++++++++++---- 1 file changed, 60 insertions(+), 17 deletions(-) diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 9024a2babf3..1482579b694 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -21,7 +21,20 @@ Partner Unit of Measure - + + + + + + + product.supplierinfo.template.form + product.supplierinfo + + primary + + + + @@ -37,6 +50,19 @@ + + product.supplierinfo.template.tree + product.supplierinfo + + primary + + + + + + + + product.template.extended.form product.template @@ -49,13 +75,15 @@ + context="{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" + domain="[('type','=','supplier')]" /> - + + context="{'default_search_type':'customer','default_type':'customer','default_product_tmpl_id':id}"> @@ -68,26 +96,25 @@ - - + + - - + + - + - Information about a product + Information about a product (customer) ir.actions.act_window product.supplierinfo tree,form @@ -105,6 +132,22 @@ + + + form + + + + + + + tree + + + + From a8c2f376993a38a9ae4465d8737cc64052935027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matja=C5=BE=20Mozeti=C4=8D?= Date: Sat, 15 Aug 2015 18:53:19 +0200 Subject: [PATCH 0028/1692] Slovene translations of odoomrp modules --- product_supplierinfo_for_customer/i18n/sl.po | 104 +++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 product_supplierinfo_for_customer/i18n/sl.po diff --git a/product_supplierinfo_for_customer/i18n/sl.po b/product_supplierinfo_for_customer/i18n/sl.po new file mode 100644 index 00000000000..e0423baa22e --- /dev/null +++ b/product_supplierinfo_for_customer/i18n/sl.po @@ -0,0 +1,104 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_supplierinfo_for_customer +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-02-05 14:08+0000\n" +"PO-Revision-Date: 2015-08-15 13:06+0200\n" +"Last-Translator: Matjaz Mozetic \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"Language: sl\n" +"X-Generator: Poedit 1.8.4\n" + +#. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action +msgid "" +"

    \n" +" Click to define a new product.supplierinfo.\n" +"

    \n" +" " +msgstr "" +"

    \n" +" Kliknite za nov product.supplierinfo.\n" +"

    \n" +" " + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: selection:product.supplierinfo,type:0 field:product.template,customer_ids:0 +msgid "Customer" +msgstr "Kupec" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "Customers" +msgstr "Kupci" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Group By" +msgstr "Združi po" + +#. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action +#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu +msgid "Information about a product" +msgstr "Podatki o proizvodu" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Podatki o dobavitelju proizvoda" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Partner" +msgstr "Partner" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Code" +msgstr "Partnerjeva koda proizvoda" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Name" +msgstr "Partnerjev naziv proizvoda" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Unit of Measure" +msgstr "Partnerjeva EM" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_template +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Product Template" +msgstr "Predloga proizvoda" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: selection:product.supplierinfo,type:0 field:product.template,supplier_ids:0 +msgid "Supplier" +msgstr "Dobavitelj" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Supplierinfo search" +msgstr "Iskanje podatkov o dobavitelju" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: field:product.supplierinfo,type:0 +msgid "Type" +msgstr "Tip" From 69e008282cbe11cfefb58b91bb331a70f0be2916 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 27 Aug 2015 04:00:40 +0200 Subject: [PATCH 0029/1692] product_supplierinfo_for_customer: Avoid side effects + improve README --- product_supplierinfo_for_customer/README.rst | 37 ++++++++++++++++--- product_supplierinfo_for_customer/__init__.py | 2 +- .../__openerp__.py | 6 ++- .../models/__init__.py | 3 +- .../models/product_pricelist.py | 18 +++++++++ .../models/product_supplierinfo.py | 23 ++++++++++-- .../models/product_template.py | 16 ++++---- .../models/res_partner.py | 2 +- .../views/product_view.xml | 1 + 9 files changed, 85 insertions(+), 23 deletions(-) create mode 100644 product_supplierinfo_for_customer/models/product_pricelist.py diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index 35c4a20fab6..8f1fd69696d 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -1,13 +1,40 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +============================================ Use product supplier info also for customers ============================================ -This modules allows to use supplier info, available in _Procurements_ tab -from the product, also for customers, allowing to define prices per -customer and product. +This modules allows to use supplier info structure, available in +*Procurements* tab of the product form, also for defining customer information, +allowing to define prices per customer and product. + +Configuration +============= For these prices to be used in sale prices calculations, you will have -to create a pricelist with a rule with option "Based on" is "Supplier prices -on the product form" (although the text is not clear enough). +to create a pricelist with a rule with option "Based on" with the value +"Supplier prices on the product form" (although the text is not clear enough). + +Usage +===== + +There's a new section on *Sales* tab of the product form called "Customers", +where you can define records for customers with the same structure of the +suppliers. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/188/8.0 + +Known issues / Roadmap +====================== + +* Product prices through this method are only guaranteed on the standard sale + order workflow. Other custom flows maybe don't reflect the price. +* The product code / product name specified for the customer will not be + reflected on the sale orders. +* The minimum quantity will not also be applied on sale orders. Credits ======= diff --git a/product_supplierinfo_for_customer/__init__.py b/product_supplierinfo_for_customer/__init__.py index 7fc7c09f9b0..a9609aa0b11 100644 --- a/product_supplierinfo_for_customer/__init__.py +++ b/product_supplierinfo_for_customer/__init__.py @@ -1,4 +1,4 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- ############################################################################## # # This program is free software: you can redistribute it and/or modify diff --git a/product_supplierinfo_for_customer/__openerp__.py b/product_supplierinfo_for_customer/__openerp__.py index 33cef3643c3..b9fc4c5384a 100644 --- a/product_supplierinfo_for_customer/__openerp__.py +++ b/product_supplierinfo_for_customer/__openerp__.py @@ -1,4 +1,4 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- ############################################################################## # # This program is free software: you can redistribute it and/or modify @@ -23,7 +23,9 @@ "base", "product", ], - "author": "OdooMRP team", + "author": "OdooMRP team," + "AvanzOSC," + "Serv. Tecnol. Avanzados - Pedro M. Baeza", "category": "Sales Management", "website": "http://www.odoomrp.com", "summary": "", diff --git a/product_supplierinfo_for_customer/models/__init__.py b/product_supplierinfo_for_customer/models/__init__.py index 67021782557..b60c45a6539 100644 --- a/product_supplierinfo_for_customer/models/__init__.py +++ b/product_supplierinfo_for_customer/models/__init__.py @@ -1,4 +1,4 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- ############################################################################## # # This program is free software: you can redistribute it and/or modify @@ -19,3 +19,4 @@ from . import product_supplierinfo from . import product_template from . import res_partner +from . import product_pricelist diff --git a/product_supplierinfo_for_customer/models/product_pricelist.py b/product_supplierinfo_for_customer/models/product_pricelist.py new file mode 100644 index 00000000000..49ee7421be6 --- /dev/null +++ b/product_supplierinfo_for_customer/models/product_pricelist.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# (c) 2015 Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from openerp import models, api + + +class ProductPricelist(models.Model): + _inherit = 'product.pricelist' + + @api.multi + def price_rule_get(self, prod_id, qty, partner=None): + """Pass context if the type of the pricelist is sale for restricting + on the search product.supplierinfo records of type customer.""" + obj = (self.with_context(supplierinfo_type='customer') if + self.type == 'sale' else self) + return super(ProductPricelist, obj).price_rule_get( + prod_id, qty, partner=partner) diff --git a/product_supplierinfo_for_customer/models/product_supplierinfo.py b/product_supplierinfo_for_customer/models/product_supplierinfo.py index 8d9f5f6538a..a957eb839e5 100644 --- a/product_supplierinfo_for_customer/models/product_supplierinfo.py +++ b/product_supplierinfo_for_customer/models/product_supplierinfo.py @@ -1,4 +1,4 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- ############################################################################## # # This program is free software: you can redistribute it and/or modify @@ -22,9 +22,10 @@ class ProductSupplierinfo(models.Model): _inherit = 'product.supplierinfo' - type = fields.Selection([('customer', 'Customer'), - ('supplier', 'Supplier')], string='Type', - default='supplier') + type = fields.Selection( + selection=[('customer', 'Customer'), + ('supplier', 'Supplier')], string='Type', + default='supplier') @api.multi @api.onchange('type') @@ -34,3 +35,17 @@ def onchange_type(self): elif self.type == 'customer': return {'domain': {'name': [('customer', '=', True)]}} return {'domain': {'name': []}} + + def search(self, cr, uid, args, offset=0, limit=None, order=None, + context=None, count=False): + """Add search argument for field type if the context says so. This + should be in old API because context argument is not the last one. + """ + if context is None: + context = {} + if not any(arg[0] == 'type' for arg in args): + args += [('type', '=', + context.get('supplierinfo_type', 'supplier'))] + return super(ProductSupplierinfo, self).search( + cr, uid, args, offset=offset, limit=limit, order=order, + context=context, count=count) diff --git a/product_supplierinfo_for_customer/models/product_template.py b/product_supplierinfo_for_customer/models/product_template.py index 1c9fd3749d1..8e84ddb61b8 100644 --- a/product_supplierinfo_for_customer/models/product_template.py +++ b/product_supplierinfo_for_customer/models/product_template.py @@ -1,4 +1,4 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- ############################################################################## # # This program is free software: you can redistribute it and/or modify @@ -22,11 +22,9 @@ class ProductTemplate(models.Model): _inherit = 'product.template' - customer_ids = fields.One2many(comodel_name='product.supplierinfo', - inverse_name='product_tmpl_id', - string='Customer', - domain=[('type', '=', 'customer')]) - supplier_ids = fields.One2many(comodel_name='product.supplierinfo', - inverse_name='product_tmpl_id', - string='Supplier', - domain=[('type', '=', 'supplier')]) + customer_ids = fields.One2many( + comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', + string='Customer', domain=[('type', '=', 'customer')]) + supplier_ids = fields.One2many( + comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', + string='Supplier', domain=[('type', '=', 'supplier')]) diff --git a/product_supplierinfo_for_customer/models/res_partner.py b/product_supplierinfo_for_customer/models/res_partner.py index 97d8bb467a8..6c7e0303075 100644 --- a/product_supplierinfo_for_customer/models/res_partner.py +++ b/product_supplierinfo_for_customer/models/res_partner.py @@ -1,4 +1,4 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- ############################################################################## # # This program is free software: you can redistribute it and/or modify diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 1482579b694..30f841710c1 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -114,6 +114,7 @@ + Information about a product (customer) Information about a product (customer) ir.actions.act_window product.supplierinfo From b18a9545927dfd7308df394725756c11eb740a4f Mon Sep 17 00:00:00 2001 From: oihane Date: Thu, 3 Sep 2015 15:45:54 +0200 Subject: [PATCH 0030/1692] Create 'customer' type from menu option --- .../views/product_view.xml | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 30f841710c1..f6db3069922 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -21,7 +21,7 @@ Partner Unit of Measure - + @@ -40,7 +40,7 @@ - product.supplierinfo.extended.tree + product.supplierinfo.partner.tree product.supplierinfo @@ -75,15 +75,15 @@ + context="{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" + domain="[('type','=','supplier')]" /> + context="{'default_search_type':'customer','default_type':'customer','default_product_tmpl_id':id}"> @@ -97,33 +97,33 @@ + name="is_customer_filter" /> + name="is_supplier_filter" /> + domain="[]" context="{'group_by':'name'}" /> + context="{'group_by':'product_tmpl_id'}" /> + context="{'group_by':'type'}" /> - Information about a product (customer) Information about a product (customer) ir.actions.act_window product.supplierinfo tree,form form - [] { - 'search_default_is_customer_filter': 1 + 'search_default_is_customer_filter': 1, + 'default_type': 'customer', + 'supplierinfo_type': 'customer', } @@ -134,7 +134,7 @@ + model="ir.actions.act_window.view"> form @@ -142,7 +142,7 @@ + model="ir.actions.act_window.view"> tree @@ -150,7 +150,7 @@ + action="product_supplierinfo_action" /> From a9fd575172c9c26f6050e84c64a3f4a9ad902418 Mon Sep 17 00:00:00 2001 From: oihane Date: Fri, 4 Sep 2015 12:57:15 +0200 Subject: [PATCH 0031/1692] Added know issue with computed fields --- product_supplierinfo_for_customer/README.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index 8f1fd69696d..dfacd33ea3f 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -35,6 +35,8 @@ Known issues / Roadmap * The product code / product name specified for the customer will not be reflected on the sale orders. * The minimum quantity will not also be applied on sale orders. +* Computed fields in product.supplierinfo object won't properly work for + customer type Credits ======= @@ -43,4 +45,3 @@ Contributors ------------ * Oihane Crucelaegui * Pedro M. Baeza - From cdfe21bec6c513339aac8139f8b5f50ad3fdde7f Mon Sep 17 00:00:00 2001 From: alfredoavanzosc Date: Mon, 28 Sep 2015 16:50:37 +0200 Subject: [PATCH 0032/1692] product_supplierinfo_for_customer: Create "demo" data, and "tests" folder. --- product_supplierinfo_for_customer/__init__.py | 16 +------- .../__openerp__.py | 18 +++++---- .../demo/product_demo.xml | 15 +++++++ .../models/__init__.py | 16 +------- .../models/product_pricelist.py | 6 +-- .../models/product_supplierinfo.py | 16 +------- .../models/product_template.py | 16 +------- .../models/res_partner.py | 16 +------- .../tests/__init__.py | 5 +++ .../test_product_supplierinfo_for_customer.py | 40 +++++++++++++++++++ 10 files changed, 78 insertions(+), 86 deletions(-) create mode 100644 product_supplierinfo_for_customer/demo/product_demo.xml create mode 100644 product_supplierinfo_for_customer/tests/__init__.py create mode 100644 product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py diff --git a/product_supplierinfo_for_customer/__init__.py b/product_supplierinfo_for_customer/__init__.py index a9609aa0b11..2bbe2de9996 100644 --- a/product_supplierinfo_for_customer/__init__.py +++ b/product_supplierinfo_for_customer/__init__.py @@ -1,19 +1,5 @@ # -*- coding: utf-8 -*- ############################################################################## -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# +# For copyright and license notices, see __openerp__.py file in root directory ############################################################################## - from . import models diff --git a/product_supplierinfo_for_customer/__openerp__.py b/product_supplierinfo_for_customer/__openerp__.py index b9fc4c5384a..e0de40d6284 100644 --- a/product_supplierinfo_for_customer/__openerp__.py +++ b/product_supplierinfo_for_customer/__openerp__.py @@ -15,22 +15,24 @@ # along with this program. If not, see http://www.gnu.org/licenses/. # ############################################################################## - { "name": "Use product supplier info for customers too", - "version": "1.0", - "depends": [ - "base", - "product", - ], + "version": "8.0.1.0.0", "author": "OdooMRP team," "AvanzOSC," "Serv. Tecnol. Avanzados - Pedro M. Baeza", - "category": "Sales Management", "website": "http://www.odoomrp.com", - "summary": "", + "category": "Sales Management", + "license": 'AGPL-3', + "depends": [ + "base", + "product", + ], "data": [ "views/product_view.xml", ], + "demo": [ + "demo/product_demo.xml", + ], "installable": True, } diff --git a/product_supplierinfo_for_customer/demo/product_demo.xml b/product_supplierinfo_for_customer/demo/product_demo.xml new file mode 100644 index 00000000000..d667cc72421 --- /dev/null +++ b/product_supplierinfo_for_customer/demo/product_demo.xml @@ -0,0 +1,15 @@ + + + + + + + 1 + 1 + customer + + + + diff --git a/product_supplierinfo_for_customer/models/__init__.py b/product_supplierinfo_for_customer/models/__init__.py index b60c45a6539..3e4ccebb841 100644 --- a/product_supplierinfo_for_customer/models/__init__.py +++ b/product_supplierinfo_for_customer/models/__init__.py @@ -1,21 +1,7 @@ # -*- coding: utf-8 -*- ############################################################################## -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# +# For copyright and license notices, see __openerp__.py file in root directory ############################################################################## - from . import product_supplierinfo from . import product_template from . import res_partner diff --git a/product_supplierinfo_for_customer/models/product_pricelist.py b/product_supplierinfo_for_customer/models/product_pricelist.py index 49ee7421be6..cac559a0c09 100644 --- a/product_supplierinfo_for_customer/models/product_pricelist.py +++ b/product_supplierinfo_for_customer/models/product_pricelist.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- -# (c) 2015 Pedro M. Baeza -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html - +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## from openerp import models, api diff --git a/product_supplierinfo_for_customer/models/product_supplierinfo.py b/product_supplierinfo_for_customer/models/product_supplierinfo.py index a957eb839e5..635c2ec1887 100644 --- a/product_supplierinfo_for_customer/models/product_supplierinfo.py +++ b/product_supplierinfo_for_customer/models/product_supplierinfo.py @@ -1,21 +1,7 @@ # -*- coding: utf-8 -*- ############################################################################## -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# +# For copyright and license notices, see __openerp__.py file in root directory ############################################################################## - from openerp import models, fields, api diff --git a/product_supplierinfo_for_customer/models/product_template.py b/product_supplierinfo_for_customer/models/product_template.py index 8e84ddb61b8..4fa58d94acd 100644 --- a/product_supplierinfo_for_customer/models/product_template.py +++ b/product_supplierinfo_for_customer/models/product_template.py @@ -1,21 +1,7 @@ # -*- coding: utf-8 -*- ############################################################################## -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# +# For copyright and license notices, see __openerp__.py file in root directory ############################################################################## - from openerp import models, fields diff --git a/product_supplierinfo_for_customer/models/res_partner.py b/product_supplierinfo_for_customer/models/res_partner.py index 6c7e0303075..8e41b79cb5d 100644 --- a/product_supplierinfo_for_customer/models/res_partner.py +++ b/product_supplierinfo_for_customer/models/res_partner.py @@ -1,21 +1,7 @@ # -*- coding: utf-8 -*- ############################################################################## -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# +# For copyright and license notices, see __openerp__.py file in root directory ############################################################################## - from openerp import models, api diff --git a/product_supplierinfo_for_customer/tests/__init__.py b/product_supplierinfo_for_customer/tests/__init__.py new file mode 100644 index 00000000000..bc0476c8174 --- /dev/null +++ b/product_supplierinfo_for_customer/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from . import test_product_supplierinfo_for_customer diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py new file mode 100644 index 00000000000..c2723f1e217 --- /dev/null +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +import openerp.tests.common as common + + +class TestProductSupplierinfoForCustomer(common.TransactionCase): + + def setUp(self): + super(TestProductSupplierinfoForCustomer, self).setUp() + self.supplierinfo_model = self.env['product.supplierinfo'] + self.pricelist_item_model = self.env['product.pricelist.item'] + self.pricelist_model = self.env['product.pricelist'] + self.customer = self.env.ref('base.res_partner_2') + self.product = self.env.ref('product.product_product_4') + self.pricelist = self.env.ref('product.list0') + self.pricelist_item = self.pricelist_item_model.browse( + self.env.ref('product.item0').id) + self.pricelist_item.write({'base': -2}) + + def test_product_supplierinfo_for_customer(self): + cond = [('name', '=', self.customer.id)] + supplierinfos = self.supplierinfo_model.search(cond) + self.assertEqual(len(supplierinfos), 0, + "Error: Supplier found in Supplierinfo") + cond = [('name', '=', self.customer.id)] + customerinfos = self.supplierinfo_model.with_context( + supplierinfo_type='customer').search(cond) + self.assertNotEqual(len(customerinfos), 0, + "Error: Supplier not found in Supplierinfo") + price_unit = self.pricelist_model.with_context( + supplierinfo_type='customer').price_rule_get( + self.product.id, 7, partner=self.customer.id) + self.assertTrue( + price_unit.get(self.pricelist.id, False), + "Error: Price unit not found for customer") + price = price_unit.get(self.pricelist.id, False)[0] + self.assertEqual(price, 20.0, + "Error: Price not found for product and customer") From 1e8a4e5254358f757ab3b81c3efd53d50a597890 Mon Sep 17 00:00:00 2001 From: Javier Iniesta Date: Thu, 22 Oct 2015 13:30:50 +0200 Subject: [PATCH 0033/1692] license target link --- product_supplierinfo_for_customer/README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index dfacd33ea3f..a51a69d4454 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -1,5 +1,6 @@ .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg :alt: License: AGPL-3 + :target: http://www.gnu.org/licenses/agpl-3.0.en.html ============================================ Use product supplier info also for customers From 3550e62018756742e29876e3b32efe87bcd53d15 Mon Sep 17 00:00:00 2001 From: Javier Iniesta Date: Thu, 22 Oct 2015 13:51:45 +0200 Subject: [PATCH 0034/1692] OCA as author added --- product_supplierinfo_for_customer/__openerp__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/product_supplierinfo_for_customer/__openerp__.py b/product_supplierinfo_for_customer/__openerp__.py index e0de40d6284..dcf3495737c 100644 --- a/product_supplierinfo_for_customer/__openerp__.py +++ b/product_supplierinfo_for_customer/__openerp__.py @@ -20,7 +20,8 @@ "version": "8.0.1.0.0", "author": "OdooMRP team," "AvanzOSC," - "Serv. Tecnol. Avanzados - Pedro M. Baeza", + "Serv. Tecnol. Avanzados - Pedro M. Baeza," + "Odoo Community Association (OCA)", "website": "http://www.odoomrp.com", "category": "Sales Management", "license": 'AGPL-3', From 4a070863241b454166df8e0a5436c705c0795f20 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Tue, 29 Nov 2016 09:26:01 -0500 Subject: [PATCH 0035/1692] OCA Transbot updated translations from Transifex --- product_supplierinfo_for_customer/i18n/de.po | 128 +++++++++++++++++++ product_supplierinfo_for_customer/i18n/es.po | 53 +++++--- product_supplierinfo_for_customer/i18n/fr.po | 123 ++++++++++++++++++ product_supplierinfo_for_customer/i18n/sl.po | 46 +++++-- 4 files changed, 324 insertions(+), 26 deletions(-) create mode 100644 product_supplierinfo_for_customer/i18n/de.po create mode 100644 product_supplierinfo_for_customer/i18n/fr.po diff --git a/product_supplierinfo_for_customer/i18n/de.po b/product_supplierinfo_for_customer/i18n/de.po new file mode 100644 index 00000000000..49246583ecf --- /dev/null +++ b/product_supplierinfo_for_customer/i18n/de.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_supplierinfo_for_customer +# +# Translators: +# OCA Transbot , 2016 +# Rudolf Schnapka , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-04-21 02:49+0000\n" +"PO-Revision-Date: 2017-04-21 02:49+0000\n" +"Last-Translator: Rudolf Schnapka , 2017\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action +msgid "" +"

    \n" +" Click to define a new product.supplierinfo.\n" +"

    \n" +" " +msgstr "" +"

    \n" +" Klicken für neue product.supplierinfo Lieferanteninfo.\n" +"

    \n" +" " + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: selection:product.supplierinfo,type:0 field:product.template,customer_ids:0 +msgid "Customer" +msgstr "Kunde" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "Customers" +msgstr "Kunden" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Group By" +msgstr "Gruppiere nach" + +#. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action +#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu +msgid "Information about a product (customer)" +msgstr "Information zu einem (Kunden-) Produkt" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Information zu Produktlieferant" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Partner" +msgstr "Partner" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Code" +msgstr "Artikelnummer des Partners" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Name" +msgstr "Produktbezeichnung des Partners" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Unit of Measure" +msgstr "Mengeneinheit des Partners" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist +msgid "Pricelist" +msgstr "Preisliste" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_template +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Product Template" +msgstr "Produktvorlage" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: selection:product.supplierinfo,type:0 field:product.template,supplier_ids:0 +msgid "Supplier" +msgstr "Lieferant" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Supplierinfo search" +msgstr "Lieferantenauskunft-Suche" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: field:product.supplierinfo,type:0 +msgid "Type" +msgstr "Art" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "[('type','=','supplier')]" +msgstr "[('type','=','supplier')]" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "" +"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" +msgstr "" +"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "{'select_type': type}" +msgstr "{'select_type': type}" diff --git a/product_supplierinfo_for_customer/i18n/es.po b/product_supplierinfo_for_customer/i18n/es.po index df5232cbaa4..027bca24642 100644 --- a/product_supplierinfo_for_customer/i18n/es.po +++ b/product_supplierinfo_for_customer/i18n/es.po @@ -1,34 +1,38 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_supplierinfo_for_customer -# +# * product_supplierinfo_for_customer +# +# Translators: +# OCA Transbot , 2016 msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-05 14:08+0000\n" -"PO-Revision-Date: 2015-02-05 14:08+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" +"POT-Creation-Date: 2016-11-03 10:07+0000\n" +"PO-Revision-Date: 2016-11-03 10:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: product_supplierinfo_for_customer #: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action -msgid "

    \n" +msgid "" +"

    \n" " Click to define a new product.supplierinfo.\n" "

    \n" " " -msgstr "

    \n" +msgstr "" +"

    \n" "Pulse para definir una nueva definición de producto-empresa.\n" "

    \n" #. module: product_supplierinfo_for_customer #: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 -#: field:product.template,customer_ids:0 +#: selection:product.supplierinfo,type:0 field:product.template,customer_ids:0 msgid "Customer" msgstr "Cliente" @@ -45,8 +49,8 @@ msgstr "Agrupar por" #. module: product_supplierinfo_for_customer #: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action #: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu -msgid "Information about a product" -msgstr "Información sobre un producto" +msgid "Information about a product (customer)" +msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo @@ -76,6 +80,11 @@ msgstr "Nombre de producto para la empresa" msgid "Partner Unit of Measure" msgstr "Unidad de medida de empresa" +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist +msgid "Pricelist" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template #: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view @@ -84,8 +93,7 @@ msgstr "Plantilla de producto" #. module: product_supplierinfo_for_customer #: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 -#: field:product.template,supplier_ids:0 +#: selection:product.supplierinfo,type:0 field:product.template,supplier_ids:0 msgid "Supplier" msgstr "Proveedor" @@ -100,3 +108,18 @@ msgstr "Búsqueda de producto-empresa" msgid "Type" msgstr "Tipo" +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "[('type','=','supplier')]" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "" +"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "{'select_type': type}" +msgstr "" diff --git a/product_supplierinfo_for_customer/i18n/fr.po b/product_supplierinfo_for_customer/i18n/fr.po new file mode 100644 index 00000000000..a0c9aad1161 --- /dev/null +++ b/product_supplierinfo_for_customer/i18n/fr.po @@ -0,0 +1,123 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_supplierinfo_for_customer +# +# Translators: +# OCA Transbot , 2016 +# Christophe CHAUVET , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-04-21 02:49+0000\n" +"PO-Revision-Date: 2017-04-21 02:49+0000\n" +"Last-Translator: Christophe CHAUVET , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action +msgid "" +"

    \n" +" Click to define a new product.supplierinfo.\n" +"

    \n" +" " +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: selection:product.supplierinfo,type:0 field:product.template,customer_ids:0 +msgid "Customer" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "Customers" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Group By" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action +#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu +msgid "Information about a product (customer)" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Information à propos du fournisseur du produit" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Partner" +msgstr "Partenaire" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Code" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Product Name" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Unit of Measure" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist +msgid "Pricelist" +msgstr "Liste de prix" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_template +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Product Template" +msgstr "Modèle d'article" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: selection:product.supplierinfo,type:0 field:product.template,supplier_ids:0 +msgid "Supplier" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +msgid "Supplierinfo search" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: field:product.supplierinfo,type:0 +msgid "Type" +msgstr "Type" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "[('type','=','supplier')]" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "" +"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "{'select_type': type}" +msgstr "" diff --git a/product_supplierinfo_for_customer/i18n/sl.po b/product_supplierinfo_for_customer/i18n/sl.po index e0423baa22e..ad5fa16f4dd 100644 --- a/product_supplierinfo_for_customer/i18n/sl.po +++ b/product_supplierinfo_for_customer/i18n/sl.po @@ -1,21 +1,23 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_supplierinfo_for_customer -# +# * product_supplierinfo_for_customer +# +# Translators: +# OCA Transbot , 2016 +# Matjaž Mozetič , 2016 msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-05 14:08+0000\n" -"PO-Revision-Date: 2015-08-15 13:06+0200\n" -"Last-Translator: Matjaz Mozetic \n" -"Language-Team: \n" +"POT-Creation-Date: 2016-11-03 10:07+0000\n" +"PO-Revision-Date: 2016-11-03 10:07+0000\n" +"Last-Translator: Matjaž Mozetič , 2016\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: \n" +"Content-Transfer-Encoding: \n" "Language: sl\n" -"X-Generator: Poedit 1.8.4\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" #. module: product_supplierinfo_for_customer #: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action @@ -49,8 +51,8 @@ msgstr "Združi po" #. module: product_supplierinfo_for_customer #: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action #: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu -msgid "Information about a product" -msgstr "Podatki o proizvodu" +msgid "Information about a product (customer)" +msgstr "Podatki o proizvodu (kupec)" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo @@ -80,6 +82,11 @@ msgstr "Partnerjev naziv proizvoda" msgid "Partner Unit of Measure" msgstr "Partnerjeva EM" +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist +msgid "Pricelist" +msgstr "Cenik" + #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template #: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view @@ -102,3 +109,20 @@ msgstr "Iskanje podatkov o dobavitelju" #: field:product.supplierinfo,type:0 msgid "Type" msgstr "Tip" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "[('type','=','supplier')]" +msgstr "[('type','=','supplier')]" + +#. module: product_supplierinfo_for_customer +#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +msgid "" +"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" +msgstr "" +"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" + +#. module: product_supplierinfo_for_customer +#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "{'select_type': type}" +msgstr "{'select_type': type}" From ea6203a808b87b7da4b5bf1db3d171ef2837441e Mon Sep 17 00:00:00 2001 From: Yennifer Santiago Date: Wed, 28 Jun 2017 14:41:57 +0000 Subject: [PATCH 0036/1692] product_customer_code: New README. [REF] product_supplierinfo_for_customer: Complete README. --- product_supplierinfo_for_customer/README.rst | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index a51a69d4454..0faca127474 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -28,13 +28,16 @@ suppliers. :alt: Try me on Runbot :target: https://runbot.odoo-community.org/runbot/188/8.0 + +The product code / product name specified for the customer can be reflected +on the sale orders using module `product_supplierinfo_for_customer_sale +`_ + Known issues / Roadmap ====================== * Product prices through this method are only guaranteed on the standard sale order workflow. Other custom flows maybe don't reflect the price. -* The product code / product name specified for the customer will not be - reflected on the sale orders. * The minimum quantity will not also be applied on sale orders. * Computed fields in product.supplierinfo object won't properly work for customer type From 84656d5e64c300432551af9533120b4e8ae9174e Mon Sep 17 00:00:00 2001 From: aheficent Date: Mon, 31 Jul 2017 15:21:58 +0200 Subject: [PATCH 0037/1692] product_supplierinfo_for_customer to v9 --- product_supplierinfo_for_customer/README.rst | 5 +- .../__openerp__.py | 28 ++------ .../demo/product_demo.xml | 3 - .../models/__init__.py | 1 - .../models/product_pricelist.py | 18 ----- .../test_product_supplierinfo_for_customer.py | 69 ++++++++++++++++--- .../views/product_view.xml | 27 ++++---- 7 files changed, 82 insertions(+), 69 deletions(-) delete mode 100644 product_supplierinfo_for_customer/models/product_pricelist.py diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index 0faca127474..a2d9df46b21 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -7,7 +7,7 @@ Use product supplier info also for customers ============================================ This modules allows to use supplier info structure, available in -*Procurements* tab of the product form, also for defining customer information, +*Inventory* tab of the product form, also for defining customer information, allowing to define prices per customer and product. Configuration @@ -26,7 +26,7 @@ suppliers. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/188/8.0 + :target: https://runbot.odoo-community.org/runbot/188/9.0 The product code / product name specified for the customer can be reflected @@ -49,3 +49,4 @@ Contributors ------------ * Oihane Crucelaegui * Pedro M. Baeza +* Aaron Henriquez diff --git a/product_supplierinfo_for_customer/__openerp__.py b/product_supplierinfo_for_customer/__openerp__.py index dcf3495737c..24881a189a5 100644 --- a/product_supplierinfo_for_customer/__openerp__.py +++ b/product_supplierinfo_for_customer/__openerp__.py @@ -1,28 +1,14 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -############################################################################## +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Use product supplier info for customers too", - "version": "8.0.1.0.0", - "author": "OdooMRP team," - "AvanzOSC," - "Serv. Tecnol. Avanzados - Pedro M. Baeza," + "version": "9.0.1.0.0", + "author": "OdooMRP team, " + "AvanzOSC, " + "Tecnativa, " + "Eficent, " "Odoo Community Association (OCA)", - "website": "http://www.odoomrp.com", + "website": "https://github.com/OCA/product-attribute", "category": "Sales Management", "license": 'AGPL-3', "depends": [ diff --git a/product_supplierinfo_for_customer/demo/product_demo.xml b/product_supplierinfo_for_customer/demo/product_demo.xml index d667cc72421..c6a331f13d3 100644 --- a/product_supplierinfo_for_customer/demo/product_demo.xml +++ b/product_supplierinfo_for_customer/demo/product_demo.xml @@ -7,9 +7,6 @@ 1 1 customer - diff --git a/product_supplierinfo_for_customer/models/__init__.py b/product_supplierinfo_for_customer/models/__init__.py index 3e4ccebb841..f4daa63b35a 100644 --- a/product_supplierinfo_for_customer/models/__init__.py +++ b/product_supplierinfo_for_customer/models/__init__.py @@ -5,4 +5,3 @@ from . import product_supplierinfo from . import product_template from . import res_partner -from . import product_pricelist diff --git a/product_supplierinfo_for_customer/models/product_pricelist.py b/product_supplierinfo_for_customer/models/product_pricelist.py deleted file mode 100644 index cac559a0c09..00000000000 --- a/product_supplierinfo_for_customer/models/product_pricelist.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, api - - -class ProductPricelist(models.Model): - _inherit = 'product.pricelist' - - @api.multi - def price_rule_get(self, prod_id, qty, partner=None): - """Pass context if the type of the pricelist is sale for restricting - on the search product.supplierinfo records of type customer.""" - obj = (self.with_context(supplierinfo_type='customer') if - self.type == 'sale' else self) - return super(ProductPricelist, obj).price_rule_get( - prod_id, qty, partner=partner) diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index c2723f1e217..23940de587f 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -12,12 +12,62 @@ def setUp(self): self.supplierinfo_model = self.env['product.supplierinfo'] self.pricelist_item_model = self.env['product.pricelist.item'] self.pricelist_model = self.env['product.pricelist'] - self.customer = self.env.ref('base.res_partner_2') + self.customer = self._create_customer('customer1') self.product = self.env.ref('product.product_product_4') - self.pricelist = self.env.ref('product.list0') - self.pricelist_item = self.pricelist_item_model.browse( - self.env.ref('product.item0').id) - self.pricelist_item.write({'base': -2}) + self.supplierinfo = self._create_supplierinfo( + 'customer', self.customer, self.product) + self.pricelist = self.env['product.pricelist'].create({ + 'name': 'Test Pricelist', + 'currency_id': self.env.ref('base.USD').id, + }) + self.pricelist_item = self.env['product.pricelist.item'].create({ + 'applied_on': '1_product', + 'base': 'list_price', + 'name': 'Test Pricelist Item', + 'pricelist_id': self.pricelist.id, + 'compute_price': 'fixed', + 'fixed_price': 100.0, + 'product_tmpl_id': self.product.id, + 'sequence': 5, + }) + + def _create_customer(self, name): + """Create a Partner.""" + return self.env['res.partner'].create({ + 'name': name, + 'email': 'example@yourcompany.com', + 'customer': True, + 'phone': 123456, + }) + + def _create_supplierinfo(self, type, partner, product): + return self.env['product.supplierinfo'].create({ + 'name': partner.id, + 'product_id': product.id, + 'product_code': '00001', + 'type': type, + 'price': 100.0, + }) + + def test_default_get(self): + """ checking values returned by default_get() """ + fields = ['name'] + values = self.customer.with_context( + select_type=True).default_get(fields) + self.assertEqual(values['customer'], False, "Incorrect default") + + def test_onchange_type(self): + sup_info = self._create_supplierinfo( + 'supplier', self.customer, self.product) + res = sup_info.onchange_type() + domain = res.get('domain', False) + name_dom = domain.get('name', False) + self.assertEqual(name_dom, [('supplier', '=', True)]) + sup_info.write({'type': 'customer'}) + res = sup_info.onchange_type() + domain = res.get('domain', False) + name_dom = domain.get('name', False) + self.assertEqual(name_dom, [('customer', '=', True)]) def test_product_supplierinfo_for_customer(self): cond = [('name', '=', self.customer.id)] @@ -28,13 +78,12 @@ def test_product_supplierinfo_for_customer(self): customerinfos = self.supplierinfo_model.with_context( supplierinfo_type='customer').search(cond) self.assertNotEqual(len(customerinfos), 0, - "Error: Supplier not found in Supplierinfo") - price_unit = self.pricelist_model.with_context( - supplierinfo_type='customer').price_rule_get( - self.product.id, 7, partner=self.customer.id) + "Error: Customer not found in Supplierinfo") + price_unit = self.pricelist_model.price_rule_get( + self.product.id, 1, partner=self.customer.id) self.assertTrue( price_unit.get(self.pricelist.id, False), "Error: Price unit not found for customer") price = price_unit.get(self.pricelist.id, False)[0] - self.assertEqual(price, 20.0, + self.assertEqual(price, 100.0, "Error: Price not found for product and customer") diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index f6db3069922..ddeee2e809e 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -66,7 +66,7 @@ product.template.extended.form product.template - + {'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id} @@ -78,14 +78,12 @@ context="{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" domain="[('type','=','supplier')]" /> - +
    - +
    @@ -94,20 +92,21 @@ product.supplierinfo - - + + + name="is_customer_filter"/> - + name="is_supplier_filter"/> + + domain="[]" context="{'group_by':'name'}"/> + name="gb_product_template" + context="{'group_by':'product_tmpl_id'}"/> - + From 6db3ed035f18a087e0a4a77c3696378be5d1bafb Mon Sep 17 00:00:00 2001 From: aheficent Date: Fri, 29 Sep 2017 16:13:53 +0200 Subject: [PATCH 0038/1692] [MIG] product_supplierinfo_for_customer to v10 --- product_supplierinfo_for_customer/README.rst | 17 ++--- product_supplierinfo_for_customer/__init__.py | 3 - .../{__openerp__.py => __manifest__.py} | 10 +-- .../demo/product_demo.xml | 4 +- .../models/__init__.py | 3 - .../models/product_supplierinfo.py | 20 +++--- .../models/product_template.py | 9 +-- .../models/res_partner.py | 9 +-- .../tests/__init__.py | 3 - .../test_product_supplierinfo_for_customer.py | 9 +-- .../views/product_view.xml | 64 +++++++++++++------ 11 files changed, 81 insertions(+), 70 deletions(-) rename product_supplierinfo_for_customer/{__openerp__.py => __manifest__.py} (77%) diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index a2d9df46b21..601c1edec91 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -1,4 +1,4 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :alt: License: AGPL-3 :target: http://www.gnu.org/licenses/agpl-3.0.en.html @@ -15,7 +15,7 @@ Configuration For these prices to be used in sale prices calculations, you will have to create a pricelist with a rule with option "Based on" with the value -"Supplier prices on the product form" (although the text is not clear enough). +"Supplier prices on the product form". Usage ===== @@ -26,21 +26,14 @@ suppliers. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/188/9.0 - - -The product code / product name specified for the customer can be reflected -on the sale orders using module `product_supplierinfo_for_customer_sale -`_ + :target: https://runbot.odoo-community.org/runbot/188/10.0 Known issues / Roadmap ====================== * Product prices through this method are only guaranteed on the standard sale order workflow. Other custom flows maybe don't reflect the price. -* The minimum quantity will not also be applied on sale orders. -* Computed fields in product.supplierinfo object won't properly work for - customer type +* The minimum quantity will neither apply on sale orders. Credits ======= @@ -48,5 +41,5 @@ Credits Contributors ------------ * Oihane Crucelaegui -* Pedro M. Baeza +* Tecnativa - Pedro M. Baeza * Aaron Henriquez diff --git a/product_supplierinfo_for_customer/__init__.py b/product_supplierinfo_for_customer/__init__.py index 2bbe2de9996..a0fdc10fe11 100644 --- a/product_supplierinfo_for_customer/__init__.py +++ b/product_supplierinfo_for_customer/__init__.py @@ -1,5 +1,2 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## from . import models diff --git a/product_supplierinfo_for_customer/__openerp__.py b/product_supplierinfo_for_customer/__manifest__.py similarity index 77% rename from product_supplierinfo_for_customer/__openerp__.py rename to product_supplierinfo_for_customer/__manifest__.py index 24881a189a5..f61cd9647dd 100644 --- a/product_supplierinfo_for_customer/__openerp__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -1,12 +1,13 @@ # -*- coding: utf-8 -*- +# Copyright 2015 OdooMRP team +# Copyright 2015 AvanzOSC +# Copyright 2015 Tecnativa # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Use product supplier info for customers too", - "version": "9.0.1.0.0", - "author": "OdooMRP team, " - "AvanzOSC, " + "version": "10.0.1.0.0", + "author": "AvanzOSC, " "Tecnativa, " - "Eficent, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "category": "Sales Management", @@ -14,6 +15,7 @@ "depends": [ "base", "product", + "purchase", ], "data": [ "views/product_view.xml", diff --git a/product_supplierinfo_for_customer/demo/product_demo.xml b/product_supplierinfo_for_customer/demo/product_demo.xml index c6a331f13d3..123cbe06e8a 100644 --- a/product_supplierinfo_for_customer/demo/product_demo.xml +++ b/product_supplierinfo_for_customer/demo/product_demo.xml @@ -1,5 +1,5 @@ - + @@ -9,4 +9,4 @@ customer - + diff --git a/product_supplierinfo_for_customer/models/__init__.py b/product_supplierinfo_for_customer/models/__init__.py index f4daa63b35a..fe99cab361e 100644 --- a/product_supplierinfo_for_customer/models/__init__.py +++ b/product_supplierinfo_for_customer/models/__init__.py @@ -1,7 +1,4 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## from . import product_supplierinfo from . import product_template from . import res_partner diff --git a/product_supplierinfo_for_customer/models/product_supplierinfo.py b/product_supplierinfo_for_customer/models/product_supplierinfo.py index 635c2ec1887..5c01d9ab558 100644 --- a/product_supplierinfo_for_customer/models/product_supplierinfo.py +++ b/product_supplierinfo_for_customer/models/product_supplierinfo.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields, api +# Copyright 2015 OdooMRP team +# Copyright 2015 AvanzOSC +# Copyright 2015 Tecnativa +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import api, fields, models class ProductSupplierinfo(models.Model): @@ -22,16 +23,13 @@ def onchange_type(self): return {'domain': {'name': [('customer', '=', True)]}} return {'domain': {'name': []}} - def search(self, cr, uid, args, offset=0, limit=None, order=None, - context=None, count=False): + @api.model + def search(self, args, offset=0, limit=None, order=None, count=False): """Add search argument for field type if the context says so. This should be in old API because context argument is not the last one. """ - if context is None: - context = {} if not any(arg[0] == 'type' for arg in args): args += [('type', '=', - context.get('supplierinfo_type', 'supplier'))] + self.env.context.get('supplierinfo_type', 'supplier'))] return super(ProductSupplierinfo, self).search( - cr, uid, args, offset=offset, limit=limit, order=order, - context=context, count=count) + args, offset=offset, limit=limit, order=order, count=count) diff --git a/product_supplierinfo_for_customer/models/product_template.py b/product_supplierinfo_for_customer/models/product_template.py index 4fa58d94acd..360562a9cd3 100644 --- a/product_supplierinfo_for_customer/models/product_template.py +++ b/product_supplierinfo_for_customer/models/product_template.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields +# Copyright 2015 OdooMRP team +# Copyright 2015 AvanzOSC +# Copyright 2015 Tecnativa +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import fields, models class ProductTemplate(models.Model): diff --git a/product_supplierinfo_for_customer/models/res_partner.py b/product_supplierinfo_for_customer/models/res_partner.py index 8e41b79cb5d..7ca95f3abe7 100644 --- a/product_supplierinfo_for_customer/models/res_partner.py +++ b/product_supplierinfo_for_customer/models/res_partner.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, api +# Copyright 2015 OdooMRP team +# Copyright 2015 AvanzOSC +# Copyright 2015 Tecnativa +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import api, models class ResPartner(models.Model): diff --git a/product_supplierinfo_for_customer/tests/__init__.py b/product_supplierinfo_for_customer/tests/__init__.py index bc0476c8174..02b8a718f29 100644 --- a/product_supplierinfo_for_customer/tests/__init__.py +++ b/product_supplierinfo_for_customer/tests/__init__.py @@ -1,5 +1,2 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## from . import test_product_supplierinfo_for_customer diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index 23940de587f..41cdf12aacd 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -import openerp.tests.common as common +# Copyright 2015 OdooMRP team +# Copyright 2015 AvanzOSC +# Copyright 2015 Tecnativa +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +import odoo.tests.common as common class TestProductSupplierinfoForCustomer(common.TransactionCase): diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index ddeee2e809e..5721a982615 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -3,26 +3,42 @@ + product.supplierinfo.extended.form product.supplierinfo - - - Partner - {'select_type': type} - - - Partner Product Name - - - Partner Product Code - - - Partner Unit of Measure - - - - +
    + + + + + + + + + + + + + + + +
    @@ -63,10 +79,10 @@
    - + product.template.extended.form product.template - + {'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id} @@ -78,6 +94,14 @@ context="{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" domain="[('type','=','supplier')]" /> + + + + + product.template.extended.form + product.template + +
    - From 6e137bed186de772e2e8ba21219c90191bf6e455 Mon Sep 17 00:00:00 2001 From: aheficent Date: Mon, 6 Nov 2017 18:02:06 +0100 Subject: [PATCH 0039/1692] [IMP] Add back the option to import the prices from supplierinfo to PL --- product_supplierinfo_for_customer/README.rst | 5 +- .../models/__init__.py | 2 + .../models/pricelist.py | 24 ++ .../models/product_product.py | 50 +++ .../test_product_supplierinfo_for_customer.py | 22 ++ .../views/product_view.xml | 321 +++++++++--------- 6 files changed, 261 insertions(+), 163 deletions(-) create mode 100644 product_supplierinfo_for_customer/models/pricelist.py create mode 100644 product_supplierinfo_for_customer/models/product_product.py diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index 601c1edec91..a6f4d2f41e2 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -15,7 +15,7 @@ Configuration For these prices to be used in sale prices calculations, you will have to create a pricelist with a rule with option "Based on" with the value -"Supplier prices on the product form". +"Partner Prices: Take the price from the customer info on the 'product form')". Usage ===== @@ -24,6 +24,9 @@ There's a new section on *Sales* tab of the product form called "Customers", where you can define records for customers with the same structure of the suppliers. +There's a new option on pricelist items that allows to get the prices from the + supplierinfo at the product form. + .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot :target: https://runbot.odoo-community.org/runbot/188/10.0 diff --git a/product_supplierinfo_for_customer/models/__init__.py b/product_supplierinfo_for_customer/models/__init__.py index fe99cab361e..6ab9a3a8829 100644 --- a/product_supplierinfo_for_customer/models/__init__.py +++ b/product_supplierinfo_for_customer/models/__init__.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from . import pricelist from . import product_supplierinfo +from . import product_product from . import product_template from . import res_partner diff --git a/product_supplierinfo_for_customer/models/pricelist.py b/product_supplierinfo_for_customer/models/pricelist.py new file mode 100644 index 00000000000..c180d689642 --- /dev/null +++ b/product_supplierinfo_for_customer/models/pricelist.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 OdooMRP team +# Copyright 2015 AvanzOSC +# Copyright 2015 Tecnativa +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class ProductPricelistItem(models.Model): + _inherit = "product.pricelist.item" + + base = fields.Selection([ + ('list_price', 'Public Price'), + ('standard_price', 'Cost'), + ('pricelist', 'Other Pricelist'), + ('partner', 'Partner Prices on the product form')], + default='list_price', required=True, + help='Base price for computation.\n' + 'Public Price: The base price will be the Sale/public Price.\n' + 'Cost Price : The base price will be the cost price.\n' + 'Other Pricelist : Computation of the base price based on another' + ' Pricelist.' + 'Partner Prices: Take the price from the customer info on the' + ' product form') diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py new file mode 100644 index 00000000000..4f5a5cbbbc2 --- /dev/null +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 OdooMRP team +# Copyright 2015 AvanzOSC +# Copyright 2015 Tecnativa +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import api, models + + +class ProductProduct(models.Model): + _inherit = 'product.product' + + @api.multi + def _get_price_from_supplierinfo(self, partner_id): + for product in self: + if partner_id: + supplierinfo = self.env['product.supplierinfo'].search( + ['|', ('product_tmpl_id', '=', product.product_tmpl_id.id), + ('product_id', '=', product.id), + ('type', '=', 'customer'), + ('name', '=', partner_id)]) + if supplierinfo: + return supplierinfo.price + return 0.0 + + @api.multi + def price_compute( + self, price_type, uom=False, currency=False, company=False): + for product in self: + if price_type == 'partner': + partner = self.env.context.get('partner_id', False) + price = product._get_price_from_supplierinfo(partner) + if not price: + return super(ProductProduct, self).price_compute( + 'list_price', uom, currency, company) + prices = dict.fromkeys(self.ids, 0.0) + prices[product.id] = price + if not uom and self._context.get('uom'): + uom = self.env['product.uom'].browse(self._context['uom']) + if not currency and self._context.get('currency'): + currency = self.env['res.currency'].browse( + self._context['currency']) + if uom: + prices[product.id] = product.uom_id._compute_price( + prices[product.id], uom) + if currency: + prices[product.id] = product.currency_id.compute( + prices[product.id], currency) + return prices + return super(ProductProduct, self).price_compute( + price_type, uom, currency, company) diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index 41cdf12aacd..bfe104094d1 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -14,6 +14,7 @@ def setUp(self): self.pricelist_item_model = self.env['product.pricelist.item'] self.pricelist_model = self.env['product.pricelist'] self.customer = self._create_customer('customer1') + self.unknown = self._create_customer('customer2') self.product = self.env.ref('product.product_product_4') self.supplierinfo = self._create_supplierinfo( 'customer', self.customer, self.product) @@ -21,6 +22,7 @@ def setUp(self): 'name': 'Test Pricelist', 'currency_id': self.env.ref('base.USD').id, }) + self.company = self.env.ref('base.main_company') self.pricelist_item = self.env['product.pricelist.item'].create({ 'applied_on': '1_product', 'base': 'list_price', @@ -88,3 +90,23 @@ def test_product_supplierinfo_for_customer(self): price = price_unit.get(self.pricelist.id, False)[0] self.assertEqual(price, 100.0, "Error: Price not found for product and customer") + + def test_product_supplierinfo_price(self): + price = self.product._get_price_from_supplierinfo( + partner_id=self.customer.id) + self.assertEqual(price, 100.0, + "Error: Price not found for product and customer") + res = self.product.with_context( + partner_id=self.customer.id).price_compute( + 'partner', self.product.uom_id, self.company.currency_id, + self.company) + self.assertEqual( + res[self.product.id], 100.0, + "Error: Wrong price for product and customer") + res = self.product.with_context( + partner_id=self.unknown.id).price_compute( + 'partner', self.product.uom_id, self.company.currency_id, + self.company) + self.assertEqual( + res[self.product.id], 750.0, + "Error: price does not match list price") diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 5721a982615..5f3ba00d696 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -1,179 +1,176 @@ - - - - - - product.supplierinfo.extended.form - product.supplierinfo - -
    - - - - - - - - - - - - - - + + + + product.supplierinfo.extended.form + product.supplierinfo + + + + + + + + + + - - - + + + + + + +
    + +
    +
    - - product.supplierinfo.template.form - product.supplierinfo - - primary - - - - - + + product.supplierinfo.template.form + product.supplierinfo + + primary + + + + - + + - - product.supplierinfo.partner.tree - product.supplierinfo - - - - Partner - + + product.supplierinfo.partner.tree + product.supplierinfo + + + + Partner - + + - - product.supplierinfo.template.tree - product.supplierinfo - - primary - - - - - + + product.supplierinfo.template.tree + product.supplierinfo + + primary + + + + - + + - - product.template.extended.form - product.template - - - - {'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id} - [('type','=','supplier')] - 1 - - - - + + product.template.extended.form + product.template + + + + {'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id} + [('type','=','supplier')] + 1 - - - - product.template.extended.form - product.template - - -
    - - - -
    + + -
    +
    +
    - - product.supplierinfo.search - product.supplierinfo - - - - - - - - - - - - - - - + + product.template.extended.form + product.template + + +
    + + + +
    +
    +
    - - Information about a product (customer) - ir.actions.act_window - product.supplierinfo - tree,form - form - - { - 'search_default_is_customer_filter': 1, - 'default_type': 'customer', - 'supplierinfo_type': 'customer', - } - - -

    - Click to define a new product.supplierinfo. -

    -
    -
    + + product.supplierinfo.search + product.supplierinfo + + + + + + + + + + + + + + + + + + Information about a product (customer) + ir.actions.act_window + product.supplierinfo + tree,form + form + + { + 'search_default_is_customer_filter': 1, + 'default_type': 'customer', + 'supplierinfo_type': 'customer', + } + + +

    + Click to define a new product.supplierinfo. +

    +
    +
    - - - form - - - + + + form + + + - - - tree - - - + + + tree + + + - + -
    -
    + From e216f3738f3a61de88eb757152dd687b5a4551c9 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sat, 30 Jun 2018 00:27:50 +0000 Subject: [PATCH 0040/1692] [UPD] Update product_supplierinfo_for_customer.pot --- .../product_supplierinfo_for_customer.pot | 88 +++++++++++++------ 1 file changed, 63 insertions(+), 25 deletions(-) diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index 32dbe81b428..57e77057e22 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot @@ -4,10 +4,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-05 14:08+0000\n" -"PO-Revision-Date: 2015-02-05 14:08+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,84 +15,124 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action -msgid "

    \n" -" Click to define a new product.supplierinfo.\n" -"

    \n" -" " +msgid "Click to define a new product.supplierinfo." msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view #: selection:product.supplierinfo,type:0 -#: field:product.template,customer_ids:0 msgid "Customer" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_template_extended_form_view msgid "Customers" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Group By" msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action #: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu -msgid "Information about a product" +msgid "Information about a product (customer)" msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo -msgid "Information about a product supplier" +msgid "Information about a product vendor" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Other Information" msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Partner" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Partner Information" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view msgid "Partner Product Code" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view msgid "Partner Product Name" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view msgid "Partner Unit of Measure" msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Price List" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist_item +msgid "Pricelist item" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_product +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Product" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Product Template" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_supplier_ids +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view #: selection:product.supplierinfo,type:0 -#: field:product.template,supplier_ids:0 msgid "Supplier" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Supplierinfo search" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: field:product.supplierinfo,type:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo_type +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Type" msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "Validity" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "days" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view +msgid "to" +msgstr "" + From 1ca2fd50108899d528a3b213acedbb32db975cd4 Mon Sep 17 00:00:00 2001 From: mreficent Date: Mon, 9 Jul 2018 16:49:00 +0200 Subject: [PATCH 0041/1692] [FIX] Move some views to product_supplierinfo_for_customer_sale --- .../__manifest__.py | 2 +- .../views/product_view.xml | 64 ------------------- 2 files changed, 1 insertion(+), 65 deletions(-) diff --git a/product_supplierinfo_for_customer/__manifest__.py b/product_supplierinfo_for_customer/__manifest__.py index f61cd9647dd..b8de7035987 100644 --- a/product_supplierinfo_for_customer/__manifest__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -5,7 +5,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Use product supplier info for customers too", - "version": "10.0.1.0.0", + "version": "10.0.2.0.0", "author": "AvanzOSC, " "Tecnativa, " "Odoo Community Association (OCA)", diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 5f3ba00d696..1a003c31584 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -109,68 +109,4 @@
    - - product.supplierinfo.search - product.supplierinfo - - - - - - - - - - - - - - - - - - Information about a product (customer) - ir.actions.act_window - product.supplierinfo - tree,form - form - - { - 'search_default_is_customer_filter': 1, - 'default_type': 'customer', - 'supplierinfo_type': 'customer', - } - - -

    - Click to define a new product.supplierinfo. -

    -
    -
    - - - - form - - - - - - - tree - - - - - - From e23b68b98768c114b6ba1d4914571c391e9c08d0 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Thu, 12 Jul 2018 10:26:03 +0000 Subject: [PATCH 0042/1692] [UPD] Update product_supplierinfo_for_customer.pot --- .../product_supplierinfo_for_customer.pot | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index 57e77057e22..36974fdcc65 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot @@ -13,15 +13,9 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action -msgid "Click to define a new product.supplierinfo." -msgstr "" - #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view #: selection:product.supplierinfo,type:0 msgid "Customer" msgstr "" @@ -31,17 +25,6 @@ msgstr "" msgid "Customers" msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Group By" -msgstr "" - -#. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action -#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu -msgid "Information about a product (customer)" -msgstr "" - #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo msgid "Information about a product vendor" @@ -56,7 +39,6 @@ msgstr "" #: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Partner" msgstr "" @@ -98,26 +80,18 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Product Template" msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_supplier_ids #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_supplier_ids -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view #: selection:product.supplierinfo,type:0 msgid "Supplier" msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Supplierinfo search" -msgstr "" - #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo_type -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Type" msgstr "" From 5dc6c1f2191213ad7a66c35f7aa81b5577cdf18a Mon Sep 17 00:00:00 2001 From: mreficent Date: Mon, 16 Jul 2018 16:49:57 +0200 Subject: [PATCH 0043/1692] [REF] Don't overwrite views and fix view for customers --- .../__manifest__.py | 2 +- .../models/pricelist.py | 15 +-- .../views/product_view.xml | 109 +++++++++--------- 3 files changed, 57 insertions(+), 69 deletions(-) diff --git a/product_supplierinfo_for_customer/__manifest__.py b/product_supplierinfo_for_customer/__manifest__.py index b8de7035987..14b19abd177 100644 --- a/product_supplierinfo_for_customer/__manifest__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -5,7 +5,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Use product supplier info for customers too", - "version": "10.0.2.0.0", + "version": "10.0.3.0.0", "author": "AvanzOSC, " "Tecnativa, " "Odoo Community Association (OCA)", diff --git a/product_supplierinfo_for_customer/models/pricelist.py b/product_supplierinfo_for_customer/models/pricelist.py index c180d689642..8987abb0688 100644 --- a/product_supplierinfo_for_customer/models/pricelist.py +++ b/product_supplierinfo_for_customer/models/pricelist.py @@ -9,16 +9,5 @@ class ProductPricelistItem(models.Model): _inherit = "product.pricelist.item" - base = fields.Selection([ - ('list_price', 'Public Price'), - ('standard_price', 'Cost'), - ('pricelist', 'Other Pricelist'), - ('partner', 'Partner Prices on the product form')], - default='list_price', required=True, - help='Base price for computation.\n' - 'Public Price: The base price will be the Sale/public Price.\n' - 'Cost Price : The base price will be the cost price.\n' - 'Other Pricelist : Computation of the base price based on another' - ' Pricelist.' - 'Partner Prices: Take the price from the customer info on the' - ' product form') + base = fields.Selection( + selection_add=[('partner', 'Partner Prices on the product form')]) diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 1a003c31584..627e281eb2c 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -1,29 +1,36 @@ - - - product.supplierinfo.extended.form + + product.supplierinfo.form.view product.supplierinfo + + -
    + + + + + + + + product.supplierinfo.customer.form.view + product.supplierinfo + + + - - - - - + + + + - - + + }" + domain="[('type','=','customer')]" + />
    From b1672362078538e43c64299f4037c879a9d262da Mon Sep 17 00:00:00 2001 From: mreficent Date: Mon, 15 Oct 2018 13:36:27 +0200 Subject: [PATCH 0051/1692] [IMP] Use variant one2many introduced in v11 like variant_seller_ids --- .../models/product_template.py | 3 +++ .../views/product_view.xml | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/product_supplierinfo_for_customer/models/product_template.py b/product_supplierinfo_for_customer/models/product_template.py index 5bfe24c3b6a..0adad953802 100644 --- a/product_supplierinfo_for_customer/models/product_template.py +++ b/product_supplierinfo_for_customer/models/product_template.py @@ -14,3 +14,6 @@ class ProductTemplate(models.Model): supplier_ids = fields.One2many( comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', string='Supplier', domain=[('type', '=', 'supplier')]) + variant_supplier_ids = fields.One2many( + comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', + string='Supplier', domain=[('type', '=', 'supplier')]) diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index f1ee1e9ecfb..59c4a6982f1 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -81,6 +81,16 @@ + { + 'default_search_type':'supplier', + 'default_type':'supplier', + 'default_product_tmpl_id':id, + 'product_template_invisible_variant': True, + } + [('type','=','supplier')] + 1 + + { 'default_search_type':'supplier', 'default_type':'supplier', @@ -92,6 +102,20 @@ + + + + + 1 1 - customer + customer
    diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py index 31192b0b408..b83d73d2f10 100644 --- a/product_supplierinfo_for_customer/models/product_product.py +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -16,7 +16,7 @@ def _get_price_from_supplierinfo(self, partner_id): supplierinfo = self.env['product.supplierinfo'].search( ['|', ('product_tmpl_id', '=', self.product_tmpl_id.id), ('product_id', '=', self.id), - ('type', '=', 'customer'), + ('supplierinfo_type', '=', 'customer'), ('name', '=', partner_id)], limit=1) if supplierinfo: return supplierinfo.price diff --git a/product_supplierinfo_for_customer/models/product_supplierinfo.py b/product_supplierinfo_for_customer/models/product_supplierinfo.py index c1356008a1c..4de9ded02ea 100644 --- a/product_supplierinfo_for_customer/models/product_supplierinfo.py +++ b/product_supplierinfo_for_customer/models/product_supplierinfo.py @@ -8,18 +8,18 @@ class ProductSupplierinfo(models.Model): _inherit = 'product.supplierinfo' - type = fields.Selection( + supplierinfo_type = fields.Selection( selection=[ ('customer', 'Customer'), ('supplier', 'Supplier'), - ], string='Type', + ], string='Type', oldname='type', default='supplier') - @api.onchange('type') + @api.onchange('supplierinfo_type') def onchange_type(self): - if self.type == 'supplier': + if self.supplierinfo_type == 'supplier': return {'domain': {'name': [('supplier', '=', True)]}} - elif self.type == 'customer': + elif self.supplierinfo_type == 'customer': return {'domain': {'name': [('customer', '=', True)]}} return {'domain': {'name': []}} @@ -28,8 +28,8 @@ def search(self, args, offset=0, limit=None, order=None, count=False): """Add search argument for field type if the context says so. This should be in old API because context argument is not the last one. """ - if not any(arg[0] == 'type' for arg in args): - args += [('type', '=', + if not any(arg[0] == 'supplierinfo_type' for arg in args): + args += [('supplierinfo_type', '=', self.env.context.get('supplierinfo_type', 'supplier'))] return super(ProductSupplierinfo, self).search( args, offset=offset, limit=limit, order=order, count=count) diff --git a/product_supplierinfo_for_customer/models/product_template.py b/product_supplierinfo_for_customer/models/product_template.py index 0adad953802..3c81688b4e5 100644 --- a/product_supplierinfo_for_customer/models/product_template.py +++ b/product_supplierinfo_for_customer/models/product_template.py @@ -10,10 +10,10 @@ class ProductTemplate(models.Model): customer_ids = fields.One2many( comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', - string='Customer', domain=[('type', '=', 'customer')]) + string='Customer', domain=[('supplierinfo_type', '=', 'customer')]) supplier_ids = fields.One2many( comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', - string='Supplier', domain=[('type', '=', 'supplier')]) + string='Supplier', domain=[('supplierinfo_type', '=', 'supplier')]) variant_supplier_ids = fields.One2many( comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', - string='Supplier', domain=[('type', '=', 'supplier')]) + string='Supplier', domain=[('supplierinfo_type', '=', 'supplier')]) diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index 4ba218854b4..0ed66c351d6 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -41,12 +41,12 @@ def _create_customer(self, name): 'phone': 123456, }) - def _create_supplierinfo(self, type, partner, product): + def _create_supplierinfo(self, supplierinfo_type, partner, product): return self.env['product.supplierinfo'].create({ 'name': partner.id, 'product_id': product.id, 'product_code': '00001', - 'type': type, + 'supplierinfo_type': supplierinfo_type, 'price': 100.0, }) @@ -64,7 +64,7 @@ def test_onchange_type(self): domain = res.get('domain', False) name_dom = domain.get('name', False) self.assertEqual(name_dom, [('supplier', '=', True)]) - sup_info.write({'type': 'customer'}) + sup_info.write({'supplierinfo_type': 'customer'}) res = sup_info.onchange_type() domain = res.get('domain', False) name_dom = domain.get('name', False) diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 59c4a6982f1..b812f9781e2 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -11,7 +11,7 @@ - +
    @@ -49,7 +49,7 @@ - + @@ -82,33 +82,33 @@ { - 'default_search_type':'supplier', - 'default_type':'supplier', + 'default_search_supplierinfo_type':'supplier', + 'default_supplierinfo_type':'supplier', 'default_product_tmpl_id':id, 'product_template_invisible_variant': True, } - [('type','=','supplier')] + [('supplierinfo_type','=','supplier')] 1 { - 'default_search_type':'supplier', - 'default_type':'supplier', + 'default_search_supplierinfo_type':'supplier', + 'default_supplierinfo_type':'supplier', 'default_product_tmpl_id':id, } - [('type','=','supplier')] + [('supplierinfo_type','=','supplier')] 1 @@ -117,11 +117,11 @@ @@ -139,13 +139,13 @@ @@ -156,12 +156,12 @@ Partner Pricelists product.supplierinfo { - 'default_search_type':'supplier', - 'default_type':'supplier', + 'default_search_supplierinfo_type':'supplier', + 'default_supplierinfo_type':'supplier', 'default_product_tmpl_id':id, 'visible_product_tmpl_id':False, } - [('type','=','supplier')] + [('supplierinfo_type','=','supplier')] From b50bec508474cb3c30e7d7685d5d7210dc83ac59 Mon Sep 17 00:00:00 2001 From: mreficent Date: Mon, 15 Oct 2018 14:43:31 +0200 Subject: [PATCH 0053/1692] [IMP] Change to SavepointCase some tests --- .../test_product_supplierinfo_for_customer.py | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index 0ed66c351d6..e716cca0d1b 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -1,48 +1,52 @@ # Copyright 2015 OdooMRP team # Copyright 2015 AvanzOSC # Copyright 2015 Tecnativa +# Copyright 2018 Eficent # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -import odoo.tests.common as common +from odoo.tests.common import SavepointCase -class TestProductSupplierinfoForCustomer(common.TransactionCase): +class TestProductSupplierinfoForCustomer(SavepointCase): - def setUp(self): - super(TestProductSupplierinfoForCustomer, self).setUp() - self.supplierinfo_model = self.env['product.supplierinfo'] - self.pricelist_item_model = self.env['product.pricelist.item'] - self.pricelist_model = self.env['product.pricelist'] - self.customer = self._create_customer('customer1') - self.unknown = self._create_customer('customer2') - self.product = self.env.ref('product.product_product_4') - self.supplierinfo = self._create_supplierinfo( - 'customer', self.customer, self.product) - self.pricelist = self.env['product.pricelist'].create({ + @classmethod + def setUpClass(cls): + super(TestProductSupplierinfoForCustomer, cls).setUpClass() + cls.supplierinfo_model = cls.env['product.supplierinfo'] + cls.pricelist_item_model = cls.env['product.pricelist.item'] + cls.pricelist_model = cls.env['product.pricelist'] + cls.customer = cls._create_customer('customer1') + cls.unknown = cls._create_customer('customer2') + cls.product = cls.env.ref('product.product_product_4') + cls.supplierinfo = cls._create_supplierinfo( + 'customer', cls.customer, cls.product) + cls.pricelist = cls.env['product.pricelist'].create({ 'name': 'Test Pricelist', - 'currency_id': self.env.ref('base.USD').id, + 'currency_id': cls.env.ref('base.USD').id, }) - self.company = self.env.ref('base.main_company') - self.pricelist_item = self.env['product.pricelist.item'].create({ + cls.company = cls.env.ref('base.main_company') + cls.pricelist_item = cls.env['product.pricelist.item'].create({ 'applied_on': '1_product', 'base': 'list_price', 'name': 'Test Pricelist Item', - 'pricelist_id': self.pricelist.id, + 'pricelist_id': cls.pricelist.id, 'compute_price': 'fixed', 'fixed_price': 100.0, - 'product_tmpl_id': self.product.id, + 'product_tmpl_id': cls.product.id, }) - def _create_customer(self, name): + @classmethod + def _create_customer(cls, name): """Create a Partner.""" - return self.env['res.partner'].create({ + return cls.env['res.partner'].create({ 'name': name, 'email': 'example@yourcompany.com', 'customer': True, 'phone': 123456, }) - def _create_supplierinfo(self, supplierinfo_type, partner, product): - return self.env['product.supplierinfo'].create({ + @classmethod + def _create_supplierinfo(cls, supplierinfo_type, partner, product): + return cls.env['product.supplierinfo'].create({ 'name': partner.id, 'product_id': product.id, 'product_code': '00001', From a4c3c445f128b6617a817b9dce586b128a8f380a Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 18 Oct 2018 19:03:20 +0000 Subject: [PATCH 0054/1692] [UPD] Update product_supplierinfo_for_customer.pot [UPD] README.rst --- product_supplierinfo_for_customer/README.rst | 68 ++- .../product_supplierinfo_for_customer.pot | 20 +- .../static/description/index.html | 451 ++++++++++++++++++ 3 files changed, 513 insertions(+), 26 deletions(-) create mode 100644 product_supplierinfo_for_customer/static/description/index.html diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index 047cafc1180..2c7f4fdbac3 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -1,15 +1,39 @@ -.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png - :target: https://www.gnu.org/licenses/agpl - :alt: License: AGPL-3 - ================================== Product Supplierinfo for Customers ================================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/11.0/product_supplierinfo_for_customer + :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-11-0/product-attribute-11-0-product_supplierinfo_for_customer + :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/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + This modules allows to use supplier info structure, available in *Inventory* tab of the product form, also for defining customer information, allowing to define prices per customer and product. +**Table of contents** + +.. contents:: + :local: + Configuration ============= @@ -27,10 +51,6 @@ suppliers. There's a new option on pricelist items that allows to get the prices from the supplierinfo at the product form. -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/188/11.0 - Known issues / Roadmap ====================== @@ -38,33 +58,47 @@ Known issues / Roadmap order workflow. Other custom flows maybe don't reflect the price. * The minimum quantity will neither apply on sale orders. +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 ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* AvanzOSC +* Tecnativa Contributors ------------- +~~~~~~~~~~~~ + * Oihane Crucelaegui * Tecnativa - Pedro M. Baeza * Aaron Henriquez * Miquel Raïch * Tecnativa - Sergio Teruel -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +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_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index 5db6549bb27..c3d0ffe94c5 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -13,12 +13,17 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +msgid "Contact" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view -#: selection:product.supplierinfo,type:0 +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Customer" msgstr "" @@ -55,11 +60,6 @@ msgstr "" msgid "Other Information" msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner -msgid "Partner" -msgstr "" - #. module: product_supplierinfo_for_customer #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view msgid "Price" @@ -89,13 +89,15 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_supplier_ids #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_supplier_ids -#: selection:product.supplierinfo,type:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_supplier_ids +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Supplier" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo_type +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo_supplierinfo_type msgid "Type" msgstr "" diff --git a/product_supplierinfo_for_customer/static/description/index.html b/product_supplierinfo_for_customer/static/description/index.html new file mode 100644 index 00000000000..aeab64507d6 --- /dev/null +++ b/product_supplierinfo_for_customer/static/description/index.html @@ -0,0 +1,451 @@ + + + + + + +Product Supplierinfo for Customers + + + +
    +

    Product Supplierinfo for Customers

    + + +

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

    +

    This modules allows to use supplier info structure, available in +Inventory tab of the product form, also for defining customer information, +allowing to define prices per customer and product.

    +

    Table of contents

    + +
    +

    Configuration

    +

    For these prices to be used in sale prices calculations, you will have +to create a pricelist with a rule with option “Based on” with the value +“Partner Prices: Take the price from the customer info on the ‘product form’)”.

    +
    +
    +

    Usage

    +

    There’s a new section on Sales tab of the product form called “Customers”, +where you can define records for customers with the same structure of the +suppliers.

    +

    There’s a new option on pricelist items that allows to get the prices from the +supplierinfo at the product form.

    +
    +
    +

    Known issues / Roadmap

    +
      +
    • Product prices through this method are only guaranteed on the standard sale +order workflow. Other custom flows maybe don’t reflect the price.
    • +
    • The minimum quantity will neither apply on sale orders.
    • +
    +
    +
    +

    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

    +
      +
    • AvanzOSC
    • +
    • Tecnativa
    • +
    +
    +
    +

    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.

    +
    +
    +
    + + From 1e2e1d28544a44610af6046ea7877b548ca905c1 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Thu, 22 Nov 2018 10:00:41 +0100 Subject: [PATCH 0055/1692] [11.0][FIX] product_supplierinfo_for_customer: Hide variant suppliers in product template --- product_supplierinfo_for_customer/views/product_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index b812f9781e2..7a0a96683b6 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -114,7 +114,7 @@
    - + , 2017\n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action -msgid "" -"

    \n" -" Click to define a new product.supplierinfo.\n" -"

    \n" -" " +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +msgid "Contact" msgstr "" -"

    \n" -" Klicken für neue product.supplierinfo Lieferanteninfo.\n" -"

    \n" -" " #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 field:product.template,customer_ids:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Customer" msgstr "Kunde" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "Customers" -msgstr "Kunden" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +msgid "Customer Information" +msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Group By" -msgstr "Gruppiere nach" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Customer Product Code" +msgstr "Artikelnummer des Partners" #. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action -#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu -msgid "Information about a product (customer)" -msgstr "Information zu einem (Kunden-) Produkt" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Customer Product Name" +msgstr "Produktbezeichnung des Partners" + +#. module: product_supplierinfo_for_customer +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_template_form_view +msgid "Customers" +msgstr "Kunden" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo -msgid "Information about a product supplier" +#, fuzzy +msgid "Information about a product vendor" msgstr "Information zu Produktlieferant" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Partner" -msgstr "Partner" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "Other Information" +msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Product Code" -msgstr "Artikelnummer des Partners" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Price" +msgstr "Preisliste" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Product Name" -msgstr "Produktbezeichnung des Partners" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#, fuzzy +msgid "Price List" +msgstr "Preisliste" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Unit of Measure" -msgstr "Mengeneinheit des Partners" +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist_item +#, fuzzy +msgid "Pricelist item" +msgstr "Preisliste" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist -msgid "Pricelist" -msgstr "Preisliste" +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_product +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Product" +msgstr "Produktvorlage" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Product Template" msgstr "Produktvorlage" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 field:product.template,supplier_ids:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_supplier_ids +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Supplier" msgstr "Lieferant" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Supplierinfo search" -msgstr "Lieferantenauskunft-Suche" - -#. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: field:product.supplierinfo,type:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo_supplierinfo_type msgid "Type" msgstr "Art" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "[('type','=','supplier')]" -msgstr "[('type','=','supplier')]" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "Validity" +msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "" -"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "to" msgstr "" -"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" -#. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "{'select_type': type}" -msgstr "{'select_type': type}" +#~ msgid "" +#~ "

    \n" +#~ " Click to define a new product.supplierinfo.\n" +#~ "

    \n" +#~ " " +#~ msgstr "" +#~ "

    \n" +#~ " Klicken für neue product.supplierinfo " +#~ "Lieferanteninfo.\n" +#~ "

    \n" +#~ " " + +#~ msgid "Group By" +#~ msgstr "Gruppiere nach" + +#~ msgid "Information about a product (customer)" +#~ msgstr "Information zu einem (Kunden-) Produkt" + +#~ msgid "Partner" +#~ msgstr "Partner" + +#~ msgid "Partner Unit of Measure" +#~ msgstr "Mengeneinheit des Partners" + +#~ msgid "Supplierinfo search" +#~ msgstr "Lieferantenauskunft-Suche" + +#~ msgid "[('type','=','supplier')]" +#~ msgstr "[('type','=','supplier')]" + +#~ msgid "" +#~ "{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':" +#~ "id}" +#~ msgstr "" +#~ "{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':" +#~ "id}" + +#~ msgid "{'select_type': type}" +#~ msgstr "{'select_type': type}" diff --git a/product_supplierinfo_for_customer/i18n/es.po b/product_supplierinfo_for_customer/i18n/es.po index 027bca24642..9f089db2f9b 100644 --- a/product_supplierinfo_for_customer/i18n/es.po +++ b/product_supplierinfo_for_customer/i18n/es.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * product_supplierinfo_for_customer -# +# # Translators: # OCA Transbot , 2016 msgid "" @@ -12,114 +12,132 @@ msgstr "" "PO-Revision-Date: 2016-11-03 10:07+0000\n" "Last-Translator: OCA Transbot , 2016\n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action -msgid "" -"

    \n" -" Click to define a new product.supplierinfo.\n" -"

    \n" -" " +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +msgid "Contact" msgstr "" -"

    \n" -"Pulse para definir una nueva definición de producto-empresa.\n" -"

    \n" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 field:product.template,customer_ids:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Customer" msgstr "Cliente" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "Customers" -msgstr "Clientes" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +msgid "Customer Information" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Customer Product Code" +msgstr "Código de producto para la empresa" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Group By" -msgstr "Agrupar por" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Customer Product Name" +msgstr "Nombre de producto para la empresa" #. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action -#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu -msgid "Information about a product (customer)" -msgstr "" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_template_form_view +msgid "Customers" +msgstr "Clientes" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo -msgid "Information about a product supplier" +#, fuzzy +msgid "Information about a product vendor" msgstr "Información de un proveedor de producto" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Partner" -msgstr "Empresa" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "Other Information" +msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Product Code" -msgstr "Código de producto para la empresa" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +msgid "Price" +msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Product Name" -msgstr "Nombre de producto para la empresa" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "Price List" +msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Unit of Measure" -msgstr "Unidad de medida de empresa" +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist_item +msgid "Pricelist item" +msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist -msgid "Pricelist" -msgstr "" +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_product +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Product" +msgstr "Plantilla de producto" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Product Template" msgstr "Plantilla de producto" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 field:product.template,supplier_ids:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_supplier_ids +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Supplier" msgstr "Proveedor" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Supplierinfo search" -msgstr "Búsqueda de producto-empresa" - -#. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: field:product.supplierinfo,type:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo_supplierinfo_type msgid "Type" msgstr "Tipo" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "[('type','=','supplier')]" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "Validity" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "" -"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "to" msgstr "" -#. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "{'select_type': type}" -msgstr "" +#~ msgid "" +#~ "

    \n" +#~ " Click to define a new product.supplierinfo.\n" +#~ "

    \n" +#~ " " +#~ msgstr "" +#~ "

    \n" +#~ "Pulse para definir una nueva definición de producto-empresa.\n" +#~ "

    \n" + +#~ msgid "Group By" +#~ msgstr "Agrupar por" + +#~ msgid "Partner" +#~ msgstr "Empresa" + +#~ msgid "Partner Unit of Measure" +#~ msgstr "Unidad de medida de empresa" + +#~ msgid "Supplierinfo search" +#~ msgstr "Búsqueda de producto-empresa" diff --git a/product_supplierinfo_for_customer/i18n/fr.po b/product_supplierinfo_for_customer/i18n/fr.po index a0c9aad1161..d085395b65b 100644 --- a/product_supplierinfo_for_customer/i18n/fr.po +++ b/product_supplierinfo_for_customer/i18n/fr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * product_supplierinfo_for_customer -# +# # Translators: # OCA Transbot , 2016 # Christophe CHAUVET , 2017 @@ -13,111 +13,114 @@ msgstr "" "PO-Revision-Date: 2017-04-21 02:49+0000\n" "Last-Translator: Christophe CHAUVET , 2017\n" "Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action -msgid "" -"

    \n" -" Click to define a new product.supplierinfo.\n" -"

    \n" -" " +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +msgid "Contact" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 field:product.template,customer_ids:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Customer" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "Customers" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +msgid "Customer Information" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Group By" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +msgid "Customer Product Code" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action -#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu -msgid "Information about a product (customer)" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +msgid "Customer Product Name" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo -msgid "Information about a product supplier" -msgstr "Information à propos du fournisseur du produit" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_template_form_view +msgid "Customers" +msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Partner" -msgstr "Partenaire" +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo +#, fuzzy +msgid "Information about a product vendor" +msgstr "Information à propos du fournisseur du produit" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Product Code" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "Other Information" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Product Name" -msgstr "" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Price" +msgstr "Liste de prix" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Unit of Measure" -msgstr "" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#, fuzzy +msgid "Price List" +msgstr "Liste de prix" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist -msgid "Pricelist" +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist_item +#, fuzzy +msgid "Pricelist item" msgstr "Liste de prix" +#. module: product_supplierinfo_for_customer +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_product +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Product" +msgstr "Modèle d'article" + #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Product Template" msgstr "Modèle d'article" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 field:product.template,supplier_ids:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_supplier_ids +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Supplier" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Supplierinfo search" -msgstr "" - -#. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: field:product.supplierinfo,type:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo_supplierinfo_type msgid "Type" msgstr "Type" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "[('type','=','supplier')]" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "Validity" msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "" -"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "to" msgstr "" -#. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "{'select_type': type}" -msgstr "" +#~ msgid "Partner" +#~ msgstr "Partenaire" diff --git a/product_supplierinfo_for_customer/i18n/sl.po b/product_supplierinfo_for_customer/i18n/sl.po index ad5fa16f4dd..f0dbb6da55e 100644 --- a/product_supplierinfo_for_customer/i18n/sl.po +++ b/product_supplierinfo_for_customer/i18n/sl.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * product_supplierinfo_for_customer -# +# # Translators: # OCA Transbot , 2016 # Matjaž Mozetič , 2016 @@ -13,116 +13,153 @@ msgstr "" "PO-Revision-Date: 2016-11-03 10:07+0000\n" "Last-Translator: Matjaž Mozetič , 2016\n" "Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: sl\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" #. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,help:product_supplierinfo_for_customer.product_supplierinfo_action -msgid "" -"

    \n" -" Click to define a new product.supplierinfo.\n" -"

    \n" -" " +#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner +msgid "Contact" msgstr "" -"

    \n" -" Kliknite za nov product.supplierinfo.\n" -"

    \n" -" " #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 field:product.template,customer_ids:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Customer" msgstr "Kupec" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "Customers" -msgstr "Kupci" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +msgid "Customer Information" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Customer Product Code" +msgstr "Partnerjeva koda proizvoda" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Group By" -msgstr "Združi po" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Customer Product Name" +msgstr "Partnerjev naziv proizvoda" #. module: product_supplierinfo_for_customer -#: model:ir.actions.act_window,name:product_supplierinfo_for_customer.product_supplierinfo_action -#: model:ir.ui.menu,name:product_supplierinfo_for_customer.product_supplierinfo_sale_menu -msgid "Information about a product (customer)" -msgstr "Podatki o proizvodu (kupec)" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_template_form_view +msgid "Customers" +msgstr "Kupci" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo -msgid "Information about a product supplier" +#, fuzzy +msgid "Information about a product vendor" msgstr "Podatki o dobavitelju proizvoda" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_tree_view -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Partner" -msgstr "Partner" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "Other Information" +msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Product Code" -msgstr "Partnerjeva koda proizvoda" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Price" +msgstr "Cenik" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Product Name" -msgstr "Partnerjev naziv proizvoda" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#, fuzzy +msgid "Price List" +msgstr "Cenik" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "Partner Unit of Measure" -msgstr "Partnerjeva EM" +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist_item +#, fuzzy +msgid "Pricelist item" +msgstr "Cenik" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist -msgid "Pricelist" -msgstr "Cenik" +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_product +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#, fuzzy +msgid "Product" +msgstr "Predloga proizvoda" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view msgid "Product Template" msgstr "Predloga proizvoda" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: selection:product.supplierinfo,type:0 field:product.template,supplier_ids:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_supplier_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_supplier_ids +#: selection:product.supplierinfo,supplierinfo_type:0 msgid "Supplier" msgstr "Dobavitelj" #. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -msgid "Supplierinfo search" -msgstr "Iskanje podatkov o dobavitelju" - -#. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_search_view -#: field:product.supplierinfo,type:0 +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo_supplierinfo_type msgid "Type" msgstr "Tip" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "[('type','=','supplier')]" -msgstr "[('type','=','supplier')]" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "Validity" +msgstr "" #. module: product_supplierinfo_for_customer -#: view:product.template:product_supplierinfo_for_customer.product_template_extended_form_view -msgid "" -"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" +#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +msgid "to" msgstr "" -"{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':id}" -#. module: product_supplierinfo_for_customer -#: view:product.supplierinfo:product_supplierinfo_for_customer.product_supplierinfo_extended_form_view -msgid "{'select_type': type}" -msgstr "{'select_type': type}" +#~ msgid "" +#~ "

    \n" +#~ " Click to define a new product.supplierinfo.\n" +#~ "

    \n" +#~ " " +#~ msgstr "" +#~ "

    \n" +#~ " Kliknite za nov product.supplierinfo.\n" +#~ "

    \n" +#~ " " + +#~ msgid "Group By" +#~ msgstr "Združi po" + +#~ msgid "Information about a product (customer)" +#~ msgstr "Podatki o proizvodu (kupec)" + +#~ msgid "Partner" +#~ msgstr "Partner" + +#~ msgid "Partner Unit of Measure" +#~ msgstr "Partnerjeva EM" + +#~ msgid "Supplierinfo search" +#~ msgstr "Iskanje podatkov o dobavitelju" + +#~ msgid "[('type','=','supplier')]" +#~ msgstr "[('type','=','supplier')]" + +#~ msgid "" +#~ "{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':" +#~ "id}" +#~ msgstr "" +#~ "{'default_search_type':'supplier','default_type':'supplier','default_product_tmpl_id':" +#~ "id}" + +#~ msgid "{'select_type': type}" +#~ msgstr "{'select_type': type}" From 642cedda6a3e0a08e5f5a752928d0cb137661650 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marta=20V=C3=A1zquez=20Rodr=C3=ADguez?= Date: Fri, 8 Feb 2019 11:58:28 +0000 Subject: [PATCH 0057/1692] Translated using Weblate (Spanish) Currently translated at 100.0% (17 of 17 strings) Translation: product-attribute-11.0/product-attribute-11.0-product_supplierinfo_for_customer Translate-URL: https://translation.odoo-community.org/projects/product-attribute-11-0/product-attribute-11-0-product_supplierinfo_for_customer/es/ --- product_supplierinfo_for_customer/i18n/es.po | 33 +++++++++----------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/product_supplierinfo_for_customer/i18n/es.po b/product_supplierinfo_for_customer/i18n/es.po index 9f089db2f9b..07d5bfce51d 100644 --- a/product_supplierinfo_for_customer/i18n/es.po +++ b/product_supplierinfo_for_customer/i18n/es.po @@ -9,19 +9,20 @@ msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-11-03 10:07+0000\n" -"PO-Revision-Date: 2016-11-03 10:07+0000\n" -"Last-Translator: OCA Transbot , 2016\n" +"PO-Revision-Date: 2019-02-08 13:50+0000\n" +"Last-Translator: Marta Vázquez Rodríguez \n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.4\n" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner msgid "Contact" -msgstr "" +msgstr "Contacto" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids @@ -36,21 +37,19 @@ msgstr "Cliente" #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view msgid "Customer Information" -msgstr "" +msgstr "Información de Cliente" #. module: product_supplierinfo_for_customer #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view -#, fuzzy msgid "Customer Product Code" msgstr "Código de producto para la empresa" #. module: product_supplierinfo_for_customer #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view -#, fuzzy msgid "Customer Product Name" -msgstr "Nombre de producto para la empresa" +msgstr "Nombre Producto Cliente" #. module: product_supplierinfo_for_customer #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_template_form_view @@ -59,37 +58,35 @@ msgstr "Clientes" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo -#, fuzzy msgid "Information about a product vendor" -msgstr "Información de un proveedor de producto" +msgstr "Información sobre proveedor" #. module: product_supplierinfo_for_customer #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view msgid "Other Information" -msgstr "" +msgstr "Otra información" #. module: product_supplierinfo_for_customer #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view msgid "Price" -msgstr "" +msgstr "Precio" #. module: product_supplierinfo_for_customer #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view msgid "Price List" -msgstr "" +msgstr "Lista de Precios" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist_item msgid "Pricelist item" -msgstr "" +msgstr "Item Tarifa" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_product #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view -#, fuzzy msgid "Product" -msgstr "Plantilla de producto" +msgstr "Producto" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template @@ -113,12 +110,12 @@ msgstr "Tipo" #. module: product_supplierinfo_for_customer #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view msgid "Validity" -msgstr "" +msgstr "Validez" #. module: product_supplierinfo_for_customer #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view msgid "to" -msgstr "" +msgstr "para" #~ msgid "" #~ "

    \n" From ccf09066bc4b984a5d554a27fc07577157f2ff4b Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 22 Feb 2019 10:05:51 +0100 Subject: [PATCH 0058/1692] [FIX] product_supplierinfo_for_customer: Mistake on act_window definition That action window is for showing directly product.supplierinfo, so no product template source and no `id` field. The rest of modifications on the act_window are also nonsense. --- product_supplierinfo_for_customer/views/product_view.xml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 7a0a96683b6..183c7ce3ec8 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -153,14 +153,7 @@ - Partner Pricelists - product.supplierinfo - { - 'default_search_supplierinfo_type':'supplier', - 'default_supplierinfo_type':'supplier', - 'default_product_tmpl_id':id, - 'visible_product_tmpl_id':False, - } + {'default_supplierinfo_type':'supplier'} [('supplierinfo_type','=','supplier')] From a21fcf3c3e100a4e1ff1962d7ed18f73714ce19c Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 22 Feb 2019 20:27:51 +0100 Subject: [PATCH 0059/1692] [FIX] product_supplierinfo_for_customer: visible_product_tmpl_id context key is needed in act_window Or the product template won't be shown there. --- product_supplierinfo_for_customer/views/product_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 183c7ce3ec8..f1bb4a3bc38 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -153,7 +153,7 @@ - {'default_supplierinfo_type':'supplier'} + {'default_supplierinfo_type':'supplier', 'visible_product_tmpl_id': False} [('supplierinfo_type','=','supplier')] From 6508a6a11c7575ab882a6d3bfe1af9d31c6bc9a9 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 3 Apr 2019 18:06:52 +0200 Subject: [PATCH 0060/1692] [FIX] product_supplierinfo_for_customer: Adapt views to variants handling The same way Odoo does. --- .../models/product_template.py | 4 +++ .../views/product_view.xml | 27 +++++++++++++------ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/product_supplierinfo_for_customer/models/product_template.py b/product_supplierinfo_for_customer/models/product_template.py index 3c81688b4e5..b7107135bcc 100644 --- a/product_supplierinfo_for_customer/models/product_template.py +++ b/product_supplierinfo_for_customer/models/product_template.py @@ -1,6 +1,7 @@ # Copyright 2015 OdooMRP team # Copyright 2015 AvanzOSC # Copyright 2015 Tecnativa +# Copyright 2019 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo import fields, models @@ -11,6 +12,9 @@ class ProductTemplate(models.Model): customer_ids = fields.One2many( comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', string='Customer', domain=[('supplierinfo_type', '=', 'customer')]) + variant_customer_ids = fields.One2many( + comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', + string='Customer', domain=[('supplierinfo_type', '=', 'customer')]) supplier_ids = fields.One2many( comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', string='Supplier', domain=[('supplierinfo_type', '=', 'supplier')]) diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index f1bb4a3bc38..0ef703471f0 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -2,6 +2,7 @@ @@ -24,11 +25,12 @@

    + + }" domain="[('customer', '=', True)]"/> @@ -64,13 +66,14 @@ + - + - - + + @@ -135,19 +138,27 @@
    -
    - + -
    + + + +
    From e23c8d217db6504b0fd2e8ec77732c31cbd4ec34 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 5 Apr 2019 13:14:23 +0000 Subject: [PATCH 0061/1692] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: product-attribute-11.0/product-attribute-11.0-product_supplierinfo_for_customer Translate-URL: https://translation.odoo-community.org/projects/product-attribute-11-0/product-attribute-11-0-product_supplierinfo_for_customer/ [UPD] Update product_supplierinfo_for_customer.pot --- product_supplierinfo_for_customer/i18n/de.po | 2 ++ product_supplierinfo_for_customer/i18n/es.po | 2 ++ product_supplierinfo_for_customer/i18n/fr.po | 2 ++ .../i18n/product_supplierinfo_for_customer.pot | 2 ++ product_supplierinfo_for_customer/i18n/sl.po | 2 ++ 5 files changed, 10 insertions(+) diff --git a/product_supplierinfo_for_customer/i18n/de.po b/product_supplierinfo_for_customer/i18n/de.po index 624f3fc94c6..c2c4f4dc317 100644 --- a/product_supplierinfo_for_customer/i18n/de.po +++ b/product_supplierinfo_for_customer/i18n/de.po @@ -26,7 +26,9 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_customer_ids #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_customer_ids #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view #: selection:product.supplierinfo,supplierinfo_type:0 diff --git a/product_supplierinfo_for_customer/i18n/es.po b/product_supplierinfo_for_customer/i18n/es.po index 07d5bfce51d..bf57852594b 100644 --- a/product_supplierinfo_for_customer/i18n/es.po +++ b/product_supplierinfo_for_customer/i18n/es.po @@ -26,7 +26,9 @@ msgstr "Contacto" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_customer_ids #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_customer_ids #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view #: selection:product.supplierinfo,supplierinfo_type:0 diff --git a/product_supplierinfo_for_customer/i18n/fr.po b/product_supplierinfo_for_customer/i18n/fr.po index d085395b65b..a8235b4fb68 100644 --- a/product_supplierinfo_for_customer/i18n/fr.po +++ b/product_supplierinfo_for_customer/i18n/fr.po @@ -26,7 +26,9 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_customer_ids #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_customer_ids #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view #: selection:product.supplierinfo,supplierinfo_type:0 diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index c3d0ffe94c5..8a98ff6a44c 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot @@ -20,7 +20,9 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_customer_ids #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_customer_ids #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view #: selection:product.supplierinfo,supplierinfo_type:0 diff --git a/product_supplierinfo_for_customer/i18n/sl.po b/product_supplierinfo_for_customer/i18n/sl.po index f0dbb6da55e..ecc9d75ef43 100644 --- a/product_supplierinfo_for_customer/i18n/sl.po +++ b/product_supplierinfo_for_customer/i18n/sl.po @@ -27,7 +27,9 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_customer_ids #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_customer_ids #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view #: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view #: selection:product.supplierinfo,supplierinfo_type:0 From 9c739331307a8fe55e68247051e558581cc79486 Mon Sep 17 00:00:00 2001 From: Renato Lima Date: Tue, 16 Apr 2019 20:33:22 -0300 Subject: [PATCH 0062/1692] [MIGR] product_supplierinfo_for_customer: Migration to 12.0 --- .../__manifest__.py | 4 ++- .../models/product_product.py | 8 ++++-- .../models/product_supplierinfo.py | 15 ++++++----- .../models/product_template.py | 27 +++++++++++++------ .../readme/ROADMAP.rst | 2 +- .../test_product_supplierinfo_for_customer.py | 15 +++++------ .../views/product_view.xml | 10 +++---- 7 files changed, 50 insertions(+), 31 deletions(-) diff --git a/product_supplierinfo_for_customer/__manifest__.py b/product_supplierinfo_for_customer/__manifest__.py index 9963ae45ba7..bb2c81d298f 100644 --- a/product_supplierinfo_for_customer/__manifest__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Product Supplierinfo for Customers", "summary": "Allows to define prices for customers in the products", - "version": "11.0.1.0.0", + "version": "12.0.1.0.0", "author": "AvanzOSC, " "Tecnativa, " "Odoo Community Association (OCA)", @@ -22,4 +22,6 @@ "demo": [ "demo/product_demo.xml", ], + 'installable': True, + 'auto_install': False } diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py index b83d73d2f10..b317cc073d7 100644 --- a/product_supplierinfo_for_customer/models/product_product.py +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -2,6 +2,8 @@ # Copyright 2015 AvanzOSC # Copyright 2015 Tecnativa # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +import datetime + from odoo import api, models @@ -44,8 +46,10 @@ def price_compute( prices[product.id] = product.uom_id._compute_price( prices[product.id], uom) if currency: - prices[product.id] = product.currency_id.compute( - prices[product.id], currency) + date = self.env.context.get('date', + datetime.datetime.now()) + prices[product.id] = product.currency_id._convert( + prices[product.id], currency, company, date) return prices return super(ProductProduct, self).price_compute( price_type, uom, currency, company) diff --git a/product_supplierinfo_for_customer/models/product_supplierinfo.py b/product_supplierinfo_for_customer/models/product_supplierinfo.py index 4de9ded02ea..7d313fffbf3 100644 --- a/product_supplierinfo_for_customer/models/product_supplierinfo.py +++ b/product_supplierinfo_for_customer/models/product_supplierinfo.py @@ -11,12 +11,13 @@ class ProductSupplierinfo(models.Model): supplierinfo_type = fields.Selection( selection=[ ('customer', 'Customer'), - ('supplier', 'Supplier'), - ], string='Type', oldname='type', + ('supplier', 'Supplier')], + string='Type', + oldname='type', default='supplier') @api.onchange('supplierinfo_type') - def onchange_type(self): + def _onchange_type(self): if self.supplierinfo_type == 'supplier': return {'domain': {'name': [('supplier', '=', True)]}} elif self.supplierinfo_type == 'customer': @@ -24,12 +25,14 @@ def onchange_type(self): return {'domain': {'name': []}} @api.model - def search(self, args, offset=0, limit=None, order=None, count=False): + def _search(self, args, offset=0, limit=None, order=None, count=False, + access_rights_uid=None): """Add search argument for field type if the context says so. This should be in old API because context argument is not the last one. """ if not any(arg[0] == 'supplierinfo_type' for arg in args): args += [('supplierinfo_type', '=', self.env.context.get('supplierinfo_type', 'supplier'))] - return super(ProductSupplierinfo, self).search( - args, offset=offset, limit=limit, order=order, count=count) + return super(ProductSupplierinfo, self)._search( + args, offset=offset, limit=limit, order=order, count=count, + access_rights_uid=access_rights_uid) diff --git a/product_supplierinfo_for_customer/models/product_template.py b/product_supplierinfo_for_customer/models/product_template.py index b7107135bcc..df34051e69f 100644 --- a/product_supplierinfo_for_customer/models/product_template.py +++ b/product_supplierinfo_for_customer/models/product_template.py @@ -10,14 +10,25 @@ class ProductTemplate(models.Model): _inherit = 'product.template' customer_ids = fields.One2many( - comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', - string='Customer', domain=[('supplierinfo_type', '=', 'customer')]) + comodel_name='product.supplierinfo', + inverse_name='product_tmpl_id', + string='Customer', + domain=[('supplierinfo_type', '=', 'customer')]) + variant_customer_ids = fields.One2many( - comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', - string='Customer', domain=[('supplierinfo_type', '=', 'customer')]) + comodel_name='product.supplierinfo', + inverse_name='product_tmpl_id', + string='Vairant Customer', + domain=[('supplierinfo_type', '=', 'customer')]) + supplier_ids = fields.One2many( - comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', - string='Supplier', domain=[('supplierinfo_type', '=', 'supplier')]) + comodel_name='product.supplierinfo', + inverse_name='product_tmpl_id', + string='Supplier', + domain=[('supplierinfo_type', '=', 'supplier')]) + variant_supplier_ids = fields.One2many( - comodel_name='product.supplierinfo', inverse_name='product_tmpl_id', - string='Supplier', domain=[('supplierinfo_type', '=', 'supplier')]) + comodel_name='product.supplierinfo', + inverse_name='product_tmpl_id', + string='Variant Supplier', + domain=[('supplierinfo_type', '=', 'supplier')]) diff --git a/product_supplierinfo_for_customer/readme/ROADMAP.rst b/product_supplierinfo_for_customer/readme/ROADMAP.rst index 6618df1c689..1a0e593d35a 100644 --- a/product_supplierinfo_for_customer/readme/ROADMAP.rst +++ b/product_supplierinfo_for_customer/readme/ROADMAP.rst @@ -1,3 +1,3 @@ * Product prices through this method are only guaranteed on the standard sale order workflow. Other custom flows maybe don't reflect the price. -* The minimum quantity will neither apply on sale orders. \ No newline at end of file +* The minimum quantity will neither apply on sale orders. diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index e716cca0d1b..b8a767ec44c 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -31,7 +31,7 @@ def setUpClass(cls): 'pricelist_id': cls.pricelist.id, 'compute_price': 'fixed', 'fixed_price': 100.0, - 'product_tmpl_id': cls.product.id, + 'product_id': cls.product.id, }) @classmethod @@ -64,12 +64,12 @@ def test_default_get(self): def test_onchange_type(self): sup_info = self._create_supplierinfo( 'supplier', self.customer, self.product) - res = sup_info.onchange_type() + res = sup_info._onchange_type() domain = res.get('domain', False) name_dom = domain.get('name', False) self.assertEqual(name_dom, [('supplier', '=', True)]) sup_info.write({'supplierinfo_type': 'customer'}) - res = sup_info.onchange_type() + res = sup_info._onchange_type() domain = res.get('domain', False) name_dom = domain.get('name', False) self.assertEqual(name_dom, [('customer', '=', True)]) @@ -84,12 +84,11 @@ def test_product_supplierinfo_for_customer(self): supplierinfo_type='customer').search(cond) self.assertNotEqual(len(customerinfos), 0, "Error: Customer not found in Supplierinfo") - price_unit = self.pricelist_model.price_rule_get( - self.product.id, 1, partner=self.customer.id) - self.assertTrue( - price_unit.get(self.pricelist.id, False), + price, rule_id = self.pricelist.get_product_price_rule( + self.product, 1, partner=self.customer) + self.assertEqual( + rule_id, self.pricelist_item.id, "Error: Price unit not found for customer") - price = price_unit.get(self.pricelist.id, False)[0] self.assertEqual(price, 100.0, "Error: Price not found for product and customer") diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 0ef703471f0..d515c1da571 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -9,7 +9,7 @@ product.supplierinfo.form.view product.supplierinfo - + @@ -40,7 +40,7 @@
    - - product.supplierinfo.customer.tree.view - product.supplierinfo - + + product.customerinfo.tree.view + product.customerinfo @@ -78,60 +64,6 @@ - - product.template.supplier.form.inherit - product.template - - - - { - 'default_search_supplierinfo_type':'supplier', - 'default_supplierinfo_type':'supplier', - 'default_product_tmpl_id':id, - 'product_template_invisible_variant': True, - } - [('supplierinfo_type','=','supplier')] - 1 - - - { - 'default_search_supplierinfo_type':'supplier', - 'default_supplierinfo_type':'supplier', - 'default_product_tmpl_id':id, - } - [('supplierinfo_type','=','supplier')] - 1 - - - - - - - - - - - - - - product.template.common.form product.template @@ -142,30 +74,21 @@
    - - {'default_supplierinfo_type': 'supplier', 'visible_product_tmpl_id': False} - [('supplierinfo_type','=','supplier')] - - From 938d76f1edbc763eae2302ffdfddfe9d241d7150 Mon Sep 17 00:00:00 2001 From: mreficent Date: Tue, 15 Oct 2019 14:21:11 +0200 Subject: [PATCH 0064/1692] [ADD] Migration scripts --- .../migrations/12.0.1.0.0/pre-migration.py | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 product_supplierinfo_for_customer/migrations/12.0.1.0.0/pre-migration.py diff --git a/product_supplierinfo_for_customer/migrations/12.0.1.0.0/pre-migration.py b/product_supplierinfo_for_customer/migrations/12.0.1.0.0/pre-migration.py new file mode 100644 index 00000000000..21d7eaaf6a2 --- /dev/null +++ b/product_supplierinfo_for_customer/migrations/12.0.1.0.0/pre-migration.py @@ -0,0 +1,62 @@ +# Copyright 2019 Eficent +# Copyright 2019 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +def _move_model_in_data(env, ids, old_model, new_model): + renames = [ + ('mail_message', 'model', 'res_id'), + ('mail_followers', 'res_model', 'res_id'), + ('ir_attachment', 'res_model', 'res_id'), + ('mail_activity', 'res_model', 'res_id'), + ('ir_model_data', 'model', 'res_id'), + ] + for rename in renames: + openupgrade.logged_query( + env.cr, """ + UPDATE {A} + SET {B} = '{C}' + WHERE {D} IN {E} AND {F} = '{G}'""".format( + A=rename[0], + B=rename[1], C=new_model, + D=rename[2], E=tuple(ids), F=rename[1], G=old_model, + ), + ) + + +def fill_product_customerinfo(env): + cr = env.cr + openupgrade.logged_query( + cr, """ + CREATE TABLE product_customerinfo + (LIKE product_supplierinfo INCLUDING ALL)""", + ) + openupgrade.logged_query( + cr, """ + INSERT INTO product_customerinfo + SELECT * + FROM product_supplierinfo + WHERE supplierinfo_type = 'customer' + RETURNING id""", + ) + ids = [x[0] for x in cr.fetchall()] + if ids: + _move_model_in_data( + env, ids, 'product.supplierinfo', 'product.customerinfo') + cr.execute("CREATE SEQUENCE IF NOT EXISTS product_customerinfo_id_seq") + cr.execute("SELECT setval('product_customerinfo_id_seq', " + "(SELECT MAX(id) FROM product_customerinfo))") + cr.execute("ALTER TABLE product_customerinfo ALTER id " + "SET DEFAULT NEXTVAL('product_customerinfo_id_seq')") + openupgrade.logged_query( + cr, """ + DELETE + FROM product_supplierinfo + WHERE supplierinfo_type = 'customer'""", + ) + + +@openupgrade.migrate() +def migrate(env, version): + fill_product_customerinfo(env) From b045298f474273eae8865093a4029929e35295a2 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Thu, 24 Oct 2019 16:07:13 +0000 Subject: [PATCH 0065/1692] [UPD] README.rst [UPD] Update product_supplierinfo_for_customer.pot --- .../product_supplierinfo_for_customer.pot | 245 +++++++++++++++--- .../static/description/index.html | 2 +- 2 files changed, 214 insertions(+), 33 deletions(-) diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index 21178568a56..3ea62cf1f56 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot @@ -13,103 +13,284 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sequence +msgid "Assigns the priority to the list of product vendor." +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_pricelist_item__base +msgid "Base price for computation.\n" +"Public Price: The base price will be the Sale/public Price.\n" +"Cost Price : The base price will be the cost price.\n" +"Other Pricelist : Computation of the base price based on another Pricelist." +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_pricelist_item__base +msgid "Based on" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__company_id +msgid "Company" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_res_partner msgid "Contact" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_customer_ids -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_customer_ids -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_customer_ids -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_customer_ids -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view -#: selection:product.supplierinfo,supplierinfo_type:0 +#: selection:product.pricelist.item,base:0 +msgid "Cost" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__create_uid +msgid "Created by" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__create_date +msgid "Created on" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__currency_id +msgid "Currency" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__name +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product__customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template__customer_ids +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer Information" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#: model:ir.model,name:product_supplierinfo_for_customer.model_product_customerinfo +msgid "Customer Pricelist" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer Product Code" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer Product Name" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_template_form_view +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__name +msgid "Customer of this product" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_template_form_view msgid "Customers" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.model,name:product_supplierinfo_for_customer.model_product_supplierinfo -msgid "Information about a product vendor" +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__delay +msgid "Delivery Lead Time" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__display_name +msgid "Display Name" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__date_end +msgid "End Date" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__date_end +msgid "End date for this vendor price" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__id +msgid "ID" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__product_id +msgid "If not set, the vendor price will apply to all variants of this product." +msgstr "" + +#. module: product_supplierinfo_for_customer +#: code:addons/product_supplierinfo_for_customer/models/product_customerinfo.py:21 +#, python-format +msgid "Import Template for Customer Pricelists" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__write_uid +msgid "Last Updated by" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__delay +msgid "Lead time in days between the confirmation of the purchase order and the receipt of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning." +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__min_qty +msgid "Minimal Quantity" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#: selection:product.pricelist.item,base:0 +msgid "Other Pricelist" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: selection:product.pricelist.item,base:0 +msgid "Partner Prices on the product form" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__price +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Price" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Price List" msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_pricelist_item -msgid "Pricelist item" +msgid "Pricelist Item" msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_product -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_tree_view +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Product" msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model,name:product_supplierinfo_for_customer.model_product_template +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__product_tmpl_id msgid "Product Template" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_supplier_ids -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product_variant_supplier_ids -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_supplier_ids -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template_variant_supplier_ids -#: selection:product.supplierinfo,supplierinfo_type:0 -msgid "Supplier" +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__product_id +msgid "Product Variant" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: selection:product.pricelist.item,base:0 +msgid "Public Price" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence +msgid "Sequence" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__date_start +msgid "Start Date" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__date_start +msgid "Start date for this vendor price" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo_supplierinfo_type -msgid "Type" +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__min_qty +msgid "The minimal quantity to purchase from this vendor, expressed in the vendor Product Unit of Measure if not any, in the default unit of measure of the product otherwise." msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__price +msgid "The price to purchase a product" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__product_uom +msgid "This comes from the product form." +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__product_code +msgid "This vendor's product code will be used when printing a request for quotation. Keep empty to use the internal one." +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__product_name +msgid "This vendor's product name will be used when printing a request for quotation. Keep empty to use the internal one." +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__product_uom +msgid "Unit of Measure" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Validity" msgstr "" #. module: product_supplierinfo_for_customer -#: model:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_supplierinfo_customer_form_view +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__product_variant_count +msgid "Variant Count" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product__variant_customer_ids +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template__variant_customer_ids +msgid "Variant Customer" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__product_code +msgid "Vendor Product Code" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__product_name +msgid "Vendor Product Name" +msgstr "" + +#. module: product_supplierinfo_for_customer +#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "to" msgstr "" diff --git a/product_supplierinfo_for_customer/static/description/index.html b/product_supplierinfo_for_customer/static/description/index.html index 4f64f647594..e1d68fab3f1 100644 --- a/product_supplierinfo_for_customer/static/description/index.html +++ b/product_supplierinfo_for_customer/static/description/index.html @@ -3,7 +3,7 @@ - + Product Supplierinfo for Customers + + +
    +

    Product Variant Attribute Name Manager

    + + +

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

    +

    Manage how to display the attributes on the product variant name.

    +
      +
    • Choose if you want to display the name of the attribute before its value.
    • +
    • Set a short name to be displayed as the attribute’s name.
    • +
    • Set the order of the attributes for each product.
    • +
    +

    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

    +
      +
    • ForgeFlow
    • +
    +
    +
    +

    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:

    +

    oriolvforgeflow

    +

    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 ca9edcae4516662eaf85d7633e4e37c86848d1ef Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 10 Dec 2021 17:29:00 +0000 Subject: [PATCH 0093/1692] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 product_variant_attribute_name_manager/static/description/icon.png diff --git a/product_variant_attribute_name_manager/static/description/icon.png b/product_variant_attribute_name_manager/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 bcb627bc70b84732fa1498593b0b87de9ff228b7 Mon Sep 17 00:00:00 2001 From: OriolVForgeFlow Date: Tue, 28 Dec 2021 17:43:47 +0100 Subject: [PATCH 0094/1692] product_variant_attribute_name_manager: Migration to 14.0 --- product_variant_attribute_name_manager/__manifest__.py | 4 ++-- .../models/product_attribute.py | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/product_variant_attribute_name_manager/__manifest__.py b/product_variant_attribute_name_manager/__manifest__.py index 8368c471872..83ffc631657 100644 --- a/product_variant_attribute_name_manager/__manifest__.py +++ b/product_variant_attribute_name_manager/__manifest__.py @@ -1,10 +1,10 @@ { "name": "Product Variant Attribute Name Manager", - "summary": """Manage how to display the attributes on the product variant name.""", + "summary": "Manage how to display the attributes on the product variant name.", "author": "ForgeFlow, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "category": "Product", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "depends": ["product"], "data": ["views/product_variant_attribute_name_manager_view.xml"], "license": "AGPL-3", diff --git a/product_variant_attribute_name_manager/models/product_attribute.py b/product_variant_attribute_name_manager/models/product_attribute.py index 3f6858d08a5..51e926d19de 100644 --- a/product_variant_attribute_name_manager/models/product_attribute.py +++ b/product_variant_attribute_name_manager/models/product_attribute.py @@ -35,13 +35,13 @@ def _get_combination_name(self): ): if ptav.attribute_id.display_attribute_name: if ptav.attribute_id.short_name: - display_ptav_list += [ + display_ptav_list.append( "%s: %s" % (ptav.attribute_id.short_name, ptav.name) - ] + ) else: - display_ptav_list += [ + display_ptav_list.append( "%s: %s" % (ptav.attribute_id.name, ptav.name) - ] + ) else: - display_ptav_list += [ptav.name] + display_ptav_list.append(ptav.name) return ", ".join(display_ptav_list) From c0e98af791b6d83f48f36b46e8cec029a1d26154 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Wed, 12 Jan 2022 11:11:09 +0000 Subject: [PATCH 0095/1692] Update product_variant_attribute_name_manager.pot --- ...product_variant_attribute_name_manager.pot | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/product_variant_attribute_name_manager/i18n/product_variant_attribute_name_manager.pot b/product_variant_attribute_name_manager/i18n/product_variant_attribute_name_manager.pot index a8b67926a4d..17563fc93c9 100644 --- a/product_variant_attribute_name_manager/i18n/product_variant_attribute_name_manager.pot +++ b/product_variant_attribute_name_manager/i18n/product_variant_attribute_name_manager.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" @@ -23,17 +23,38 @@ msgstr "" msgid "Display Attribute Name on Product Variant" msgstr "" +#. module: product_variant_attribute_name_manager +#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_attribute__display_name +#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_line__display_name +#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_value__display_name +msgid "Display Name" +msgstr "" + #. module: product_variant_attribute_name_manager #: model:ir.model.fields,help:product_variant_attribute_name_manager.field_product_attribute__short_name msgid "Displayed as the variant attribute name." msgstr "" +#. module: product_variant_attribute_name_manager +#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_attribute__id +#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_line__id +#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_value__id +msgid "ID" +msgstr "" + #. module: product_variant_attribute_name_manager #: model:ir.model.fields,help:product_variant_attribute_name_manager.field_product_attribute__display_attribute_name msgid "" "If checked, it will display the variant attribute name before its value." msgstr "" +#. module: product_variant_attribute_name_manager +#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_attribute____last_update +#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_line____last_update +#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_value____last_update +msgid "Last Modified on" +msgstr "" + #. module: product_variant_attribute_name_manager #: model:ir.model,name:product_variant_attribute_name_manager.model_product_attribute msgid "Product Attribute" From 096698458d2acdf10cd956419c1654d3db778532 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 12 Jan 2022 11:33:37 +0000 Subject: [PATCH 0096/1692] README.rst --- product_variant_attribute_name_manager/README.rst | 10 +++++----- .../static/description/index.html | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/product_variant_attribute_name_manager/README.rst b/product_variant_attribute_name_manager/README.rst index 4212021a28c..394ce5ac657 100644 --- a/product_variant_attribute_name_manager/README.rst +++ b/product_variant_attribute_name_manager/README.rst @@ -14,13 +14,13 @@ Product Variant Attribute Name Manager :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_variant_attribute_name_manager + :target: https://github.com/OCA/product-attribute/tree/14.0/product_variant_attribute_name_manager :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_variant_attribute_name_manager + :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_variant_attribute_name_manager :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| @@ -42,7 +42,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. @@ -80,6 +80,6 @@ Current `maintainer `__: |maintainer-oriolvforgeflow| -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_variant_attribute_name_manager/static/description/index.html b/product_variant_attribute_name_manager/static/description/index.html index 5dbe1efcdeb..72bff9233bb 100644 --- a/product_variant_attribute_name_manager/static/description/index.html +++ b/product_variant_attribute_name_manager/static/description/index.html @@ -367,7 +367,7 @@

    Product Variant Attribute Name Manager

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

    Manage how to display the attributes on the product variant name.

    • Choose if you want to display the name of the attribute before its value.
    • @@ -391,7 +391,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.

      @@ -417,7 +417,7 @@

      Maintainers

      promote its widespread use.

      Current maintainer:

      oriolvforgeflow

      -

      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 03b4a7b304424afe0b9a34abcb2db25a49bd5ebc Mon Sep 17 00:00:00 2001 From: OriolVForgeFlow Date: Wed, 12 Jan 2022 13:20:19 +0100 Subject: [PATCH 0097/1692] product_variant_attribute_name_manager: Migration to 15.0 --- product_variant_attribute_name_manager/__manifest__.py | 2 +- .../models/product_attribute.py | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/product_variant_attribute_name_manager/__manifest__.py b/product_variant_attribute_name_manager/__manifest__.py index 83ffc631657..5b6a576f37a 100644 --- a/product_variant_attribute_name_manager/__manifest__.py +++ b/product_variant_attribute_name_manager/__manifest__.py @@ -4,7 +4,7 @@ "author": "ForgeFlow, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "category": "Product", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "depends": ["product"], "data": ["views/product_variant_attribute_name_manager_view.xml"], "license": "AGPL-3", diff --git a/product_variant_attribute_name_manager/models/product_attribute.py b/product_variant_attribute_name_manager/models/product_attribute.py index 51e926d19de..4c3c33cf40a 100644 --- a/product_variant_attribute_name_manager/models/product_attribute.py +++ b/product_variant_attribute_name_manager/models/product_attribute.py @@ -4,9 +4,7 @@ class ProductAttribute(models.Model): _inherit = "product.attribute" - short_name = fields.Char( - "Short Name", help="Displayed as the variant attribute name." - ) + short_name = fields.Char(help="Displayed as the variant attribute name.") display_attribute_name = fields.Boolean( "Display Attribute Name on Product Variant", help="If checked, it will display the variant attribute name before its value.", @@ -16,9 +14,7 @@ class ProductAttribute(models.Model): class ProductTemplateAttributeLine(models.Model): _inherit = "product.template.attribute.line" - sequence = fields.Integer( - "Sequence", help="Determine the display order", index=True - ) + sequence = fields.Integer(help="Determine the display order", index=True) class ProductTemplateAttributeValue(models.Model): From 5a5bd1286bf72db03f2907d660d4c53bdda17f4d Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 1 Aug 2022 11:23:56 +0000 Subject: [PATCH 0098/1692] Update product_variant_attribute_name_manager.pot --- ...product_variant_attribute_name_manager.pot | 23 +------------------ 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/product_variant_attribute_name_manager/i18n/product_variant_attribute_name_manager.pot b/product_variant_attribute_name_manager/i18n/product_variant_attribute_name_manager.pot index 17563fc93c9..d92afbf3bd9 100644 --- a/product_variant_attribute_name_manager/i18n/product_variant_attribute_name_manager.pot +++ b/product_variant_attribute_name_manager/i18n/product_variant_attribute_name_manager.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" @@ -23,38 +23,17 @@ msgstr "" msgid "Display Attribute Name on Product Variant" msgstr "" -#. module: product_variant_attribute_name_manager -#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_attribute__display_name -#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_line__display_name -#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_value__display_name -msgid "Display Name" -msgstr "" - #. module: product_variant_attribute_name_manager #: model:ir.model.fields,help:product_variant_attribute_name_manager.field_product_attribute__short_name msgid "Displayed as the variant attribute name." msgstr "" -#. module: product_variant_attribute_name_manager -#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_attribute__id -#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_line__id -#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_value__id -msgid "ID" -msgstr "" - #. module: product_variant_attribute_name_manager #: model:ir.model.fields,help:product_variant_attribute_name_manager.field_product_attribute__display_attribute_name msgid "" "If checked, it will display the variant attribute name before its value." msgstr "" -#. module: product_variant_attribute_name_manager -#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_attribute____last_update -#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_line____last_update -#: model:ir.model.fields,field_description:product_variant_attribute_name_manager.field_product_template_attribute_value____last_update -msgid "Last Modified on" -msgstr "" - #. module: product_variant_attribute_name_manager #: model:ir.model,name:product_variant_attribute_name_manager.model_product_attribute msgid "Product Attribute" From e8f0c789627130f83942b4ca8ee501b9f6afc905 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 1 Aug 2022 11:27:15 +0000 Subject: [PATCH 0099/1692] README.rst --- product_variant_attribute_name_manager/README.rst | 10 +++++----- .../static/description/index.html | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/product_variant_attribute_name_manager/README.rst b/product_variant_attribute_name_manager/README.rst index 394ce5ac657..22a2dc54dae 100644 --- a/product_variant_attribute_name_manager/README.rst +++ b/product_variant_attribute_name_manager/README.rst @@ -14,13 +14,13 @@ Product Variant Attribute Name Manager :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_variant_attribute_name_manager + :target: https://github.com/OCA/product-attribute/tree/15.0/product_variant_attribute_name_manager :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_variant_attribute_name_manager + :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_variant_attribute_name_manager :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| @@ -42,7 +42,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. @@ -80,6 +80,6 @@ Current `maintainer `__: |maintainer-oriolvforgeflow| -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_variant_attribute_name_manager/static/description/index.html b/product_variant_attribute_name_manager/static/description/index.html index 72bff9233bb..344290ed716 100644 --- a/product_variant_attribute_name_manager/static/description/index.html +++ b/product_variant_attribute_name_manager/static/description/index.html @@ -367,7 +367,7 @@

      Product Variant Attribute Name Manager

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

      Manage how to display the attributes on the product variant name.

      • Choose if you want to display the name of the attribute before its value.
      • @@ -391,7 +391,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.

        @@ -417,7 +417,7 @@

        Maintainers

        promote its widespread use.

        Current maintainer:

        oriolvforgeflow

        -

        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 3bc7ad6460be19f88e4748f9c1c20b9c11f9a01b Mon Sep 17 00:00:00 2001 From: Nikul-OSI Date: Mon, 26 Dec 2022 17:33:23 +0530 Subject: [PATCH 0100/1692] [MIG] product_variant_attribute_name_manager: Migration to v16 --- .../README.rst | 2 ++ .../__manifest__.py | 2 +- .../models/product_attribute.py | 12 ++++---- .../readme/CONTRIBUTORS.rst | 2 ++ ..._product_variant_attribute_name_manager.py | 28 +++++++++---------- ...ct_variant_attribute_name_manager_view.xml | 1 - .../product_variant_attribute_name_manager | 1 + .../setup.py | 6 ++++ 8 files changed, 30 insertions(+), 24 deletions(-) create mode 120000 setup/product_variant_attribute_name_manager/odoo/addons/product_variant_attribute_name_manager create mode 100644 setup/product_variant_attribute_name_manager/setup.py diff --git a/product_variant_attribute_name_manager/README.rst b/product_variant_attribute_name_manager/README.rst index 22a2dc54dae..64e1d666c4d 100644 --- a/product_variant_attribute_name_manager/README.rst +++ b/product_variant_attribute_name_manager/README.rst @@ -58,6 +58,8 @@ Contributors ~~~~~~~~~~~~ * Oriol Villamayor +* Daniel Reis +* Nikul Chaudhary Maintainers ~~~~~~~~~~~ diff --git a/product_variant_attribute_name_manager/__manifest__.py b/product_variant_attribute_name_manager/__manifest__.py index 5b6a576f37a..1a62dc41d6f 100644 --- a/product_variant_attribute_name_manager/__manifest__.py +++ b/product_variant_attribute_name_manager/__manifest__.py @@ -4,7 +4,7 @@ "author": "ForgeFlow, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "category": "Product", - "version": "15.0.1.0.0", + "version": "16.0.1.0.0", "depends": ["product"], "data": ["views/product_variant_attribute_name_manager_view.xml"], "license": "AGPL-3", diff --git a/product_variant_attribute_name_manager/models/product_attribute.py b/product_variant_attribute_name_manager/models/product_attribute.py index 4c3c33cf40a..410f71fbd47 100644 --- a/product_variant_attribute_name_manager/models/product_attribute.py +++ b/product_variant_attribute_name_manager/models/product_attribute.py @@ -30,14 +30,12 @@ def _get_combination_name(self): key=lambda seq: seq.attribute_line_id.sequence, ): if ptav.attribute_id.display_attribute_name: - if ptav.attribute_id.short_name: - display_ptav_list.append( - "%s: %s" % (ptav.attribute_id.short_name, ptav.name) - ) - else: - display_ptav_list.append( - "%s: %s" % (ptav.attribute_id.name, ptav.name) + display_ptav_list.append( + "{}: {}".format( + ptav.attribute_id.short_name or ptav.attribute_id.name, + ptav.name, ) + ) else: display_ptav_list.append(ptav.name) return ", ".join(display_ptav_list) diff --git a/product_variant_attribute_name_manager/readme/CONTRIBUTORS.rst b/product_variant_attribute_name_manager/readme/CONTRIBUTORS.rst index 487aa377995..4d32929f62e 100644 --- a/product_variant_attribute_name_manager/readme/CONTRIBUTORS.rst +++ b/product_variant_attribute_name_manager/readme/CONTRIBUTORS.rst @@ -1 +1,3 @@ * Oriol Villamayor +* Daniel Reis +* Nikul Chaudhary diff --git a/product_variant_attribute_name_manager/tests/test_product_variant_attribute_name_manager.py b/product_variant_attribute_name_manager/tests/test_product_variant_attribute_name_manager.py index 85bd3ef9f18..092f48abf70 100644 --- a/product_variant_attribute_name_manager/tests/test_product_variant_attribute_name_manager.py +++ b/product_variant_attribute_name_manager/tests/test_product_variant_attribute_name_manager.py @@ -1,6 +1,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. - - from odoo.tests import tagged from odoo.tests.common import TransactionCase @@ -10,16 +8,16 @@ class TestProductTemplateAttributeValue(TransactionCase): def setUp(self): super(TestProductTemplateAttributeValue, self).setUp() - self.computer = self.env["product.template"].create( - {"name": "Super Computer", "price": 2000} - ) + self.product_attr_value_obj = self.env["product.attribute.value"] + self.product_attr_obj = self.env["product.attribute"] + self.computer = self.env["product.template"].create({"name": "Super Computer"}) self._add_ssd_attribute() self._add_ram_attribute() self._add_hdd_attribute() def _add_ssd_attribute(self): - self.ssd_attribute = self.env["product.attribute"].create( + self.ssd_attribute = self.product_attr_obj.create( { "name": "Memory", "short_name": "Mem", @@ -27,10 +25,10 @@ def _add_ssd_attribute(self): "sequence": 1, } ) - self.ssd_256 = self.env["product.attribute.value"].create( + self.ssd_256 = self.product_attr_value_obj.create( {"name": "256 GB", "attribute_id": self.ssd_attribute.id, "sequence": 1} ) - self.ssd_512 = self.env["product.attribute.value"].create( + self.ssd_512 = self.product_attr_value_obj.create( {"name": "512 GB", "attribute_id": self.ssd_attribute.id, "sequence": 2} ) @@ -46,16 +44,16 @@ def _add_ssd_attribute(self): ) def _add_ram_attribute(self): - self.ram_attribute = self.env["product.attribute"].create( + self.ram_attribute = self.product_attr_obj.create( {"name": "RAM", "display_attribute_name": True, "sequence": 2} ) - self.ram_8 = self.env["product.attribute.value"].create( + self.ram_8 = self.product_attr_value_obj.create( {"name": "8 GB", "attribute_id": self.ram_attribute.id, "sequence": 1} ) - self.ram_16 = self.env["product.attribute.value"].create( + self.ram_16 = self.product_attr_value_obj.create( {"name": "16 GB", "attribute_id": self.ram_attribute.id, "sequence": 2} ) - self.ram_32 = self.env["product.attribute.value"].create( + self.ram_32 = self.product_attr_value_obj.create( {"name": "32 GB", "attribute_id": self.ram_attribute.id, "sequence": 3} ) self.computer_ram_attribute_lines = self.env[ @@ -70,13 +68,13 @@ def _add_ram_attribute(self): ) def _add_hdd_attribute(self): - self.hdd_attribute = self.env["product.attribute"].create( + self.hdd_attribute = self.product_attr_obj.create( {"name": "HDD", "sequence": 3} ) - self.hdd_1 = self.env["product.attribute.value"].create( + self.hdd_1 = self.product_attr_value_obj.create( {"name": "1 To", "attribute_id": self.hdd_attribute.id, "sequence": 1} ) - self.hdd_2 = self.env["product.attribute.value"].create( + self.hdd_2 = self.product_attr_value_obj.create( {"name": "2 To", "attribute_id": self.hdd_attribute.id, "sequence": 2} ) diff --git a/product_variant_attribute_name_manager/views/product_variant_attribute_name_manager_view.xml b/product_variant_attribute_name_manager/views/product_variant_attribute_name_manager_view.xml index 36f7f1065fb..57f3448a6ff 100644 --- a/product_variant_attribute_name_manager/views/product_variant_attribute_name_manager_view.xml +++ b/product_variant_attribute_name_manager/views/product_variant_attribute_name_manager_view.xml @@ -1,4 +1,3 @@ - diff --git a/setup/product_variant_attribute_name_manager/odoo/addons/product_variant_attribute_name_manager b/setup/product_variant_attribute_name_manager/odoo/addons/product_variant_attribute_name_manager new file mode 120000 index 00000000000..21760c14e00 --- /dev/null +++ b/setup/product_variant_attribute_name_manager/odoo/addons/product_variant_attribute_name_manager @@ -0,0 +1 @@ +../../../../product_variant_attribute_name_manager \ No newline at end of file diff --git a/setup/product_variant_attribute_name_manager/setup.py b/setup/product_variant_attribute_name_manager/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/product_variant_attribute_name_manager/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 1786f0f3151ddf672913e0ff94c8c28b18d897fe Mon Sep 17 00:00:00 2001 From: Francesco Foresti Date: Thu, 29 Dec 2022 14:50:30 +0000 Subject: [PATCH 0101/1692] Translated using Weblate (Italian) Currently translated at 66.6% (18 of 27 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_assortment Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_assortment/it/ --- product_assortment/i18n/it.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/product_assortment/i18n/it.po b/product_assortment/i18n/it.po index 587dda1471d..4aa64e9e029 100644 --- a/product_assortment/i18n/it.po +++ b/product_assortment/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2022-04-21 13:05+0000\n" +"PO-Revision-Date: 2022-12-29 17:46+0000\n" "Last-Translator: Francesco Foresti \n" "Language-Team: none\n" "Language: it\n" @@ -14,7 +14,7 @@ msgstr "" "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_assortment #: model_terms:ir.ui.view,arch_db:product_assortment.product_assortment_view_form @@ -113,7 +113,7 @@ msgstr "Partner da applicare" #. module: product_assortment #: model_terms:ir.ui.view,arch_db:product_assortment.product_product_view_tree msgid "Product" -msgstr "prodotto" +msgstr "Prodotto" #. module: product_assortment #: model:ir.ui.menu,name:product_assortment.menu_product_assortments From c33696a2b0221a203a2386d3fa42227c1c2a3cee Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 30 Dec 2022 16:16:31 +0000 Subject: [PATCH 0102/1692] [UPD] Update product_uom_measure_type.pot --- product_uom_measure_type/i18n/product_uom_measure_type.pot | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/product_uom_measure_type/i18n/product_uom_measure_type.pot b/product_uom_measure_type/i18n/product_uom_measure_type.pot index 3447a4181c4..6ebdf14e280 100644 --- a/product_uom_measure_type/i18n/product_uom_measure_type.pot +++ b/product_uom_measure_type/i18n/product_uom_measure_type.pot @@ -1,13 +1,11 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_uom_measure_type +# * product_uom_measure_type # msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-08 23:55+0000\n" -"PO-Revision-Date: 2022-11-08 23:55+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -75,4 +73,4 @@ msgstr "" #. module: product_uom_measure_type #: model:ir.model.constraint,message:product_uom_measure_type.constraint_uom_category_uom_category_unique_type msgid "You can have only one category per measurement type." -msgstr "" \ No newline at end of file +msgstr "" From d0f766bfa79b7725a75844aa8cbf694eed768677 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 30 Dec 2022 16:27:36 +0000 Subject: [PATCH 0103/1692] [UPD] addons table in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8bb2e669d90..f9a65bed6ab 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ addon | version | maintainers | summary [product_packaging_dimension](product_packaging_dimension/) | 16.0.1.0.1 | | Manage packaging dimensions and weight [product_sequence](product_sequence/) | 16.0.1.0.2 | | Product Sequence [product_state](product_state/) | 16.0.1.0.0 | [![emagdalenaC2i](https://github.com/emagdalenaC2i.png?size=30px)](https://github.com/emagdalenaC2i) | Module introducing a state field on product template +[product_uom_measure_type](product_uom_measure_type/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Product - UoM Measure Type [//]: # (end addons) From 0161cc6d9c5858066f49439c06aa2fdc0ba549aa Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 30 Dec 2022 16:27:40 +0000 Subject: [PATCH 0104/1692] [UPD] README.rst --- product_uom_measure_type/README.rst | 26 +++++------ .../static/description/index.html | 45 +++++++++---------- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/product_uom_measure_type/README.rst b/product_uom_measure_type/README.rst index c167a34f171..e4800b1aec4 100644 --- a/product_uom_measure_type/README.rst +++ b/product_uom_measure_type/README.rst @@ -14,19 +14,25 @@ Product - UoM Measure Type :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_uom_measure_type + :target: https://github.com/OCA/product-attribute/tree/16.0/product_uom_measure_type :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_uom_measure_type + :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_uom_measure_type :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 + :target: https://runbot.odoo-community.org/runbot/135/16.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| -This module add a simple related field ``uom_measure_type`` that is related to the field -``measure_type`` of the uom category of the main uom of the product. +This module extend the product module. + +* It adds a new selection field ``measure_type`` + on ``uom.category`` and ``uom.uom`` models. + This fields was present until the V13 in odoo ``uom`` module. + +* It adds a related field ``uom_measure_type`` on the ``product.template`` model. + It is a technical module that doesn't add any feature by itself. **Table of contents** @@ -34,19 +40,13 @@ It is a technical module that doesn't add any feature by itself. .. contents:: :local: -Known issues / Roadmap -====================== - -* For V14+, the field ``measure_type`` has been removed from odoo product module. - so when porting this module, we should add again this removed field on ``uom.category`` model. - 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. @@ -84,6 +84,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_uom_measure_type/static/description/index.html b/product_uom_measure_type/static/description/index.html index 2bac0941730..7e1ccb4e1e8 100644 --- a/product_uom_measure_type/static/description/index.html +++ b/product_uom_measure_type/static/description/index.html @@ -367,54 +367,51 @@

        Product - UoM Measure Type

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

        -

        This module add a simple related field uom_measure_type that is related to the field -measure_type of the uom category of the main uom of the product. -It is a technical module that doesn’t add any feature by itself.

        +

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

        +

        This module extend the product module.

        +
          +
        • It adds a new selection field measure_type +on uom.category and uom.uom models. +This fields was present until the V13 in odoo uom module.
        • +
        • It adds a related field uom_measure_type on the product.template model.
        • +
        +

        It is a technical module that doesn’t add any feature by itself.

        Table of contents

        -
        -

        Known issues / Roadmap

        -
          -
        • For V14+, the field measure_type has been removed from odoo product module. -so when porting this module, we should add again this removed field on uom.category model.
        • -
        -
        -

        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

        • GRAP
        -

        Maintainers

        +

        Maintainers

        This module is maintained by the OCA.

        Odoo Community Association

        OCA, or the Odoo Community Association, is a nonprofit organization whose @@ -422,7 +419,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 0acb93a75c6fd46e7d7ea36a5bb93f9d1f6ff5c4 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 30 Dec 2022 16:27:41 +0000 Subject: [PATCH 0105/1692] [ADD] setup.py --- setup/_metapackage/VERSION.txt | 2 +- setup/_metapackage/setup.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt index 51a75f9336b..debf75e0681 100644 --- a/setup/_metapackage/VERSION.txt +++ b/setup/_metapackage/VERSION.txt @@ -1 +1 @@ -16.0.20221205.1 \ No newline at end of file +16.0.20221230.0 \ No newline at end of file diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py index d06aa4e2089..3c355ecc348 100644 --- a/setup/_metapackage/setup.py +++ b/setup/_metapackage/setup.py @@ -18,6 +18,7 @@ 'odoo-addon-product_packaging_dimension>=16.0dev,<16.1dev', 'odoo-addon-product_sequence>=16.0dev,<16.1dev', 'odoo-addon-product_state>=16.0dev,<16.1dev', + 'odoo-addon-product_uom_measure_type>=16.0dev,<16.1dev', ], classifiers=[ 'Programming Language :: Python', From 17064c40e77f916689cdded1a500050ea72c058d Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 30 Dec 2022 20:12:37 +0000 Subject: [PATCH 0106/1692] 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_uom_measure_type Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_uom_measure_type/ --- product_uom_measure_type/i18n/fr.po | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/product_uom_measure_type/i18n/fr.po b/product_uom_measure_type/i18n/fr.po index fa505fc08e7..e82c135efce 100644 --- a/product_uom_measure_type/i18n/fr.po +++ b/product_uom_measure_type/i18n/fr.po @@ -10,6 +10,7 @@ msgstr "" "PO-Revision-Date: 2022-11-08 23:56+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" @@ -75,4 +76,5 @@ msgstr "Temps de travail" #. module: product_uom_measure_type #: model:ir.model.constraint,message:product_uom_measure_type.constraint_uom_category_uom_category_unique_type msgid "You can have only one category per measurement type." -msgstr "Vous pouvez seulement avoir une catégorie de mesure par type de mesure." +msgstr "" +"Vous pouvez seulement avoir une catégorie de mesure par type de mesure." From b07accdee9ea15bf76dd79aa4fb72776f1edc96e Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Fri, 16 Nov 2018 16:36:31 +0100 Subject: [PATCH 0107/1692] [11.0][ADD] product_cost_security: New module to restrict product cost view --- product_cost_security/__init__.py | 2 ++ product_cost_security/__manifest__.py | 20 +++++++++++ product_cost_security/l18n/es.po | 33 ++++++++++++++++++ product_cost_security/models/__init__.py | 2 ++ product_cost_security/models/product.py | 19 ++++++++++ product_cost_security/readme/CONTRIBUTORS.rst | 1 + product_cost_security/readme/DESCRIPTION.rst | 2 ++ product_cost_security/readme/USAGE.rst | 6 ++++ .../security/product_cost_security.xml | 10 ++++++ .../static/description/icon.png | Bin 0 -> 9455 bytes 10 files changed, 95 insertions(+) create mode 100644 product_cost_security/__init__.py create mode 100644 product_cost_security/__manifest__.py create mode 100644 product_cost_security/l18n/es.po create mode 100644 product_cost_security/models/__init__.py create mode 100644 product_cost_security/models/product.py create mode 100644 product_cost_security/readme/CONTRIBUTORS.rst create mode 100644 product_cost_security/readme/DESCRIPTION.rst create mode 100644 product_cost_security/readme/USAGE.rst create mode 100644 product_cost_security/security/product_cost_security.xml create mode 100644 product_cost_security/static/description/icon.png diff --git a/product_cost_security/__init__.py b/product_cost_security/__init__.py new file mode 100644 index 00000000000..3275ac2adf3 --- /dev/null +++ b/product_cost_security/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import models diff --git a/product_cost_security/__manifest__.py b/product_cost_security/__manifest__.py new file mode 100644 index 00000000000..307ba5df9df --- /dev/null +++ b/product_cost_security/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + 'name': 'Product Cost Security', + 'summary': 'Product cost security restriction view', + 'version': '11.0.1.0.0', + 'development_status': 'Beta', + 'category': 'Product', + 'website': 'https://github.com/OCA/product-attribute', + 'author': 'Tecnativa, Odoo Community Association (OCA)', + 'license': 'AGPL-3', + 'application': False, + 'installable': True, + 'depends': [ + 'product', + ], + 'data': [ + 'security/product_cost_security.xml', + ], +} diff --git a/product_cost_security/l18n/es.po b/product_cost_security/l18n/es.po new file mode 100644 index 00000000000..1f02ace8d45 --- /dev/null +++ b/product_cost_security/l18n/es.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_cost_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-11-16 15:34+0000\n" +"PO-Revision-Date: 2018-11-16 16:35+0100\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.6\n" +"Last-Translator: \n" +"Language: es\n" + +#. module: product_cost_security +#: model:res.groups,name:product_cost_security.group_product_cost +msgid "Access to product costs" +msgstr "Acceso a ver el coste de productos" + +#. module: product_cost_security +#: model:ir.model,name:product_cost_security.model_product_product +msgid "Product" +msgstr "Producto" + +#. module: product_cost_security +#: model:ir.model,name:product_cost_security.model_product_template +msgid "Product Template" +msgstr "Plantilla de producto" diff --git a/product_cost_security/models/__init__.py b/product_cost_security/models/__init__.py new file mode 100644 index 00000000000..05b2491b81e --- /dev/null +++ b/product_cost_security/models/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import product diff --git a/product_cost_security/models/product.py b/product_cost_security/models/product.py new file mode 100644 index 00000000000..930295b4d3b --- /dev/null +++ b/product_cost_security/models/product.py @@ -0,0 +1,19 @@ +# Copyright 2018 Sergio Teruel - Tecnativa +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + standard_price = fields.Float( + groups='product_cost_security.group_product_cost', + ) + + +class ProductProduct(models.Model): + _inherit = 'product.product' + + standard_price = fields.Float( + groups='product_cost_security.group_product_cost', + ) diff --git a/product_cost_security/readme/CONTRIBUTORS.rst b/product_cost_security/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..f24a0b0dc74 --- /dev/null +++ b/product_cost_security/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sergio Teruel diff --git a/product_cost_security/readme/DESCRIPTION.rst b/product_cost_security/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..67338debe44 --- /dev/null +++ b/product_cost_security/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +Add a security group for product standar_price field. +Only users with this group can view this field. diff --git a/product_cost_security/readme/USAGE.rst b/product_cost_security/readme/USAGE.rst new file mode 100644 index 00000000000..3bd7527284c --- /dev/null +++ b/product_cost_security/readme/USAGE.rst @@ -0,0 +1,6 @@ +To use this module you need to: + +#. Go to a *Setting > Users and Companies > Users*. +#. Select a user and add "Access to product costs" group. +#. Go to product form view logged with this user and you will see the + standard_price field. diff --git a/product_cost_security/security/product_cost_security.xml b/product_cost_security/security/product_cost_security.xml new file mode 100644 index 00000000000..25b9e4dd69c --- /dev/null +++ b/product_cost_security/security/product_cost_security.xml @@ -0,0 +1,10 @@ + + + + + Access to product costs + + + diff --git a/product_cost_security/static/description/icon.png b/product_cost_security/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 419c02ea1f5fb5ef79cd44096a0a4ea07d3222fa Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Tue, 20 Nov 2018 13:32:30 +0100 Subject: [PATCH 0108/1692] [11.0][ADD] product_cost_security: Fix translate folder name --- product_cost_security/README.rst | 90 ++++ product_cost_security/{l18n => i18n}/es.po | 0 product_cost_security/readme/CONFIGURE.rst | 4 + product_cost_security/readme/DESCRIPTION.rst | 2 +- product_cost_security/readme/USAGE.rst | 2 - .../security/product_cost_security.xml | 1 + .../static/description/index.html | 438 ++++++++++++++++++ 7 files changed, 534 insertions(+), 3 deletions(-) create mode 100644 product_cost_security/README.rst rename product_cost_security/{l18n => i18n}/es.po (100%) create mode 100644 product_cost_security/readme/CONFIGURE.rst create mode 100644 product_cost_security/static/description/index.html diff --git a/product_cost_security/README.rst b/product_cost_security/README.rst new file mode 100644 index 00000000000..9276cf40e55 --- /dev/null +++ b/product_cost_security/README.rst @@ -0,0 +1,90 @@ +===================== +Product Cost Security +===================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/11.0/product_cost_security + :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-11-0/product-attribute-11-0-product_cost_security + :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/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Adds a security group for product cost price field. +Only users with this group can view this field. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To use this module you need to: + +#. Go to a *Setting > Users and Companies > Users*. +#. Select a user and add "Access to product costs" group. + +Usage +===== + +To use this module you need to: + +#. Go to product form view logged with this user and you will see the + standard_price field. + +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 +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* Sergio Teruel + +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_cost_security/l18n/es.po b/product_cost_security/i18n/es.po similarity index 100% rename from product_cost_security/l18n/es.po rename to product_cost_security/i18n/es.po diff --git a/product_cost_security/readme/CONFIGURE.rst b/product_cost_security/readme/CONFIGURE.rst new file mode 100644 index 00000000000..d4e76b20070 --- /dev/null +++ b/product_cost_security/readme/CONFIGURE.rst @@ -0,0 +1,4 @@ +To use this module you need to: + +#. Go to a *Setting > Users and Companies > Users*. +#. Select a user and add "Access to product costs" group. diff --git a/product_cost_security/readme/DESCRIPTION.rst b/product_cost_security/readme/DESCRIPTION.rst index 67338debe44..16d432420d9 100644 --- a/product_cost_security/readme/DESCRIPTION.rst +++ b/product_cost_security/readme/DESCRIPTION.rst @@ -1,2 +1,2 @@ -Add a security group for product standar_price field. +Adds a security group for product cost price field. Only users with this group can view this field. diff --git a/product_cost_security/readme/USAGE.rst b/product_cost_security/readme/USAGE.rst index 3bd7527284c..bf4f7c65bda 100644 --- a/product_cost_security/readme/USAGE.rst +++ b/product_cost_security/readme/USAGE.rst @@ -1,6 +1,4 @@ To use this module you need to: -#. Go to a *Setting > Users and Companies > Users*. -#. Select a user and add "Access to product costs" group. #. Go to product form view logged with this user and you will see the standard_price field. diff --git a/product_cost_security/security/product_cost_security.xml b/product_cost_security/security/product_cost_security.xml index 25b9e4dd69c..f6ff974224c 100644 --- a/product_cost_security/security/product_cost_security.xml +++ b/product_cost_security/security/product_cost_security.xml @@ -5,6 +5,7 @@ --> Access to product costs +
        diff --git a/product_cost_security/static/description/index.html b/product_cost_security/static/description/index.html new file mode 100644 index 00000000000..ec1931bb2d1 --- /dev/null +++ b/product_cost_security/static/description/index.html @@ -0,0 +1,438 @@ + + + + + + +Product Cost Security + + + +
        +

        Product Cost Security

        + + +

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

        +

        Adds a security group for product cost price field. +Only users with this group can view this field.

        +

        Table of contents

        + +
        +

        Configuration

        +

        To use this module you need to:

        +
          +
        1. Go to a Setting > Users and Companies > Users.
        2. +
        3. Select a user and add “Access to product costs” group.
        4. +
        +
        +
        +

        Usage

        +

        To use this module you need to:

        +
          +
        1. Go to product form view logged with this user and you will see the +standard_price field.
        2. +
        +
        +
        +

        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

        +
          +
        • Tecnativa
        • +
        +
        +
        +

        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.

        +
        +
        +
        + + From 65c0d631051f09468592b0db6b25eb2f08a8d047 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Thu, 7 Mar 2019 13:28:06 +0100 Subject: [PATCH 0109/1692] [11.0][IMP] product_cost_security: Avoid use odoo PR 28755 https://github.com/odoo/odoo/pull/28755 --- product_cost_security/__manifest__.py | 1 + product_cost_security/views/product_views.xml | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100755 product_cost_security/views/product_views.xml diff --git a/product_cost_security/__manifest__.py b/product_cost_security/__manifest__.py index 307ba5df9df..e12d7ae35fb 100644 --- a/product_cost_security/__manifest__.py +++ b/product_cost_security/__manifest__.py @@ -16,5 +16,6 @@ ], 'data': [ 'security/product_cost_security.xml', + 'views/product_views.xml', ], } diff --git a/product_cost_security/views/product_views.xml b/product_cost_security/views/product_views.xml new file mode 100755 index 00000000000..4f84878533a --- /dev/null +++ b/product_cost_security/views/product_views.xml @@ -0,0 +1,24 @@ + + + + + + product.template + + + + + + + + + + + From f8f41b395729cd9278e0c9ee3217dae4c0fab230 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 22 Mar 2019 19:10:58 +0000 Subject: [PATCH 0110/1692] [UPD] Update product_cost_security.pot --- product_cost_security/i18n/es.po | 4 +-- .../i18n/product_cost_security.pot | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 product_cost_security/i18n/product_cost_security.pot diff --git a/product_cost_security/i18n/es.po b/product_cost_security/i18n/es.po index 1f02ace8d45..ca84753bf2e 100644 --- a/product_cost_security/i18n/es.po +++ b/product_cost_security/i18n/es.po @@ -8,14 +8,14 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-11-16 15:34+0000\n" "PO-Revision-Date: 2018-11-16 16:35+0100\n" +"Last-Translator: \n" "Language-Team: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.0.6\n" -"Last-Translator: \n" -"Language: es\n" #. module: product_cost_security #: model:res.groups,name:product_cost_security.group_product_cost diff --git a/product_cost_security/i18n/product_cost_security.pot b/product_cost_security/i18n/product_cost_security.pot new file mode 100644 index 00000000000..d99d3907075 --- /dev/null +++ b/product_cost_security/i18n/product_cost_security.pot @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_cost_security +# +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_cost_security +#: model:res.groups,name:product_cost_security.group_product_cost +msgid "Access to product costs" +msgstr "" + +#. module: product_cost_security +#: model:ir.model,name:product_cost_security.model_product_product +msgid "Product" +msgstr "" + +#. module: product_cost_security +#: model:ir.model,name:product_cost_security.model_product_template +msgid "Product Template" +msgstr "" + From e0f34345a4058fa3a425d5343b391256a02946be Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 29 Jul 2019 03:27:10 +0000 Subject: [PATCH 0111/1692] [UPD] README.rst --- product_cost_security/static/description/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_cost_security/static/description/index.html b/product_cost_security/static/description/index.html index ec1931bb2d1..70f55fdcb41 100644 --- a/product_cost_security/static/description/index.html +++ b/product_cost_security/static/description/index.html @@ -3,7 +3,7 @@ - + Product Cost Security + + +
        +

        product_category_archive

        + + +

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

        +

        This module allows you to archive product categories.

        +

        Table of contents

        + +
        +

        Usage

        +

        To use this module, you need to:

        +
          +
        1. Go to Inventory > Configuration > Products > Product categories.
        2. +
        3. Select a product category or create a new one.
        4. +
        5. Click on the smart button Archive (this action will set active +field to False).
        6. +
        +

        Note: If there are products in the category to be archived or any +of its children categories, an error will be raised and it won’t be archived.

        +

        Note 2: Children category are not archived/unarchived +when the parent category does.

        +
        +
        +

        Known issues / Roadmap

        +
          +
        • when you try to deactivate a category from the tree view +by clicking on the boolean_toggle widget, if a validation +error pop-up appears indicating that the element cannot be +deactivated, then the element is NOT deactivated, although +the corresponding line turns gray as if it had been disabled, +until that tree view is refreshed.
        • +
        +
        +
        +

        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

        +
          +
        • Tecnativa
        • +
        +
        +
        +

        Contributors

        +
          +
        • Tecnativa:
            +
          • Ernesto Tejeda
          • +
          • Pedro M. Baeza
          • +
          +
        • +
        +
        +
        +

        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_category_active/tests/__init__.py b/product_category_active/tests/__init__.py new file mode 100644 index 00000000000..3e83145f24d --- /dev/null +++ b/product_category_active/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import test_product_category_archive diff --git a/product_category_active/tests/test_product_category_archive.py b/product_category_active/tests/test_product_category_archive.py new file mode 100644 index 00000000000..8edb44e5793 --- /dev/null +++ b/product_category_active/tests/test_product_category_archive.py @@ -0,0 +1,48 @@ +# Copyright 2020 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo.tests import SavepointCase +from odoo.exceptions import ValidationError + + +class TestProductCategoryArchive(SavepointCase): + + @classmethod + def setUpClass(cls): + super(TestProductCategoryArchive, cls).setUpClass() + categ_obj = cls.env['product.category'] + product_obj = cls.env['product.template'] + cls.parent_categ = categ_obj.create({ + "name": "Parent category", + }) + cls.child_1 = categ_obj.create({ + "name": "child 1", + "parent_id": cls.parent_categ.id, + }) + cls.child_2 = categ_obj.create({ + "name": "child 2", + "parent_id": cls.parent_categ.id, + }) + cls.product_1 = product_obj.create({ + "name": "Product 1", + }) + + def test_dont_archive_non_empty_categories(self): + self.assertTrue(self.child_1.active) + self.assertTrue(self.child_2.active) + self.assertTrue(self.parent_categ.active) + self.product_1.categ_id = self.child_1.id + with self.assertRaises(ValidationError): + self.parent_categ.active = False + with self.assertRaises(ValidationError): + (self.child_1 | self.child_2).write({"active": False}) + with self.assertRaises(ValidationError): + self.child_1.active = False + + def test_archive_empty_categories(self): + self.assertTrue(self.child_1.active) + self.assertTrue(self.parent_categ.active) + self.child_1.active = False + self.parent_categ.active = False + self.assertFalse(self.child_1.active) + self.assertFalse(self.parent_categ.active) diff --git a/product_category_active/views/product_views.xml b/product_category_active/views/product_views.xml new file mode 100644 index 00000000000..a5753afd400 --- /dev/null +++ b/product_category_active/views/product_views.xml @@ -0,0 +1,35 @@ + + + + + product.category.form.inherit + product.category + + +
        + +
        +
        +
        + + product.category.list + product.category + + + + not active + + + + + + + + {"active_test": False} + +
        From ba4adc4887bcb9805b14a46b8adae947066e6426 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 15 May 2020 12:23:36 +0200 Subject: [PATCH 0141/1692] [FIX] product_category_archive: Constraint search refinement The problem why child_of was not working directly in the search is because there are involved inactive records that are excluded by default by the ORM. We need to disable that exlusion for a proper working, and it's needed because the other domain is not taking into account possible inactive categories in the middle of the hierarchy. --- product_category_active/i18n/es.po | 19 ++++----- .../i18n/product_category_active.pot | 36 ++++++++++++++++++ product_category_active/models/product.py | 8 ++-- .../static/description/icon.png | Bin 0 -> 9455 bytes 4 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 product_category_active/i18n/product_category_active.pot create mode 100644 product_category_active/static/description/icon.png diff --git a/product_category_active/i18n/es.po b/product_category_active/i18n/es.po index 5b15adf4464..59591531b46 100644 --- a/product_category_active/i18n/es.po +++ b/product_category_active/i18n/es.po @@ -17,13 +17,13 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.0.6\n" -#. module: product_category_archive -#: model:ir.model.fields,field_description:product_category_archive.field_product_category__active +#. module: product_category_active +#: model:ir.model.fields,field_description:product_category_active.field_product_category__active msgid "Active" msgstr "Activo" -#. module: product_category_archive -#: code:addons/product_category_archive/models/product.py:25 +#. module: product_category_active +#: code:addons/product_category_active/models/product.py:23 #, python-format msgid "" "At least one category that you are trying to archive or one of its children " @@ -32,15 +32,16 @@ msgstr "" "Al menos una de las categorías que se están intentando archivar o al menos " "una de sus hijas tiene uno o más productos asociados." -#. module: product_category_archive -#: model:ir.model.fields,help:product_category_archive.field_product_category__active +#. module: product_category_active +#: model:ir.model.fields,help:product_category_active.field_product_category__active msgid "" "If unchecked, it will allow you to hide the product category without " "removing it." msgstr "" -"Si no está marcado, permitirá ocultar la categoría de producto sin eliminarla." +"Si no está marcado, permitirá ocultar la categoría de producto sin " +"eliminarla." -#. module: product_category_archive -#: model:ir.model,name:product_category_archive.model_product_category +#. module: product_category_active +#: model:ir.model,name:product_category_active.model_product_category msgid "Product Category" msgstr "Categoría de producto" diff --git a/product_category_active/i18n/product_category_active.pot b/product_category_active/i18n/product_category_active.pot new file mode 100644 index 00000000000..1e3d07bf0d4 --- /dev/null +++ b/product_category_active/i18n/product_category_active.pot @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_active +# +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_category_active +#: model:ir.model.fields,field_description:product_category_active.field_product_category__active +msgid "Active" +msgstr "" + +#. module: product_category_active +#: code:addons/product_category_active/models/product.py:23 +#, python-format +msgid "At least one category that you are trying to archive or one of its children has one or more product linked to it." +msgstr "" + +#. module: product_category_active +#: model:ir.model.fields,help:product_category_active.field_product_category__active +msgid "If unchecked, it will allow you to hide the product category without removing it." +msgstr "" + +#. module: product_category_active +#: model:ir.model,name:product_category_active.model_product_category +msgid "Product Category" +msgstr "" + diff --git a/product_category_active/models/product.py b/product_category_active/models/product.py index d98adb1b84d..bdc4c61502b 100644 --- a/product_category_active/models/product.py +++ b/product_category_active/models/product.py @@ -17,11 +17,9 @@ class ProductCategory(models.Model): @api.constrains("active") def _check_archive(self): to_archive = self.filtered(lambda r: not r.active) - if self.env['product.template'].search([ - '|', - ('categ_id', 'in', to_archive.ids), - ('categ_id', 'child_of', to_archive.ids), - ]): + if self.env['product.template'].with_context( + active_test=False, + ).search([('categ_id', 'child_of', to_archive.ids)]): raise ValidationError(_( "At least one category that you are trying to archive or one " "of its children has one or more product linked to it." diff --git a/product_category_active/static/description/icon.png b/product_category_active/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 73a6a6bc0fcd76044e55d2bcc41d18a77987e547 Mon Sep 17 00:00:00 2001 From: Ernesto Tejeda Date: Fri, 15 May 2020 10:17:11 -0400 Subject: [PATCH 0142/1692] [IMP] product_category_archive: add a test --- product_category_active/__manifest__.py | 2 +- .../tests/test_product_category_archive.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/product_category_active/__manifest__.py b/product_category_active/__manifest__.py index bb713c6bcef..91df09635de 100644 --- a/product_category_active/__manifest__.py +++ b/product_category_active/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'product_category_archive', - 'version': '12.0.1.0.0', + 'version': '12.0.1.0.1', 'category': 'Product', 'summary': 'Add option to archive product categories', 'author': 'Tecnativa, Odoo Community Association (OCA)', diff --git a/product_category_active/tests/test_product_category_archive.py b/product_category_active/tests/test_product_category_archive.py index 8edb44e5793..07f29e09c48 100644 --- a/product_category_active/tests/test_product_category_archive.py +++ b/product_category_active/tests/test_product_category_archive.py @@ -46,3 +46,14 @@ def test_archive_empty_categories(self): self.parent_categ.active = False self.assertFalse(self.child_1.active) self.assertFalse(self.parent_categ.active) + + def test_archive_categories_with_inactive_products(self): + self.assertTrue(self.child_1.active) + self.assertTrue(self.child_1.active) + self.assertTrue(self.parent_categ.active) + self.product_1.categ_id = self.child_1.id + self.product_1.active = False + with self.assertRaises(ValidationError): + self.parent_categ.active = False + with self.assertRaises(ValidationError): + self.child_1.active = False From d44a238619061d843785574af7c6c49f9fcaa949 Mon Sep 17 00:00:00 2001 From: Pedro Castro Silva Date: Sun, 18 Oct 2020 18:46:30 +0000 Subject: [PATCH 0143/1692] Added translation using Weblate (Portuguese) --- product_category_active/i18n/pt.po | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 product_category_active/i18n/pt.po diff --git a/product_category_active/i18n/pt.po b/product_category_active/i18n/pt.po new file mode 100644 index 00000000000..f77f24c4708 --- /dev/null +++ b/product_category_active/i18n/pt.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_active +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: product_category_active +#: model:ir.model.fields,field_description:product_category_active.field_product_category__active +msgid "Active" +msgstr "" + +#. module: product_category_active +#: code:addons/product_category_active/models/product.py:23 +#, python-format +msgid "At least one category that you are trying to archive or one of its children has one or more product linked to it." +msgstr "" + +#. module: product_category_active +#: model:ir.model.fields,help:product_category_active.field_product_category__active +msgid "If unchecked, it will allow you to hide the product category without removing it." +msgstr "" + +#. module: product_category_active +#: model:ir.model,name:product_category_active.model_product_category +msgid "Product Category" +msgstr "" From 1d9f61a133a37ae2356d3e88227ed83799fda348 Mon Sep 17 00:00:00 2001 From: Pedro Castro Silva Date: Sun, 18 Oct 2020 18:46:38 +0000 Subject: [PATCH 0144/1692] Translated using Weblate (Portuguese) Currently translated at 50.0% (2 of 4 strings) Translation: product-attribute-12.0/product-attribute-12.0-product_category_active Translate-URL: https://translation.odoo-community.org/projects/product-attribute-12-0/product-attribute-12-0-product_category_active/pt/ --- product_category_active/i18n/pt.po | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/product_category_active/i18n/pt.po b/product_category_active/i18n/pt.po index f77f24c4708..f1d0ec28ea0 100644 --- a/product_category_active/i18n/pt.po +++ b/product_category_active/i18n/pt.po @@ -6,18 +6,20 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-10-18 21:08+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 3.10\n" #. module: product_category_active #: model:ir.model.fields,field_description:product_category_active.field_product_category__active msgid "Active" -msgstr "" +msgstr "Ativo" #. module: product_category_active #: code:addons/product_category_active/models/product.py:23 @@ -33,4 +35,4 @@ msgstr "" #. module: product_category_active #: model:ir.model,name:product_category_active.model_product_category msgid "Product Category" -msgstr "" +msgstr "Categoria de Produto" From 45052e364bb506f3c1443c9c7a2e505c77eccc06 Mon Sep 17 00:00:00 2001 From: claudiagn Date: Tue, 26 Jan 2021 08:50:05 +0000 Subject: [PATCH 0145/1692] Added translation using Weblate (Catalan) --- product_category_active/i18n/ca.po | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 product_category_active/i18n/ca.po diff --git a/product_category_active/i18n/ca.po b/product_category_active/i18n/ca.po new file mode 100644 index 00000000000..163f9263708 --- /dev/null +++ b/product_category_active/i18n/ca.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_active +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: product_category_active +#: model:ir.model.fields,field_description:product_category_active.field_product_category__active +msgid "Active" +msgstr "" + +#. module: product_category_active +#: code:addons/product_category_active/models/product.py:23 +#, python-format +msgid "At least one category that you are trying to archive or one of its children has one or more product linked to it." +msgstr "" + +#. module: product_category_active +#: model:ir.model.fields,help:product_category_active.field_product_category__active +msgid "If unchecked, it will allow you to hide the product category without removing it." +msgstr "" + +#. module: product_category_active +#: model:ir.model,name:product_category_active.model_product_category +msgid "Product Category" +msgstr "" From b63acca6adfa676f565a9195169bf25a248085fd Mon Sep 17 00:00:00 2001 From: claudiagn Date: Tue, 26 Jan 2021 08:50:45 +0000 Subject: [PATCH 0146/1692] Translated using Weblate (Catalan) Currently translated at 100.0% (4 of 4 strings) Translation: product-attribute-12.0/product-attribute-12.0-product_category_active Translate-URL: https://translation.odoo-community.org/projects/product-attribute-12-0/product-attribute-12-0-product_category_active/ca/ --- product_category_active/i18n/ca.po | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/product_category_active/i18n/ca.po b/product_category_active/i18n/ca.po index 163f9263708..b56a78f379f 100644 --- a/product_category_active/i18n/ca.po +++ b/product_category_active/i18n/ca.po @@ -6,31 +6,37 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2021-01-26 10:44+0000\n" +"Last-Translator: claudiagn \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_category_active #: model:ir.model.fields,field_description:product_category_active.field_product_category__active msgid "Active" -msgstr "" +msgstr "Actiu" #. module: product_category_active #: code:addons/product_category_active/models/product.py:23 #, python-format msgid "At least one category that you are trying to archive or one of its children has one or more product linked to it." msgstr "" +"Almenys una categoria que intenteu arxivar o un dels seus fills hi té un o " +"més productes vinculats." #. module: product_category_active #: model:ir.model.fields,help:product_category_active.field_product_category__active msgid "If unchecked, it will allow you to hide the product category without removing it." msgstr "" +"Si no està marcat, us permetrà amagar la categoria de producte sense " +"eliminar-la." #. module: product_category_active #: model:ir.model,name:product_category_active.model_product_category msgid "Product Category" -msgstr "" +msgstr "Categoria de producte" From 4ba26db5cfe57f0ca966eadb52cd864cac041634 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Fri, 19 Feb 2021 11:54:42 +0100 Subject: [PATCH 0147/1692] [IMP] product_category_active: black, isort, prettier --- product_category_active/__manifest__.py | 22 ++++++-------- product_category_active/models/product.py | 23 +++++++++------ .../readme/DESCRIPTION.rst | 1 - product_category_active/readme/USAGE.rst | 1 - .../tests/test_product_category_archive.py | 29 +++++++------------ .../views/product_views.xml | 23 ++++++++++----- 6 files changed, 49 insertions(+), 50 deletions(-) diff --git a/product_category_active/__manifest__.py b/product_category_active/__manifest__.py index 91df09635de..7bf6f94e46a 100644 --- a/product_category_active/__manifest__.py +++ b/product_category_active/__manifest__.py @@ -2,17 +2,13 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { - 'name': 'product_category_archive', - 'version': '12.0.1.0.1', - 'category': 'Product', - 'summary': 'Add option to archive product categories', - 'author': 'Tecnativa, Odoo Community Association (OCA)', - 'website': 'https://github.com/OCA/product-attribute', - 'license': 'AGPL-3', - 'depends': [ - 'product', - ], - 'data': [ - 'views/product_views.xml', - ], + "name": "product_category_archive", + "version": "12.0.1.0.1", + "category": "Product", + "summary": "Add option to archive product categories", + "author": "Tecnativa, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/product-attribute", + "license": "AGPL-3", + "depends": ["product",], + "data": ["views/product_views.xml",], } diff --git a/product_category_active/models/product.py b/product_category_active/models/product.py index bdc4c61502b..a80189afb65 100644 --- a/product_category_active/models/product.py +++ b/product_category_active/models/product.py @@ -9,18 +9,23 @@ class ProductCategory(models.Model): _inherit = "product.category" active = fields.Boolean( - string='Active', + string="Active", default=True, help="If unchecked, it will allow you to hide the " - "product category without removing it.") + "product category without removing it.", + ) @api.constrains("active") def _check_archive(self): to_archive = self.filtered(lambda r: not r.active) - if self.env['product.template'].with_context( - active_test=False, - ).search([('categ_id', 'child_of', to_archive.ids)]): - raise ValidationError(_( - "At least one category that you are trying to archive or one " - "of its children has one or more product linked to it." - )) + if ( + self.env["product.template"] + .with_context(active_test=False,) + .search([("categ_id", "child_of", to_archive.ids)]) + ): + raise ValidationError( + _( + "At least one category that you are trying to archive or one " + "of its children has one or more product linked to it." + ) + ) diff --git a/product_category_active/readme/DESCRIPTION.rst b/product_category_active/readme/DESCRIPTION.rst index cefe0ef3526..7dadfac6a40 100644 --- a/product_category_active/readme/DESCRIPTION.rst +++ b/product_category_active/readme/DESCRIPTION.rst @@ -1,2 +1 @@ This module allows you to archive product categories. - diff --git a/product_category_active/readme/USAGE.rst b/product_category_active/readme/USAGE.rst index aa4794d4415..d833606477c 100644 --- a/product_category_active/readme/USAGE.rst +++ b/product_category_active/readme/USAGE.rst @@ -10,4 +10,3 @@ of its children categories, an error will be raised and it won't be archived. Note 2: Children category are not archived/unarchived when the parent category does. - diff --git a/product_category_active/tests/test_product_category_archive.py b/product_category_active/tests/test_product_category_archive.py index 07f29e09c48..09d847ae56b 100644 --- a/product_category_active/tests/test_product_category_archive.py +++ b/product_category_active/tests/test_product_category_archive.py @@ -1,31 +1,24 @@ # Copyright 2020 Tecnativa - Ernesto Tejeda # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo.tests import SavepointCase from odoo.exceptions import ValidationError +from odoo.tests import SavepointCase class TestProductCategoryArchive(SavepointCase): - @classmethod def setUpClass(cls): super(TestProductCategoryArchive, cls).setUpClass() - categ_obj = cls.env['product.category'] - product_obj = cls.env['product.template'] - cls.parent_categ = categ_obj.create({ - "name": "Parent category", - }) - cls.child_1 = categ_obj.create({ - "name": "child 1", - "parent_id": cls.parent_categ.id, - }) - cls.child_2 = categ_obj.create({ - "name": "child 2", - "parent_id": cls.parent_categ.id, - }) - cls.product_1 = product_obj.create({ - "name": "Product 1", - }) + categ_obj = cls.env["product.category"] + product_obj = cls.env["product.template"] + cls.parent_categ = categ_obj.create({"name": "Parent category",}) + cls.child_1 = categ_obj.create( + {"name": "child 1", "parent_id": cls.parent_categ.id,} + ) + cls.child_2 = categ_obj.create( + {"name": "child 2", "parent_id": cls.parent_categ.id,} + ) + cls.product_1 = product_obj.create({"name": "Product 1",}) def test_dont_archive_non_empty_categories(self): self.assertTrue(self.child_1.active) diff --git a/product_category_active/views/product_views.xml b/product_category_active/views/product_views.xml index a5753afd400..5a50963cd77 100644 --- a/product_category_active/views/product_views.xml +++ b/product_category_active/views/product_views.xml @@ -1,17 +1,24 @@ - + product.category.form.inherit product.category - +
        -
        @@ -19,13 +26,13 @@ product.category.list product.category - + not active - + From 4cfe0193eb55b3aae2ec1909e95b13448a931671 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Fri, 19 Feb 2021 12:24:05 +0100 Subject: [PATCH 0148/1692] [MIG] product_category_active: Migration to v13.0 --- product_category_active/README.rst | 19 +++++----- product_category_active/__manifest__.py | 8 ++-- product_category_active/i18n/ca.po | 21 ++++++---- product_category_active/i18n/es.po | 6 +-- .../i18n/product_category_active.pot | 17 +++++---- .../i18n/product_category_archive.pot | 38 ------------------- product_category_active/i18n/pt.po | 19 ++++++---- product_category_active/models/product.py | 2 +- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 13 ++++--- product_category_active/tests/__init__.py | 2 +- ...ive.py => test_product_category_active.py} | 12 +++--- 12 files changed, 67 insertions(+), 91 deletions(-) delete mode 100644 product_category_active/i18n/product_category_archive.pot rename product_category_active/tests/{test_product_category_archive.py => test_product_category_active.py} (91%) diff --git a/product_category_active/README.rst b/product_category_active/README.rst index aef1c4ef0cd..51e792c5a30 100644 --- a/product_category_active/README.rst +++ b/product_category_active/README.rst @@ -1,6 +1,6 @@ -======================== -product_category_archive -======================== +======================= +Product Category Active +======================= .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! @@ -14,20 +14,19 @@ product_category_archive :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_category_active + :target: https://github.com/OCA/product-attribute/tree/13.0/product_category_active :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_category_active + :target: https://translation.odoo-community.org/projects/product-attribute-13-0/product-attribute-13-0-product_category_active :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 + :target: https://runbot.odoo-community.org/runbot/135/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| This module allows you to archive product categories. - **Table of contents** .. contents:: @@ -49,7 +48,6 @@ of its children categories, an error will be raised and it won't be archived. Note 2: Children category are not archived/unarchived when the parent category does. - Known issues / Roadmap ====================== @@ -66,7 +64,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 +83,7 @@ Contributors * Ernesto Tejeda * Pedro M. Baeza + * Carlos Roca Maintainers ~~~~~~~~~~~ @@ -99,6 +98,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_category_active/__manifest__.py b/product_category_active/__manifest__.py index 7bf6f94e46a..2fce4723bf7 100644 --- a/product_category_active/__manifest__.py +++ b/product_category_active/__manifest__.py @@ -2,13 +2,13 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { - "name": "product_category_archive", - "version": "12.0.1.0.1", + "name": "Product Category Active", + "version": "13.0.1.0.0", "category": "Product", "summary": "Add option to archive product categories", "author": "Tecnativa, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "license": "AGPL-3", - "depends": ["product",], - "data": ["views/product_views.xml",], + "depends": ["product"], + "data": ["views/product_views.xml"], } diff --git a/product_category_active/i18n/ca.po b/product_category_active/i18n/ca.po index b56a78f379f..e0d1ac1dc3d 100644 --- a/product_category_active/i18n/ca.po +++ b/product_category_active/i18n/ca.po @@ -1,20 +1,21 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_category_active +# * product_category_active # msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-01-26 10:44+0000\n" -"Last-Translator: claudiagn \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2021-02-22 08:57+0100\n" +"Last-Translator: Carlos \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" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Poedit 2.0.6\n" #. module: product_category_active #: model:ir.model.fields,field_description:product_category_active.field_product_category__active @@ -22,16 +23,20 @@ msgid "Active" msgstr "Actiu" #. module: product_category_active -#: code:addons/product_category_active/models/product.py:23 +#: code:addons/product_category_active/models/product.py:0 #, python-format -msgid "At least one category that you are trying to archive or one of its children has one or more product linked to it." +msgid "" +"At least one category that you are trying to archive or one of its children " +"has one or more product linked to it." msgstr "" "Almenys una categoria que intenteu arxivar o un dels seus fills hi té un o " "més productes vinculats." #. module: product_category_active #: model:ir.model.fields,help:product_category_active.field_product_category__active -msgid "If unchecked, it will allow you to hide the product category without removing it." +msgid "" +"If unchecked, it will allow you to hide the product category without " +"removing it." msgstr "" "Si no està marcat, us permetrà amagar la categoria de producte sense " "eliminar-la." diff --git a/product_category_active/i18n/es.po b/product_category_active/i18n/es.po index 59591531b46..6bdb6a32828 100644 --- a/product_category_active/i18n/es.po +++ b/product_category_active/i18n/es.po @@ -6,9 +6,9 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-04 20:58+0000\n" -"PO-Revision-Date: 2020-05-04 17:02-0400\n" -"Last-Translator: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2021-02-22 08:57+0100\n" +"Last-Translator: Carlos \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" diff --git a/product_category_active/i18n/product_category_active.pot b/product_category_active/i18n/product_category_active.pot index 1e3d07bf0d4..adc057e197d 100644 --- a/product_category_active/i18n/product_category_active.pot +++ b/product_category_active/i18n/product_category_active.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_category_active +# * product_category_active # 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" @@ -19,18 +19,21 @@ msgid "Active" msgstr "" #. module: product_category_active -#: code:addons/product_category_active/models/product.py:23 +#: code:addons/product_category_active/models/product.py:0 #, python-format -msgid "At least one category that you are trying to archive or one of its children has one or more product linked to it." +msgid "" +"At least one category that you are trying to archive or one of its children " +"has one or more product linked to it." msgstr "" #. module: product_category_active #: model:ir.model.fields,help:product_category_active.field_product_category__active -msgid "If unchecked, it will allow you to hide the product category without removing it." +msgid "" +"If unchecked, it will allow you to hide the product category without " +"removing it." msgstr "" #. module: product_category_active #: model:ir.model,name:product_category_active.model_product_category msgid "Product Category" msgstr "" - diff --git a/product_category_active/i18n/product_category_archive.pot b/product_category_active/i18n/product_category_archive.pot deleted file mode 100644 index 5daa4bf011c..00000000000 --- a/product_category_active/i18n/product_category_archive.pot +++ /dev/null @@ -1,38 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_category_archive -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-04 20:58+0000\n" -"PO-Revision-Date: 2020-05-04 20:58+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: \n" - -#. module: product_category_archive -#: model:ir.model.fields,field_description:product_category_archive.field_product_category__active -msgid "Active" -msgstr "" - -#. module: product_category_archive -#: code:addons/product_category_archive/models/product.py:25 -#, python-format -msgid "At least one category that you are trying to archive or one of its children has one or more product linked to it." -msgstr "" - -#. module: product_category_archive -#: model:ir.model.fields,help:product_category_archive.field_product_category__active -msgid "If unchecked, it will allow you to hide the product category without removing it." -msgstr "" - -#. module: product_category_archive -#: model:ir.model,name:product_category_archive.model_product_category -msgid "Product Category" -msgstr "" - diff --git a/product_category_active/i18n/pt.po b/product_category_active/i18n/pt.po index f1d0ec28ea0..c5e56557c38 100644 --- a/product_category_active/i18n/pt.po +++ b/product_category_active/i18n/pt.po @@ -1,20 +1,21 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_category_active +# * product_category_active # msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2020-10-18 21:08+0000\n" -"Last-Translator: Pedro Castro Silva \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2021-02-22 08:57+0100\n" +"Last-Translator: Carlos \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" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.10\n" +"X-Generator: Poedit 2.0.6\n" #. module: product_category_active #: model:ir.model.fields,field_description:product_category_active.field_product_category__active @@ -24,12 +25,16 @@ msgstr "Ativo" #. module: product_category_active #: code:addons/product_category_active/models/product.py:23 #, python-format -msgid "At least one category that you are trying to archive or one of its children has one or more product linked to it." +msgid "" +"At least one category that you are trying to archive or one of its children " +"has one or more product linked to it." msgstr "" #. module: product_category_active #: model:ir.model.fields,help:product_category_active.field_product_category__active -msgid "If unchecked, it will allow you to hide the product category without removing it." +msgid "" +"If unchecked, it will allow you to hide the product category without " +"removing it." msgstr "" #. module: product_category_active diff --git a/product_category_active/models/product.py b/product_category_active/models/product.py index a80189afb65..6bb3c4e9e12 100644 --- a/product_category_active/models/product.py +++ b/product_category_active/models/product.py @@ -20,7 +20,7 @@ def _check_archive(self): to_archive = self.filtered(lambda r: not r.active) if ( self.env["product.template"] - .with_context(active_test=False,) + .with_context(active_test=False) .search([("categ_id", "child_of", to_archive.ids)]) ): raise ValidationError( diff --git a/product_category_active/readme/CONTRIBUTORS.rst b/product_category_active/readme/CONTRIBUTORS.rst index b31cef32173..d7d5d75169f 100644 --- a/product_category_active/readme/CONTRIBUTORS.rst +++ b/product_category_active/readme/CONTRIBUTORS.rst @@ -2,3 +2,4 @@ * Ernesto Tejeda * Pedro M. Baeza + * Carlos Roca diff --git a/product_category_active/static/description/index.html b/product_category_active/static/description/index.html index 000e5c52d54..22d0ad3746b 100644 --- a/product_category_active/static/description/index.html +++ b/product_category_active/static/description/index.html @@ -4,7 +4,7 @@ -product_category_archive +Product Category Active -
        -

        product_category_archive

        +
        +

        Product Category Active

        -

        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 allows you to archive product categories.

        Table of contents

        @@ -413,7 +413,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.

        @@ -430,6 +430,7 @@

        Contributors

      • Tecnativa:
        • Ernesto Tejeda
        • Pedro M. Baeza
        • +
        • Carlos Roca
      @@ -441,7 +442,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.

      diff --git a/product_category_active/tests/__init__.py b/product_category_active/tests/__init__.py index 3e83145f24d..c717d3229ab 100644 --- a/product_category_active/tests/__init__.py +++ b/product_category_active/tests/__init__.py @@ -1,3 +1,3 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from . import test_product_category_archive +from . import test_product_category_active diff --git a/product_category_active/tests/test_product_category_archive.py b/product_category_active/tests/test_product_category_active.py similarity index 91% rename from product_category_active/tests/test_product_category_archive.py rename to product_category_active/tests/test_product_category_active.py index 09d847ae56b..4e4454b0e9b 100644 --- a/product_category_active/tests/test_product_category_archive.py +++ b/product_category_active/tests/test_product_category_active.py @@ -5,20 +5,20 @@ from odoo.tests import SavepointCase -class TestProductCategoryArchive(SavepointCase): +class TestProductCategoryActive(SavepointCase): @classmethod def setUpClass(cls): - super(TestProductCategoryArchive, cls).setUpClass() + super().setUpClass() categ_obj = cls.env["product.category"] product_obj = cls.env["product.template"] - cls.parent_categ = categ_obj.create({"name": "Parent category",}) + cls.parent_categ = categ_obj.create({"name": "Parent category"}) cls.child_1 = categ_obj.create( - {"name": "child 1", "parent_id": cls.parent_categ.id,} + {"name": "child 1", "parent_id": cls.parent_categ.id} ) cls.child_2 = categ_obj.create( - {"name": "child 2", "parent_id": cls.parent_categ.id,} + {"name": "child 2", "parent_id": cls.parent_categ.id} ) - cls.product_1 = product_obj.create({"name": "Product 1",}) + cls.product_1 = product_obj.create({"name": "Product 1"}) def test_dont_archive_non_empty_categories(self): self.assertTrue(self.child_1.active) From df07ee7533b109fa873e2f0b88c1decd9bed8874 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Wed, 22 Dec 2021 08:24:32 +0100 Subject: [PATCH 0149/1692] [14.0][MIG] product_category_active --- product_category_active/README.rst | 12 +++++++----- product_category_active/__manifest__.py | 2 +- .../i18n/product_category_active.pot | 19 +++++++++++++++++-- product_category_active/models/__init__.py | 4 +--- .../{product.py => product_category.py} | 0 .../readme/CONTRIBUTORS.rst | 2 ++ .../static/description/index.html | 7 ++++--- 7 files changed, 32 insertions(+), 14 deletions(-) rename product_category_active/models/{product.py => product_category.py} (100%) diff --git a/product_category_active/README.rst b/product_category_active/README.rst index 51e792c5a30..35e36de9426 100644 --- a/product_category_active/README.rst +++ b/product_category_active/README.rst @@ -14,13 +14,13 @@ Product Category Active :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_category_active + :target: https://github.com/OCA/product-attribute/tree/14.0/product_category_active :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_category_active + :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_category_active :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| @@ -64,7 +64,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,8 @@ Contributors * Pedro M. Baeza * Carlos Roca +* Denis Roussel + Maintainers ~~~~~~~~~~~ @@ -98,6 +100,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_category_active/__manifest__.py b/product_category_active/__manifest__.py index 2fce4723bf7..f26394e3a2f 100644 --- a/product_category_active/__manifest__.py +++ b/product_category_active/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Category Active", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "category": "Product", "summary": "Add option to archive product categories", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/product_category_active/i18n/product_category_active.pot b/product_category_active/i18n/product_category_active.pot index adc057e197d..d73c62c9083 100644 --- a/product_category_active/i18n/product_category_active.pot +++ b/product_category_active/i18n/product_category_active.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" @@ -19,13 +19,23 @@ msgid "Active" msgstr "" #. module: product_category_active -#: code:addons/product_category_active/models/product.py:0 +#: code:addons/product_category_active/models/product_category.py:0 #, python-format msgid "" "At least one category that you are trying to archive or one of its children " "has one or more product linked to it." msgstr "" +#. module: product_category_active +#: model:ir.model.fields,field_description:product_category_active.field_product_category__display_name +msgid "Display Name" +msgstr "" + +#. module: product_category_active +#: model:ir.model.fields,field_description:product_category_active.field_product_category__id +msgid "ID" +msgstr "" + #. module: product_category_active #: model:ir.model.fields,help:product_category_active.field_product_category__active msgid "" @@ -33,6 +43,11 @@ msgid "" "removing it." msgstr "" +#. module: product_category_active +#: model:ir.model.fields,field_description:product_category_active.field_product_category____last_update +msgid "Last Modified on" +msgstr "" + #. module: product_category_active #: model:ir.model,name:product_category_active.model_product_category msgid "Product Category" diff --git a/product_category_active/models/__init__.py b/product_category_active/models/__init__.py index 8ff46ae4722..53553f3f2de 100644 --- a/product_category_active/models/__init__.py +++ b/product_category_active/models/__init__.py @@ -1,3 +1 @@ -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). - -from . import product +from . import product_category diff --git a/product_category_active/models/product.py b/product_category_active/models/product_category.py similarity index 100% rename from product_category_active/models/product.py rename to product_category_active/models/product_category.py diff --git a/product_category_active/readme/CONTRIBUTORS.rst b/product_category_active/readme/CONTRIBUTORS.rst index d7d5d75169f..85982305ac0 100644 --- a/product_category_active/readme/CONTRIBUTORS.rst +++ b/product_category_active/readme/CONTRIBUTORS.rst @@ -3,3 +3,5 @@ * Ernesto Tejeda * Pedro M. Baeza * Carlos Roca + +* Denis Roussel diff --git a/product_category_active/static/description/index.html b/product_category_active/static/description/index.html index 22d0ad3746b..ee9f484c2bc 100644 --- a/product_category_active/static/description/index.html +++ b/product_category_active/static/description/index.html @@ -367,7 +367,7 @@

      Product Category Active

      !! 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 allows you to archive product categories.

      Table of contents

      @@ -413,7 +413,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.

      @@ -433,6 +433,7 @@

      Contributors

    • Carlos Roca
    +
  • Denis Roussel <denis.roussel@acsone.eu>
  • @@ -442,7 +443,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 386c6cb1349a8edb18d288ea0538c9940a20d16d Mon Sep 17 00:00:00 2001 From: Thomas Grellety Date: Wed, 9 Mar 2022 16:24:13 +0100 Subject: [PATCH 0150/1692] [MIG] product_category_active: Migration to 15.0 --- product_category_active/README.rst | 10 ++++----- product_category_active/__manifest__.py | 2 +- .../i18n/product_category_active.pot | 17 +-------------- .../models/product_category.py | 1 - .../static/description/index.html | 6 +++--- .../tests/test_product_category_active.py | 4 ++-- .../views/product_views.xml | 21 +++++++------------ 7 files changed, 20 insertions(+), 41 deletions(-) diff --git a/product_category_active/README.rst b/product_category_active/README.rst index 35e36de9426..e55f626a5c4 100644 --- a/product_category_active/README.rst +++ b/product_category_active/README.rst @@ -14,13 +14,13 @@ Product Category Active :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_active + :target: https://github.com/OCA/product-attribute/tree/15.0/product_category_active :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_active + :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_category_active :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| @@ -64,7 +64,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. @@ -100,6 +100,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_category_active/__manifest__.py b/product_category_active/__manifest__.py index f26394e3a2f..74c6a19ee22 100644 --- a/product_category_active/__manifest__.py +++ b/product_category_active/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Category Active", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "category": "Product", "summary": "Add option to archive product categories", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/product_category_active/i18n/product_category_active.pot b/product_category_active/i18n/product_category_active.pot index d73c62c9083..ff488f8278a 100644 --- a/product_category_active/i18n/product_category_active.pot +++ b/product_category_active/i18n/product_category_active.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" @@ -26,16 +26,6 @@ msgid "" "has one or more product linked to it." msgstr "" -#. module: product_category_active -#: model:ir.model.fields,field_description:product_category_active.field_product_category__display_name -msgid "Display Name" -msgstr "" - -#. module: product_category_active -#: model:ir.model.fields,field_description:product_category_active.field_product_category__id -msgid "ID" -msgstr "" - #. module: product_category_active #: model:ir.model.fields,help:product_category_active.field_product_category__active msgid "" @@ -43,11 +33,6 @@ msgid "" "removing it." msgstr "" -#. module: product_category_active -#: model:ir.model.fields,field_description:product_category_active.field_product_category____last_update -msgid "Last Modified on" -msgstr "" - #. module: product_category_active #: model:ir.model,name:product_category_active.model_product_category msgid "Product Category" diff --git a/product_category_active/models/product_category.py b/product_category_active/models/product_category.py index 6bb3c4e9e12..ca59324fe45 100644 --- a/product_category_active/models/product_category.py +++ b/product_category_active/models/product_category.py @@ -9,7 +9,6 @@ class ProductCategory(models.Model): _inherit = "product.category" active = fields.Boolean( - string="Active", default=True, help="If unchecked, it will allow you to hide the " "product category without removing it.", diff --git a/product_category_active/static/description/index.html b/product_category_active/static/description/index.html index ee9f484c2bc..84505a7fbd6 100644 --- a/product_category_active/static/description/index.html +++ b/product_category_active/static/description/index.html @@ -367,7 +367,7 @@

    Product Category Active

    !! 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 allows you to archive product categories.

    Table of contents

    @@ -413,7 +413,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.

    @@ -443,7 +443,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.

    diff --git a/product_category_active/tests/test_product_category_active.py b/product_category_active/tests/test_product_category_active.py index 4e4454b0e9b..57a9a6839d3 100644 --- a/product_category_active/tests/test_product_category_active.py +++ b/product_category_active/tests/test_product_category_active.py @@ -2,10 +2,10 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo.exceptions import ValidationError -from odoo.tests import SavepointCase +from odoo.tests import TransactionCase -class TestProductCategoryActive(SavepointCase): +class TestProductCategoryActive(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() diff --git a/product_category_active/views/product_views.xml b/product_category_active/views/product_views.xml index 5a50963cd77..4c5cc0180a4 100644 --- a/product_category_active/views/product_views.xml +++ b/product_category_active/views/product_views.xml @@ -7,19 +7,14 @@ product.category -
    - +
    + +
    From 62004d3d104913311078c0c2e8e703552d3b9d2f Mon Sep 17 00:00:00 2001 From: Juliette Blanc Date: Tue, 17 Jan 2023 14:18:52 +0100 Subject: [PATCH 0151/1692] [IMP] product_category_active: pre-commit stuff --- .../odoo/addons/product_category_active | 1 + setup/product_category_active/setup.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 120000 setup/product_category_active/odoo/addons/product_category_active create mode 100644 setup/product_category_active/setup.py diff --git a/setup/product_category_active/odoo/addons/product_category_active b/setup/product_category_active/odoo/addons/product_category_active new file mode 120000 index 00000000000..f7eccfec650 --- /dev/null +++ b/setup/product_category_active/odoo/addons/product_category_active @@ -0,0 +1 @@ +../../../../product_category_active \ No newline at end of file diff --git a/setup/product_category_active/setup.py b/setup/product_category_active/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/product_category_active/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 8229db49618796bfb1825a059a4b71c22b9598e9 Mon Sep 17 00:00:00 2001 From: Juliette Blanc Date: Tue, 17 Jan 2023 14:26:46 +0100 Subject: [PATCH 0152/1692] [MIG] product_category_active: Migration to 16.0 --- product_category_active/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_category_active/__manifest__.py b/product_category_active/__manifest__.py index 74c6a19ee22..ac3bf2baf90 100644 --- a/product_category_active/__manifest__.py +++ b/product_category_active/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Category Active", - "version": "15.0.1.0.0", + "version": "16.0.1.0.0", "category": "Product", "summary": "Add option to archive product categories", "author": "Tecnativa, Odoo Community Association (OCA)", From 51ee00097562449b5ab34c2c7255643762ad195f Mon Sep 17 00:00:00 2001 From: Alfredo Zamora Date: Thu, 27 May 2021 10:06:19 +0200 Subject: [PATCH 0153/1692] [MIG] product_supplierinfo_for_customer: Migration to 14.0 --- product_supplierinfo_for_customer/README.rst | 10 +++--- .../__manifest__.py | 2 +- .../product_supplierinfo_for_customer.pot | 27 +++++++++------- .../models/product_pricelist.py | 3 +- .../models/product_product.py | 32 ++++++++++--------- .../static/description/index.html | 6 ++-- .../test_product_supplierinfo_for_customer.py | 2 +- 7 files changed, 45 insertions(+), 37 deletions(-) diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index a9d77a01f9e..3018f0dfcc8 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -14,13 +14,13 @@ Product Supplierinfo for Customers :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_supplierinfo_for_customer + :target: https://github.com/OCA/product-attribute/tree/14.0/product_supplierinfo_for_customer :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_supplierinfo_for_customer + :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_supplierinfo_for_customer :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| @@ -64,7 +64,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. @@ -99,6 +99,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_supplierinfo_for_customer/__manifest__.py b/product_supplierinfo_for_customer/__manifest__.py index cdbdb52c579..81a96fe1c74 100644 --- a/product_supplierinfo_for_customer/__manifest__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Product Supplierinfo for Customers", "summary": "Allows to define prices for customers in the products", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "author": "AvanzOSC, " "Tecnativa, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "category": "Sales Management", diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index 99fca2c9fa8..1463379d1e7 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.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" @@ -106,6 +106,11 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__display_name +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_pricelist_item__display_name +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product__display_name +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo__display_name +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template__display_name +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_res_partner__display_name msgid "Display Name" msgstr "" @@ -121,6 +126,11 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__id +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_pricelist_item__id +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product__id +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo__id +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template__id +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_res_partner__id msgid "ID" msgstr "" @@ -138,6 +148,11 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo____last_update +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_pricelist_item____last_update +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product____last_update +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo____last_update +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template____last_update +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_res_partner____last_update msgid "Last Modified on" msgstr "" @@ -159,11 +174,6 @@ msgid "" "automatic computation of the purchase order planning." msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Margin to apply on price to obtain sale price" -msgstr "" - #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -213,11 +223,6 @@ msgstr "" msgid "Quantity" msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Sale Margin" -msgstr "" - #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" diff --git a/product_supplierinfo_for_customer/models/product_pricelist.py b/product_supplierinfo_for_customer/models/product_pricelist.py index 4de631b2be7..fe733ef34d0 100644 --- a/product_supplierinfo_for_customer/models/product_pricelist.py +++ b/product_supplierinfo_for_customer/models/product_pricelist.py @@ -9,5 +9,6 @@ class ProductPricelistItem(models.Model): _inherit = "product.pricelist.item" base = fields.Selection( - selection_add=[("partner", "Partner Prices on the product form")] + selection_add=[("partner", "Partner Prices on the product form")], + ondelete={"partner": "set default"}, ) diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py index 6a31c8be196..9f63197d50f 100644 --- a/product_supplierinfo_for_customer/models/product_product.py +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -21,16 +21,18 @@ def _name_search( res = super(ProductProduct, self)._name_search( name, args=args, operator=operator, limit=limit, name_get_uid=name_get_uid ) - if not limit or len(res) >= limit: - limit = (limit - len(res)) if limit else False + res_ids = list(res) + res_ids_len = len(res_ids) + if not limit or res_ids_len >= limit: + limit = (limit - res_ids_len) if limit else False if ( not name and limit or not self._context.get("partner_id") - or len(res) >= limit + or res_ids_len >= limit ): - return res - limit -= len(res) + return res_ids + limit -= res_ids_len customerinfo_ids = self.env["product.customerinfo"]._search( [ ("name", "=", self._context.get("partner_id")), @@ -42,23 +44,23 @@ def _name_search( access_rights_uid=name_get_uid, ) if not customerinfo_ids: - return res - res_templates = self.browse([product_id for product_id, _name in res]).mapped( - "product_tmpl_id" - ) + return res_ids + res_templates = self.browse(res_ids).mapped("product_tmpl_id") product_tmpls = ( self.env["product.customerinfo"] .browse(customerinfo_ids) .mapped("product_tmpl_id") - res_templates ) - product_ids = self._search( - [("product_tmpl_id", "in", product_tmpls.ids)], - limit=limit, - access_rights_uid=name_get_uid, + product_ids = list( + self._search( + [("product_tmpl_id", "in", product_tmpls.ids)], + limit=limit, + access_rights_uid=name_get_uid, + ) ) - res.extend(self.browse(product_ids).name_get()) - return res + res_ids.extend(product_ids) + return res_ids def _get_price_from_customerinfo(self, partner_id): self.ensure_one() diff --git a/product_supplierinfo_for_customer/static/description/index.html b/product_supplierinfo_for_customer/static/description/index.html index 5e970c72894..b84b390a492 100644 --- a/product_supplierinfo_for_customer/static/description/index.html +++ b/product_supplierinfo_for_customer/static/description/index.html @@ -367,7 +367,7 @@

    Product Supplierinfo for Customers

    !! 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 modules allows to use supplier info structure, available in Inventory tab of the product form, also for defining customer information, allowing to define prices per customer and product.

    @@ -413,7 +413,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.

    @@ -442,7 +442,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.

    diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index bba955253d2..73b71ec635b 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -155,7 +155,7 @@ def test_variant_supplierinfo_price(self): } ) self._create_partnerinfo("customer", self.customer, product) - price_by_template = self.env["product.customerinfo"].create( + price_by_template = self.customerinfo_model.create( {"name": self.customer.id, "product_tmpl_id": template.id, "price": 30.0} ) res = product.with_context(partner_id=self.customer.id).price_compute( From c21d55ccf5991b2f860cdb914c2e07c34f938f87 Mon Sep 17 00:00:00 2001 From: Lois Rilo Date: Thu, 22 Jul 2021 14:21:24 +0200 Subject: [PATCH 0154/1692] [13.0][IMP] product_supplierinfo_for_customer: add `_select_customerinfo` The idea of this method is to centrileze the searches of customerinfo to have more consistent usage in child modules. --- .../models/product_product.py | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py index 9f63197d50f..250f33c8873 100644 --- a/product_supplierinfo_for_customer/models/product_product.py +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -66,18 +66,8 @@ def _get_price_from_customerinfo(self, partner_id): self.ensure_one() if not partner_id: return 0.0 - customerinfo = self.env["product.customerinfo"].search( - [ - ("name", "=", partner_id), - "|", - ("product_id", "=", self.id), - "&", - ("product_tmpl_id", "=", self.product_tmpl_id.id), - ("product_id", "=", False), - ], - limit=1, - order="product_id, sequence", - ) + partner = self.env["res.partner"].browse(partner_id) + customerinfo = self._select_customerinfo(partner=partner) if customerinfo: return customerinfo.price return 0.0 @@ -116,3 +106,31 @@ def price_compute(self, price_type, uom=False, currency=False, company=False): return super(ProductProduct, self).price_compute( price_type, uom, currency, company ) + + def _prepare_domain_customerinfo(self, params): + self.ensure_one() + partner_id = params.get("partner_id") + return [ + ("name", "=", partner_id), + "|", + ("product_id", "=", self.id), + "&", + ("product_tmpl_id", "=", self.product_tmpl_id.id), + ("product_id", "=", False), + ] + + def _select_customerinfo( + self, partner=False, _quantity=0.0, _date=None, _uom_id=False, params=False + ): + """Customer version of the standard `_select_seller`. """ + # TODO: For now it is just the function name with same arguments, but + # can be changed in future migrations to be more in line Odoo + # standard way to select supplierinfo's. + if not params: + params = dict() + params.update({"partner_id": partner.id}) + domain = self._prepare_domain_customerinfo(params) + res = self.env["product.customerinfo"].search( + domain, order="product_id, sequence", limit=1 + ) + return res From 2fb25daa886a82cf07f8f94884095ecf2f1f98cd Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 29 Jul 2021 07:01:26 +0000 Subject: [PATCH 0155/1692] product_supplierinfo_for_customer 14.0.1.0.1 --- product_supplierinfo_for_customer/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_supplierinfo_for_customer/__manifest__.py b/product_supplierinfo_for_customer/__manifest__.py index 81a96fe1c74..f4cc4dcfe94 100644 --- a/product_supplierinfo_for_customer/__manifest__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Product Supplierinfo for Customers", "summary": "Allows to define prices for customers in the products", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "author": "AvanzOSC, " "Tecnativa, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "category": "Sales Management", From 301d33480b6e189e20e87fc699c3324903f063ed Mon Sep 17 00:00:00 2001 From: nalejhandro Date: Mon, 1 Nov 2021 13:47:39 +0000 Subject: [PATCH 0156/1692] [IMP] product_supplierinfo_for_customer: black, isort, prettier --- product_supplierinfo_for_customer/models/product_product.py | 2 +- .../tests/test_product_supplierinfo_for_customer.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py index 250f33c8873..2c4870a9a66 100644 --- a/product_supplierinfo_for_customer/models/product_product.py +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -122,7 +122,7 @@ def _prepare_domain_customerinfo(self, params): def _select_customerinfo( self, partner=False, _quantity=0.0, _date=None, _uom_id=False, params=False ): - """Customer version of the standard `_select_seller`. """ + """Customer version of the standard `_select_seller`.""" # TODO: For now it is just the function name with same arguments, but # can be changed in future migrations to be more in line Odoo # standard way to select supplierinfo's. diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index 73b71ec635b..9afa53b656e 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -55,7 +55,7 @@ def _create_partnerinfo(cls, supplierinfo_type, partner, product): ) def test_default_get(self): - """ checking values returned by default_get() """ + """checking values returned by default_get()""" fields = ["name"] values = self.customer.with_context(select_type=True).default_get(fields) self.assertEqual(values["customer"], False, "Incorrect default") From 2ec34e8c6fe0e1231dfe085882be6e06f26a7e92 Mon Sep 17 00:00:00 2001 From: nalejhandro Date: Tue, 2 Nov 2021 16:17:57 +0000 Subject: [PATCH 0157/1692] [MIG] product_supplierinfo_for_customer: Migration to 15.0 In the model product.product V15.0 was added the order by priority desc, then in the _select_customerinfo was add a sorted by product_tmpl_id to obtain the same behaviour --- product_supplierinfo_for_customer/README.rst | 8 ++++---- product_supplierinfo_for_customer/__manifest__.py | 2 +- .../models/product_product.py | 13 +++++++------ .../models/product_supplierinfo.py | 4 ++-- .../tests/test_product_supplierinfo_for_customer.py | 7 +++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index 3018f0dfcc8..49a5ed8fa5b 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -14,13 +14,13 @@ Product Supplierinfo for Customers :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_supplierinfo_for_customer + :target: https://github.com/OCA/product-attribute/tree/15.0/product_supplierinfo_for_customer :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_supplierinfo_for_customer + :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_supplierinfo_for_customer :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| @@ -99,6 +99,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_supplierinfo_for_customer/__manifest__.py b/product_supplierinfo_for_customer/__manifest__.py index f4cc4dcfe94..7b89e0c21b2 100644 --- a/product_supplierinfo_for_customer/__manifest__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Product Supplierinfo for Customers", "summary": "Allows to define prices for customers in the products", - "version": "14.0.1.0.1", + "version": "15.0.1.0.0", "author": "AvanzOSC, " "Tecnativa, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "category": "Sales Management", diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py index 2c4870a9a66..1da97a2d926 100644 --- a/product_supplierinfo_for_customer/models/product_product.py +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -18,7 +18,7 @@ def name_get(self): def _name_search( self, name="", args=None, operator="ilike", limit=100, name_get_uid=None ): - res = super(ProductProduct, self)._name_search( + res = super()._name_search( name, args=args, operator=operator, limit=limit, name_get_uid=name_get_uid ) res_ids = list(res) @@ -79,7 +79,7 @@ def price_compute(self, price_type, uom=False, currency=False, company=False): ) or self.env.context.get("partner", False) if partner_id and isinstance(partner_id, models.BaseModel): partner_id = partner_id.id - prices = super(ProductProduct, self).price_compute( + prices = super().price_compute( "list_price", uom, currency, company ) for product in self: @@ -103,7 +103,7 @@ def price_compute(self, price_type, uom=False, currency=False, company=False): prices[product.id], currency, company, date ) return prices - return super(ProductProduct, self).price_compute( + return super().price_compute( price_type, uom, currency, company ) @@ -131,6 +131,7 @@ def _select_customerinfo( params.update({"partner_id": partner.id}) domain = self._prepare_domain_customerinfo(params) res = self.env["product.customerinfo"].search( - domain, order="product_id, sequence", limit=1 - ) - return res + domain + ).sorted(lambda s: (s.sequence, s.min_qty, s.price, s.id)) + res_1 = res.sorted('product_tmpl_id')[:1] + return res_1 diff --git a/product_supplierinfo_for_customer/models/product_supplierinfo.py b/product_supplierinfo_for_customer/models/product_supplierinfo.py index 131e69b125e..fd502343b0f 100644 --- a/product_supplierinfo_for_customer/models/product_supplierinfo.py +++ b/product_supplierinfo_for_customer/models/product_supplierinfo.py @@ -8,7 +8,7 @@ class ProductSupplierInfo(models.Model): @api.model def search(self, args, offset=0, limit=None, order=None, count=False): - res = super(ProductSupplierInfo, self).search( + res = super().search( args, offset=offset, limit=limit, order=order, count=count ) if ( @@ -42,4 +42,4 @@ def read(self, fields=None, load="_classic_read"): for x in new_ids ] else: - return super(ProductSupplierInfo, self).read(fields=fields, load=load) + return super().read(fields=fields, load=load) diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index 9afa53b656e..85a6ff33e8b 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -3,13 +3,13 @@ # Copyright 2015 Tecnativa # Copyright 2018 ForgeFlow # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo.tests.common import SavepointCase +from odoo.tests.common import TransactionCase -class TestProductSupplierinfoForCustomer(SavepointCase): +class TestProductSupplierinfoForCustomer(TransactionCase): @classmethod def setUpClass(cls): - super(TestProductSupplierinfoForCustomer, cls).setUpClass() + super().setUpClass() cls.supplierinfo_model = cls.env["product.supplierinfo"] cls.customerinfo_model = cls.env["product.customerinfo"] cls.pricelist_item_model = cls.env["product.pricelist.item"] @@ -134,7 +134,6 @@ def test_variant_supplierinfo_price(self): "value_ids": [(6, 0, [self.large_125.id, self.large_250.id])], } ) - template = self.piece_template product = template.product_variant_ids[0] product_1 = template.product_variant_ids[1] From 68b249512d74a3788bac075414bcb52d4e996bb6 Mon Sep 17 00:00:00 2001 From: nalejhandro Date: Tue, 9 Nov 2021 23:37:24 +0000 Subject: [PATCH 0158/1692] [FIX] product_supplierinfo_for_customer: Solve problem xml-deprecated-tree-attribute --- product_supplierinfo_for_customer/README.rst | 2 +- .../i18n/product_supplierinfo_for_customer.pot | 18 +----------------- .../models/product_product.py | 18 ++++++++---------- .../models/product_supplierinfo.py | 4 +--- .../static/description/index.html | 6 +++--- .../views/product_view.xml | 2 +- 6 files changed, 15 insertions(+), 35 deletions(-) diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index 49a5ed8fa5b..0f169c23fe4 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -64,7 +64,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. diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index 1463379d1e7..156d5716474 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.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" @@ -68,7 +68,6 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view -#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer Information" msgstr "" @@ -106,11 +105,6 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__display_name -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_pricelist_item__display_name -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product__display_name -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo__display_name -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template__display_name -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_res_partner__display_name msgid "Display Name" msgstr "" @@ -126,11 +120,6 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__id -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_pricelist_item__id -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product__id -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo__id -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template__id -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_res_partner__id msgid "ID" msgstr "" @@ -148,11 +137,6 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo____last_update -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_pricelist_item____last_update -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_product____last_update -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_supplierinfo____last_update -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_template____last_update -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_res_partner____last_update msgid "Last Modified on" msgstr "" diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py index 1da97a2d926..44fdc5b40d5 100644 --- a/product_supplierinfo_for_customer/models/product_product.py +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -79,9 +79,7 @@ def price_compute(self, price_type, uom=False, currency=False, company=False): ) or self.env.context.get("partner", False) if partner_id and isinstance(partner_id, models.BaseModel): partner_id = partner_id.id - prices = super().price_compute( - "list_price", uom, currency, company - ) + prices = super().price_compute("list_price", uom, currency, company) for product in self: price = product._get_price_from_customerinfo(partner_id) if not price: @@ -103,9 +101,7 @@ def price_compute(self, price_type, uom=False, currency=False, company=False): prices[product.id], currency, company, date ) return prices - return super().price_compute( - price_type, uom, currency, company - ) + return super().price_compute(price_type, uom, currency, company) def _prepare_domain_customerinfo(self, params): self.ensure_one() @@ -130,8 +126,10 @@ def _select_customerinfo( params = dict() params.update({"partner_id": partner.id}) domain = self._prepare_domain_customerinfo(params) - res = self.env["product.customerinfo"].search( - domain - ).sorted(lambda s: (s.sequence, s.min_qty, s.price, s.id)) - res_1 = res.sorted('product_tmpl_id')[:1] + res = ( + self.env["product.customerinfo"] + .search(domain) + .sorted(lambda s: (s.sequence, s.min_qty, s.price, s.id)) + ) + res_1 = res.sorted("product_tmpl_id")[:1] return res_1 diff --git a/product_supplierinfo_for_customer/models/product_supplierinfo.py b/product_supplierinfo_for_customer/models/product_supplierinfo.py index fd502343b0f..329f62a2e59 100644 --- a/product_supplierinfo_for_customer/models/product_supplierinfo.py +++ b/product_supplierinfo_for_customer/models/product_supplierinfo.py @@ -8,9 +8,7 @@ class ProductSupplierInfo(models.Model): @api.model def search(self, args, offset=0, limit=None, order=None, count=False): - res = super().search( - args, offset=offset, limit=limit, order=order, count=count - ) + res = super().search(args, offset=offset, limit=limit, order=order, count=count) if ( self.env.context.get("customerinfo") and self._name == "product.supplierinfo" diff --git a/product_supplierinfo_for_customer/static/description/index.html b/product_supplierinfo_for_customer/static/description/index.html index b84b390a492..ac036d2aee3 100644 --- a/product_supplierinfo_for_customer/static/description/index.html +++ b/product_supplierinfo_for_customer/static/description/index.html @@ -367,7 +367,7 @@

    Product Supplierinfo for Customers

    !! 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 modules allows to use supplier info structure, available in Inventory tab of the product form, also for defining customer information, allowing to define prices per customer and product.

    @@ -413,7 +413,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.

    @@ -442,7 +442,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.

    diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_view.xml index 55018714790..8f8dc50db55 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_view.xml @@ -72,7 +72,7 @@ product.customerinfo.tree.view product.customerinfo - + Date: Mon, 21 Mar 2022 11:41:51 +0000 Subject: [PATCH 0159/1692] Translated using Weblate (Catalan) Currently translated at 100.0% (53 of 53 strings) Translation: product-attribute-15.0/product-attribute-15.0-product_supplierinfo_for_customer Translate-URL: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_supplierinfo_for_customer/ca/ --- product_supplierinfo_for_customer/i18n/ca.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/product_supplierinfo_for_customer/i18n/ca.po b/product_supplierinfo_for_customer/i18n/ca.po index e97ec230a18..5951e0660ab 100644 --- a/product_supplierinfo_for_customer/i18n/ca.po +++ b/product_supplierinfo_for_customer/i18n/ca.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-02-25 15:45+0000\n" -"Last-Translator: claudiagn \n" +"PO-Revision-Date: 2022-03-21 14:17+0000\n" +"Last-Translator: Noel estudillo \n" "Language-Team: none\n" "Language: ca\n" "MIME-Version: 1.0\n" @@ -175,7 +175,7 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin msgid "Margin to apply on price to obtain sale price" -msgstr "" +msgstr "Marge a aplicar al preu per obtenir el preu de venda" #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view @@ -229,7 +229,7 @@ msgstr "Quantitat" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin msgid "Sale Margin" -msgstr "" +msgstr "Marge de venda" #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence From a707ba192d9e15b385e3f6442925cf81c5eb042f Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Tue, 19 Apr 2022 11:00:07 +0200 Subject: [PATCH 0160/1692] [IMP] product_supplier_info_for_customer: Promote to stable --- product_supplierinfo_for_customer/README.rst | 4 ++-- product_supplierinfo_for_customer/__manifest__.py | 6 +++++- .../static/description/index.html | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index 0f169c23fe4..13660fc31cf 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -7,9 +7,9 @@ Product Supplierinfo for Customers !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status - :alt: Beta + :alt: Production/Stable .. |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 diff --git a/product_supplierinfo_for_customer/__manifest__.py b/product_supplierinfo_for_customer/__manifest__.py index 7b89e0c21b2..425a06fc290 100644 --- a/product_supplierinfo_for_customer/__manifest__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -7,12 +7,16 @@ "name": "Product Supplierinfo for Customers", "summary": "Allows to define prices for customers in the products", "version": "15.0.1.0.0", + "development_status": "Production/Stable", "author": "AvanzOSC, " "Tecnativa, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "category": "Sales Management", "license": "AGPL-3", "depends": ["product"], - "data": ["security/ir.model.access.csv", "views/product_view.xml"], + "data": [ + "security/ir.model.access.csv", + "views/product_view.xml", + ], "demo": ["demo/product_demo.xml"], "installable": True, } diff --git a/product_supplierinfo_for_customer/static/description/index.html b/product_supplierinfo_for_customer/static/description/index.html index ac036d2aee3..ccbc37eeca9 100644 --- a/product_supplierinfo_for_customer/static/description/index.html +++ b/product_supplierinfo_for_customer/static/description/index.html @@ -367,7 +367,7 @@

    Product Supplierinfo for Customers

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

    +

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

    This modules allows to use supplier info structure, available in Inventory tab of the product form, also for defining customer information, allowing to define prices per customer and product.

    From 98acac5cfc0759047d5f9ccdb5b062cd8adeb636 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 22 Jun 2022 13:54:46 +0000 Subject: [PATCH 0161/1692] product_supplierinfo_for_customer 15.0.1.0.1 --- product_supplierinfo_for_customer/__manifest__.py | 2 +- .../i18n/product_supplierinfo_for_customer.pot | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/product_supplierinfo_for_customer/__manifest__.py b/product_supplierinfo_for_customer/__manifest__.py index 425a06fc290..af20a407a80 100644 --- a/product_supplierinfo_for_customer/__manifest__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Product Supplierinfo for Customers", "summary": "Allows to define prices for customers in the products", - "version": "15.0.1.0.0", + "version": "15.0.1.0.1", "development_status": "Production/Stable", "author": "AvanzOSC, " "Tecnativa, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index 156d5716474..7789467f4e5 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot @@ -13,6 +13,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__active +msgid "Active" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Assigns the priority to the list of product vendor." From 5db8efd17c034ccae72be1d97fd685a0f9ba90d7 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Tue, 2 Aug 2022 07:43:19 +0000 Subject: [PATCH 0162/1692] 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_supplierinfo_for_customer Translate-URL: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_supplierinfo_for_customer/ --- product_supplierinfo_for_customer/i18n/ca.po | 22 ++++++++++---------- product_supplierinfo_for_customer/i18n/de.po | 16 +++++--------- product_supplierinfo_for_customer/i18n/es.po | 16 +++++--------- product_supplierinfo_for_customer/i18n/fr.po | 16 +++++--------- product_supplierinfo_for_customer/i18n/sl.po | 16 +++++--------- 5 files changed, 31 insertions(+), 55 deletions(-) diff --git a/product_supplierinfo_for_customer/i18n/ca.po b/product_supplierinfo_for_customer/i18n/ca.po index 5951e0660ab..a8fd623d616 100644 --- a/product_supplierinfo_for_customer/i18n/ca.po +++ b/product_supplierinfo_for_customer/i18n/ca.po @@ -16,6 +16,11 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.2\n" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__active +msgid "Active" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Assigns the priority to the list of product vendor." @@ -76,7 +81,6 @@ msgstr "Client" #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view -#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer Information" msgstr "Informació de client" @@ -172,11 +176,6 @@ msgstr "" "la recepció dels productes al vostre magatzem. Utilitzat pel planificador " "per al càlcul automàtic de la planificació de la comanda de compra." -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Margin to apply on price to obtain sale price" -msgstr "Marge a aplicar al preu per obtenir el preu de venda" - #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -226,11 +225,6 @@ msgstr "Variant de producte" msgid "Quantity" msgstr "Quantitat" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Sale Margin" -msgstr "Marge de venda" - #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" @@ -325,3 +319,9 @@ msgstr "Nom del producte del proveïdor" #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "to" msgstr "a" + +#~ msgid "Margin to apply on price to obtain sale price" +#~ msgstr "Marge a aplicar al preu per obtenir el preu de venda" + +#~ msgid "Sale Margin" +#~ msgstr "Marge de venda" diff --git a/product_supplierinfo_for_customer/i18n/de.po b/product_supplierinfo_for_customer/i18n/de.po index ba45615e588..c992abf92a1 100644 --- a/product_supplierinfo_for_customer/i18n/de.po +++ b/product_supplierinfo_for_customer/i18n/de.po @@ -19,6 +19,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__active +msgid "Active" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Assigns the priority to the list of product vendor." @@ -74,7 +79,6 @@ msgstr "Kunde" #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view -#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer Information" msgstr "" @@ -169,11 +173,6 @@ msgid "" "automatic computation of the purchase order planning." msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Margin to apply on price to obtain sale price" -msgstr "" - #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -228,11 +227,6 @@ msgstr "Produktvorlage" msgid "Quantity" msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Sale Margin" -msgstr "" - #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" diff --git a/product_supplierinfo_for_customer/i18n/es.po b/product_supplierinfo_for_customer/i18n/es.po index 8030d38a63a..ce7ad9de1f1 100644 --- a/product_supplierinfo_for_customer/i18n/es.po +++ b/product_supplierinfo_for_customer/i18n/es.po @@ -19,6 +19,11 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.10\n" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__active +msgid "Active" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Assigns the priority to the list of product vendor." @@ -78,7 +83,6 @@ msgstr "Cliente" #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view -#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer Information" msgstr "Información de Cliente" @@ -174,11 +178,6 @@ msgstr "" "recepción de los productos en su almacén. Usado por el planificador para el " "cálculo automático de la planificación de pedidos de compra." -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Margin to apply on price to obtain sale price" -msgstr "" - #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -228,11 +227,6 @@ msgstr "Variante de producto" msgid "Quantity" msgstr "Cantidad" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Sale Margin" -msgstr "" - #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" diff --git a/product_supplierinfo_for_customer/i18n/fr.po b/product_supplierinfo_for_customer/i18n/fr.po index 6055c8971db..b45043fdaf8 100644 --- a/product_supplierinfo_for_customer/i18n/fr.po +++ b/product_supplierinfo_for_customer/i18n/fr.po @@ -19,6 +19,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__active +msgid "Active" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Assigns the priority to the list of product vendor." @@ -74,7 +79,6 @@ msgstr "" #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view -#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer Information" msgstr "" @@ -165,11 +169,6 @@ msgid "" "automatic computation of the purchase order planning." msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Margin to apply on price to obtain sale price" -msgstr "" - #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -224,11 +223,6 @@ msgstr "Modèle d'article" msgid "Quantity" msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Sale Margin" -msgstr "" - #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" diff --git a/product_supplierinfo_for_customer/i18n/sl.po b/product_supplierinfo_for_customer/i18n/sl.po index 65ab9f71b92..34e91215ae4 100644 --- a/product_supplierinfo_for_customer/i18n/sl.po +++ b/product_supplierinfo_for_customer/i18n/sl.po @@ -20,6 +20,11 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3);\n" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__active +msgid "Active" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Assigns the priority to the list of product vendor." @@ -75,7 +80,6 @@ msgstr "Kupec" #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view -#: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_tree_view msgid "Customer Information" msgstr "" @@ -170,11 +174,6 @@ msgid "" "automatic computation of the purchase order planning." msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Margin to apply on price to obtain sale price" -msgstr "" - #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -229,11 +228,6 @@ msgstr "Predloga proizvoda" msgid "Quantity" msgstr "" -#. module: product_supplierinfo_for_customer -#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin -msgid "Sale Margin" -msgstr "" - #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" From 9c596ad87ed05425298807e4037369fce5e6177f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Fri, 18 Nov 2022 17:20:08 +0100 Subject: [PATCH 0163/1692] [MIG] product_pricelist_supplierinfo: Migration to 15.0 TT36975 --- product_supplierinfo_for_customer/README.rst | 7 +++++-- .../i18n/product_supplierinfo_for_customer.pot | 10 ++++++++++ .../models/product_product.py | 2 +- .../readme/CONTRIBUTORS.rst | 7 +++++-- .../static/description/index.html | 7 +++++-- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/product_supplierinfo_for_customer/README.rst b/product_supplierinfo_for_customer/README.rst index 13660fc31cf..acf3f45c440 100644 --- a/product_supplierinfo_for_customer/README.rst +++ b/product_supplierinfo_for_customer/README.rst @@ -81,10 +81,13 @@ Contributors ~~~~~~~~~~~~ * Oihane Crucelaegui -* Tecnativa - Pedro M. Baeza * Aaron Henriquez * Miquel Raïch -* Tecnativa - Sergio Teruel + +* `Tecnativa `_: + + * Pedro M. Baeza + * Sergio Teruel Maintainers ~~~~~~~~~~~ diff --git a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot index 7789467f4e5..2abb60f9157 100644 --- a/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot +++ b/product_supplierinfo_for_customer/i18n/product_supplierinfo_for_customer.pot @@ -163,6 +163,11 @@ msgid "" "automatic computation of the purchase order planning." msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Margin to apply on price to obtain sale price" +msgstr "" + #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -212,6 +217,11 @@ msgstr "" msgid "Quantity" msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Sale Margin" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py index 44fdc5b40d5..08f8ceb6a79 100644 --- a/product_supplierinfo_for_customer/models/product_product.py +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -72,7 +72,7 @@ def _get_price_from_customerinfo(self, partner_id): return customerinfo.price return 0.0 - def price_compute(self, price_type, uom=False, currency=False, company=False): + def price_compute(self, price_type, uom=False, currency=False, company=None): if price_type == "partner": partner_id = self.env.context.get( "partner_id", False diff --git a/product_supplierinfo_for_customer/readme/CONTRIBUTORS.rst b/product_supplierinfo_for_customer/readme/CONTRIBUTORS.rst index e002a0bcaae..3e58204ab46 100644 --- a/product_supplierinfo_for_customer/readme/CONTRIBUTORS.rst +++ b/product_supplierinfo_for_customer/readme/CONTRIBUTORS.rst @@ -1,5 +1,8 @@ * Oihane Crucelaegui -* Tecnativa - Pedro M. Baeza * Aaron Henriquez * Miquel Raïch -* Tecnativa - Sergio Teruel + +* `Tecnativa `_: + + * Pedro M. Baeza + * Sergio Teruel diff --git a/product_supplierinfo_for_customer/static/description/index.html b/product_supplierinfo_for_customer/static/description/index.html index ccbc37eeca9..95e20513687 100644 --- a/product_supplierinfo_for_customer/static/description/index.html +++ b/product_supplierinfo_for_customer/static/description/index.html @@ -429,10 +429,13 @@

    Authors

    Contributors

    From 4cac40e6782bb39598033467807ff0b8fed66712 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 26 Nov 2022 12:01:59 +0000 Subject: [PATCH 0164/1692] 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_supplierinfo_for_customer Translate-URL: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_supplierinfo_for_customer/ --- .../__manifest__.py | 6 +++--- product_supplierinfo_for_customer/i18n/ca.po | 16 ++++++++++------ product_supplierinfo_for_customer/i18n/de.po | 10 ++++++++++ product_supplierinfo_for_customer/i18n/es.po | 10 ++++++++++ product_supplierinfo_for_customer/i18n/fr.po | 10 ++++++++++ product_supplierinfo_for_customer/i18n/sl.po | 10 ++++++++++ .../{product_view.xml => product_views.xml} | 13 ++++++++++--- .../addons/product_supplierinfo_for_customer | 1 + setup/product_supplierinfo_for_customer/setup.py | 6 ++++++ 9 files changed, 70 insertions(+), 12 deletions(-) rename product_supplierinfo_for_customer/views/{product_view.xml => product_views.xml} (91%) create mode 120000 setup/product_supplierinfo_for_customer/odoo/addons/product_supplierinfo_for_customer create mode 100644 setup/product_supplierinfo_for_customer/setup.py diff --git a/product_supplierinfo_for_customer/__manifest__.py b/product_supplierinfo_for_customer/__manifest__.py index af20a407a80..d3009ab6469 100644 --- a/product_supplierinfo_for_customer/__manifest__.py +++ b/product_supplierinfo_for_customer/__manifest__.py @@ -6,16 +6,16 @@ { "name": "Product Supplierinfo for Customers", "summary": "Allows to define prices for customers in the products", - "version": "15.0.1.0.1", + "version": "16.0.1.0.0", "development_status": "Production/Stable", - "author": "AvanzOSC, " "Tecnativa, " "Odoo Community Association (OCA)", + "author": "AvanzOSC, Tecnativa, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", "category": "Sales Management", "license": "AGPL-3", "depends": ["product"], "data": [ "security/ir.model.access.csv", - "views/product_view.xml", + "views/product_views.xml", ], "demo": ["demo/product_demo.xml"], "installable": True, diff --git a/product_supplierinfo_for_customer/i18n/ca.po b/product_supplierinfo_for_customer/i18n/ca.po index a8fd623d616..51b2e6c1768 100644 --- a/product_supplierinfo_for_customer/i18n/ca.po +++ b/product_supplierinfo_for_customer/i18n/ca.po @@ -176,6 +176,11 @@ msgstr "" "la recepció dels productes al vostre magatzem. Utilitzat pel planificador " "per al càlcul automàtic de la planificació de la comanda de compra." +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Margin to apply on price to obtain sale price" +msgstr "Marge a aplicar al preu per obtenir el preu de venda" + #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -225,6 +230,11 @@ msgstr "Variant de producte" msgid "Quantity" msgstr "Quantitat" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Sale Margin" +msgstr "Marge de venda" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" @@ -319,9 +329,3 @@ msgstr "Nom del producte del proveïdor" #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "to" msgstr "a" - -#~ msgid "Margin to apply on price to obtain sale price" -#~ msgstr "Marge a aplicar al preu per obtenir el preu de venda" - -#~ msgid "Sale Margin" -#~ msgstr "Marge de venda" diff --git a/product_supplierinfo_for_customer/i18n/de.po b/product_supplierinfo_for_customer/i18n/de.po index c992abf92a1..d14f84be408 100644 --- a/product_supplierinfo_for_customer/i18n/de.po +++ b/product_supplierinfo_for_customer/i18n/de.po @@ -173,6 +173,11 @@ msgid "" "automatic computation of the purchase order planning." msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Margin to apply on price to obtain sale price" +msgstr "" + #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -227,6 +232,11 @@ msgstr "Produktvorlage" msgid "Quantity" msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Sale Margin" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" diff --git a/product_supplierinfo_for_customer/i18n/es.po b/product_supplierinfo_for_customer/i18n/es.po index ce7ad9de1f1..faad627acac 100644 --- a/product_supplierinfo_for_customer/i18n/es.po +++ b/product_supplierinfo_for_customer/i18n/es.po @@ -178,6 +178,11 @@ msgstr "" "recepción de los productos en su almacén. Usado por el planificador para el " "cálculo automático de la planificación de pedidos de compra." +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Margin to apply on price to obtain sale price" +msgstr "" + #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -227,6 +232,11 @@ msgstr "Variante de producto" msgid "Quantity" msgstr "Cantidad" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Sale Margin" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" diff --git a/product_supplierinfo_for_customer/i18n/fr.po b/product_supplierinfo_for_customer/i18n/fr.po index b45043fdaf8..57a05e9a0b9 100644 --- a/product_supplierinfo_for_customer/i18n/fr.po +++ b/product_supplierinfo_for_customer/i18n/fr.po @@ -169,6 +169,11 @@ msgid "" "automatic computation of the purchase order planning." msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Margin to apply on price to obtain sale price" +msgstr "" + #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -223,6 +228,11 @@ msgstr "Modèle d'article" msgid "Quantity" msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Sale Margin" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" diff --git a/product_supplierinfo_for_customer/i18n/sl.po b/product_supplierinfo_for_customer/i18n/sl.po index 34e91215ae4..b312f4c9555 100644 --- a/product_supplierinfo_for_customer/i18n/sl.po +++ b/product_supplierinfo_for_customer/i18n/sl.po @@ -174,6 +174,11 @@ msgid "" "automatic computation of the purchase order planning." msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,help:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Margin to apply on price to obtain sale price" +msgstr "" + #. module: product_supplierinfo_for_customer #: model_terms:ir.ui.view,arch_db:product_supplierinfo_for_customer.product_customerinfo_form_view msgid "Other Information" @@ -228,6 +233,11 @@ msgstr "Predloga proizvoda" msgid "Quantity" msgstr "" +#. module: product_supplierinfo_for_customer +#: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sale_margin +msgid "Sale Margin" +msgstr "" + #. module: product_supplierinfo_for_customer #: model:ir.model.fields,field_description:product_supplierinfo_for_customer.field_product_customerinfo__sequence msgid "Sequence" diff --git a/product_supplierinfo_for_customer/views/product_view.xml b/product_supplierinfo_for_customer/views/product_views.xml similarity index 91% rename from product_supplierinfo_for_customer/views/product_view.xml rename to product_supplierinfo_for_customer/views/product_views.xml index 8f8dc50db55..05d67ea4e58 100644 --- a/product_supplierinfo_for_customer/views/product_view.xml +++ b/product_supplierinfo_for_customer/views/product_views.xml @@ -14,7 +14,7 @@ @@ -28,6 +28,7 @@ @@ -36,6 +37,7 @@ name="product_tmpl_id" string="Product" invisible="context.get('visible_product_tmpl_id', True)" + groups="base.group_multi_company" />
    From 1c5695206c942d49e4b2be01b84829aef272b937 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 15 Feb 2023 12:27:39 +0000 Subject: [PATCH 0182/1692] [ADD] setup.py --- setup/_metapackage/VERSION.txt | 2 +- setup/_metapackage/setup.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt index 30cdc5cc947..754a052ae14 100644 --- a/setup/_metapackage/VERSION.txt +++ b/setup/_metapackage/VERSION.txt @@ -1 +1 @@ -16.0.20230210.0 \ No newline at end of file +16.0.20230215.0 \ No newline at end of file diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py index e822dc35841..66cfa6d7188 100644 --- a/setup/_metapackage/setup.py +++ b/setup/_metapackage/setup.py @@ -9,6 +9,7 @@ version=version, install_requires=[ 'odoo-addon-product_assortment>=16.0dev,<16.1dev', + 'odoo-addon-product_category_active>=16.0dev,<16.1dev', 'odoo-addon-product_category_code>=16.0dev,<16.1dev', 'odoo-addon-product_code_unique>=16.0dev,<16.1dev', 'odoo-addon-product_dimension>=16.0dev,<16.1dev', From a67af52d971a5a36e41fc782ae812856ceda8f2b Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 15 Feb 2023 12:27:39 +0000 Subject: [PATCH 0183/1692] product_category_active 16.0.1.0.1 --- product_category_active/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_category_active/__manifest__.py b/product_category_active/__manifest__.py index ac3bf2baf90..24891919e74 100644 --- a/product_category_active/__manifest__.py +++ b/product_category_active/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Category Active", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "category": "Product", "summary": "Add option to archive product categories", "author": "Tecnativa, Odoo Community Association (OCA)", From cc2fe2a83cdeeee87266ce04d27310d7fb4cb861 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 15 Feb 2023 12:27:44 +0000 Subject: [PATCH 0184/1692] [UPD] addons table in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a26ef7e3a62..57e24de294e 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Available addons addon | version | maintainers | summary --- | --- | --- | --- [product_assortment](product_assortment/) | 16.0.1.0.2 | | Adds the ability to manage products assortment -[product_category_active](product_category_active/) | 16.0.1.0.0 | | Add option to archive product categories +[product_category_active](product_category_active/) | 16.0.1.0.1 | | Add option to archive product categories [product_category_code](product_category_code/) | 16.0.1.0.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Allows to define a code on product categories [product_code_unique](product_code_unique/) | 16.0.1.0.0 | | Set Product Internal Reference as Unique [product_dimension](product_dimension/) | 16.0.1.1.0 | | Product Dimension From 2acf603fb707ed55b06000ecd999a4c778ce4a67 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 15 Feb 2023 16:08:12 +0000 Subject: [PATCH 0185/1692] 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_category_active Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_category_active/ --- product_category_active/i18n/ca.po | 3 ++- product_category_active/i18n/es.po | 3 ++- product_category_active/i18n/pt.po | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/product_category_active/i18n/ca.po b/product_category_active/i18n/ca.po index e0d1ac1dc3d..0bf7895ad91 100644 --- a/product_category_active/i18n/ca.po +++ b/product_category_active/i18n/ca.po @@ -23,7 +23,8 @@ msgid "Active" msgstr "Actiu" #. module: product_category_active -#: code:addons/product_category_active/models/product.py:0 +#. odoo-python +#: code:addons/product_category_active/models/product_category.py:0 #, python-format msgid "" "At least one category that you are trying to archive or one of its children " diff --git a/product_category_active/i18n/es.po b/product_category_active/i18n/es.po index 6bdb6a32828..e2b9d72a061 100644 --- a/product_category_active/i18n/es.po +++ b/product_category_active/i18n/es.po @@ -23,7 +23,8 @@ msgid "Active" msgstr "Activo" #. module: product_category_active -#: code:addons/product_category_active/models/product.py:23 +#. odoo-python +#: code:addons/product_category_active/models/product_category.py:0 #, python-format msgid "" "At least one category that you are trying to archive or one of its children " diff --git a/product_category_active/i18n/pt.po b/product_category_active/i18n/pt.po index c5e56557c38..13038d46418 100644 --- a/product_category_active/i18n/pt.po +++ b/product_category_active/i18n/pt.po @@ -23,7 +23,8 @@ msgid "Active" msgstr "Ativo" #. module: product_category_active -#: code:addons/product_category_active/models/product.py:23 +#. odoo-python +#: code:addons/product_category_active/models/product_category.py:0 #, python-format msgid "" "At least one category that you are trying to archive or one of its children " From 8727b861d02f71843a3f33f117d385f72697a40a Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Sat, 13 Feb 2021 20:11:41 +0100 Subject: [PATCH 0186/1692] [ADD] product_category_type : new module that Add 'Type' field on Product Categories to distinguish between parent and final categories --- product_category_type/README.rst | 3 ++ product_category_type/__init__.py | 1 + product_category_type/__manifest__.py | 22 ++++++++++ .../demo/product_category.xml | 24 +++++++++++ product_category_type/models/__init__.py | 2 + .../models/product_category.py | 18 ++++++++ .../models/product_template.py | 11 +++++ product_category_type/readme/CONTRIBUTORS.rst | 1 + product_category_type/readme/DESCRIPTION.rst | 20 +++++++++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../description/product_category_tree.png | Bin 0 -> 22860 bytes .../description/product_template_form.png | Bin 0 -> 61556 bytes .../views/product_category.xml | 40 ++++++++++++++++++ 13 files changed, 142 insertions(+) create mode 100644 product_category_type/README.rst create mode 100644 product_category_type/__init__.py create mode 100644 product_category_type/__manifest__.py create mode 100644 product_category_type/demo/product_category.xml create mode 100644 product_category_type/models/__init__.py create mode 100644 product_category_type/models/product_category.py create mode 100644 product_category_type/models/product_template.py create mode 100644 product_category_type/readme/CONTRIBUTORS.rst create mode 100644 product_category_type/readme/DESCRIPTION.rst create mode 100644 product_category_type/static/description/icon.png create mode 100644 product_category_type/static/description/product_category_tree.png create mode 100644 product_category_type/static/description/product_template_form.png create mode 100644 product_category_type/views/product_category.xml diff --git a/product_category_type/README.rst b/product_category_type/README.rst new file mode 100644 index 00000000000..305761056ca --- /dev/null +++ b/product_category_type/README.rst @@ -0,0 +1,3 @@ +===================== +Product Category Type +===================== diff --git a/product_category_type/__init__.py b/product_category_type/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_category_type/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_category_type/__manifest__.py b/product_category_type/__manifest__.py new file mode 100644 index 00000000000..5ccfe840335 --- /dev/null +++ b/product_category_type/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2021 Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Product Category Type", + "summary": """ + Add Type field on Product Categories + to distinguish between parent and final categories""", + "version": "12.0.1.0.0", + "license": "AGPL-3", + "author": "GRAP,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/product-attribute", + "depends": [ + "product", + ], + "data": [ + "views/product_category.xml", + ], + "demo": [ + "demo/product_category.xml", + ], +} diff --git a/product_category_type/demo/product_category.xml b/product_category_type/demo/product_category.xml new file mode 100644 index 00000000000..08ee42a7452 --- /dev/null +++ b/product_category_type/demo/product_category.xml @@ -0,0 +1,24 @@ + + + + + + + Demo Parent Category (Type View) + view + + + + Demo Category 1 (Type Normal) + normal + + + + + Demo Category 2 (Type Normal) + normal + + + + diff --git a/product_category_type/models/__init__.py b/product_category_type/models/__init__.py new file mode 100644 index 00000000000..f154bb52867 --- /dev/null +++ b/product_category_type/models/__init__.py @@ -0,0 +1,2 @@ +from . import product_category +from . import product_template diff --git a/product_category_type/models/product_category.py b/product_category_type/models/product_category.py new file mode 100644 index 00000000000..82350ac9ea4 --- /dev/null +++ b/product_category_type/models/product_category.py @@ -0,0 +1,18 @@ +# Copyright 2021 Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductCategory(models.Model): + _inherit = "product.category" + + parent_id = fields.Many2one( + domain="[('type', '=', 'view')]") + + type = fields.Selection( + selection=[('view', 'View'), ('normal', 'Normal')], + string='Category Type', default='normal', + help="A category of the view type is a virtual category" + " that can be used as the parent of another category" + " to create a hierarchical structure.") diff --git a/product_category_type/models/product_template.py b/product_category_type/models/product_template.py new file mode 100644 index 00000000000..31375136968 --- /dev/null +++ b/product_category_type/models/product_template.py @@ -0,0 +1,11 @@ +# Copyright 2021 Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + categ_id = fields.Many2one( + domain="[('type', '=', 'normal')]") diff --git a/product_category_type/readme/CONTRIBUTORS.rst b/product_category_type/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..e1525ce042b --- /dev/null +++ b/product_category_type/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) diff --git a/product_category_type/readme/DESCRIPTION.rst b/product_category_type/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..9456c60ccb6 --- /dev/null +++ b/product_category_type/readme/DESCRIPTION.rst @@ -0,0 +1,20 @@ +Add 'Type' field on Product Categories to distinguish between parent and final categories. + +figure:: ../static/description/product_category_tree.png + +* Categories (type view) can contain only categories. + +* Categories (type normal) can contain only products. + +It is so impossible to select a category (type view) in the product +template form view. + +figure:: ../static/description/product_template_form.png + +Note +---- + +This module restores a feature that was present in Odoo Community +Edition until the V10 revision. + +Ref: https://github.com/odoo/odoo/blob/10.0/addons/product/models/product.py#L24 diff --git a/product_category_type/static/description/icon.png b/product_category_type/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_category_type/static/description/product_category_tree.png b/product_category_type/static/description/product_category_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d8510d6469cfa84d011db1bdeb2b68f4ef8afb GIT binary patch literal 22860 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 N?teLUnClXm`)_5%_=5ld literal 0 HcmV?d00001 diff --git a/product_category_type/static/description/product_template_form.png b/product_category_type/static/description/product_template_form.png new file mode 100644 index 0000000000000000000000000000000000000000..134e456ed899686fae2abda39eec92e9453db6b4 GIT binary patch literal 61556 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 PLi}VT6vZn<4Fmrd3aE0& literal 0 HcmV?d00001 diff --git a/product_category_type/views/product_category.xml b/product_category_type/views/product_category.xml new file mode 100644 index 00000000000..1dae65a87a4 --- /dev/null +++ b/product_category_type/views/product_category.xml @@ -0,0 +1,40 @@ + + + + + + + product.category + + + + + + + + + + product.category + + + + type == 'view' + + + + + + + + + product.category + + + + + + + + + From 0b2aa4144afeb4c20080e00bb5515d03a7327c52 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 5 Nov 2021 15:45:43 +0000 Subject: [PATCH 0187/1692] [UPD] Update product_category_type.pot --- .../i18n/product_category_type.pot | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 product_category_type/i18n/product_category_type.pot diff --git a/product_category_type/i18n/product_category_type.pot b/product_category_type/i18n/product_category_type.pot new file mode 100644 index 00000000000..07d6c362286 --- /dev/null +++ b/product_category_type/i18n/product_category_type.pot @@ -0,0 +1,77 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_type +# +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_category_type +#: model:ir.model.fields,help:product_category_type.field_product_category__type +msgid "A category of the view type is a virtual category that can be used as the parent of another category to create a hierarchical structure." +msgstr "" + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_category__type +msgid "Category Type" +msgstr "" + +#. module: product_category_type +#: model:product.category,name:product_category_type.category_normal_1 +msgid "Demo Category 1 (Type Normal)" +msgstr "" + +#. module: product_category_type +#: model:product.category,name:product_category_type.category_normal_2 +msgid "Demo Category 2 (Type Normal)" +msgstr "" + +#. module: product_category_type +#: model:product.category,name:product_category_type.category_view +msgid "Demo Parent Category (Type View)" +msgstr "" + +#. module: product_category_type +#: selection:product.category,type:0 +msgid "Normal" +msgstr "" + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_category__parent_id +msgid "Parent Category" +msgstr "" + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_product__categ_id +#: model:ir.model.fields,field_description:product_category_type.field_product_template__categ_id +msgid "Pricing/Primary Category" +msgstr "" + +#. module: product_category_type +#: model:ir.model,name:product_category_type.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_category_type +#: model:ir.model,name:product_category_type.model_product_template +msgid "Product Template" +msgstr "" + +#. module: product_category_type +#: model:ir.model.fields,help:product_category_type.field_product_product__categ_id +#: model:ir.model.fields,help:product_category_type.field_product_template__categ_id +msgid "Select category for the current product" +msgstr "" + +#. module: product_category_type +#: selection:product.category,type:0 +msgid "View" +msgstr "" + From c9f014739e3e96ce1e058b7756c9e815f6af1604 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 5 Nov 2021 16:36:11 +0000 Subject: [PATCH 0188/1692] [UPD] README.rst --- product_category_type/README.rst | 89 ++++ .../static/description/index.html | 433 ++++++++++++++++++ 2 files changed, 522 insertions(+) create mode 100644 product_category_type/static/description/index.html diff --git a/product_category_type/README.rst b/product_category_type/README.rst index 305761056ca..353c6c1f845 100644 --- a/product_category_type/README.rst +++ b/product_category_type/README.rst @@ -1,3 +1,92 @@ ===================== Product Category Type ===================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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_category_type + :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_category_type + :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| + +Add 'Type' field on Product Categories to distinguish between parent and final categories. + +figure:: ../static/description/product_category_tree.png + +* Categories (type view) can contain only categories. + +* Categories (type normal) can contain only products. + +It is so impossible to select a category (type view) in the product +template form view. + +figure:: ../static/description/product_template_form.png + +Note +---- + +This module restores a feature that was present in Odoo Community +Edition until the V10 revision. + +Ref: https://github.com/odoo/odoo/blob/10.0/addons/product/models/product.py#L24 + +**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 +~~~~~~~ + +* 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. + +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_type/static/description/index.html b/product_category_type/static/description/index.html new file mode 100644 index 00000000000..8bcd82746b6 --- /dev/null +++ b/product_category_type/static/description/index.html @@ -0,0 +1,433 @@ + + + + + + +Product Category Type + + + +
    +

    Product Category Type

    + + +

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

    +

    Add ‘Type’ field on Product Categories to distinguish between parent and final categories.

    +

    figure:: ../static/description/product_category_tree.png

    +
      +
    • Categories (type view) can contain only categories.
    • +
    • Categories (type normal) can contain only products.
    • +
    +

    It is so impossible to select a category (type view) in the product +template form view.

    +

    figure:: ../static/description/product_template_form.png

    +
    +

    Note

    +

    This module restores a feature that was present in Odoo Community +Edition until the V10 revision.

    +

    Ref: https://github.com/odoo/odoo/blob/10.0/addons/product/models/product.py#L24

    +

    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

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

    +

    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 462711e32193369b1a5f2dc6059f3304a6b81e7e Mon Sep 17 00:00:00 2001 From: "Kevin.roche" Date: Thu, 13 Jan 2022 18:08:12 +0100 Subject: [PATCH 0189/1692] [MIG] product_category_type: Migration to 14.0 --- product_category_type/__manifest__.py | 3 ++- product_category_type/demo/product_category.xml | 7 +++---- product_category_type/models/product_category.py | 11 ++++++----- product_category_type/models/product_template.py | 3 +-- product_category_type/views/product_category.xml | 15 +++++++-------- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/product_category_type/__manifest__.py b/product_category_type/__manifest__.py index 5ccfe840335..babaee66209 100644 --- a/product_category_type/__manifest__.py +++ b/product_category_type/__manifest__.py @@ -6,9 +6,10 @@ "summary": """ Add Type field on Product Categories to distinguish between parent and final categories""", - "version": "12.0.1.0.0", + "version": "14.0.1.0.0", "license": "AGPL-3", "author": "GRAP,Odoo Community Association (OCA)", + "maintainers": ["legalsylvain"], "website": "https://github.com/OCA/product-attribute", "depends": [ "product", diff --git a/product_category_type/demo/product_category.xml b/product_category_type/demo/product_category.xml index 08ee42a7452..12308ee673f 100644 --- a/product_category_type/demo/product_category.xml +++ b/product_category_type/demo/product_category.xml @@ -1,7 +1,6 @@ - + - @@ -12,13 +11,13 @@ Demo Category 1 (Type Normal) normal - + Demo Category 2 (Type Normal) normal - + diff --git a/product_category_type/models/product_category.py b/product_category_type/models/product_category.py index 82350ac9ea4..44c3d0b2aca 100644 --- a/product_category_type/models/product_category.py +++ b/product_category_type/models/product_category.py @@ -7,12 +7,13 @@ class ProductCategory(models.Model): _inherit = "product.category" - parent_id = fields.Many2one( - domain="[('type', '=', 'view')]") + parent_id = fields.Many2one(domain="[('type', '=', 'view')]") type = fields.Selection( - selection=[('view', 'View'), ('normal', 'Normal')], - string='Category Type', default='normal', + selection=[("view", "View"), ("normal", "Normal")], + string="Category Type", + default="normal", help="A category of the view type is a virtual category" " that can be used as the parent of another category" - " to create a hierarchical structure.") + " to create a hierarchical structure.", + ) diff --git a/product_category_type/models/product_template.py b/product_category_type/models/product_template.py index 31375136968..4e671ef3b06 100644 --- a/product_category_type/models/product_template.py +++ b/product_category_type/models/product_template.py @@ -7,5 +7,4 @@ class ProductTemplate(models.Model): _inherit = "product.template" - categ_id = fields.Many2one( - domain="[('type', '=', 'normal')]") + categ_id = fields.Many2one(domain="[('type', '=', 'normal')]") diff --git a/product_category_type/views/product_category.xml b/product_category_type/views/product_category.xml index 1dae65a87a4..1fe984a9ef7 100644 --- a/product_category_type/views/product_category.xml +++ b/product_category_type/views/product_category.xml @@ -1,38 +1,37 @@ - + - product.category - + - + product.category - + type == 'view' - + product.category - + - + From ecb1397ce6be8abaf79edf56a5c84e5e6d259de5 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Thu, 13 Jan 2022 22:31:11 +0000 Subject: [PATCH 0190/1692] [UPD] Update product_category_type.pot --- .../i18n/product_category_type.pot | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/product_category_type/i18n/product_category_type.pot b/product_category_type/i18n/product_category_type.pot index 07d6c362286..97c5d5e9046 100644 --- a/product_category_type/i18n/product_category_type.pot +++ b/product_category_type/i18n/product_category_type.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_category_type +# * product_category_type # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 14.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" @@ -15,7 +15,9 @@ msgstr "" #. module: product_category_type #: model:ir.model.fields,help:product_category_type.field_product_category__type -msgid "A category of the view type is a virtual category that can be used as the parent of another category to create a hierarchical structure." +msgid "" +"A category of the view type is a virtual category that can be used as the " +"parent of another category to create a hierarchical structure." msgstr "" #. module: product_category_type @@ -24,22 +26,25 @@ msgid "Category Type" msgstr "" #. module: product_category_type -#: model:product.category,name:product_category_type.category_normal_1 -msgid "Demo Category 1 (Type Normal)" +#: model:ir.model.fields,field_description:product_category_type.field_product_category__display_name +#: model:ir.model.fields,field_description:product_category_type.field_product_template__display_name +msgid "Display Name" msgstr "" #. module: product_category_type -#: model:product.category,name:product_category_type.category_normal_2 -msgid "Demo Category 2 (Type Normal)" +#: model:ir.model.fields,field_description:product_category_type.field_product_category__id +#: model:ir.model.fields,field_description:product_category_type.field_product_template__id +msgid "ID" msgstr "" #. module: product_category_type -#: model:product.category,name:product_category_type.category_view -msgid "Demo Parent Category (Type View)" +#: model:ir.model.fields,field_description:product_category_type.field_product_category____last_update +#: model:ir.model.fields,field_description:product_category_type.field_product_template____last_update +msgid "Last Modified on" msgstr "" #. module: product_category_type -#: selection:product.category,type:0 +#: model:ir.model.fields.selection,name:product_category_type.selection__product_category__type__normal msgid "Normal" msgstr "" @@ -49,13 +54,9 @@ msgid "Parent Category" msgstr "" #. module: product_category_type +#: model:ir.model,name:product_category_type.model_product_category #: model:ir.model.fields,field_description:product_category_type.field_product_product__categ_id #: model:ir.model.fields,field_description:product_category_type.field_product_template__categ_id -msgid "Pricing/Primary Category" -msgstr "" - -#. module: product_category_type -#: model:ir.model,name:product_category_type.model_product_category msgid "Product Category" msgstr "" @@ -71,7 +72,6 @@ msgid "Select category for the current product" msgstr "" #. module: product_category_type -#: selection:product.category,type:0 +#: model:ir.model.fields.selection,name:product_category_type.selection__product_category__type__view msgid "View" msgstr "" - From eb919b5ef949275db30d1be5cfcd4ffec32c5fb0 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 13 Jan 2022 22:54:56 +0000 Subject: [PATCH 0191/1692] [UPD] README.rst --- product_category_type/README.rst | 18 +++++++++++++----- .../static/description/index.html | 8 +++++--- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/product_category_type/README.rst b/product_category_type/README.rst index 353c6c1f845..52a71a82725 100644 --- a/product_category_type/README.rst +++ b/product_category_type/README.rst @@ -14,13 +14,13 @@ Product Category Type :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_category_type + :target: https://github.com/OCA/product-attribute/tree/14.0/product_category_type :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_category_type + :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_category_type :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 + :target: https://runbot.odoo-community.org/runbot/135/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -57,7 +57,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. @@ -87,6 +87,14 @@ 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. +.. |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_category_type/static/description/index.html b/product_category_type/static/description/index.html index 8bcd82746b6..eddd87a29ba 100644 --- a/product_category_type/static/description/index.html +++ b/product_category_type/static/description/index.html @@ -367,7 +367,7 @@

    Product Category Type

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

    Add ‘Type’ field on Product Categories to distinguish between parent and final categories.

    figure:: ../static/description/product_category_tree.png

      @@ -399,7 +399,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.

      @@ -423,7 +423,9 @@

      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.

      +

      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.

      From 6408e95219b2079205313e2345792156b0fe7565 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 13 Jan 2022 22:54:57 +0000 Subject: [PATCH 0192/1692] product_category_type 14.0.1.0.1 --- product_category_type/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_category_type/__manifest__.py b/product_category_type/__manifest__.py index babaee66209..58bdbf5a107 100644 --- a/product_category_type/__manifest__.py +++ b/product_category_type/__manifest__.py @@ -6,7 +6,7 @@ "summary": """ Add Type field on Product Categories to distinguish between parent and final categories""", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "license": "AGPL-3", "author": "GRAP,Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], From 2f24407febc483ce3ca043cbf2564891162fca85 Mon Sep 17 00:00:00 2001 From: Maria Sparenberg Date: Wed, 11 May 2022 10:58:29 +0000 Subject: [PATCH 0193/1692] Added translation using Weblate (German) --- product_category_type/i18n/de.po | 83 ++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 product_category_type/i18n/de.po diff --git a/product_category_type/i18n/de.po b/product_category_type/i18n/de.po new file mode 100644 index 00000000000..cdbc07e8b9b --- /dev/null +++ b/product_category_type/i18n/de.po @@ -0,0 +1,83 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_type +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-05-11 13:05+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" + +#. module: product_category_type +#: model:ir.model.fields,help:product_category_type.field_product_category__type +msgid "" +"A category of the view type is a virtual category that can be used as the " +"parent of another category to create a hierarchical structure." +msgstr "" +"Eine Kategorie mit Typ \"Ansicht\" ist eine virtuelle Kategorie, die als " +"übergeordnete Kategorie verwendet werden kann, um eine Hierarchie zu " +"erstellen." + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_category__type +msgid "Category Type" +msgstr "Kategorie-Typ" + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_category__display_name +#: model:ir.model.fields,field_description:product_category_type.field_product_template__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_category__id +#: model:ir.model.fields,field_description:product_category_type.field_product_template__id +msgid "ID" +msgstr "ID" + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_category____last_update +#: model:ir.model.fields,field_description:product_category_type.field_product_template____last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: product_category_type +#: model:ir.model.fields.selection,name:product_category_type.selection__product_category__type__normal +msgid "Normal" +msgstr "Normal" + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_category__parent_id +msgid "Parent Category" +msgstr "Übergeordnete Kategorie" + +#. module: product_category_type +#: model:ir.model,name:product_category_type.model_product_category +#: model:ir.model.fields,field_description:product_category_type.field_product_product__categ_id +#: model:ir.model.fields,field_description:product_category_type.field_product_template__categ_id +msgid "Product Category" +msgstr "Produktkategorie" + +#. module: product_category_type +#: model:ir.model,name:product_category_type.model_product_template +msgid "Product Template" +msgstr "Produktvorlage" + +#. module: product_category_type +#: model:ir.model.fields,help:product_category_type.field_product_product__categ_id +#: model:ir.model.fields,help:product_category_type.field_product_template__categ_id +msgid "Select category for the current product" +msgstr "Kategorie für das aktuelle Produkt auswählen" + +#. module: product_category_type +#: model:ir.model.fields.selection,name:product_category_type.selection__product_category__type__view +msgid "View" +msgstr "Ansicht" From d14aafa77f60a08d479faade7bc36fc0a9db9aea Mon Sep 17 00:00:00 2001 From: Ruchir Shukla Date: Tue, 17 Jan 2023 16:30:09 +0530 Subject: [PATCH 0194/1692] [MIG][15.0]product_category_type:Migration to 15.0 --- product_category_type/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_category_type/__manifest__.py b/product_category_type/__manifest__.py index 58bdbf5a107..36cb73a8c1a 100644 --- a/product_category_type/__manifest__.py +++ b/product_category_type/__manifest__.py @@ -6,7 +6,7 @@ "summary": """ Add Type field on Product Categories to distinguish between parent and final categories""", - "version": "14.0.1.0.1", + "version": "15.0.1.0.1", "license": "AGPL-3", "author": "GRAP,Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], From b096ad2b0f9cfded664a11f5a87d178deccad017 Mon Sep 17 00:00:00 2001 From: Pierrick Brun Date: Fri, 24 Feb 2023 14:25:53 +0100 Subject: [PATCH 0195/1692] [IMP] product_category_type: black, isort, prettier --- .../product_category_type/odoo/addons/product_category_type | 1 + setup/product_category_type/setup.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 120000 setup/product_category_type/odoo/addons/product_category_type create mode 100644 setup/product_category_type/setup.py diff --git a/setup/product_category_type/odoo/addons/product_category_type b/setup/product_category_type/odoo/addons/product_category_type new file mode 120000 index 00000000000..c84896653e0 --- /dev/null +++ b/setup/product_category_type/odoo/addons/product_category_type @@ -0,0 +1 @@ +../../../../product_category_type \ No newline at end of file diff --git a/setup/product_category_type/setup.py b/setup/product_category_type/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/product_category_type/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From d6e57f3e59961ffda46ef2c9680d4e7fd237643f Mon Sep 17 00:00:00 2001 From: Pierrick Brun Date: Fri, 24 Feb 2023 14:32:22 +0100 Subject: [PATCH 0196/1692] [MIG][16.0]product_category_type:Migration to 16.0 --- product_category_type/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_category_type/__manifest__.py b/product_category_type/__manifest__.py index 36cb73a8c1a..067265e964e 100644 --- a/product_category_type/__manifest__.py +++ b/product_category_type/__manifest__.py @@ -6,7 +6,7 @@ "summary": """ Add Type field on Product Categories to distinguish between parent and final categories""", - "version": "15.0.1.0.1", + "version": "16.0.1.0.0", "license": "AGPL-3", "author": "GRAP,Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], From bcd50859c8fb0a9e078a81f0e88c118969c369da Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Fri, 24 Feb 2023 17:58:45 +0100 Subject: [PATCH 0197/1692] [ADD] product_category_type fr translation --- product_category_type/i18n/fr.po | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 product_category_type/i18n/fr.po diff --git a/product_category_type/i18n/fr.po b/product_category_type/i18n/fr.po new file mode 100644 index 00000000000..fe094ce161a --- /dev/null +++ b/product_category_type/i18n/fr.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_type +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-24 16:47+0000\n" +"PO-Revision-Date: 2023-02-24 16:47+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: \n" + +#. module: product_category_type +#: model:ir.model.fields,help:product_category_type.field_product_category__type +msgid "" +"A category of the view type is a virtual category that can be used as the " +"parent of another category to create a hierarchical structure." +msgstr "Une catégorie de type vue est une catégorie virtuelle qui est utilisée comme " +" parent d'une autre catégorie, pour créer une structure hiérarchique." + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_category__type +msgid "Category Type" +msgstr "Type de catégorie" + +#. module: product_category_type +#: model:ir.model.fields.selection,name:product_category_type.selection__product_category__type__normal +msgid "Normal" +msgstr "" + +#. module: product_category_type +#: model:ir.model.fields,field_description:product_category_type.field_product_category__parent_id +msgid "Parent Category" +msgstr "Catégorie mère" + +#. module: product_category_type +#: model:ir.model,name:product_category_type.model_product_template +msgid "Product" +msgstr "Produit" + +#. module: product_category_type +#: model:ir.model,name:product_category_type.model_product_category +#: model:ir.model.fields,field_description:product_category_type.field_product_product__categ_id +#: model:ir.model.fields,field_description:product_category_type.field_product_template__categ_id +msgid "Product Category" +msgstr "Catégorie de produit" + +#. module: product_category_type +#: model:ir.model.fields.selection,name:product_category_type.selection__product_category__type__view +msgid "View" +msgstr "Vue" From c70171cb9174a68a2d656ccc851a3dfbdaa3c788 Mon Sep 17 00:00:00 2001 From: Pierrick Brun Date: Fri, 24 Feb 2023 17:30:31 +0100 Subject: [PATCH 0198/1692] [ADD] 16.0 product_category_level module --- product_category_level/README.rst | 77 +++++++++++++++++++ product_category_level/__init__.py | 1 + product_category_level/__manifest__.py | 20 +++++ .../demo/product_category.xml | 18 +++++ product_category_level/i18n/fr.po | 33 ++++++++ .../i18n/product_category_level.pot | 31 ++++++++ product_category_level/models/__init__.py | 1 + .../models/product_category.py | 24 ++++++ product_category_level/readme/DESCRIPTION.rst | 2 + product_category_level/tests/__init__.py | 1 + .../tests/test_category_level.py | 24 ++++++ .../views/product_category.xml | 36 +++++++++ .../odoo/addons/product_category_level | 1 + setup/product_category_level/setup.py | 6 ++ 14 files changed, 275 insertions(+) create mode 100644 product_category_level/README.rst create mode 100644 product_category_level/__init__.py create mode 100644 product_category_level/__manifest__.py create mode 100644 product_category_level/demo/product_category.xml create mode 100644 product_category_level/i18n/fr.po create mode 100644 product_category_level/i18n/product_category_level.pot create mode 100644 product_category_level/models/__init__.py create mode 100644 product_category_level/models/product_category.py create mode 100644 product_category_level/readme/DESCRIPTION.rst create mode 100644 product_category_level/tests/__init__.py create mode 100644 product_category_level/tests/test_category_level.py create mode 100644 product_category_level/views/product_category.xml create mode 120000 setup/product_category_level/odoo/addons/product_category_level create mode 100644 setup/product_category_level/setup.py diff --git a/product_category_level/README.rst b/product_category_level/README.rst new file mode 100644 index 00000000000..21bbc860c1a --- /dev/null +++ b/product_category_level/README.rst @@ -0,0 +1,77 @@ +====================== +Product Category Level +====================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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_category_level + :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_category_level + :alt: Translate me on Weblate +.. |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| + +Add a 'Level' field on Product Categories to show +the number of parents a category has (recursively). + +**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 +~~~~~~~ + +* Akretion + +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-PierrickBrun| image:: https://github.com/PierrickBrun.png?size=40px + :target: https://github.com/PierrickBrun + :alt: PierrickBrun + +Current `maintainer `__: + +|maintainer-PierrickBrun| + +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_level/__init__.py b/product_category_level/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_category_level/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_category_level/__manifest__.py b/product_category_level/__manifest__.py new file mode 100644 index 00000000000..f48502cb6be --- /dev/null +++ b/product_category_level/__manifest__.py @@ -0,0 +1,20 @@ +{ + "name": "Product Category Level", + "summary": """ + Add Level field on Product Categories + to show the recursion level on the category""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Akretion, Odoo Community Association (OCA)", + "maintainers": ["PierrickBrun"], + "website": "https://github.com/OCA/product-attribute", + "depends": [ + "product", + ], + "data": [ + "views/product_category.xml", + ], + "demo": [ + "demo/product_category.xml", + ], +} diff --git a/product_category_level/demo/product_category.xml b/product_category_level/demo/product_category.xml new file mode 100644 index 00000000000..5df59d1cf6a --- /dev/null +++ b/product_category_level/demo/product_category.xml @@ -0,0 +1,18 @@ + + + + + Demo Parent Category + + + + Demo Category child 1 + + + + + Demo Category child 2 + + + + diff --git a/product_category_level/i18n/fr.po b/product_category_level/i18n/fr.po new file mode 100644 index 00000000000..379e77a37ad --- /dev/null +++ b/product_category_level/i18n/fr.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_level +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-24 17:00+0000\n" +"PO-Revision-Date: 2023-02-24 18:01+0100\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 3.1.1\n" + +#. module: product_category_level +#: model:ir.model.fields,field_description:product_category_level.field_product_category__level +msgid "Level" +msgstr "Niveau" + +#. module: product_category_level +#: model:ir.model,name:product_category_level.model_product_category +msgid "Product Category" +msgstr "Catégorie de Produit" + +#. module: product_category_level +#: model:ir.model.fields,help:product_category_level.field_product_category__level +msgid "The number of parents this category has" +msgstr "Le nombre de parents qu'a cette catégorie" diff --git a/product_category_level/i18n/product_category_level.pot b/product_category_level/i18n/product_category_level.pot new file mode 100644 index 00000000000..86794ddc82f --- /dev/null +++ b/product_category_level/i18n/product_category_level.pot @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_level +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-24 17:00+0000\n" +"PO-Revision-Date: 2023-02-24 17:00+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: \n" + +#. module: product_category_level +#: model:ir.model.fields,field_description:product_category_level.field_product_category__level +msgid "Level" +msgstr "" + +#. module: product_category_level +#: model:ir.model,name:product_category_level.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_category_level +#: model:ir.model.fields,help:product_category_level.field_product_category__level +msgid "The number of parents this category has" +msgstr "" diff --git a/product_category_level/models/__init__.py b/product_category_level/models/__init__.py new file mode 100644 index 00000000000..53553f3f2de --- /dev/null +++ b/product_category_level/models/__init__.py @@ -0,0 +1 @@ +from . import product_category diff --git a/product_category_level/models/product_category.py b/product_category_level/models/product_category.py new file mode 100644 index 00000000000..0ace9cc1e56 --- /dev/null +++ b/product_category_level/models/product_category.py @@ -0,0 +1,24 @@ +# Copyright 2023 Akretion (https://www.akretion.com). +# @author Pierrick Brun +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ProductCategory(models.Model): + _inherit = "product.category" + + level = fields.Integer( + compute="_compute_level", + store=True, + recursive=True, + help="The number of parents this category has", + ) + + @api.depends("parent_id", "parent_id.level") + def _compute_level(self): + for record in self: + if record.parent_id: + record.level = record.parent_id.level + 1 + else: + record.level = 0 diff --git a/product_category_level/readme/DESCRIPTION.rst b/product_category_level/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..da8291e62ba --- /dev/null +++ b/product_category_level/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +Add a 'Level' field on Product Categories to show +the number of parents a category has (recursively). diff --git a/product_category_level/tests/__init__.py b/product_category_level/tests/__init__.py new file mode 100644 index 00000000000..8d7e268babe --- /dev/null +++ b/product_category_level/tests/__init__.py @@ -0,0 +1 @@ +from . import test_category_level diff --git a/product_category_level/tests/test_category_level.py b/product_category_level/tests/test_category_level.py new file mode 100644 index 00000000000..91064f91807 --- /dev/null +++ b/product_category_level/tests/test_category_level.py @@ -0,0 +1,24 @@ +# Copyright 2023 Akretion (https://www.akretion.com). +# @author Pierrick Brun +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestProductCategoryLevel(TransactionCase): + def setUp(self): + super().setUp() + self.print_category_parent = self.env.ref( + "product_category_level.demo_category_parent" + ) + self.print_category_child_1 = self.env.ref( + "product_category_level.demo_category_child_1" + ) + self.print_category_child_2 = self.env.ref( + "product_category_level.demo_category_child_2" + ) + + def test_product_category_level(self): + self.assertEqual(2, self.print_category_child_2.level) + self.assertEqual(0, self.print_category_parent.level) + self.assertEqual(1, self.print_category_child_1.level) diff --git a/product_category_level/views/product_category.xml b/product_category_level/views/product_category.xml new file mode 100644 index 00000000000..2cfdb082ed8 --- /dev/null +++ b/product_category_level/views/product_category.xml @@ -0,0 +1,36 @@ + + + + + + product.category + + + + + + + + + + product.category + + + + + + + + + + product.category + + + + + + + + + diff --git a/setup/product_category_level/odoo/addons/product_category_level b/setup/product_category_level/odoo/addons/product_category_level new file mode 120000 index 00000000000..16d48f5d776 --- /dev/null +++ b/setup/product_category_level/odoo/addons/product_category_level @@ -0,0 +1 @@ +../../../../product_category_level \ No newline at end of file diff --git a/setup/product_category_level/setup.py b/setup/product_category_level/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/product_category_level/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 3cef54e19a3edf0cf1ffb52906b0c7e4bc76851f Mon Sep 17 00:00:00 2001 From: Anna Janiszewska Date: Thu, 19 Nov 2020 14:00:43 +0100 Subject: [PATCH 0199/1692] import module product_uom_updatable from external source --- product_uom_updatable/__init__.py | 1 + product_uom_updatable/__manifest__.py | 16 +++++ .../i18n/product_uom_updatable.pot | 32 +++++++++ product_uom_updatable/models/__init__.py | 1 + .../models/product_template.py | 69 +++++++++++++++++++ product_uom_updatable/tests/__init__.py | 1 + .../tests/test_product_uom_update.py | 54 +++++++++++++++ 7 files changed, 174 insertions(+) create mode 100644 product_uom_updatable/__init__.py create mode 100644 product_uom_updatable/__manifest__.py create mode 100644 product_uom_updatable/i18n/product_uom_updatable.pot create mode 100644 product_uom_updatable/models/__init__.py create mode 100644 product_uom_updatable/models/product_template.py create mode 100644 product_uom_updatable/tests/__init__.py create mode 100644 product_uom_updatable/tests/test_product_uom_update.py diff --git a/product_uom_updatable/__init__.py b/product_uom_updatable/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_uom_updatable/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_uom_updatable/__manifest__.py b/product_uom_updatable/__manifest__.py new file mode 100644 index 00000000000..3dd6cf44c43 --- /dev/null +++ b/product_uom_updatable/__manifest__.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 Acsone SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Product Uom Updatable", + "description": """ + allows products uom to be modified after be used in a stock picking if the product uom is of the same category""", + "version": "10.0.1.0.0", + "license": "AGPL-3", + "author": "Acsone SA/NV", + "website": "www.acsone.eu", + "depends": ["stock"], + "data": [], + "demo": [], +} diff --git a/product_uom_updatable/i18n/product_uom_updatable.pot b/product_uom_updatable/i18n/product_uom_updatable.pot new file mode 100644 index 00000000000..212268de945 --- /dev/null +++ b/product_uom_updatable/i18n/product_uom_updatable.pot @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_uom_updatable +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0+e\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_uom_updatable +#: model:ir.model,name:product_uom_updatable.model_product_template +msgid "Product Template" +msgstr "" + +#. module: product_uom_updatable +#: code:addons/product_uom_updatable/models/product_template.py:66 +#, python-format +msgid "You can not change the purchase unit of measure of a product to a new unit that doesn't have the same category and factor" +msgstr "" + +#. module: product_uom_updatable +#: code:addons/product_uom_updatable/models/product_template.py:42 +#, python-format +msgid "You can not change the unit of measure of a product to a new unit that doesn't have the same category and factor" +msgstr "" + diff --git a/product_uom_updatable/models/__init__.py b/product_uom_updatable/models/__init__.py new file mode 100644 index 00000000000..e8fa8f6bf1e --- /dev/null +++ b/product_uom_updatable/models/__init__.py @@ -0,0 +1 @@ +from . import product_template diff --git a/product_uom_updatable/models/product_template.py b/product_uom_updatable/models/product_template.py new file mode 100644 index 00000000000..5d49088dd48 --- /dev/null +++ b/product_uom_updatable/models/product_template.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 Acsone SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from itertools import groupby + +from odoo import _, api, models +from odoo.exceptions import UserError + + +class ProductTemplate(models.Model): + + _inherit = "product.template" + + @api.multi + def write(self, vals): + uom_id = vals.pop("uom_id", False) + uom_po_id = vals.pop("uom_po_id", False) + res = super(ProductTemplate, self).write(vals) + if uom_id: + self._update_uom(uom_id) + if uom_po_id: + self._update_uom_po(uom_po_id) + return res + + @api.multi + def _update_uom(self, uom_id): + uom_obj = self.env["product.uom"] + for key, products_group in groupby(self, key=lambda r: r.uom_id): + product_list = list(products_group) + product_id_list = [] + for product in product_list: + product_id_list.append(product.id) + new_uom = uom_obj.browse(uom_id) + if key.category_id == new_uom.category_id and key.factor == new_uom.factor: + self.env.cr.execute( + "UPDATE product_template SET uom_id = %(uom)s WHERE id in %(product_id)s", + {"uom": new_uom.id, "product_id": tuple(product_id_list)}, + ) + else: + raise UserError( + _( + "You can not change the unit of measure of a product to a new unit that doesn't have the same category and factor" + ) + ) + + @api.multi + def _update_uom_po(self, uom_po_id): + uom_obj = self.env["product.uom"] + for key, products_group in groupby(self, key=lambda r: r.uom_po_id): + product_list = list(products_group) + product_id_list = [] + for product in product_list: + product_id_list.append(product.id) + new_uom_po = uom_obj.browse(uom_po_id) + if ( + key.category_id == new_uom_po.category_id + and key.factor == new_uom_po.factor + ): + self.env.cr.execute( + "UPDATE product_template SET uom_po_id = %(uom)s WHERE id in %(product_id)s", + {"uom": new_uom_po.id, "product_id": tuple(product_id_list)}, + ) + else: + raise UserError( + _( + "You can not change the purchase unit of measure of a product to a new unit that doesn't have the same category and factor" + ) + ) diff --git a/product_uom_updatable/tests/__init__.py b/product_uom_updatable/tests/__init__.py new file mode 100644 index 00000000000..a0d5331be1f --- /dev/null +++ b/product_uom_updatable/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_uom_update diff --git a/product_uom_updatable/tests/test_product_uom_update.py b/product_uom_updatable/tests/test_product_uom_update.py new file mode 100644 index 00000000000..e0d397d2942 --- /dev/null +++ b/product_uom_updatable/tests/test_product_uom_update.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 Acsone SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestProductUomUpdate(TransactionCase): + def setUp(self): + super(TestProductUomUpdate, self).setUp() + self.uom_unit = self.env.ref("product.product_uom_unit") + self.product = self.env.ref("product.product_delivery_01") + self.product_tmpl_id = self.ref("product.product_delivery_01_product_template") + self.partner_id = self.ref("base.res_partner_4") + self.picking_type_id = self.ref("stock.picking_type_in") + self.location_id = self.ref("stock.stock_location_suppliers") + self.location_dest_id = self.ref("stock.stock_location_stock") + + def test_update_uom(self): + self.picking_in = self.env["stock.picking"].create( + { + "picking_type_id": self.picking_type_id, + "partner_id": self.partner_id, + "location_id": self.location_id, + "location_dest_id": self.location_dest_id, + } + ) + + self.env["stock.move"].create( + { + "name": self.product.name, + "product_id": self.product.id, + "product_uom_qty": 2, + "product_uom": self.product.uom_id.id, + "picking_id": self.picking_in.id, + "location_id": self.location_id, + "location_dest_id": self.location_dest_id, + } + ) + self.new_uom = self.env["product.uom"].create( + {"name": "new unit", "category_id": self.uom_unit.category_id.id} + ) + # verify that the product has stock_moves + self.assertTrue(self.product.stock_move_ids) + self.assertEqual(self.product.uom_id, self.uom_unit) + self.assertEqual(self.uom_unit.category_id, self.new_uom.category_id) + self.assertEqual(self.uom_unit.factor, self.new_uom.factor) + # uom is changed with another uom with the same category + self.product.update({"uom_id": self.new_uom.id}) + self.assertEqual(self.product.uom_id, self.new_uom) + # uom_po can also be changed with another uom with the same category + self.assertEqual(self.product.uom_po_id, self.uom_unit) + self.product.update({"uom_po_id": self.new_uom.id}) + self.assertEqual(self.product.uom_po_id, self.new_uom) From 38f82127e563a908fb5f7c4af4cb2be8391f9a1b Mon Sep 17 00:00:00 2001 From: Anna Janiszewska Date: Tue, 24 Nov 2020 11:32:22 +0100 Subject: [PATCH 0200/1692] [MIG][13.0] product_uom_updatable --- product_uom_updatable/README.rst | 74 +++ product_uom_updatable/__manifest__.py | 15 +- .../i18n/product_uom_updatable.pot | 32 -- .../models/product_template.py | 65 +-- product_uom_updatable/readme/CONTRIBUTORS.rst | 1 + product_uom_updatable/readme/DESCRIPTION.rst | 1 + .../static/description/index.html | 420 ++++++++++++++++++ .../tests/test_product_uom_update.py | 55 ++- 8 files changed, 568 insertions(+), 95 deletions(-) create mode 100644 product_uom_updatable/README.rst delete mode 100644 product_uom_updatable/i18n/product_uom_updatable.pot create mode 100644 product_uom_updatable/readme/CONTRIBUTORS.rst create mode 100644 product_uom_updatable/readme/DESCRIPTION.rst create mode 100644 product_uom_updatable/static/description/index.html diff --git a/product_uom_updatable/README.rst b/product_uom_updatable/README.rst new file mode 100644 index 00000000000..1bc8e61b4f2 --- /dev/null +++ b/product_uom_updatable/README.rst @@ -0,0 +1,74 @@ +===================== +Product Uom Updatable +===================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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_uom_updatable + :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_uom_updatable + :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| + +Allow to change the product UoM if the new UoM is in the same category and has the same factor. + +**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 +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Anna Janiszewska + +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_uom_updatable/__manifest__.py b/product_uom_updatable/__manifest__.py index 3dd6cf44c43..0a4c6bdcb76 100644 --- a/product_uom_updatable/__manifest__.py +++ b/product_uom_updatable/__manifest__.py @@ -1,16 +1,15 @@ -# -*- coding: utf-8 -*- # Copyright 2020 Acsone SA/NV +# Copyright 2020 Camptocamp # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Product Uom Updatable", - "description": """ - allows products uom to be modified after be used in a stock picking if the product uom is of the same category""", - "version": "10.0.1.0.0", + "summary": """ + allows products uom to be modified after be used in a stock picking if \ + the product uom is of the same category""", + "version": "13.0.1.0.0", "license": "AGPL-3", - "author": "Acsone SA/NV", - "website": "www.acsone.eu", + "author": "ACSONE SA/NV, Camptocamp, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/product-attribute", "depends": ["stock"], - "data": [], - "demo": [], } diff --git a/product_uom_updatable/i18n/product_uom_updatable.pot b/product_uom_updatable/i18n/product_uom_updatable.pot deleted file mode 100644 index 212268de945..00000000000 --- a/product_uom_updatable/i18n/product_uom_updatable.pot +++ /dev/null @@ -1,32 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_uom_updatable -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 10.0+e\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_uom_updatable -#: model:ir.model,name:product_uom_updatable.model_product_template -msgid "Product Template" -msgstr "" - -#. module: product_uom_updatable -#: code:addons/product_uom_updatable/models/product_template.py:66 -#, python-format -msgid "You can not change the purchase unit of measure of a product to a new unit that doesn't have the same category and factor" -msgstr "" - -#. module: product_uom_updatable -#: code:addons/product_uom_updatable/models/product_template.py:42 -#, python-format -msgid "You can not change the unit of measure of a product to a new unit that doesn't have the same category and factor" -msgstr "" - diff --git a/product_uom_updatable/models/product_template.py b/product_uom_updatable/models/product_template.py index 5d49088dd48..86bbf039bcc 100644 --- a/product_uom_updatable/models/product_template.py +++ b/product_uom_updatable/models/product_template.py @@ -1,10 +1,12 @@ -# -*- coding: utf-8 -*- # Copyright 2020 Acsone SA/NV +# Copyright 2020 Camptocamp # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from itertools import groupby -from odoo import _, api, models +from psycopg2 import sql + +from odoo import _, models from odoo.exceptions import UserError @@ -12,58 +14,37 @@ class ProductTemplate(models.Model): _inherit = "product.template" - @api.multi def write(self, vals): uom_id = vals.pop("uom_id", False) uom_po_id = vals.pop("uom_po_id", False) - res = super(ProductTemplate, self).write(vals) if uom_id: - self._update_uom(uom_id) + self._update_uom(uom_id, "uom_id") if uom_po_id: - self._update_uom_po(uom_po_id) + self._update_uom(uom_po_id, "uom_po_id") + res = super().write(vals) return res - @api.multi - def _update_uom(self, uom_id): - uom_obj = self.env["product.uom"] - for key, products_group in groupby(self, key=lambda r: r.uom_id): - product_list = list(products_group) - product_id_list = [] - for product in product_list: - product_id_list.append(product.id) + def _update_uom(self, uom_id, field_name): + uom_obj = self.env["uom.uom"] + sorted_items = sorted(self, key=lambda r: r[field_name]) + for key, products_group in groupby(sorted_items, key=lambda r: r[field_name]): + product_ids = [product.id for product in products_group] new_uom = uom_obj.browse(uom_id) - if key.category_id == new_uom.category_id and key.factor == new_uom.factor: - self.env.cr.execute( - "UPDATE product_template SET uom_id = %(uom)s WHERE id in %(product_id)s", - {"uom": new_uom.id, "product_id": tuple(product_id_list)}, - ) - else: - raise UserError( - _( - "You can not change the unit of measure of a product to a new unit that doesn't have the same category and factor" - ) - ) - - @api.multi - def _update_uom_po(self, uom_po_id): - uom_obj = self.env["product.uom"] - for key, products_group in groupby(self, key=lambda r: r.uom_po_id): - product_list = list(products_group) - product_id_list = [] - for product in product_list: - product_id_list.append(product.id) - new_uom_po = uom_obj.browse(uom_po_id) if ( - key.category_id == new_uom_po.category_id - and key.factor == new_uom_po.factor + key.category_id == new_uom.category_id + and key.factor_inv == new_uom.factor_inv ): - self.env.cr.execute( - "UPDATE product_template SET uom_po_id = %(uom)s WHERE id in %(product_id)s", - {"uom": new_uom_po.id, "product_id": tuple(product_id_list)}, - ) + # pylint: disable=sql-injection + query = sql.SQL( + "UPDATE product_template SET {field} " " = %s WHERE id in %s" + ).format(field=sql.Identifier(field_name)) + self.env.cr.execute(query, (new_uom.id, tuple(product_ids))) + self.invalidate_cache(fnames=[field_name], ids=product_ids) else: raise UserError( _( - "You can not change the purchase unit of measure of a product to a new unit that doesn't have the same category and factor" + "You can not change the unit of measure of a product " + "to a new unit that doesn't have the same category " + "and factor" ) ) diff --git a/product_uom_updatable/readme/CONTRIBUTORS.rst b/product_uom_updatable/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..4124e67fb5c --- /dev/null +++ b/product_uom_updatable/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Anna Janiszewska diff --git a/product_uom_updatable/readme/DESCRIPTION.rst b/product_uom_updatable/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..d901f2183c4 --- /dev/null +++ b/product_uom_updatable/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Allow to change the product UoM if the new UoM is in the same category and has the same factor. diff --git a/product_uom_updatable/static/description/index.html b/product_uom_updatable/static/description/index.html new file mode 100644 index 00000000000..7eaf40e4781 --- /dev/null +++ b/product_uom_updatable/static/description/index.html @@ -0,0 +1,420 @@ + + + + + + +Product Uom Updatable + + + +
      +

      Product Uom Updatable

      + + +

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

      +

      Allow to change the product UoM if the new UoM is in the same category and has the same factor.

      +

      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
      • +
      • Camptocamp
      • +
      +
      +
      +

      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_uom_updatable/tests/test_product_uom_update.py b/product_uom_updatable/tests/test_product_uom_update.py index e0d397d2942..44a1c1361ae 100644 --- a/product_uom_updatable/tests/test_product_uom_update.py +++ b/product_uom_updatable/tests/test_product_uom_update.py @@ -1,16 +1,21 @@ -# -*- coding: utf-8 -*- # Copyright 2020 Acsone SA/NV +# Copyright 2020 Camptocamp # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase +from odoo.exceptions import UserError +from odoo.tests.common import SavepointCase -class TestProductUomUpdate(TransactionCase): +class TestProductUomUpdate(SavepointCase): def setUp(self): super(TestProductUomUpdate, self).setUp() - self.uom_unit = self.env.ref("product.product_uom_unit") + self.env = self.env(context=dict(self.env.context, tracking_disable=True)) + self.uom_unit = self.env.ref("uom.product_uom_unit") + self.uom_day = self.env.ref("uom.product_uom_day") self.product = self.env.ref("product.product_delivery_01") - self.product_tmpl_id = self.ref("product.product_delivery_01_product_template") + self.product_tmpl_id = self.env.ref( + "product.product_delivery_01_product_template" + ) self.partner_id = self.ref("base.res_partner_4") self.picking_type_id = self.ref("stock.picking_type_in") self.location_id = self.ref("stock.stock_location_suppliers") @@ -37,18 +42,42 @@ def test_update_uom(self): "location_dest_id": self.location_dest_id, } ) - self.new_uom = self.env["product.uom"].create( - {"name": "new unit", "category_id": self.uom_unit.category_id.id} + self.new_uom = self.env["uom.uom"].create( + { + "name": "new unit", + "category_id": self.uom_unit.category_id.id, + "uom_type": "smaller", + } + ) + + self.new_uom_other_category = self.env["uom.uom"].create( + { + "name": "new unit 2", + "category_id": self.uom_day.category_id.id, + "uom_type": "smaller", + } ) # verify that the product has stock_moves self.assertTrue(self.product.stock_move_ids) self.assertEqual(self.product.uom_id, self.uom_unit) self.assertEqual(self.uom_unit.category_id, self.new_uom.category_id) - self.assertEqual(self.uom_unit.factor, self.new_uom.factor) + self.assertEqual( + self.uom_day.category_id, self.new_uom_other_category.category_id + ) + self.assertEqual(self.uom_unit.factor_inv, self.new_uom.factor_inv) + self.assertEqual( + self.uom_day.factor_inv, self.new_uom_other_category.factor_inv + ) # uom is changed with another uom with the same category - self.product.update({"uom_id": self.new_uom.id}) - self.assertEqual(self.product.uom_id, self.new_uom) + self.product_tmpl_id.update({"uom_id": self.new_uom.id}) + self.assertEqual(self.product_tmpl_id.uom_id, self.new_uom) # uom_po can also be changed with another uom with the same category - self.assertEqual(self.product.uom_po_id, self.uom_unit) - self.product.update({"uom_po_id": self.new_uom.id}) - self.assertEqual(self.product.uom_po_id, self.new_uom) + self.assertEqual(self.product_tmpl_id.uom_po_id, self.uom_unit) + self.product_tmpl_id.update({"uom_po_id": self.new_uom.id}) + self.assertEqual(self.product_tmpl_id.uom_po_id, self.new_uom) + # uom is changed with another uom from different category + with self.assertRaises(UserError): + self.product_tmpl_id.update({"uom_id": self.new_uom_other_category.id}) + # uom_po is changed with another uom from different category + with self.assertRaises(UserError): + self.product_tmpl_id.update({"uom_po_id": self.new_uom_other_category.id}) From 8fea70575faa23ac72f05fe2124c45181e7bc4b6 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Wed, 16 Dec 2020 11:43:50 +0000 Subject: [PATCH 0201/1692] [UPD] Update product_uom_updatable.pot --- .../i18n/product_uom_updatable.pot | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 product_uom_updatable/i18n/product_uom_updatable.pot diff --git a/product_uom_updatable/i18n/product_uom_updatable.pot b/product_uom_updatable/i18n/product_uom_updatable.pot new file mode 100644 index 00000000000..99af9cd08e4 --- /dev/null +++ b/product_uom_updatable/i18n/product_uom_updatable.pot @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_uom_updatable +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.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_uom_updatable +#: model:ir.model,name:product_uom_updatable.model_product_template +msgid "Product Template" +msgstr "" + +#. module: product_uom_updatable +#: code:addons/product_uom_updatable/models/product_template.py:0 +#, python-format +msgid "" +"You can not change the unit of measure of a product to a new unit that " +"doesn't have the same category and factor" +msgstr "" From 991e873a67dba62d8e1a7f303ca054a6c252bbb0 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 16 Dec 2020 12:13:35 +0000 Subject: [PATCH 0202/1692] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 product_uom_updatable/static/description/icon.png diff --git a/product_uom_updatable/static/description/icon.png b/product_uom_updatable/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 ea4db78a848b32ead4b82e9dcfe693c52b63ad19 Mon Sep 17 00:00:00 2001 From: "dzung.tran" Date: Sat, 13 Feb 2021 22:15:43 +0700 Subject: [PATCH 0203/1692] [MIG] product_uom_updatable: Migration to 14.0 --- product_uom_updatable/README.rst | 21 +++++++++++++----- product_uom_updatable/__manifest__.py | 2 +- product_uom_updatable/readme/CONTRIBUTORS.rst | 4 ++++ product_uom_updatable/readme/CREDITS.rst | 3 +++ .../static/description/index.html | 22 ++++++++++++++----- 5 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 product_uom_updatable/readme/CREDITS.rst diff --git a/product_uom_updatable/README.rst b/product_uom_updatable/README.rst index 1bc8e61b4f2..f4e9b7dcad2 100644 --- a/product_uom_updatable/README.rst +++ b/product_uom_updatable/README.rst @@ -14,13 +14,13 @@ Product Uom Updatable :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_uom_updatable + :target: https://github.com/OCA/product-attribute/tree/14.0/product_uom_updatable :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_uom_updatable + :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_uom_updatable :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| @@ -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. @@ -56,6 +56,17 @@ Contributors * Anna Janiszewska +Trobz + +* Dung Tran + +Other credits +~~~~~~~~~~~~~ + +The development of this module has been financially supported by: + +* Camptocamp + Maintainers ~~~~~~~~~~~ @@ -69,6 +80,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_uom_updatable/__manifest__.py b/product_uom_updatable/__manifest__.py index 0a4c6bdcb76..8324cbacf36 100644 --- a/product_uom_updatable/__manifest__.py +++ b/product_uom_updatable/__manifest__.py @@ -7,7 +7,7 @@ "summary": """ allows products uom to be modified after be used in a stock picking if \ the product uom is of the same category""", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV, Camptocamp, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", diff --git a/product_uom_updatable/readme/CONTRIBUTORS.rst b/product_uom_updatable/readme/CONTRIBUTORS.rst index 4124e67fb5c..da80abf71e3 100644 --- a/product_uom_updatable/readme/CONTRIBUTORS.rst +++ b/product_uom_updatable/readme/CONTRIBUTORS.rst @@ -1 +1,5 @@ * Anna Janiszewska + +Trobz + +* Dung Tran diff --git a/product_uom_updatable/readme/CREDITS.rst b/product_uom_updatable/readme/CREDITS.rst new file mode 100644 index 00000000000..f5cc070c78e --- /dev/null +++ b/product_uom_updatable/readme/CREDITS.rst @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +* Camptocamp diff --git a/product_uom_updatable/static/description/index.html b/product_uom_updatable/static/description/index.html index 7eaf40e4781..24be8e8c91d 100644 --- a/product_uom_updatable/static/description/index.html +++ b/product_uom_updatable/static/description/index.html @@ -367,7 +367,7 @@

      Product Uom Updatable

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

      Allow to change the product UoM if the new UoM is in the same category and has the same factor.

      Table of contents

      @@ -376,7 +376,8 @@

      Product Uom Updatable

    • Credits
    @@ -386,7 +387,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.

    @@ -403,15 +404,26 @@

    Contributors

    +

    Trobz

    + +
    +
    +

    Other credits

    +

    The development of this module has been financially supported by:

    +
      +
    • Camptocamp
    • +
    -

    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.

    From 2cc59c901a7de3b53df6d7d4f56e9e2b31c8026b Mon Sep 17 00:00:00 2001 From: dzungtran89 <46039081+dzungtran89@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:12:37 +0700 Subject: [PATCH 0204/1692] [REF] Remove redundant quote Co-authored-by: Pierre Verkest --- product_uom_updatable/models/product_template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_uom_updatable/models/product_template.py b/product_uom_updatable/models/product_template.py index 86bbf039bcc..ec44c85e218 100644 --- a/product_uom_updatable/models/product_template.py +++ b/product_uom_updatable/models/product_template.py @@ -36,7 +36,7 @@ def _update_uom(self, uom_id, field_name): ): # pylint: disable=sql-injection query = sql.SQL( - "UPDATE product_template SET {field} " " = %s WHERE id in %s" + "UPDATE product_template SET {field} = %s WHERE id in %s" ).format(field=sql.Identifier(field_name)) self.env.cr.execute(query, (new_uom.id, tuple(product_ids))) self.invalidate_cache(fnames=[field_name], ids=product_ids) From b8f6f25f04cc9e3b7e021b383dbd3020328d52de Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 19 Jul 2021 21:37:26 +0000 Subject: [PATCH 0205/1692] [UPD] Update product_uom_updatable.pot --- .../i18n/product_uom_updatable.pot | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/product_uom_updatable/i18n/product_uom_updatable.pot b/product_uom_updatable/i18n/product_uom_updatable.pot index 99af9cd08e4..0d8a0554f4a 100644 --- a/product_uom_updatable/i18n/product_uom_updatable.pot +++ b/product_uom_updatable/i18n/product_uom_updatable.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,6 +13,21 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: product_uom_updatable +#: model:ir.model.fields,field_description:product_uom_updatable.field_product_template__display_name +msgid "Display Name" +msgstr "" + +#. module: product_uom_updatable +#: model:ir.model.fields,field_description:product_uom_updatable.field_product_template__id +msgid "ID" +msgstr "" + +#. module: product_uom_updatable +#: model:ir.model.fields,field_description:product_uom_updatable.field_product_template____last_update +msgid "Last Modified on" +msgstr "" + #. module: product_uom_updatable #: model:ir.model,name:product_uom_updatable.model_product_template msgid "Product Template" From b890a28fd29398bb7e3798933f911be6194f3026 Mon Sep 17 00:00:00 2001 From: Alexandre Fayolle Date: Mon, 13 Sep 2021 15:52:18 +0200 Subject: [PATCH 0206/1692] [FIX] product_uom_updatable version version conflict prevents upload to pypi --- product_uom_updatable/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_uom_updatable/__manifest__.py b/product_uom_updatable/__manifest__.py index 8324cbacf36..fb11a5d619a 100644 --- a/product_uom_updatable/__manifest__.py +++ b/product_uom_updatable/__manifest__.py @@ -7,7 +7,7 @@ "summary": """ allows products uom to be modified after be used in a stock picking if \ the product uom is of the same category""", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "license": "AGPL-3", "author": "ACSONE SA/NV, Camptocamp, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", From 48ad3dee417ff604c674c06c5134cf980b3e14d4 Mon Sep 17 00:00:00 2001 From: hda Date: Wed, 1 Mar 2023 15:11:31 +0100 Subject: [PATCH 0207/1692] [IMP] product_uom_updatable: pre-commit stuff --- .../product_uom_updatable/odoo/addons/product_uom_updatable | 1 + setup/product_uom_updatable/setup.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 120000 setup/product_uom_updatable/odoo/addons/product_uom_updatable create mode 100644 setup/product_uom_updatable/setup.py diff --git a/setup/product_uom_updatable/odoo/addons/product_uom_updatable b/setup/product_uom_updatable/odoo/addons/product_uom_updatable new file mode 120000 index 00000000000..c1e12403e05 --- /dev/null +++ b/setup/product_uom_updatable/odoo/addons/product_uom_updatable @@ -0,0 +1 @@ +../../../../product_uom_updatable \ No newline at end of file diff --git a/setup/product_uom_updatable/setup.py b/setup/product_uom_updatable/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/product_uom_updatable/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From acf4a2eab1bac99aae7c0a86806817407e3727c4 Mon Sep 17 00:00:00 2001 From: hda Date: Wed, 1 Mar 2023 15:11:42 +0100 Subject: [PATCH 0208/1692] [MIG] product_uom_updatable: Migration to 16.0 --- product_uom_updatable/README.rst | 15 ++++++------ product_uom_updatable/__manifest__.py | 6 ++--- .../i18n/product_uom_updatable.pot | 24 +++++-------------- .../models/product_template.py | 7 +++--- product_uom_updatable/readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 9 +++---- .../tests/test_product_uom_update.py | 6 ++--- 7 files changed, 30 insertions(+), 38 deletions(-) diff --git a/product_uom_updatable/README.rst b/product_uom_updatable/README.rst index f4e9b7dcad2..0c756efbbdf 100644 --- a/product_uom_updatable/README.rst +++ b/product_uom_updatable/README.rst @@ -14,14 +14,14 @@ Product Uom Updatable :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_uom_updatable + :target: https://github.com/OCA/product-attribute/tree/16.0/product_uom_updatable :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_uom_updatable + :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_uom_updatable :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 +.. |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| @@ -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. @@ -59,6 +59,7 @@ Contributors Trobz * Dung Tran +* Hughes Damry Other credits ~~~~~~~~~~~~~ @@ -80,6 +81,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_uom_updatable/__manifest__.py b/product_uom_updatable/__manifest__.py index fb11a5d619a..c395c25a5ff 100644 --- a/product_uom_updatable/__manifest__.py +++ b/product_uom_updatable/__manifest__.py @@ -5,9 +5,9 @@ { "name": "Product Uom Updatable", "summary": """ - allows products uom to be modified after be used in a stock picking if \ - the product uom is of the same category""", - "version": "14.0.1.0.1", + allows products uom to be modified after be used in a stock picking if + the product uom is of the same category""", + "version": "16.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV, Camptocamp, Odoo Community Association (OCA)", "website": "https://github.com/OCA/product-attribute", diff --git a/product_uom_updatable/i18n/product_uom_updatable.pot b/product_uom_updatable/i18n/product_uom_updatable.pot index 0d8a0554f4a..a798e0a85c4 100644 --- a/product_uom_updatable/i18n/product_uom_updatable.pot +++ b/product_uom_updatable/i18n/product_uom_updatable.pot @@ -4,8 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 16.0+e\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-01 15:24+0000\n" +"PO-Revision-Date: 2023-03-01 15:24+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -13,30 +15,16 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: product_uom_updatable -#: model:ir.model.fields,field_description:product_uom_updatable.field_product_template__display_name -msgid "Display Name" -msgstr "" - -#. module: product_uom_updatable -#: model:ir.model.fields,field_description:product_uom_updatable.field_product_template__id -msgid "ID" -msgstr "" - -#. module: product_uom_updatable -#: model:ir.model.fields,field_description:product_uom_updatable.field_product_template____last_update -msgid "Last Modified on" -msgstr "" - #. module: product_uom_updatable #: model:ir.model,name:product_uom_updatable.model_product_template -msgid "Product Template" +msgid "Product" msgstr "" #. module: product_uom_updatable +#. odoo-python #: code:addons/product_uom_updatable/models/product_template.py:0 #, python-format msgid "" -"You can not change the unit of measure of a product to a new unit that " +"You cannot change the unit of measure of a product to a new unit that " "doesn't have the same category and factor" msgstr "" diff --git a/product_uom_updatable/models/product_template.py b/product_uom_updatable/models/product_template.py index ec44c85e218..0903f34265e 100644 --- a/product_uom_updatable/models/product_template.py +++ b/product_uom_updatable/models/product_template.py @@ -28,7 +28,7 @@ def _update_uom(self, uom_id, field_name): uom_obj = self.env["uom.uom"] sorted_items = sorted(self, key=lambda r: r[field_name]) for key, products_group in groupby(sorted_items, key=lambda r: r[field_name]): - product_ids = [product.id for product in products_group] + product_ids = [p.id for p in products_group] new_uom = uom_obj.browse(uom_id) if ( key.category_id == new_uom.category_id @@ -39,11 +39,12 @@ def _update_uom(self, uom_id, field_name): "UPDATE product_template SET {field} = %s WHERE id in %s" ).format(field=sql.Identifier(field_name)) self.env.cr.execute(query, (new_uom.id, tuple(product_ids))) - self.invalidate_cache(fnames=[field_name], ids=product_ids) + products = self.env["product.template"].browse(product_ids) + products.invalidate_recordset(fnames=[field_name]) else: raise UserError( _( - "You can not change the unit of measure of a product " + "You cannot change the unit of measure of a product " "to a new unit that doesn't have the same category " "and factor" ) diff --git a/product_uom_updatable/readme/CONTRIBUTORS.rst b/product_uom_updatable/readme/CONTRIBUTORS.rst index da80abf71e3..bac3629943d 100644 --- a/product_uom_updatable/readme/CONTRIBUTORS.rst +++ b/product_uom_updatable/readme/CONTRIBUTORS.rst @@ -3,3 +3,4 @@ Trobz * Dung Tran +* Hughes Damry diff --git a/product_uom_updatable/static/description/index.html b/product_uom_updatable/static/description/index.html index 24be8e8c91d..df0e9980a37 100644 --- a/product_uom_updatable/static/description/index.html +++ b/product_uom_updatable/static/description/index.html @@ -3,7 +3,7 @@ - + Product Uom Updatable + + +
    +

    Product Attribute Archive

    + + +

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

    +

    This module allows archival of product attributes and product attribute values.

    +

    Table of contents

    + +
    +

    Usage

    +

    Simply use the archive action on any product attribute.

    +

    The attribute is then no longer usable on new products.

    +

    Identical functionality on product attribute values.

    +

    Existing variants are unaffected, only new ones.

    +
    +
    +

    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

    +
      +
    • Akretion
    • +
    +
    + +
    +

    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.

    +
    +
    +
    + + From a7da969f40df96f9c15498b78f640b62764b4dc4 Mon Sep 17 00:00:00 2001 From: rafaferri Date: Mon, 13 Mar 2023 10:51:33 +0100 Subject: [PATCH 0213/1692] [16.0][MIG] product_attribute_archive: Migration to 16.0 --- product_attribute_archive/__manifest__.py | 2 +- .../odoo/addons/product_attribute_archive | 1 + setup/product_attribute_archive/setup.py | 6 ++++++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 120000 setup/product_attribute_archive/odoo/addons/product_attribute_archive create mode 100644 setup/product_attribute_archive/setup.py diff --git a/product_attribute_archive/__manifest__.py b/product_attribute_archive/__manifest__.py index d9c82929d3c..0f549bf3834 100644 --- a/product_attribute_archive/__manifest__.py +++ b/product_attribute_archive/__manifest__.py @@ -5,7 +5,7 @@ "name": "Product Attribute Archive", "summary": """ Add an active field on product attributes""", - "version": "14.0.1.0.0", + "version": "16.0.1.0.0", "license": "AGPL-3", "author": "Akretion,Odoo Community Association (OCA)", "depends": ["product"], diff --git a/setup/product_attribute_archive/odoo/addons/product_attribute_archive b/setup/product_attribute_archive/odoo/addons/product_attribute_archive new file mode 120000 index 00000000000..904522e83ca --- /dev/null +++ b/setup/product_attribute_archive/odoo/addons/product_attribute_archive @@ -0,0 +1 @@ +../../../../product_attribute_archive \ No newline at end of file diff --git a/setup/product_attribute_archive/setup.py b/setup/product_attribute_archive/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/product_attribute_archive/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From ffe723756acc1539ac87dd75d8310619adf6a9da Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 17 Mar 2023 13:07:53 +0000 Subject: [PATCH 0214/1692] [UPD] Update product_template_has_one_variant.pot --- .../i18n/product_template_has_one_variant.pot | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 product_template_has_one_variant/i18n/product_template_has_one_variant.pot diff --git a/product_template_has_one_variant/i18n/product_template_has_one_variant.pot b/product_template_has_one_variant/i18n/product_template_has_one_variant.pot new file mode 100644 index 00000000000..83d80e3b922 --- /dev/null +++ b/product_template_has_one_variant/i18n/product_template_has_one_variant.pot @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_template_has_one_variant +# +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_template_has_one_variant +#: model:ir.model.fields,field_description:product_template_has_one_variant.field_product_product__has_one_variant +#: model:ir.model.fields,field_description:product_template_has_one_variant.field_product_template__has_one_variant +#: model_terms:ir.ui.view,arch_db:product_template_has_one_variant.product_template_search_view +msgid "Has One Variant" +msgstr "" + +#. module: product_template_has_one_variant +#: model:ir.model,name:product_template_has_one_variant.model_product_template +msgid "Product" +msgstr "" From 4627089722044280e25167eaeaed6a16c8bb2be1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 17 Mar 2023 13:11:08 +0000 Subject: [PATCH 0215/1692] [UPD] addons table in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 57e24de294e..c81912892a5 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ addon | version | maintainers | summary [product_packaging_dimension](product_packaging_dimension/) | 16.0.1.0.1 | | Manage packaging dimensions and weight [product_sequence](product_sequence/) | 16.0.2.0.0 | | Product Sequence [product_state](product_state/) | 16.0.1.0.0 | [![emagdalenaC2i](https://github.com/emagdalenaC2i.png?size=30px)](https://github.com/emagdalenaC2i) | Module introducing a state field on product template +[product_template_has_one_variant](product_template_has_one_variant/) | 16.0.1.0.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Allows to define a field on product template level to determine if it has only one variant [product_uom_measure_type](product_uom_measure_type/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Product - UoM Measure Type [stock_production_lot_expired_date](stock_production_lot_expired_date/) | 16.0.1.0.1 | | Stock production lot expired date From 1f650a9800d1e71778620fd0b4f59e38aefd5afe Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 17 Mar 2023 13:11:10 +0000 Subject: [PATCH 0216/1692] [UPD] README.rst --- product_template_has_one_variant/static/description/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_template_has_one_variant/static/description/index.html b/product_template_has_one_variant/static/description/index.html index 9a565a64c2d..f5ecbe8e9fe 100644 --- a/product_template_has_one_variant/static/description/index.html +++ b/product_template_has_one_variant/static/description/index.html @@ -3,7 +3,7 @@ - + Product Template Has One Variant + + +
    +

    Stock Production Lot Is Archived

    + + +

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

    +

    This module allows to adds a field on lots that means a product is archived. +This differs from Odoo core ‘active’ attribute (see stock_production_lot_active module). +A cron is also provided to automatically archive lots when there is new one, +based on the expiration date.

    +

    Table of contents

    + +
    +

    Usage

    +
      +
    • Create some lots with different expiration dates
    • +
    • Go To Settings > Technical > Automation > Scheduled Actions
    • +
    • Run the ‘Archive products lots (Is Archived)’ one.
    • +
    • Only one lot with the most recent expiration date should remain with +Is Archived field unticked.
    • +
    +
    +
    +

    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/stock_lot_is_archived/tests/__init__.py b/stock_lot_is_archived/tests/__init__.py new file mode 100644 index 00000000000..f76049c2e07 --- /dev/null +++ b/stock_lot_is_archived/tests/__init__.py @@ -0,0 +1 @@ +from . import test_lot_archive diff --git a/stock_lot_is_archived/tests/test_lot_archive.py b/stock_lot_is_archived/tests/test_lot_archive.py new file mode 100644 index 00000000000..0de1b0b496a --- /dev/null +++ b/stock_lot_is_archived/tests/test_lot_archive.py @@ -0,0 +1,41 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tests.common import TransactionCase + + +class TestStockLotArchive(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.product_obj = cls.env["product.product"] + cls.lot_obj = cls.env["stock.lot"] + cls.archive_wizard_obj = cls.env["stock.lot.archive"] + cls.product = cls.product_obj.create({"name": "Product 1", "tracking": "lot"}) + cls.lot = cls.lot_obj.create( + { + "product_id": cls.product.id, + "name": "TEST", + "expiration_date": "2022-06-01", + "company_id": cls.env.company.id, + } + ) + + cls.newer_lot = cls.lot_obj.create( + { + "product_id": cls.product.id, + "name": "TEST 2", + "expiration_date": "2022-07-01", + "company_id": cls.env.company.id, + } + ) + + def test_lot_archive(self): + """ + Check that the archiving method is archiving the + elder lot + """ + self.assertFalse(self.lot.is_archived) + self.assertFalse(self.newer_lot.is_archived) + self.archive_wizard_obj._archive_lots() + self.assertTrue(self.lot.is_archived) + self.assertFalse(self.newer_lot.is_archived) diff --git a/stock_lot_is_archived/views/stock_lot.xml b/stock_lot_is_archived/views/stock_lot.xml new file mode 100644 index 00000000000..c43e77bd5cb --- /dev/null +++ b/stock_lot_is_archived/views/stock_lot.xml @@ -0,0 +1,49 @@ + + + + + + stock.lot.form (in stock_lot_is_archived) + stock.lot + + + + + + + + + + + stock.lot.search (in stock_lot_is_archived) + stock.lot + + + + + + + + + + + stock.lot.tree (in stock_lot_is_archived) + stock.lot + + + + + + + + + diff --git a/stock_lot_is_archived/wizards/__init__.py b/stock_lot_is_archived/wizards/__init__.py new file mode 100644 index 00000000000..64b30e9d80f --- /dev/null +++ b/stock_lot_is_archived/wizards/__init__.py @@ -0,0 +1 @@ +from . import stock_lot_archive diff --git a/stock_lot_is_archived/wizards/stock_lot_archive.py b/stock_lot_is_archived/wizards/stock_lot_archive.py new file mode 100644 index 00000000000..773cc7b9425 --- /dev/null +++ b/stock_lot_is_archived/wizards/stock_lot_archive.py @@ -0,0 +1,54 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, models + + +class StockLotArchive(models.TransientModel): + + _name = "stock.lot.archive" + _description = "Stock Lot Archive" + + @api.model + def _archive_lots(self) -> None: + """ + A product can have a lot of lots. To avoid this problem we archive old lot. + Archive a lot has not effect (we don't use the 'active' field). + + We archive a lot if and only if: + - There are no more products in this lot + - There is a new lot (with a higher expiration date) for this product + + :return: + """ + query = """ + SELECT lot.id + FROM stock_lot AS lot + WHERE (lot.is_archived = False OR lot.is_archived IS NULL) + AND EXISTS (SELECT 1 + FROM stock_lot AS next_lot + WHERE next_lot.product_id = lot.product_id + AND next_lot.expiration_date >= lot.expiration_date + AND next_lot.id <> lot.id) + AND NOT EXISTS (SELECT 1 + FROM stock_quant AS quant + JOIN stock_location sl on sl.id = quant.location_id + WHERE quant.lot_id = lot.id AND sl.usage = 'internal' + AND sl.parent_path LIKE ANY(%(location_paths)s) + ); + """ + location_paths = ( + self.env["stock.warehouse"] + .search([]) + .mapped("view_location_id.parent_path") + ) + params = { + "location_paths": [ + "{}%".format(location_path) for location_path in location_paths + ] + } + self.env.cr.execute(query, params) + + result = self.env.cr.fetchall() + lot_to_archive_ids = [lot[0] for lot in result] + + self.env["stock.lot"].browse(lot_to_archive_ids).write({"is_archived": True}) From e3bf693aa2f8c33609b3cbdaf4b3e286aa7410f1 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Mon, 12 Dec 2022 18:30:26 +0100 Subject: [PATCH 0221/1692] [16.0][ADD] product_route_mto --- product_route_mto/README.rst | 74 +++ product_route_mto/__init__.py | 1 + product_route_mto/__manifest__.py | 19 + product_route_mto/models/__init__.py | 1 + product_route_mto/models/product_template.py | 21 + product_route_mto/readme/CONTRIBUTORS.rst | 1 + product_route_mto/readme/DESCRIPTION.rst | 2 + product_route_mto/static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 420 ++++++++++++++++++ product_route_mto/tests/__init__.py | 1 + .../tests/test_product_route_mto.py | 28 ++ product_route_mto/views/product_template.xml | 51 +++ .../odoo/addons/product_route_mto | 1 + setup/product_route_mto/setup.py | 6 + 14 files changed, 626 insertions(+) create mode 100644 product_route_mto/README.rst create mode 100644 product_route_mto/__init__.py create mode 100644 product_route_mto/__manifest__.py create mode 100644 product_route_mto/models/__init__.py create mode 100644 product_route_mto/models/product_template.py create mode 100644 product_route_mto/readme/CONTRIBUTORS.rst create mode 100644 product_route_mto/readme/DESCRIPTION.rst create mode 100644 product_route_mto/static/description/icon.png create mode 100644 product_route_mto/static/description/index.html create mode 100644 product_route_mto/tests/__init__.py create mode 100644 product_route_mto/tests/test_product_route_mto.py create mode 100644 product_route_mto/views/product_template.xml create mode 120000 setup/product_route_mto/odoo/addons/product_route_mto create mode 100644 setup/product_route_mto/setup.py diff --git a/product_route_mto/README.rst b/product_route_mto/README.rst new file mode 100644 index 00000000000..038a8e84c28 --- /dev/null +++ b/product_route_mto/README.rst @@ -0,0 +1,74 @@ +================= +Product Route Mto +================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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_route_mto + :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_route_mto + :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 allows to identify easily products that have at least one +route marked as 'MTO'. + +**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. + +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_route_mto/__init__.py b/product_route_mto/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_route_mto/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_route_mto/__manifest__.py b/product_route_mto/__manifest__.py new file mode 100644 index 00000000000..3cff62efd34 --- /dev/null +++ b/product_route_mto/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2022 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Product Route Mto", + "summary": """ + This module allows to compute if a product is an 'MTO' one from its + configured routes""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "ACSONE SA/NV,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/product-attribute", + "depends": [ + "stock_route_mto", + ], + "data": [ + "views/product_template.xml", + ], +} diff --git a/product_route_mto/models/__init__.py b/product_route_mto/models/__init__.py new file mode 100644 index 00000000000..e8fa8f6bf1e --- /dev/null +++ b/product_route_mto/models/__init__.py @@ -0,0 +1 @@ +from . import product_template diff --git a/product_route_mto/models/product_template.py b/product_route_mto/models/product_template.py new file mode 100644 index 00000000000..44bf3e01300 --- /dev/null +++ b/product_route_mto/models/product_template.py @@ -0,0 +1,21 @@ +# Copyright 2022 ACSONE SA/NV +# 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" + + is_mto = fields.Boolean( + compute="_compute_is_mto", + store=True, + ) + + @api.depends("route_ids.is_mto", "categ_id.route_ids.is_mto") + def _compute_is_mto(self): + for template in self: + template.is_mto = bool( + (template.route_ids | template.route_from_categ_ids).filtered("is_mto") + ) diff --git a/product_route_mto/readme/CONTRIBUTORS.rst b/product_route_mto/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..9179ee4b8fa --- /dev/null +++ b/product_route_mto/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Denis Roussel diff --git a/product_route_mto/readme/DESCRIPTION.rst b/product_route_mto/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..ac2794865d7 --- /dev/null +++ b/product_route_mto/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows to identify easily products that have at least one +route marked as 'MTO'. diff --git a/product_route_mto/static/description/icon.png b/product_route_mto/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_route_mto/static/description/index.html b/product_route_mto/static/description/index.html new file mode 100644 index 00000000000..ed5848bcadf --- /dev/null +++ b/product_route_mto/static/description/index.html @@ -0,0 +1,420 @@ + + + + + + +Product Route Mto + + + +
    +

    Product Route Mto

    + + +

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

    +

    This module allows to identify easily products that have at least one +route marked as ‘MTO’.

    +

    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.

    +

    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_route_mto/tests/__init__.py b/product_route_mto/tests/__init__.py new file mode 100644 index 00000000000..b5effb3fa37 --- /dev/null +++ b/product_route_mto/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_route_mto diff --git a/product_route_mto/tests/test_product_route_mto.py b/product_route_mto/tests/test_product_route_mto.py new file mode 100644 index 00000000000..cee1047ea98 --- /dev/null +++ b/product_route_mto/tests/test_product_route_mto.py @@ -0,0 +1,28 @@ +# Copyright 2022 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestProductRouteMto(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.route_mto = cls.env.ref("stock.route_warehouse0_mto") + cls.route_mto.active = True + cls.product = cls.env["product.template"].create( + { + "name": "Product Test", + } + ) + + def test_product_route(self): + self.assertFalse(self.product.is_mto) + self.product.route_ids += self.route_mto + self.assertTrue(self.product.is_mto) + + def test_category_route(self): + self.assertFalse(self.product.is_mto) + self.product.categ_id.route_ids += self.route_mto + self.assertTrue(self.product.is_mto) diff --git a/product_route_mto/views/product_template.xml b/product_route_mto/views/product_template.xml new file mode 100644 index 00000000000..5ef0ae7a144 --- /dev/null +++ b/product_route_mto/views/product_template.xml @@ -0,0 +1,51 @@ + + + + + + product.template.form (in product_route_mto) + product.template + + + + + + + + + product.template.search (in product_route_mto) + product.template + + + + + + + + + + + + product.template.tree (in product_route_mto) + product.template + + + + + + + + + diff --git a/setup/product_route_mto/odoo/addons/product_route_mto b/setup/product_route_mto/odoo/addons/product_route_mto new file mode 120000 index 00000000000..10bbb8dbfed --- /dev/null +++ b/setup/product_route_mto/odoo/addons/product_route_mto @@ -0,0 +1 @@ +../../../../product_route_mto \ No newline at end of file diff --git a/setup/product_route_mto/setup.py b/setup/product_route_mto/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/product_route_mto/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From dd0cc0873ac129411acb06aeeebc5fa37adea7ed Mon Sep 17 00:00:00 2001 From: FernandoRomera Date: Thu, 15 Dec 2022 15:01:55 +0100 Subject: [PATCH 0222/1692] [16.0][MIG] product_supplierinfo_for_customer: Migration to 16.0 --- .../demo/product_demo.xml | 2 +- .../migrations/16.0.1.0.0/pre-migration.py | 11 ++++++++++ .../models/product_customerinfo.py | 2 +- .../models/product_product.py | 16 +++++++++------ .../test_product_supplierinfo_for_customer.py | 20 +++++++++++++------ .../views/product_views.xml | 18 ++++++----------- 6 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 product_supplierinfo_for_customer/migrations/16.0.1.0.0/pre-migration.py diff --git a/product_supplierinfo_for_customer/demo/product_demo.xml b/product_supplierinfo_for_customer/demo/product_demo.xml index f42b286b70b..af524d05b90 100644 --- a/product_supplierinfo_for_customer/demo/product_demo.xml +++ b/product_supplierinfo_for_customer/demo/product_demo.xml @@ -7,7 +7,7 @@ name="product_tmpl_id" ref="product.product_product_4_product_template" /> - + 1 1 diff --git a/product_supplierinfo_for_customer/migrations/16.0.1.0.0/pre-migration.py b/product_supplierinfo_for_customer/migrations/16.0.1.0.0/pre-migration.py new file mode 100644 index 00000000000..ab42b4e9621 --- /dev/null +++ b/product_supplierinfo_for_customer/migrations/16.0.1.0.0/pre-migration.py @@ -0,0 +1,11 @@ +from openupgradelib import openupgrade + +column_renames = { + "product_customerinfo": [("name", "partner_id")], +} + + +@openupgrade.migrate() +def migrate(env, version): + if openupgrade.column_exists(env.cr, "product_customerinfo", "name"): + openupgrade.rename_columns(env.cr, column_renames) diff --git a/product_supplierinfo_for_customer/models/product_customerinfo.py b/product_supplierinfo_for_customer/models/product_customerinfo.py index 6d02e2fc843..87522a6eea6 100644 --- a/product_supplierinfo_for_customer/models/product_customerinfo.py +++ b/product_supplierinfo_for_customer/models/product_customerinfo.py @@ -9,7 +9,7 @@ class ProductCustomerInfo(models.Model): _name = "product.customerinfo" _description = "Customer Pricelist" - name = fields.Many2one(string="Customer", help="Customer of this product") + partner_id = fields.Many2one(string="Customer", help="Customer of this product") @api.model def get_import_templates(self): diff --git a/product_supplierinfo_for_customer/models/product_product.py b/product_supplierinfo_for_customer/models/product_product.py index 08f8ceb6a79..756e7056df1 100644 --- a/product_supplierinfo_for_customer/models/product_product.py +++ b/product_supplierinfo_for_customer/models/product_product.py @@ -18,7 +18,7 @@ def name_get(self): def _name_search( self, name="", args=None, operator="ilike", limit=100, name_get_uid=None ): - res = super()._name_search( + res = super(ProductProduct, self)._name_search( name, args=args, operator=operator, limit=limit, name_get_uid=name_get_uid ) res_ids = list(res) @@ -35,7 +35,7 @@ def _name_search( limit -= res_ids_len customerinfo_ids = self.env["product.customerinfo"]._search( [ - ("name", "=", self._context.get("partner_id")), + ("partner_id", "=", self._context.get("partner_id")), "|", ("product_code", operator, name), ("product_name", operator, name), @@ -72,14 +72,18 @@ def _get_price_from_customerinfo(self, partner_id): return customerinfo.price return 0.0 - def price_compute(self, price_type, uom=False, currency=False, company=None): + def price_compute( + self, price_type, uom=False, currency=False, company=None, date=False + ): if price_type == "partner": partner_id = self.env.context.get( "partner_id", False ) or self.env.context.get("partner", False) if partner_id and isinstance(partner_id, models.BaseModel): partner_id = partner_id.id - prices = super().price_compute("list_price", uom, currency, company) + prices = super().price_compute( + "list_price", uom, currency, company, date=date + ) for product in self: price = product._get_price_from_customerinfo(partner_id) if not price: @@ -101,13 +105,13 @@ def price_compute(self, price_type, uom=False, currency=False, company=None): prices[product.id], currency, company, date ) return prices - return super().price_compute(price_type, uom, currency, company) + return super().price_compute(price_type, uom, currency, company, date=date) def _prepare_domain_customerinfo(self, params): self.ensure_one() partner_id = params.get("partner_id") return [ - ("name", "=", partner_id), + ("partner_id", "=", partner_id), "|", ("product_id", "=", self.id), "&", diff --git a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py index 85a6ff33e8b..4ada3191006 100644 --- a/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py +++ b/product_supplierinfo_for_customer/tests/test_product_supplierinfo_for_customer.py @@ -47,7 +47,7 @@ def _create_customer(cls, name): def _create_partnerinfo(cls, supplierinfo_type, partner, product): return cls.env["product." + supplierinfo_type + "info"].create( { - "name": partner.id, + "partner_id": partner.id, "product_id": product.id, "product_code": "00001", "price": 100.0, @@ -61,15 +61,15 @@ def test_default_get(self): self.assertEqual(values["customer"], False, "Incorrect default") def test_product_supplierinfo_for_customer(self): - cond = [("name", "=", self.customer.id)] + cond = [("partner_id", "=", self.customer.id)] supplierinfos = self.supplierinfo_model.search(cond) self.assertEqual(len(supplierinfos), 0, "Error: Supplier found in Supplierinfo") - cond = [("name", "=", self.customer.id)] + cond = [("partner_id", "=", self.customer.id)] customerinfos = self.customerinfo_model.search(cond) self.assertNotEqual( len(customerinfos), 0, "Error: Customer not found in Supplierinfo" ) - price, rule_id = self.pricelist.get_product_price_rule( + price, rule_id = self.pricelist._get_product_price_rule( self.product, 1, partner=self.customer ) self.assertEqual( @@ -106,7 +106,11 @@ def test_variant_supplierinfo_price(self): other variants --> 30.0). """ self.piece_template = self.env["product.template"].create( - {"name": "Piece for test", "price": 10.0, "company_id": self.company.id} + { + "name": "Piece for test", + "list_price": 10.0, + "company_id": self.company.id, + } ) self.large_attribute = self.env["product.attribute"].create( {"name": "Large test", "sequence": 1} @@ -155,7 +159,11 @@ def test_variant_supplierinfo_price(self): ) self._create_partnerinfo("customer", self.customer, product) price_by_template = self.customerinfo_model.create( - {"name": self.customer.id, "product_tmpl_id": template.id, "price": 30.0} + { + "partner_id": self.customer.id, + "product_tmpl_id": template.id, + "price": 30.0, + } ) res = product.with_context(partner_id=self.customer.id).price_compute( "partner", product.uom_id, self.company.currency_id, self.company diff --git a/product_supplierinfo_for_customer/views/product_views.xml b/product_supplierinfo_for_customer/views/product_views.xml index 05d67ea4e58..cbfc5c201c9 100644 --- a/product_supplierinfo_for_customer/views/product_views.xml +++ b/product_supplierinfo_for_customer/views/product_views.xml @@ -12,32 +12,26 @@
    + - + diff --git a/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py b/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py index 685fec85df5..35933d08aa1 100644 --- a/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py +++ b/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py @@ -9,6 +9,7 @@ class ProductPricelistItemDuplicateWizard(models.TransientModel): _name = 'product.pricelist.item.duplicate.wizard' + _description = 'Wizard Product Pricelist Item Duplicate' date_start = fields.Date(required=True) date_end = fields.Date() @@ -29,8 +30,7 @@ def action_apply(self): 'fixed_price': item.fixed_price * ( 1.0 + self.variation_percent / 100.0), }) - item.date_end = (fields.Date.from_string(self.date_start) - - relativedelta(days=1)) + item.date_end = self.date_start - relativedelta(days=1) action = self.env.ref( 'product_pricelist_revision.product_pricelist_item_action' From b3f1e82d9001b24a39e7b364216f30102b50e0d9 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Mon, 3 Feb 2020 19:19:49 +0100 Subject: [PATCH 0292/1692] [IMP] product_pricelist_revision: black, isort --- product_pricelist_revision/__manifest__.py | 9 +- .../models/pricelist.py | 35 +++--- .../tests/test_product_pricelist_revision.py | 108 ++++++++++-------- .../wizards/pricelist_duplicate_wizard.py | 34 +++--- 4 files changed, 99 insertions(+), 87 deletions(-) diff --git a/product_pricelist_revision/__manifest__.py b/product_pricelist_revision/__manifest__.py index d2410012df0..82d8d8b4b44 100644 --- a/product_pricelist_revision/__manifest__.py +++ b/product_pricelist_revision/__manifest__.py @@ -10,11 +10,6 @@ "author": "Tecnativa, Odoo Community Association (OCA)", "license": "AGPL-3", "installable": True, - "depends": [ - "sale_management", - ], - "data": [ - "views/pricelist_view.xml", - "wizards/pricelist_duplicate_wizard_view.xml", - ], + "depends": ["sale_management"], + "data": ["views/pricelist_view.xml", "wizards/pricelist_duplicate_wizard_view.xml"], } diff --git a/product_pricelist_revision/models/pricelist.py b/product_pricelist_revision/models/pricelist.py index bb2b11516e8..258e86bf1f9 100644 --- a/product_pricelist_revision/models/pricelist.py +++ b/product_pricelist_revision/models/pricelist.py @@ -2,45 +2,46 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models + from odoo.addons import decimal_precision as dp class ProductPricelistItem(models.Model): - _inherit = 'product.pricelist.item' + _inherit = "product.pricelist.item" - name = fields.Char(search='_search_name') + name = fields.Char(search="_search_name") previous_item_id = fields.Many2one( - comodel_name='product.pricelist.item', - string='Previous Item', - help='Relation with previous item when duplicate line', + comodel_name="product.pricelist.item", + string="Previous Item", + help="Relation with previous item when duplicate line", ) previous_price = fields.Float( - related='previous_item_id.fixed_price', - string='Previous Fixed Price', + related="previous_item_id.fixed_price", + string="Previous Fixed Price", readonly=True, ) variation_percent = fields.Float( - compute='_compute_variation_percent', + compute="_compute_variation_percent", store=True, - digits=dp.get_precision('Product Price'), - string='Variation %', + digits=dp.get_precision("Product Price"), + string="Variation %", ) @api.model def _search_name(self, operator, value): return [ - '|', '|', - ('categ_id', operator, value), - ('product_tmpl_id', operator, value), - ('product_id', operator, value), + "|", + "|", + ("categ_id", operator, value), + ("product_tmpl_id", operator, value), + ("product_id", operator, value), ] @api.multi - @api.depends('fixed_price', 'previous_item_id.fixed_price') + @api.depends("fixed_price", "previous_item_id.fixed_price") def _compute_variation_percent(self): for line in self: if not (line.fixed_price and line.previous_price): continue - line.variation_percent = ( - (line.fixed_price / line.previous_price - 1) * 100) + line.variation_percent = (line.fixed_price / line.previous_price - 1) * 100 diff --git a/product_pricelist_revision/tests/test_product_pricelist_revision.py b/product_pricelist_revision/tests/test_product_pricelist_revision.py index 3dd45774e8c..a392bfe6a3e 100644 --- a/product_pricelist_revision/tests/test_product_pricelist_revision.py +++ b/product_pricelist_revision/tests/test_product_pricelist_revision.py @@ -2,85 +2,99 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from datetime import date + from odoo.tests.common import SavepointCase class TestProductPricelistRevision(SavepointCase): - @classmethod def setUpClass(cls): super(TestProductPricelistRevision, cls).setUpClass() - cls.pricelist_obj = cls.env['product.pricelist'] - cls.pricelist_item_obj = cls.env['product.pricelist.item'] - cls.product_category_obj = cls.env['product.category'] - cls.product_template_obj = cls.env['product.template'] - cls.product_product_obj = cls.env['product.product'] + cls.pricelist_obj = cls.env["product.pricelist"] + cls.pricelist_item_obj = cls.env["product.pricelist.item"] + cls.product_category_obj = cls.env["product.category"] + cls.product_template_obj = cls.env["product.template"] + cls.product_product_obj = cls.env["product.product"] # Create a price list, a product category, a product template and # a product variant cls.pricelist = cls.pricelist_obj.create( - {'name': 'Pricelist', 'item_ids': False}) + {"name": "Pricelist", "item_ids": False} + ) cls.product_category = cls.product_category_obj.create( - {'name': 'Product Category'}) + {"name": "Product Category"} + ) cls.product_template = cls.product_template_obj.create( - {'name': 'Product Template', 'categ_id': cls.product_category.id}) + {"name": "Product Template", "categ_id": cls.product_category.id} + ) cls.product_product = cls.product_product_obj.create( - {'name': 'Product Variant', 'categ_id': cls.product_category.id}) + {"name": "Product Variant", "categ_id": cls.product_category.id} + ) # Create pricelist items - cls.pricelist_item_global = cls.pricelist_item_obj.create({ - 'pricelist_id': cls.pricelist.id, - 'compute_price': 'formula', - 'price_discount': 15, - }) - cls.pricelist_item_product_category = cls.pricelist_item_obj.create({ - 'pricelist_id': cls.pricelist.id, - 'applied_on': '2_product_category', - 'categ_id': cls.product_category.id, - 'compute_price': 'formula', - 'price_discount': 10, - }) - cls.pricelist_item_product_template = cls.pricelist_item_obj.create({ - 'pricelist_id': cls.pricelist.id, - 'applied_on': '1_product', - 'product_tmpl_id': cls.product_template.id, - 'compute_price': 'percentage', - 'percent_price': 5, - }) - cls.pricelist_item_product_product = cls.pricelist_item_obj.create({ - 'pricelist_id': cls.pricelist.id, - 'applied_on': '0_product_variant', - 'product_id': cls.product_product.id, - 'compute_price': 'fixed', - 'fixed_price': 100, - }) + cls.pricelist_item_global = cls.pricelist_item_obj.create( + { + "pricelist_id": cls.pricelist.id, + "compute_price": "formula", + "price_discount": 15, + } + ) + cls.pricelist_item_product_category = cls.pricelist_item_obj.create( + { + "pricelist_id": cls.pricelist.id, + "applied_on": "2_product_category", + "categ_id": cls.product_category.id, + "compute_price": "formula", + "price_discount": 10, + } + ) + cls.pricelist_item_product_template = cls.pricelist_item_obj.create( + { + "pricelist_id": cls.pricelist.id, + "applied_on": "1_product", + "product_tmpl_id": cls.product_template.id, + "compute_price": "percentage", + "percent_price": 5, + } + ) + cls.pricelist_item_product_product = cls.pricelist_item_obj.create( + { + "pricelist_id": cls.pricelist.id, + "applied_on": "0_product_variant", + "product_id": cls.product_product.id, + "compute_price": "fixed", + "fixed_price": 100, + } + ) def test_search_name(self): item_obj = self.pricelist_item_obj - result = item_obj.search([('name', 'ilike', 'product')]) + result = item_obj.search([("name", "ilike", "product")]) expected = self.pricelist_item_product_category expected |= self.pricelist_item_product_template expected |= self.pricelist_item_product_product self.assertEquals(result, expected) - result = item_obj.search([('name', 'ilike', 'product category')]) + result = item_obj.search([("name", "ilike", "product category")]) self.assertEquals(result, self.pricelist_item_product_category) - result = item_obj.search([('name', 'ilike', 'product template')]) + result = item_obj.search([("name", "ilike", "product template")]) self.assertEquals(result, self.pricelist_item_product_template) - result = item_obj.search([('name', 'ilike', 'product variant')]) + result = item_obj.search([("name", "ilike", "product variant")]) self.assertEquals(result, self.pricelist_item_product_product) - result = item_obj.search([('name', 'ilike', 'all')]) + result = item_obj.search([("name", "ilike", "all")]) self.assertEquals(len(result), 0) def test_wizard_action_apply_and_compute_variation_percent(self): - wizard_obj = self.env['product.pricelist.item.duplicate.wizard'] + wizard_obj = self.env["product.pricelist.item.duplicate.wizard"] # Before duplicate there are 4 items self.assertEquals(len(self.pricelist.item_ids), 4) items_before_wizard = self.pricelist.item_ids # Create wizard from pricelist_item_product_product and aply active_ids = self.pricelist_item_product_product.ids - wizard = wizard_obj.with_context(active_ids=active_ids).create({ - 'date_start': date.today(), - 'date_end': date.today(), - 'variation_percent': 50, - }) + wizard = wizard_obj.with_context(active_ids=active_ids).create( + { + "date_start": date.today(), + "date_end": date.today(), + "variation_percent": 50, + } + ) wizard.action_apply() # There will be one more item in self.pricelist self.assertEquals(len(self.pricelist.item_ids), 5) diff --git a/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py b/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py index 35933d08aa1..3b397c59708 100644 --- a/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py +++ b/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py @@ -4,39 +4,41 @@ from dateutil.relativedelta import relativedelta from odoo import api, fields, models + from odoo.addons import decimal_precision as dp class ProductPricelistItemDuplicateWizard(models.TransientModel): - _name = 'product.pricelist.item.duplicate.wizard' - _description = 'Wizard Product Pricelist Item Duplicate' + _name = "product.pricelist.item.duplicate.wizard" + _description = "Wizard Product Pricelist Item Duplicate" date_start = fields.Date(required=True) date_end = fields.Date() variation_percent = fields.Float( - digits=dp.get_precision('Product Price'), - string='Variation %', + digits=dp.get_precision("Product Price"), string="Variation %" ) @api.multi def action_apply(self): - PricelistItem = self.env['product.pricelist.item'] + PricelistItem = self.env["product.pricelist.item"] new_items = PricelistItem - for item in PricelistItem.browse(self.env.context['active_ids']): - new_items |= item.copy({ - 'date_start': self.date_start, - 'date_end': self.date_end, - 'previous_item_id': item.id, - 'fixed_price': item.fixed_price * ( - 1.0 + self.variation_percent / 100.0), - }) + for item in PricelistItem.browse(self.env.context["active_ids"]): + new_items |= item.copy( + { + "date_start": self.date_start, + "date_end": self.date_end, + "previous_item_id": item.id, + "fixed_price": item.fixed_price + * (1.0 + self.variation_percent / 100.0), + } + ) item.date_end = self.date_start - relativedelta(days=1) action = self.env.ref( - 'product_pricelist_revision.product_pricelist_item_action' + "product_pricelist_revision.product_pricelist_item_action" ).read()[0] if len(new_items) > 0: - action['domain'] = [('id', 'in', new_items.ids)] + action["domain"] = [("id", "in", new_items.ids)] else: - action = {'type': 'ir.actions.act_window_close'} + action = {"type": "ir.actions.act_window_close"} return action From c5edc32f64d1c4897983dda36fd0825f7893c1b4 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Mon, 3 Feb 2020 19:19:49 +0100 Subject: [PATCH 0293/1692] [MIG] product_pricelist_revision: Migration to v13.0 --- product_pricelist_revision/README.rst | 10 +- product_pricelist_revision/__manifest__.py | 2 +- .../models/pricelist.py | 16 ++-- .../static/description/index.html | 6 +- .../views/pricelist_view.xml | 92 +++++++++++-------- .../wizards/pricelist_duplicate_wizard.py | 3 +- .../pricelist_duplicate_wizard_view.xml | 33 ++++--- 7 files changed, 89 insertions(+), 73 deletions(-) diff --git a/product_pricelist_revision/README.rst b/product_pricelist_revision/README.rst index ef69640189f..bf0fcd60bca 100644 --- a/product_pricelist_revision/README.rst +++ b/product_pricelist_revision/README.rst @@ -14,13 +14,13 @@ Product Pricelist Revision :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_pricelist_revision + :target: https://github.com/OCA/product-attribute/tree/13.0/product_pricelist_revision :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_pricelist_revision + :target: https://translation.odoo-community.org/projects/product-attribute-13-0/product-attribute-13-0-product_pricelist_revision :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 + :target: https://runbot.odoo-community.org/runbot/135/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -66,7 +66,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. @@ -99,6 +99,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_pricelist_revision/__manifest__.py b/product_pricelist_revision/__manifest__.py index 82d8d8b4b44..8d78df34bc7 100644 --- a/product_pricelist_revision/__manifest__.py +++ b/product_pricelist_revision/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Product Pricelist Revision", "summary": "Product Pricelist Revision", - "version": "12.0.1.0.0", + "version": "13.0.1.0.0", "category": "Product", "website": "https://www.github.com/OCA/product-attribute", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/product_pricelist_revision/models/pricelist.py b/product_pricelist_revision/models/pricelist.py index 258e86bf1f9..17efea7fdb7 100644 --- a/product_pricelist_revision/models/pricelist.py +++ b/product_pricelist_revision/models/pricelist.py @@ -3,8 +3,6 @@ from odoo import api, fields, models -from odoo.addons import decimal_precision as dp - class ProductPricelistItem(models.Model): _inherit = "product.pricelist.item" @@ -17,14 +15,12 @@ class ProductPricelistItem(models.Model): help="Relation with previous item when duplicate line", ) previous_price = fields.Float( - related="previous_item_id.fixed_price", - string="Previous Fixed Price", - readonly=True, + related="previous_item_id.fixed_price", string="Previous Fixed Price" ) variation_percent = fields.Float( compute="_compute_variation_percent", store=True, - digits=dp.get_precision("Product Price"), + digits="Product Price", string="Variation %", ) @@ -38,10 +34,12 @@ def _search_name(self, operator, value): ("product_id", operator, value), ] - @api.multi @api.depends("fixed_price", "previous_item_id.fixed_price") def _compute_variation_percent(self): for line in self: if not (line.fixed_price and line.previous_price): - continue - line.variation_percent = (line.fixed_price / line.previous_price - 1) * 100 + line.variation_percent = 0.0 + else: + line.variation_percent = ( + line.fixed_price / line.previous_price - 1 + ) * 100 diff --git a/product_pricelist_revision/static/description/index.html b/product_pricelist_revision/static/description/index.html index 0466325b8ac..985b70b5841 100644 --- a/product_pricelist_revision/static/description/index.html +++ b/product_pricelist_revision/static/description/index.html @@ -367,7 +367,7 @@

    Product Pricelist Revision

    !! 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 ‘Pricelist items’ tree view that allows to select several elements to version them and also to see the percentage ‘fixed price’ variation between a version and the previous one.

    @@ -416,7 +416,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.

    @@ -444,7 +444,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.

    diff --git a/product_pricelist_revision/views/pricelist_view.xml b/product_pricelist_revision/views/pricelist_view.xml index 526456dbf89..7d87d9c3b85 100644 --- a/product_pricelist_revision/views/pricelist_view.xml +++ b/product_pricelist_revision/views/pricelist_view.xml @@ -1,11 +1,10 @@ - + - product.pricelist.item - + primary @@ -13,61 +12,78 @@ false - - - - - 1 - - - 1 - - - 1 + + - - - + + + - product.pricelist.item.search product.pricelist.item - - - - - - - - - - + + + + + + + + + + - - + + - - Pricelist Items ir.actions.act_window product.pricelist.item - form tree,form - + - - + action="product_pricelist_item_action" + id="menu_product_pricelist_item_action" + parent="sale.product_menu_catalog" + sequence="4" + groups="product.group_sale_pricelist" + /> diff --git a/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py b/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py index 3b397c59708..aeb9e71e655 100644 --- a/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py +++ b/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py @@ -3,7 +3,7 @@ from dateutil.relativedelta import relativedelta -from odoo import api, fields, models +from odoo import fields, models from odoo.addons import decimal_precision as dp @@ -18,7 +18,6 @@ class ProductPricelistItemDuplicateWizard(models.TransientModel): digits=dp.get_precision("Product Price"), string="Variation %" ) - @api.multi def action_apply(self): PricelistItem = self.env["product.pricelist.item"] new_items = PricelistItem diff --git a/product_pricelist_revision/wizards/pricelist_duplicate_wizard_view.xml b/product_pricelist_revision/wizards/pricelist_duplicate_wizard_view.xml index e386d7893c0..45773d2e7d6 100644 --- a/product_pricelist_revision/wizards/pricelist_duplicate_wizard_view.xml +++ b/product_pricelist_revision/wizards/pricelist_duplicate_wizard_view.xml @@ -1,4 +1,4 @@ - + @@ -11,32 +11,35 @@ Set new start date and variation percent to duplicate. This process set start date previous day as end date of origin record. -
    -
    +
    +
    - - - + + +
    -
    - - -
    From aad1ec90db8bd18f9f0bd099945ca45e4a2c1151 Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Wed, 10 Feb 2021 21:26:07 +0100 Subject: [PATCH 0294/1692] [IMP] product_pricelist_revision: Add percent price column and current filter TT28144 [UPD] Update product_pricelist_revision.pot --- product_pricelist_revision/i18n/es.po | 100 ++++++------------ .../i18n/product_pricelist_revision.pot | 82 +++++--------- .../views/pricelist_view.xml | 94 ++++++++-------- 3 files changed, 112 insertions(+), 164 deletions(-) diff --git a/product_pricelist_revision/i18n/es.po b/product_pricelist_revision/i18n/es.po index cf50c1d7cd5..ef9369d7526 100644 --- a/product_pricelist_revision/i18n/es.po +++ b/product_pricelist_revision/i18n/es.po @@ -6,38 +6,18 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-02-08 08:47+0000\n" -"PO-Revision-Date: 2019-02-08 10:28+0100\n" +"POT-Creation-Date: 2021-02-11 21:33+0000\n" +"PO-Revision-Date: 2021-02-11 22:40+0100\n" "Last-Translator: Carlos Dauden \n" "Language-Team: carlos.dauden@tecnativa.com\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.0.6\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 2.3\n" "X-Poedit-SourceCharset: UTF-8\n" -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Applied on categories" -msgstr "Aplicado a categorías" - -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Applied on global" -msgstr "Aplicado a todo" - -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Applied on products" -msgstr "Aplicado a plantilla de prouctos" - -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Applied on variants" -msgstr "Aplicado a variantes" - #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view msgid "Apply" @@ -48,6 +28,11 @@ msgstr "Aplicar" msgid "Cancel" msgstr "Cancelar" +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Category Rule" +msgstr "Regla de categoría" + #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__create_uid msgid "Created by" @@ -58,6 +43,11 @@ msgstr "Creado por" msgid "Created on" msgstr "Creado en" +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Current" +msgstr "Vigente" + #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__date_end msgid "Date End" @@ -81,23 +71,18 @@ msgstr "Duplicar elemento" #. module: product_pricelist_revision #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__name msgid "Explicit rule name for this pricelist line." -msgstr "" +msgstr "Nombre de regla explícito para esta línea de lista de precios." #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Group By" -msgstr "Agrupado por" +msgid "Global Rule" +msgstr "Regla global" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__id msgid "ID" msgstr "ID (identificación)" -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Item" -msgstr "Elemento" - #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard____last_update msgid "Last Modified on" @@ -116,32 +101,23 @@ msgstr "Última actualización en" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__name msgid "Name" -msgstr "" +msgstr "Nombre" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_revision_tree_view +msgid "Percent" +msgstr "Porcentaje" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_price -#, fuzzy -#| msgid "Fixed Price" msgid "Previous Fixed Price" -msgstr "Precio fijo" +msgstr "Precio fijo anterior" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_item_id msgid "Previous Item" msgstr "Elemento previo" -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Pricelist" -msgstr "Tarifa" - -#. module: product_pricelist_revision -#: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item -#, fuzzy -#| msgid "Pricelist Items" -msgid "Pricelist Item" -msgstr "Elementos de tarifa" - #. module: product_pricelist_revision #: model:ir.actions.act_window,name:product_pricelist_revision.product_pricelist_item_action #: model:ir.ui.menu,name:product_pricelist_revision.menu_product_pricelist_item_action @@ -149,19 +125,14 @@ msgid "Pricelist Items" msgstr "Elementos de tarifa" #. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Pricelist Items Search" -msgstr "Buscar elementos de tarifa" - -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Product" -msgstr "Producto" +#: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item +msgid "Pricelist Rule" +msgstr "Regla de tarifa" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search msgid "Product Category" -msgstr "Categoría" +msgstr "Categoría de producto" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search @@ -173,11 +144,6 @@ msgstr "Plantilla de producto" msgid "Product Variant" msgstr "Variantes de producto" -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Products" -msgstr "Productos" - #. module: product_pricelist_revision #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__previous_item_id msgid "Relation with previous item when duplicate line" @@ -187,12 +153,13 @@ msgstr "Relacion con elemento previo cuando se duplica la linea" #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view msgid "" "Set new start date and variation percent to duplicate.\n" -" This process set start date previous day as end date of\n" +" This process set start date previous day as end date " +"of\n" " origin record.\n" "
    \n" "
    " msgstr "" -"Establece fecha inicio y porcentage de variación para duplicar.\n" +"Establece nueva fecha de inicio y porcentaje de variación para duplicar.\n" " Este proceso establecerá como fecha final el día previo " "a la fecha final en\n" " el registro original.\n" @@ -208,12 +175,9 @@ msgstr "Variación %" #. module: product_pricelist_revision #: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item_duplicate_wizard msgid "Wizard Product Pricelist Item Duplicate" -msgstr "" +msgstr "Asistente para duplicar elementos de tarifa" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view msgid "or" msgstr "o" - -#~ msgid "Pricelist item" -#~ msgstr "Elemento de la tarifa" diff --git a/product_pricelist_revision/i18n/product_pricelist_revision.pot b/product_pricelist_revision/i18n/product_pricelist_revision.pot index 09c314f69e8..f5522c3fa59 100644 --- a/product_pricelist_revision/i18n/product_pricelist_revision.pot +++ b/product_pricelist_revision/i18n/product_pricelist_revision.pot @@ -1,38 +1,18 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_pricelist_revision +# * product_pricelist_revision # 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" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Applied on categories" -msgstr "" - -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Applied on global" -msgstr "" - -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Applied on products" -msgstr "" - -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Applied on variants" -msgstr "" - #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view msgid "Apply" @@ -43,6 +23,11 @@ msgstr "" msgid "Cancel" msgstr "" +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Category Rule" +msgstr "" + #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__create_uid msgid "Created by" @@ -53,6 +38,11 @@ msgstr "" msgid "Created on" msgstr "" +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Current" +msgstr "" + #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__date_end msgid "Date End" @@ -74,13 +64,14 @@ msgid "Duplicate Item" msgstr "" #. module: product_pricelist_revision +#: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_assortment_item__name #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__name msgid "Explicit rule name for this pricelist line." msgstr "" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Group By" +msgid "Global Rule" msgstr "" #. module: product_pricelist_revision @@ -88,11 +79,6 @@ msgstr "" msgid "ID" msgstr "" -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Item" -msgstr "" - #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard____last_update msgid "Last Modified on" @@ -109,30 +95,28 @@ msgid "Last Updated on" msgstr "" #. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__name #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__name msgid "Name" msgstr "" #. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_revision_tree_view +msgid "Percent" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__previous_price #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_price msgid "Previous Fixed Price" msgstr "" #. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__previous_item_id #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_item_id msgid "Previous Item" msgstr "" -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Pricelist" -msgstr "" - -#. module: product_pricelist_revision -#: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item -msgid "Pricelist Item" -msgstr "" - #. module: product_pricelist_revision #: model:ir.actions.act_window,name:product_pricelist_revision.product_pricelist_item_action #: model:ir.ui.menu,name:product_pricelist_revision.menu_product_pricelist_item_action @@ -140,13 +124,8 @@ msgid "Pricelist Items" msgstr "" #. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Pricelist Items Search" -msgstr "" - -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Product" +#: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item +msgid "Pricelist Rule" msgstr "" #. module: product_pricelist_revision @@ -165,18 +144,15 @@ msgid "Product Variant" msgstr "" #. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search -msgid "Products" -msgstr "" - -#. module: product_pricelist_revision +#: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_assortment_item__previous_item_id #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__previous_item_id msgid "Relation with previous item when duplicate line" msgstr "" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view -msgid "Set new start date and variation percent to duplicate.\n" +msgid "" +"Set new start date and variation percent to duplicate.\n" " This process set start date previous day as end date of\n" " origin record.\n" "
    \n" @@ -184,6 +160,7 @@ msgid "Set new start date and variation percent to duplicate.\n" msgstr "" #. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__variation_percent #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__variation_percent #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__variation_percent msgid "Variation %" @@ -198,4 +175,3 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view msgid "or" msgstr "" - diff --git a/product_pricelist_revision/views/pricelist_view.xml b/product_pricelist_revision/views/pricelist_view.xml index 7d87d9c3b85..fde0f937a43 100644 --- a/product_pricelist_revision/views/pricelist_view.xml +++ b/product_pricelist_revision/views/pricelist_view.xml @@ -1,5 +1,5 @@ - @@ -11,65 +11,73 @@ bottom false
    - - - + + show + + + show + + + show + + + show - - - + + + + - product.pricelist.item.search product.pricelist.item + - - - - - - + + - - + + + - - - - - + + @@ -77,7 +85,7 @@ ir.actions.act_window product.pricelist.item tree,form - + {'search_default_current_date':1} Date: Thu, 25 Feb 2021 11:52:05 +0000 Subject: [PATCH 0295/1692] Added translation using Weblate (Catalan) --- product_pricelist_revision/i18n/ca.po | 178 ++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 product_pricelist_revision/i18n/ca.po diff --git a/product_pricelist_revision/i18n/ca.po b/product_pricelist_revision/i18n/ca.po new file mode 100644 index 00000000000..64a270dc307 --- /dev/null +++ b/product_pricelist_revision/i18n/ca.po @@ -0,0 +1,178 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pricelist_revision +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view +msgid "Apply" +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view +msgid "Cancel" +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Category Rule" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Current" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__date_end +msgid "Date End" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__date_start +msgid "Date Start" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__display_name +msgid "Display Name" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.actions.act_window,name:product_pricelist_revision.pricelist_item_duplicate_wizard_action +msgid "Duplicate Item" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_assortment_item__name +#: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__name +msgid "Explicit rule name for this pricelist line." +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Global Rule" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__id +msgid "ID" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__name +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__name +msgid "Name" +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_revision_tree_view +msgid "Percent" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__previous_price +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_price +msgid "Previous Fixed Price" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__previous_item_id +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_item_id +msgid "Previous Item" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.actions.act_window,name:product_pricelist_revision.product_pricelist_item_action +#: model:ir.ui.menu,name:product_pricelist_revision.menu_product_pricelist_item_action +msgid "Pricelist Items" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item +msgid "Pricelist Rule" +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Product Category" +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Product Template" +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search +msgid "Product Variant" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_assortment_item__previous_item_id +#: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__previous_item_id +msgid "Relation with previous item when duplicate line" +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view +msgid "" +"Set new start date and variation percent to duplicate.\n" +" This process set start date previous day as end date of\n" +" origin record.\n" +"
    \n" +"
    " +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__variation_percent +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__variation_percent +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__variation_percent +msgid "Variation %" +msgstr "" + +#. module: product_pricelist_revision +#: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item_duplicate_wizard +msgid "Wizard Product Pricelist Item Duplicate" +msgstr "" + +#. module: product_pricelist_revision +#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view +msgid "or" +msgstr "" From b76e17ba83a6407efde9cdf99806e1db393fa27f Mon Sep 17 00:00:00 2001 From: claudiagn Date: Thu, 25 Feb 2021 11:54:55 +0000 Subject: [PATCH 0296/1692] Translated using Weblate (Catalan) Currently translated at 100.0% (30 of 30 strings) Translation: product-attribute-13.0/product-attribute-13.0-product_pricelist_revision Translate-URL: https://translation.odoo-community.org/projects/product-attribute-13-0/product-attribute-13-0-product_pricelist_revision/ca/ --- product_pricelist_revision/i18n/ca.po | 68 +++++++++++++++------------ 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/product_pricelist_revision/i18n/ca.po b/product_pricelist_revision/i18n/ca.po index 64a270dc307..f163de90ae7 100644 --- a/product_pricelist_revision/i18n/ca.po +++ b/product_pricelist_revision/i18n/ca.po @@ -6,149 +6,151 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2021-02-25 12:45+0000\n" +"Last-Translator: claudiagn \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_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view msgid "Apply" -msgstr "" +msgstr "Aplicar" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view msgid "Cancel" -msgstr "" +msgstr "Cancelar" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search msgid "Category Rule" -msgstr "" +msgstr "Regla de categoria" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__create_uid msgid "Created by" -msgstr "" +msgstr "Creat per" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__create_date msgid "Created on" -msgstr "" +msgstr "Creat el" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search msgid "Current" -msgstr "" +msgstr "Actual" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__date_end msgid "Date End" -msgstr "" +msgstr "Data final" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__date_start msgid "Date Start" -msgstr "" +msgstr "Data d'inici" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__display_name msgid "Display Name" -msgstr "" +msgstr "Nom visible" #. module: product_pricelist_revision #: model:ir.actions.act_window,name:product_pricelist_revision.pricelist_item_duplicate_wizard_action msgid "Duplicate Item" -msgstr "" +msgstr "Duplicar article" #. module: product_pricelist_revision #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_assortment_item__name #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__name msgid "Explicit rule name for this pricelist line." -msgstr "" +msgstr "Nom de la regla explícita per a aquesta línia de preus." #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search msgid "Global Rule" -msgstr "" +msgstr "Regla global" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__id msgid "ID" -msgstr "" +msgstr "ID" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard____last_update msgid "Last Modified on" -msgstr "" +msgstr "Darrera modificació el" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Darrera actualització per" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__write_date msgid "Last Updated on" -msgstr "" +msgstr "Darrera actualització el" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__name #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__name msgid "Name" -msgstr "" +msgstr "Nom" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_revision_tree_view msgid "Percent" -msgstr "" +msgstr "Per cent" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__previous_price #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_price msgid "Previous Fixed Price" -msgstr "" +msgstr "Preu fixe anterior" #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__previous_item_id #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_item_id msgid "Previous Item" -msgstr "" +msgstr "Article anterior" #. module: product_pricelist_revision #: model:ir.actions.act_window,name:product_pricelist_revision.product_pricelist_item_action #: model:ir.ui.menu,name:product_pricelist_revision.menu_product_pricelist_item_action msgid "Pricelist Items" -msgstr "" +msgstr "Articles de tarifa" #. module: product_pricelist_revision #: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item msgid "Pricelist Rule" -msgstr "" +msgstr "Regla de tarifa" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search msgid "Product Category" -msgstr "" +msgstr "Categoria de producte" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search msgid "Product Template" -msgstr "" +msgstr "Plantilla de producte" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.product_pricelist_item_view_search msgid "Product Variant" -msgstr "" +msgstr "Variant de producte" #. module: product_pricelist_revision #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_assortment_item__previous_item_id #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__previous_item_id msgid "Relation with previous item when duplicate line" -msgstr "" +msgstr "Relació amb l'element anterior quan es duplica la línia" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view @@ -159,20 +161,26 @@ msgid "" "
    \n" "
    " msgstr "" +"Definiu la nova data d'inici i el percentatge de variació per duplicar.\n" +" Aquest procés estableix la data d'inici del dia anterior " +"com a data de finalització de\n" +" registre d’origen.\n" +"
    \n" +"
    " #. module: product_pricelist_revision #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__variation_percent #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__variation_percent #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__variation_percent msgid "Variation %" -msgstr "" +msgstr "Variació %" #. module: product_pricelist_revision #: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item_duplicate_wizard msgid "Wizard Product Pricelist Item Duplicate" -msgstr "" +msgstr "Assistent duplicat de l'element de llista de preus del producte" #. module: product_pricelist_revision #: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view msgid "or" -msgstr "" +msgstr "o" From e8f92f0e236fd8a289983e137dab1d53a01b3b83 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Thu, 4 Mar 2021 09:11:14 +0100 Subject: [PATCH 0297/1692] [FIX] product_pricelist_revision: Applied the new way for digits Before this change on runbot we caught a Warning about deprecated call to decimal_precision.get_precision() [UPD] README.rst product_pricelist_revision 13.0.1.1.0 --- product_pricelist_revision/README.rst | 4 ++-- product_pricelist_revision/__manifest__.py | 2 +- product_pricelist_revision/readme/CONFIGURE.rst | 3 +-- product_pricelist_revision/readme/CONTRIBUTORS.rst | 1 + product_pricelist_revision/static/description/index.html | 4 ++-- .../wizards/pricelist_duplicate_wizard.py | 6 +----- 6 files changed, 8 insertions(+), 12 deletions(-) diff --git a/product_pricelist_revision/README.rst b/product_pricelist_revision/README.rst index bf0fcd60bca..b9a3c7d528d 100644 --- a/product_pricelist_revision/README.rst +++ b/product_pricelist_revision/README.rst @@ -40,8 +40,7 @@ Configuration To configure this module, you need to: #. Go to *Sales > Configuration > Settings* and check - "Multiple Sales Prices per Product" option and - "Prices computed from formulas" after that. + "Pricelists" option and "Advanced price rules" after that. Usage ===== @@ -85,6 +84,7 @@ Contributors * Carlos Dauden * Ernesto Tejeda + * Carlos Roca Maintainers ~~~~~~~~~~~ diff --git a/product_pricelist_revision/__manifest__.py b/product_pricelist_revision/__manifest__.py index 8d78df34bc7..e83648c0640 100644 --- a/product_pricelist_revision/__manifest__.py +++ b/product_pricelist_revision/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Product Pricelist Revision", "summary": "Product Pricelist Revision", - "version": "13.0.1.0.0", + "version": "13.0.1.1.0", "category": "Product", "website": "https://www.github.com/OCA/product-attribute", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/product_pricelist_revision/readme/CONFIGURE.rst b/product_pricelist_revision/readme/CONFIGURE.rst index d17c2e4e7a5..2c4e6a19227 100644 --- a/product_pricelist_revision/readme/CONFIGURE.rst +++ b/product_pricelist_revision/readme/CONFIGURE.rst @@ -1,5 +1,4 @@ To configure this module, you need to: #. Go to *Sales > Configuration > Settings* and check - "Multiple Sales Prices per Product" option and - "Prices computed from formulas" after that. + "Pricelists" option and "Advanced price rules" after that. diff --git a/product_pricelist_revision/readme/CONTRIBUTORS.rst b/product_pricelist_revision/readme/CONTRIBUTORS.rst index 0b072f0d593..02efd7fa5d5 100644 --- a/product_pricelist_revision/readme/CONTRIBUTORS.rst +++ b/product_pricelist_revision/readme/CONTRIBUTORS.rst @@ -2,3 +2,4 @@ * Carlos Dauden * Ernesto Tejeda + * Carlos Roca diff --git a/product_pricelist_revision/static/description/index.html b/product_pricelist_revision/static/description/index.html index 985b70b5841..4b5a62bb216 100644 --- a/product_pricelist_revision/static/description/index.html +++ b/product_pricelist_revision/static/description/index.html @@ -390,8 +390,7 @@

    Configuration

    To configure this module, you need to:

    1. Go to Sales > Configuration > Settings and check -“Multiple Sales Prices per Product” option and -“Prices computed from formulas” after that.
    2. +“Pricelists” option and “Advanced price rules” after that.
    @@ -433,6 +432,7 @@

    Contributors

  • Tecnativa:
    • Carlos Dauden
    • Ernesto Tejeda
    • +
    • Carlos Roca
  • diff --git a/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py b/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py index aeb9e71e655..24e34e58028 100644 --- a/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py +++ b/product_pricelist_revision/wizards/pricelist_duplicate_wizard.py @@ -5,8 +5,6 @@ from odoo import fields, models -from odoo.addons import decimal_precision as dp - class ProductPricelistItemDuplicateWizard(models.TransientModel): _name = "product.pricelist.item.duplicate.wizard" @@ -14,9 +12,7 @@ class ProductPricelistItemDuplicateWizard(models.TransientModel): date_start = fields.Date(required=True) date_end = fields.Date() - variation_percent = fields.Float( - digits=dp.get_precision("Product Price"), string="Variation %" - ) + variation_percent = fields.Float(digits="Product Price", string="Variation %") def action_apply(self): PricelistItem = self.env["product.pricelist.item"] From 4b0530b57880289b9f43fd2ca85eb6d82545b13f Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Mon, 29 Mar 2021 13:03:00 +0200 Subject: [PATCH 0298/1692] [IMP] product_pricelist_revision: Allow create pricelist item TT27524 --- product_pricelist_revision/__manifest__.py | 2 +- product_pricelist_revision/views/pricelist_view.xml | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/product_pricelist_revision/__manifest__.py b/product_pricelist_revision/__manifest__.py index e83648c0640..c249f86bf30 100644 --- a/product_pricelist_revision/__manifest__.py +++ b/product_pricelist_revision/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Product Pricelist Revision", "summary": "Product Pricelist Revision", - "version": "13.0.1.1.0", + "version": "13.0.1.2.0", "category": "Product", "website": "https://www.github.com/OCA/product-attribute", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/product_pricelist_revision/views/pricelist_view.xml b/product_pricelist_revision/views/pricelist_view.xml index fde0f937a43..452f21d30d9 100644 --- a/product_pricelist_revision/views/pricelist_view.xml +++ b/product_pricelist_revision/views/pricelist_view.xml @@ -9,10 +9,12 @@ bottom - false show + {'readonly': [('pricelist_id', '!=', False)]} show From 3189b2f4a310edc7dd84c9561bc3ad211cd34629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Marques?= Date: Thu, 5 Aug 2021 09:35:11 +0100 Subject: [PATCH 0299/1692] [IMP] *: pre-commit execution Fix website key in the manifests --- product_pricelist_revision/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_pricelist_revision/__manifest__.py b/product_pricelist_revision/__manifest__.py index c249f86bf30..a58c151d160 100644 --- a/product_pricelist_revision/__manifest__.py +++ b/product_pricelist_revision/__manifest__.py @@ -6,7 +6,7 @@ "summary": "Product Pricelist Revision", "version": "13.0.1.2.0", "category": "Product", - "website": "https://www.github.com/OCA/product-attribute", + "website": "https://github.com/OCA/product-attribute", "author": "Tecnativa, Odoo Community Association (OCA)", "license": "AGPL-3", "installable": True, From 28e367dcb3d4b99424fbafdf819fbef995ed8719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 10 Nov 2021 13:26:00 +0100 Subject: [PATCH 0300/1692] [MIG] product_pricelist_revision: Migration to 14.0 TT31815 --- product_pricelist_revision/README.rst | 10 ++++---- product_pricelist_revision/__manifest__.py | 8 +++++-- .../i18n/product_pricelist_revision.pot | 16 ++++--------- .../security/ir.model.access.csv | 2 ++ .../static/description/index.html | 6 ++--- .../tests/test_product_pricelist_revision.py | 24 +++++++++---------- .../pricelist_duplicate_wizard_view.xml | 18 +++++++------- 7 files changed, 40 insertions(+), 44 deletions(-) create mode 100644 product_pricelist_revision/security/ir.model.access.csv diff --git a/product_pricelist_revision/README.rst b/product_pricelist_revision/README.rst index b9a3c7d528d..b739a19171b 100644 --- a/product_pricelist_revision/README.rst +++ b/product_pricelist_revision/README.rst @@ -14,13 +14,13 @@ Product Pricelist Revision :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_pricelist_revision + :target: https://github.com/OCA/product-attribute/tree/14.0/product_pricelist_revision :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_pricelist_revision + :target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_pricelist_revision :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| @@ -65,7 +65,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. @@ -99,6 +99,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_pricelist_revision/__manifest__.py b/product_pricelist_revision/__manifest__.py index a58c151d160..4d1e5cf7828 100644 --- a/product_pricelist_revision/__manifest__.py +++ b/product_pricelist_revision/__manifest__.py @@ -4,12 +4,16 @@ { "name": "Product Pricelist Revision", "summary": "Product Pricelist Revision", - "version": "13.0.1.2.0", + "version": "14.0.1.0.0", "category": "Product", "website": "https://github.com/OCA/product-attribute", "author": "Tecnativa, Odoo Community Association (OCA)", "license": "AGPL-3", "installable": True, "depends": ["sale_management"], - "data": ["views/pricelist_view.xml", "wizards/pricelist_duplicate_wizard_view.xml"], + "data": [ + "security/ir.model.access.csv", + "views/pricelist_view.xml", + "wizards/pricelist_duplicate_wizard_view.xml", + ], } diff --git a/product_pricelist_revision/i18n/product_pricelist_revision.pot b/product_pricelist_revision/i18n/product_pricelist_revision.pot index f5522c3fa59..6ba6f38bdba 100644 --- a/product_pricelist_revision/i18n/product_pricelist_revision.pot +++ b/product_pricelist_revision/i18n/product_pricelist_revision.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" @@ -54,6 +54,7 @@ msgid "Date Start" msgstr "" #. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__display_name #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__display_name msgid "Display Name" msgstr "" @@ -64,7 +65,6 @@ msgid "Duplicate Item" msgstr "" #. module: product_pricelist_revision -#: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_assortment_item__name #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__name msgid "Explicit rule name for this pricelist line." msgstr "" @@ -75,11 +75,13 @@ msgid "Global Rule" msgstr "" #. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__id #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__id msgid "ID" msgstr "" #. module: product_pricelist_revision +#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item____last_update #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard____last_update msgid "Last Modified on" msgstr "" @@ -95,7 +97,6 @@ msgid "Last Updated on" msgstr "" #. module: product_pricelist_revision -#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__name #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__name msgid "Name" msgstr "" @@ -106,13 +107,11 @@ msgid "Percent" msgstr "" #. module: product_pricelist_revision -#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__previous_price #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_price msgid "Previous Fixed Price" msgstr "" #. module: product_pricelist_revision -#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__previous_item_id #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__previous_item_id msgid "Previous Item" msgstr "" @@ -144,7 +143,6 @@ msgid "Product Variant" msgstr "" #. module: product_pricelist_revision -#: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_assortment_item__previous_item_id #: model:ir.model.fields,help:product_pricelist_revision.field_product_pricelist_item__previous_item_id msgid "Relation with previous item when duplicate line" msgstr "" @@ -160,7 +158,6 @@ msgid "" msgstr "" #. module: product_pricelist_revision -#: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_assortment_item__variation_percent #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item__variation_percent #: model:ir.model.fields,field_description:product_pricelist_revision.field_product_pricelist_item_duplicate_wizard__variation_percent msgid "Variation %" @@ -170,8 +167,3 @@ msgstr "" #: model:ir.model,name:product_pricelist_revision.model_product_pricelist_item_duplicate_wizard msgid "Wizard Product Pricelist Item Duplicate" msgstr "" - -#. module: product_pricelist_revision -#: model_terms:ir.ui.view,arch_db:product_pricelist_revision.pricelist_item_duplicate_wizard_view -msgid "or" -msgstr "" diff --git a/product_pricelist_revision/security/ir.model.access.csv b/product_pricelist_revision/security/ir.model.access.csv new file mode 100644 index 00000000000..6ca839c0823 --- /dev/null +++ b/product_pricelist_revision/security/ir.model.access.csv @@ -0,0 +1,2 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_product_pricelist_item_duplicate_wizard","access_product_pricelist_item_duplicate_wizard","model_product_pricelist_item_duplicate_wizard","product.group_sale_pricelist",1,1,1,1 diff --git a/product_pricelist_revision/static/description/index.html b/product_pricelist_revision/static/description/index.html index 4b5a62bb216..1e6bdd48e63 100644 --- a/product_pricelist_revision/static/description/index.html +++ b/product_pricelist_revision/static/description/index.html @@ -367,7 +367,7 @@

    Product Pricelist Revision

    !! 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 ‘Pricelist items’ tree view that allows to select several elements to version them and also to see the percentage ‘fixed price’ variation between a version and the previous one.

    @@ -415,7 +415,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.

    @@ -444,7 +444,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.

    diff --git a/product_pricelist_revision/tests/test_product_pricelist_revision.py b/product_pricelist_revision/tests/test_product_pricelist_revision.py index a392bfe6a3e..9bdf8f37d7d 100644 --- a/product_pricelist_revision/tests/test_product_pricelist_revision.py +++ b/product_pricelist_revision/tests/test_product_pricelist_revision.py @@ -9,7 +9,7 @@ class TestProductPricelistRevision(SavepointCase): @classmethod def setUpClass(cls): - super(TestProductPricelistRevision, cls).setUpClass() + super().setUpClass() cls.pricelist_obj = cls.env["product.pricelist"] cls.pricelist_item_obj = cls.env["product.pricelist.item"] cls.product_category_obj = cls.env["product.category"] @@ -71,20 +71,20 @@ def test_search_name(self): expected = self.pricelist_item_product_category expected |= self.pricelist_item_product_template expected |= self.pricelist_item_product_product - self.assertEquals(result, expected) + self.assertEqual(result, expected) result = item_obj.search([("name", "ilike", "product category")]) - self.assertEquals(result, self.pricelist_item_product_category) + self.assertEqual(result, self.pricelist_item_product_category) result = item_obj.search([("name", "ilike", "product template")]) - self.assertEquals(result, self.pricelist_item_product_template) + self.assertEqual(result, self.pricelist_item_product_template) result = item_obj.search([("name", "ilike", "product variant")]) - self.assertEquals(result, self.pricelist_item_product_product) + self.assertEqual(result, self.pricelist_item_product_product) result = item_obj.search([("name", "ilike", "all")]) - self.assertEquals(len(result), 0) + self.assertEqual(len(result), 0) def test_wizard_action_apply_and_compute_variation_percent(self): wizard_obj = self.env["product.pricelist.item.duplicate.wizard"] # Before duplicate there are 4 items - self.assertEquals(len(self.pricelist.item_ids), 4) + self.assertEqual(len(self.pricelist.item_ids), 4) items_before_wizard = self.pricelist.item_ids # Create wizard from pricelist_item_product_product and aply active_ids = self.pricelist_item_product_product.ids @@ -97,9 +97,9 @@ def test_wizard_action_apply_and_compute_variation_percent(self): ) wizard.action_apply() # There will be one more item in self.pricelist - self.assertEquals(len(self.pricelist.item_ids), 5) + self.assertEqual(len(self.pricelist.item_ids), 5) new_item = self.pricelist.item_ids - items_before_wizard - self.assertEquals(new_item.previous_item_id.id, active_ids[0]) - self.assertEquals(new_item.previous_price, 100) - self.assertEquals(new_item.fixed_price, 150) - self.assertEquals(new_item.variation_percent, 50) + self.assertEqual(new_item.previous_item_id.id, active_ids[0]) + self.assertEqual(new_item.previous_price, 100) + self.assertEqual(new_item.fixed_price, 150) + self.assertEqual(new_item.variation_percent, 50) diff --git a/product_pricelist_revision/wizards/pricelist_duplicate_wizard_view.xml b/product_pricelist_revision/wizards/pricelist_duplicate_wizard_view.xml index 45773d2e7d6..e732d53bbee 100644 --- a/product_pricelist_revision/wizards/pricelist_duplicate_wizard_view.xml +++ b/product_pricelist_revision/wizards/pricelist_duplicate_wizard_view.xml @@ -1,5 +1,5 @@ - @@ -28,18 +28,16 @@ type="object" class="oe_highlight" /> - or