Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][MIG] mrp_bom_attribute_match #933

Open
wants to merge 19 commits into
base: 16.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
7402c58
[14.0][ADD] mrp_bom_attribute_match
ilyasProgrammer Jun 17, 2022
77bc876
Added translation using Weblate (Croatian)
badbole Aug 22, 2022
37a187b
Translated using Weblate (Croatian)
badbole Aug 22, 2022
03e7221
Translated using Weblate (Italian)
francesco-ooops Aug 22, 2022
6b0c735
[14.0][FIX] bom_attribute_match: BOM unit of measure should match uom…
ilyasProgrammer Aug 30, 2022
64d32f7
[MIG] mrp_bom_attribute_match: Migration to 15.0
ivantodorovich Oct 25, 2022
aa70c60
[FIX] mrp_bom_attribute_match: properly translate strings
ivantodorovich Oct 25, 2022
923f818
[IMP] mrp_bom_attribute_match: assert exception messages
ivantodorovich Oct 25, 2022
c4f3a77
[FIX] mrp_bom_attribute_match: write products recordset
ivantodorovich Oct 25, 2022
50f3706
[IMP] mrp_bom_attribute_match: make private methods, private
ivantodorovich Oct 25, 2022
f5f5b6c
[IMP] mrp_bom_attribute_match: Drop the web_field_domain dependency.
ivantodorovich Oct 27, 2022
4f1f200
[IMP] mrp_bom_attribute_match: use constraints and computed fields
ivantodorovich Oct 27, 2022
3bdf729
[IMP] mrp_bom_attribute_match: drop the 'account' dependency
ivantodorovich Oct 31, 2022
b65569e
[UPD] Update mrp_bom_attribute_match.pot
Dec 23, 2022
ccfc7e3
[UPD] README.rst
OCA-git-bot Dec 23, 2022
d13f992
Translated using Weblate (Italian)
mymage Dec 26, 2022
08aa533
Translated using Weblate (Italian)
mymage Jan 1, 2023
3d199d9
[IMP] mrp_bom_attribute_match: pre-commit stuff
mymage Jan 3, 2023
5ee00e3
[MIG] mrp_bom_attribute_match: Migration to 16.0
mymage Jan 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 144 additions & 0 deletions mrp_bom_attribute_match/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
===================
BOM Attribute Match
===================

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

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

This module addresses the BoM case where the product to manufacture has one attribute with tens or hundreds of values (usually attribute "color", eg: "Configurable Desk" can be produced in 900 different colors).

Creating a dynamic BoM currently requires adding one BoM line for each attribute value to match component variant with attribute value (eg: component "Desk board (Green)" to be applied to variant "Green").

This has 3 downsides:

- BoM lines proliferation (more error prone)

- Difficult to update in case a new attribute value (new color paint) is added

- Difficult to update in case base component changes.


This module allows to use a product template as component in BoM lines, automatically matching component variant to use in MO line with the attribute value selected for manufacture.

Eg: Product template "Desk Board" is added to BoM line for product "Configurable Desk"; match is made on attribute "Color". In MO, if product to manufacture is "Configurable Desk (Steel, Pink)", MO line will have component "Desk Board (Pink)".

Using the same BoM, if product to manufacture is "Configurable Desk (Steel, Yellow)", MO line will have component "Desk Board (Yellow)".


The flow is valid also if the Component (Product Template) has more than one attribute matching the product to manufacture; in this case, on MO line the component variant will be the one matching multiple attribute values for the product to manufacture.


Various checks are in place to make sure this flow is not disrupted:

- user cannot add a product in field "Component (Product Template)" which:

does not have matching attributes with product to manufacture

has a different variant-generating attribute than the product to manufacture

- Adding a new variant-generating attribute to a product used as "Component (Product Template)" raises an error if the attribute is not included in all the products to manufacture where component is referenced.

- Removing an attribute used for BoM attribute matching from product to manufacture raises an error.

- On a BoM line with Component (Product Template) set, an attribute value of attributes referenced in "Match on attribute" field cannot be used in field "Apply to variant".

- If attribute value for matching attribute in manufactured product is not present in component (product template), the BoM line is skipped in MO.

**Table of contents**

.. contents::
:local:

Usage
=====

Using this module you can have dynamic components of a BOM.
It will allow you to have only 1 line in the BOM if you have hundreds of attribute
values for manufacturing product and hundreds of attributes values of component (material).

How to use

#. Create a product to produce e.g. Desk.
#. Set 1 attribute (e.g. Color). And select possible values for it.
#. Create a component product (material) e.g. Plastic.
#. Set 1 attribute (Color). And select possible values for it.
#. Create a BOM.
#. Select a manufacturing product Desk.
#. Add a BOM line. Select Component (product template) Plastic.
#. You will see Color attribute appeared in the Apply On Attribute field.
#. Save the BOM.
#. Create Manufacturing Order. Select Desk with e.g. Red color to produce and BOM you created.
#. You will see in the component list Plastic added with corresponding (red) color.

Consider, that to use this feature component must have only 1 attribute.
And a values of this attribute of a manufacturing product should be available for a component.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/manufacture/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 <https://github.com/OCA/manufacture/issues/new?body=module:%20mrp_bom_attribute_match%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

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

Credits
=======

Authors
~~~~~~~

* Ilyas
* Ooops

Contributors
~~~~~~~~~~~~

* Ooops404 <https://ooops404.com>

* Ilyas

* `Camptocamp <https://www.camptocamp.com>`_

* Iván Todorovich <ivan.todorovich@camptocamp.com>

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 <https://github.com/OCA/manufacture/tree/16.0/mrp_bom_attribute_match>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions mrp_bom_attribute_match/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
13 changes: 13 additions & 0 deletions mrp_bom_attribute_match/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "BOM Attribute Match",
"version": "16.0.1.0.0",
"category": "Manufacturing",
"author": "Ilyas, Ooops, Odoo Community Association (OCA)",
"summary": "Dynamic BOM component based on product attribute",
"depends": ["mrp"],
"license": "AGPL-3",
"website": "https://github.com/OCA/manufacture",
"data": [
"views/mrp_bom_views.xml",
],
}
148 changes: 148 additions & 0 deletions mrp_bom_attribute_match/i18n/hr.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_bom_attribute_match
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-08-22 14:07+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>\n"
"Language-Team: none\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.3.2\n"

#. module: mrp_bom_attribute_match
#: model:ir.model,name:mrp_bom_attribute_match.model_mrp_bom
msgid "Bill of Material"
msgstr "Sastavnica"

#. module: mrp_bom_attribute_match
#: model:ir.model,name:mrp_bom_attribute_match.model_mrp_bom_line
msgid "Bill of Material Line"
msgstr "Stavka sastavnice"

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom_line__product_id
msgid "Component"
msgstr "Komponenta"

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom_line__component_template_id
msgid "Component (product template)"
msgstr "Komponenta (predložak)"

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom__display_name
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom_line__display_name
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_production__display_name
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_product_template__display_name
msgid "Display Name"
msgstr "Naziv"

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom__id
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom_line__id
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_production__id
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_product_template__id
msgid "ID"
msgstr "ID"

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom____last_update
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom_line____last_update
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_production____last_update
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_product_template____last_update
msgid "Last Modified on"
msgstr "Zadnje modificirano"

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom_line__match_on_attribute_ids
msgid "Match on Attributes"
msgstr "Odgovarajući atributi"

#. module: mrp_bom_attribute_match
#: code:addons/mrp_bom_attribute_match/models/mrp_bom.py:0
#, python-format
msgid ""
"No match on attribute has been detected for Component (Product Template) %s"
msgstr "Nije pronađen odgovarajući atribut za Komponentu (predložak) %s"

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom_line__product_backup_id
msgid "Product Backup"
msgstr "Pričuvni proizvod"

#. module: mrp_bom_attribute_match
#: model:ir.model,name:mrp_bom_attribute_match.model_product_template
msgid "Product Template"
msgstr "Predložak proizvoda"

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom_line__product_uom_id_domain
msgid "Product Uom Id Domain"
msgstr ""

#. module: mrp_bom_attribute_match
#: model:ir.model,name:mrp_bom_attribute_match.model_mrp_production
msgid "Production Order"
msgstr "Nalog za proizvodnju"

#. module: mrp_bom_attribute_match
#: code:addons/mrp_bom_attribute_match/models/mrp_bom.py:0
#, python-format
msgid ""
"Recursion error! A product with a Bill of Material should not have itself "
"in its BoM or child BoMs!"
msgstr ""
"Greška rekurzije! Proizvodsa Sastavnicom, nesmije imati sebe u Sastavnici "
"ili podređenim sastavnicama!"

#. module: mrp_bom_attribute_match
#: code:addons/mrp_bom_attribute_match/models/mrp_bom.py:0
#, python-format
msgid ""
"Some attributes of the dynamic component are not included into production "
"product attributes."
msgstr ""
"Neki atributi dinamičke komponente nisu uključeni u atributima glavnog "
"proizvoda."

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,help:mrp_bom_attribute_match.field_mrp_bom_line__product_backup_id
msgid "Technical field to store previous value of product_id"
msgstr "Tehničko polje za pohranu prethodne vrijednosti polja product_id"

#. module: mrp_bom_attribute_match
#: code:addons/mrp_bom_attribute_match/models/product.py:0
#, python-format
msgid ""
"The attributes you're trying to remove is used in BoM as a match with "
"Component (Product Template). To remove these attributes, first remove the "
"BOM line with the matching component.\n"
"Attributes: %s\n"
"BoM: %s"
msgstr ""

#. module: mrp_bom_attribute_match
#: code:addons/mrp_bom_attribute_match/models/product.py:0
#, python-format
msgid ""
"This product template is used as a component in the BOMs for %s and "
"attribute(s) %s is not present in all such product(s), and this would break "
"the BOM behavior."
msgstr ""

#. module: mrp_bom_attribute_match
#: code:addons/mrp_bom_attribute_match/models/mrp_bom.py:0
#, python-format
msgid ""
"You cannot use an attribute value for attribute %s in the field “Apply on "
"Variants” as it’s the same attribute used in field “Match on "
"Attribute”related to the component %s."
msgstr ""
Loading
Loading