From d484e3858610b2d0ec1436730c958df643dfcb7b Mon Sep 17 00:00:00 2001 From: Quentin Dupont Date: Mon, 8 Apr 2024 09:21:38 +0200 Subject: [PATCH] [16.0][ADD] mrp_product_characterisation --- mrp_product_characterisation/README.rst | 84 ++++ mrp_product_characterisation/__init__.py | 1 + mrp_product_characterisation/__manifest__.py | 21 + mrp_product_characterisation/i18n/fr.po | 70 +++ .../models/__init__.py | 2 + .../models/product_product.py | 33 ++ .../models/product_template.py | 17 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 9 + .../static/description/index.html | 428 ++++++++++++++++++ .../description/intermediate_product.png | Bin 0 -> 48991 bytes .../tests/__init__.py | 1 + .../tests/test_product.py | 39 ++ .../views/view_product_product.xml | 33 ++ .../views/view_product_template.xml | 46 ++ .../odoo/addons/mrp_product_characterisation | 1 + setup/mrp_product_characterisation/setup.py | 6 + 17 files changed, 792 insertions(+) create mode 100644 mrp_product_characterisation/README.rst create mode 100644 mrp_product_characterisation/__init__.py create mode 100644 mrp_product_characterisation/__manifest__.py create mode 100644 mrp_product_characterisation/i18n/fr.po create mode 100644 mrp_product_characterisation/models/__init__.py create mode 100644 mrp_product_characterisation/models/product_product.py create mode 100644 mrp_product_characterisation/models/product_template.py create mode 100644 mrp_product_characterisation/readme/CONTRIBUTORS.rst create mode 100644 mrp_product_characterisation/readme/DESCRIPTION.rst create mode 100644 mrp_product_characterisation/static/description/index.html create mode 100644 mrp_product_characterisation/static/description/intermediate_product.png create mode 100644 mrp_product_characterisation/tests/__init__.py create mode 100644 mrp_product_characterisation/tests/test_product.py create mode 100644 mrp_product_characterisation/views/view_product_product.xml create mode 100644 mrp_product_characterisation/views/view_product_template.xml create mode 120000 setup/mrp_product_characterisation/odoo/addons/mrp_product_characterisation create mode 100644 setup/mrp_product_characterisation/setup.py diff --git a/mrp_product_characterisation/README.rst b/mrp_product_characterisation/README.rst new file mode 100644 index 000000000..7624a81d3 --- /dev/null +++ b/mrp_product_characterisation/README.rst @@ -0,0 +1,84 @@ +============================ +MRP Product Characterisation +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:0ae9b4c5cea6c28dcc86b2ac432cb648313f788951ac4097473d468f264ff6ec + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fmanufacture-lightgray.png?logo=github + :target: https://github.com/OCA/manufacture/tree/16.0/mrp_product_characterisation + :alt: OCA/manufacture +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/manufacture-16-0/manufacture-16-0-mrp_product_characterisation + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/manufacture&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Adds characterisation "Intermediate Products" and adjust Components characterisation. + +Intermediate products : contained in a BoM AND manufactured (has a BoM) +Component products : contained in a BoM AND NOT manufactured (has no BoM) + +For example in bakeries, leavening is a intermediate product, and buckwheat flour +a component product. + +.. figure:: https://raw.githubusercontent.com/OCA/manufacture/16.0/mrp_product_characterisation/static/description/intermediate_product.png + +**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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* GRAP + +Contributors +~~~~~~~~~~~~ + +* Quentin Dupont (quentin.dupont@grap.coop) + +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/manufacture `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mrp_product_characterisation/__init__.py b/mrp_product_characterisation/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/mrp_product_characterisation/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/mrp_product_characterisation/__manifest__.py b/mrp_product_characterisation/__manifest__.py new file mode 100644 index 000000000..f131595d0 --- /dev/null +++ b/mrp_product_characterisation/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright (C) 2022 - Today: GRAP (http://www.grap.coop) +# @author: Quentin Dupont (quentin.dupont@grap.coop) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "MRP Product Characterisation", + "summary": "Adds product characterisation 'Intermediate Products'.", + "version": "16.0.1.0.0", + "category": "Manufacturing", + "author": "GRAP, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/manufacture", + "license": "AGPL-3", + "depends": [ + "mrp", + ], + "data": [ + "views/view_product_product.xml", + "views/view_product_template.xml", + ], + "installable": True, +} diff --git a/mrp_product_characterisation/i18n/fr.po b/mrp_product_characterisation/i18n/fr.po new file mode 100644 index 000000000..afd29ab89 --- /dev/null +++ b/mrp_product_characterisation/i18n/fr.po @@ -0,0 +1,70 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_product_characterisation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-08 16:53+0000\n" +"PO-Revision-Date: 2024-04-08 16:53+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: mrp_product_characterisation +#: model_terms:ir.ui.view,arch_db:mrp_product_characterisation.view_mrp_product_product_search +#: model_terms:ir.ui.view,arch_db:mrp_product_characterisation.view_mrp_product_template_search +msgid "Components Products" +msgstr "Matières premières" + +#. module: mrp_product_characterisation +#: model_terms:ir.ui.view,arch_db:mrp_product_characterisation.view_mrp_product_product_search +#: model_terms:ir.ui.view,arch_db:mrp_product_characterisation.view_mrp_product_template_search +msgid "Intermediates Products" +msgstr "Produit intermédiaire" + +#. module: mrp_product_characterisation +#: model:ir.model.fields,field_description:mrp_product_characterisation.field_product_product__is_component +#: model:ir.model.fields,field_description:mrp_product_characterisation.field_product_template__is_component +msgid "Is Component" +msgstr "Est une matière première" + +#. module: mrp_product_characterisation +#: model:ir.model.fields,field_description:mrp_product_characterisation.field_product_product__is_intermediate +#: model:ir.model.fields,field_description:mrp_product_characterisation.field_product_template__is_intermediate +msgid "Is Intermediate" +msgstr "Est un produit intermédiaire" + +#. module: mrp_product_characterisation +#: model:ir.model.fields,help:mrp_product_characterisation.field_product_product__is_component +#: model:ir.model.fields,help:mrp_product_characterisation.field_product_template__is_component +msgid "" +"Is component a product which has no BoM based on it + is used " +"in a BoM line" +msgstr "" +"Est une matière première tout produit qui n'a pas de Fiche technique basée sur elle + qui est utilisé " +"dans une Fiche technique comme composant" + +#. module: mrp_product_characterisation +#: model:ir.model.fields,help:mrp_product_characterisation.field_product_product__is_intermediate +#: model:ir.model.fields,help:mrp_product_characterisation.field_product_template__is_intermediate +msgid "" +"Is intermediate a product which has a BoM based on it + is used" +" in a BoM line" +msgstr "" +"Est un produit intermédiaire tout produit qui a une Fiche technique basée sur elle + qui est utilisé " +"dans une Fiche technique comme composant" + +#. module: mrp_product_characterisation +#: model:ir.model,name:mrp_product_characterisation.model_product_template +msgid "Product" +msgstr "Produit" + +#. module: mrp_product_characterisation +#: model:ir.model,name:mrp_product_characterisation.model_product_product +msgid "Product Variant" +msgstr "Variante de produit" diff --git a/mrp_product_characterisation/models/__init__.py b/mrp_product_characterisation/models/__init__.py new file mode 100644 index 000000000..18b37e853 --- /dev/null +++ b/mrp_product_characterisation/models/__init__.py @@ -0,0 +1,2 @@ +from . import product_product +from . import product_template diff --git a/mrp_product_characterisation/models/product_product.py b/mrp_product_characterisation/models/product_product.py new file mode 100644 index 000000000..81ed3c353 --- /dev/null +++ b/mrp_product_characterisation/models/product_product.py @@ -0,0 +1,33 @@ +# Copyright (C) 2022 - Today: GRAP (http://www.grap.coop) +# @author: Quentin DUPONT (quentin.dupont@grap.coop) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ProductProduct(models.Model): + _inherit = "product.product" + + is_component = fields.Boolean( + compute="_compute_is_component_intermediate", + store=True, + help="Is component a product which has no BoM based on it +\ + is used in a BoM line", + ) + is_intermediate = fields.Boolean( + compute="_compute_is_component_intermediate", + store=True, + help="Is intermediate a product which has a BoM based on it +\ + is used in a BoM line", + ) + + @api.depends("bom_line_ids", "variant_bom_ids") + def _compute_is_component_intermediate(self): + for product in self: + if product.bom_line_ids: + # Difference is having a BoM with this product or not + product.is_intermediate = True if product.bom_count else False + product.is_component = not product.is_intermediate + else: + product.is_intermediate = False + product.is_component = False diff --git a/mrp_product_characterisation/models/product_template.py b/mrp_product_characterisation/models/product_template.py new file mode 100644 index 000000000..f8789322f --- /dev/null +++ b/mrp_product_characterisation/models/product_template.py @@ -0,0 +1,17 @@ +# Copyright (C) 2022 - Today: GRAP (http://www.grap.coop) +# @author: Quentin DUPONT (quentin.dupont@grap.coop) +# 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" + + is_component = fields.Boolean( + related="product_variant_ids.is_component", + ) + + is_intermediate = fields.Boolean( + related="product_variant_ids.is_intermediate", + ) diff --git a/mrp_product_characterisation/readme/CONTRIBUTORS.rst b/mrp_product_characterisation/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..9ed470628 --- /dev/null +++ b/mrp_product_characterisation/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Quentin Dupont (quentin.dupont@grap.coop) diff --git a/mrp_product_characterisation/readme/DESCRIPTION.rst b/mrp_product_characterisation/readme/DESCRIPTION.rst new file mode 100644 index 000000000..7dae7fbaa --- /dev/null +++ b/mrp_product_characterisation/readme/DESCRIPTION.rst @@ -0,0 +1,9 @@ +Adds characterisation "Intermediate Products" and adjust Components characterisation. + +Intermediate products : contained in a BoM AND manufactured (has a BoM) +Component products : contained in a BoM AND NOT manufactured (has no BoM) + +For example in bakeries, leavening is a intermediate product, and buckwheat flour +a component product. + +.. figure:: ../static/description/intermediate_product.png diff --git a/mrp_product_characterisation/static/description/index.html b/mrp_product_characterisation/static/description/index.html new file mode 100644 index 000000000..7c936847e --- /dev/null +++ b/mrp_product_characterisation/static/description/index.html @@ -0,0 +1,428 @@ + + + + + + +MRP Product Characterisation + + + +
+

MRP Product Characterisation

+ + +

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

+

Adds characterisation “Intermediate Products” and adjust Components characterisation.

+

Intermediate products : contained in a BoM AND manufactured (has a BoM) +Component products : contained in a BoM AND NOT manufactured (has no BoM)

+

For example in bakeries, leavening is a intermediate product, and buckwheat flour +a component product.

+
+https://raw.githubusercontent.com/OCA/manufacture/16.0/mrp_product_characterisation/static/description/intermediate_product.png +
+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • GRAP
  • +
+
+
+

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

+

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

+
+
+
+ + diff --git a/mrp_product_characterisation/static/description/intermediate_product.png b/mrp_product_characterisation/static/description/intermediate_product.png new file mode 100644 index 0000000000000000000000000000000000000000..2c855a661ba005831f870cb537aaa0dd2fa62471 GIT binary patch literal 48991 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 literal 0 HcmV?d00001 diff --git a/mrp_product_characterisation/tests/__init__.py b/mrp_product_characterisation/tests/__init__.py new file mode 100644 index 000000000..626580ed4 --- /dev/null +++ b/mrp_product_characterisation/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product diff --git a/mrp_product_characterisation/tests/test_product.py b/mrp_product_characterisation/tests/test_product.py new file mode 100644 index 000000000..d83ac1962 --- /dev/null +++ b/mrp_product_characterisation/tests/test_product.py @@ -0,0 +1,39 @@ +# Copyright (C) 2022 - Today: GRAP (http://www.grap.coop) +# @author: Quentin DUPONT (quentin.dupont@grap.coop) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests.common import TransactionCase + + +class TestProductProduct(TransactionCase): + def setUp(self): + super(TestProductProduct, self).setUp() + self.mrp_bom = self.env["mrp.bom"] + self.product_product_screw = self.env.ref( + "mrp.product_product_computer_desk_screw" + ) + + def test_01_change_from_component_to_intermediate(self): + self.assertEqual( + self.product_product_screw.is_component, + True, + ) + self.assertEqual( + self.product_product_screw.is_intermediate, + False, + ) + self.mrp_bom.create( + { + "product_id": self.product_product_screw.id, + "product_tmpl_id": self.product_product_screw.product_tmpl_id.id, + } + ) + self.product_product_screw._compute_is_component_intermediate() + self.assertEqual( + self.product_product_screw.is_component, + False, + ) + self.assertEqual( + self.product_product_screw.is_intermediate, + True, + ) diff --git a/mrp_product_characterisation/views/view_product_product.xml b/mrp_product_characterisation/views/view_product_product.xml new file mode 100644 index 000000000..6cce5f5ce --- /dev/null +++ b/mrp_product_characterisation/views/view_product_product.xml @@ -0,0 +1,33 @@ + + + + + + product.product + + + + + + + + + + 1 + + + + + diff --git a/mrp_product_characterisation/views/view_product_template.xml b/mrp_product_characterisation/views/view_product_template.xml new file mode 100644 index 000000000..c22aca164 --- /dev/null +++ b/mrp_product_characterisation/views/view_product_template.xml @@ -0,0 +1,46 @@ + + + + + + product.template + + + + + + + + + + + + + product.template + + + + + + + + + + 1 + + + + + diff --git a/setup/mrp_product_characterisation/odoo/addons/mrp_product_characterisation b/setup/mrp_product_characterisation/odoo/addons/mrp_product_characterisation new file mode 120000 index 000000000..cafe77dac --- /dev/null +++ b/setup/mrp_product_characterisation/odoo/addons/mrp_product_characterisation @@ -0,0 +1 @@ +../../../../mrp_product_characterisation \ No newline at end of file diff --git a/setup/mrp_product_characterisation/setup.py b/setup/mrp_product_characterisation/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/mrp_product_characterisation/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)