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

[17.0][MIG] mrp_bom_attribute_match #1371

Open
wants to merge 38 commits into
base: 17.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7d3c446
[14.0][ADD] mrp_bom_attribute_match
ilyasProgrammer Jun 17, 2022
0b7a8c5
Added translation using Weblate (Croatian)
badbole Aug 22, 2022
d46ae74
Translated using Weblate (Croatian)
badbole Aug 22, 2022
88cb6dd
Translated using Weblate (Italian)
francesco-ooops Aug 22, 2022
9188e92
[14.0][FIX] bom_attribute_match: BOM unit of measure should match uom…
ilyasProgrammer Aug 30, 2022
1b0314b
[MIG] mrp_bom_attribute_match: Migration to 15.0
ivantodorovich Oct 25, 2022
93e2639
[FIX] mrp_bom_attribute_match: properly translate strings
ivantodorovich Oct 25, 2022
281d6d9
[IMP] mrp_bom_attribute_match: assert exception messages
ivantodorovich Oct 25, 2022
57c7844
[FIX] mrp_bom_attribute_match: write products recordset
ivantodorovich Oct 25, 2022
b77e823
[IMP] mrp_bom_attribute_match: make private methods, private
ivantodorovich Oct 25, 2022
a1a30b1
[IMP] mrp_bom_attribute_match: Drop the web_field_domain dependency.
ivantodorovich Oct 27, 2022
85862c7
[IMP] mrp_bom_attribute_match: use constraints and computed fields
ivantodorovich Oct 27, 2022
c4b5ae4
[IMP] mrp_bom_attribute_match: drop the 'account' dependency
ivantodorovich Oct 31, 2022
9ba3b7f
[UPD] Update mrp_bom_attribute_match.pot
Dec 23, 2022
035a429
[UPD] README.rst
OCA-git-bot Dec 23, 2022
33ba366
Translated using Weblate (Italian)
mymage Dec 26, 2022
a823299
Translated using Weblate (Italian)
mymage Jan 1, 2023
814dc87
[ADD] mrp_account_bom_attribute_match
ivantodorovich Jan 31, 2023
bfb4f4d
[FIX] mrp_bom_attribute_match: structure and cost report
ivantodorovich Jan 31, 2023
37d43df
[IMP] mrp_bom_attribute_match: improve setUpClass
ivantodorovich Jan 31, 2023
bf73b5f
[IMP] mrp_bom_attribute_match: increase test strenght: add another co…
ivantodorovich Jan 31, 2023
651be88
[UPD] Update mrp_bom_attribute_match.pot
Feb 14, 2023
121a3ca
mrp_bom_attribute_match 15.0.1.1.0
OCA-git-bot Feb 14, 2023
47e123f
Update translation files
weblate Feb 14, 2023
658a659
Translated using Weblate (Italian)
francesco-ooops Feb 14, 2023
b7a5b75
Translated using Weblate (Italian)
francesco-ooops Mar 20, 2023
ff404b0
Translated using Weblate (Italian)
francesco-ooops May 15, 2023
c673e0d
Added translation using Weblate (Spanish)
Ivorra78 Jul 23, 2023
1614e5d
Translated using Weblate (Spanish)
Ivorra78 Jul 23, 2023
231edda
[UPD] README.rst
OCA-git-bot Sep 3, 2023
332e83c
[FIX] mrp_bom_attribute_match: setup 'test common' is changed because…
ValentinVinagre Sep 4, 2023
10240cf
mrp_bom_attribute_match 15.0.1.1.1
OCA-git-bot Sep 5, 2023
2c2151f
[UPD] README.rst
OCA-git-bot Sep 5, 2023
aee3049
Translated using Weblate (Italian)
francesco-ooops Sep 26, 2023
33150d0
Translated using Weblate (Italian)
mymage Sep 27, 2023
25aad9f
Update translation files
weblate Oct 9, 2023
e8ebb9c
[IMP] mrp_bom_attribute_match: pre-commit stuff
ferran-S73 Oct 22, 2024
f4c7e9c
[17.0][MIG] mrp_bom_attribute_match
ferran-S73 Oct 22, 2024
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
169 changes: 169 additions & 0 deletions mrp_bom_attribute_match/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
===================
BOM Attribute Match
===================

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

.. |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/17.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-17-0/manufacture-17-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=17.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

1. Create a product to produce e.g. Desk.
2. Set 1 attribute (e.g. Color). And select possible values for it.
3. Create a component product (material) e.g. Plastic.
4. Set 1 attribute (Color). And select possible values for it.
5. Create a BOM.
6. Select a manufacturing product Desk.
7. Add a BOM line. Select Component (product template) Plastic.
8. You will see Color attribute appeared in the Apply On Attribute
field.
9. Save the BOM.
10. Create Manufacturing Order. Select Desk with e.g. Red color to
produce and BOM you created.
11. 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:%2017.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/17.0/mrp_bom_attribute_match>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions mrp_bom_attribute_match/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import reports
14 changes: 14 additions & 0 deletions mrp_bom_attribute_match/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "BOM Attribute Match",
"version": "17.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",
],
"installable": True,
}
144 changes: 144 additions & 0 deletions mrp_bom_attribute_match/i18n/es.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_bom_attribute_match
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-07-23 08:10+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"

#. module: mrp_bom_attribute_match
#: model:ir.model,name:mrp_bom_attribute_match.model_report_mrp_report_bom_structure
msgid "BOM Structure Report"
msgstr "Informe sobre la estructura de la lista de materiales"

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

#. module: mrp_bom_attribute_match
#: model:ir.model,name:mrp_bom_attribute_match.model_mrp_bom_line
msgid "Bill of Material Line"
msgstr "Línea de la factura de materiales"

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

#. 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 "Componente (plantilla de producto)"

#. 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 "Coincidencia en atributos"

#. 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 ""
"No se ha detectado ninguna coincidencia en el atributo para Componente "
"(Plantilla de producto) %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 "Copia de seguridad del producto"

#. module: mrp_bom_attribute_match
#: model:ir.model,name:mrp_bom_attribute_match.model_product_template
msgid "Product Template"
msgstr "Plantilla de Producto"

#. module: mrp_bom_attribute_match
#: model:ir.model.fields,field_description:mrp_bom_attribute_match.field_mrp_bom_line__product_uom_category_id
msgid "Product Uom Category"
msgstr "Categorías de UdM de productos"

#. module: mrp_bom_attribute_match
#: model:ir.model,name:mrp_bom_attribute_match.model_mrp_production
msgid "Production Order"
msgstr "Orden de Producción"

#. 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 ""
"¡Error de recursión! ¡Un producto con una lista de materiales no debe "
"incluirse a sí mismo en su lista de materiales ni en las listas de "
"materiales secundarias!"

#. 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 ""
"Algunos atributos del componente dinámico no se incluyen en los atributos "
"del producto de producción."

#. 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 "Campo técnico para almacenar el valor anterior de id_producto"

#. 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 are used in the BoM as a match with "
"Component (Product Template). To remove these attributes, first remove the "
"BOM line with the matching component.\n"
"Attributes: %(attributes)s\n"
"BoM: %(bom)s"
msgstr ""
"Los atributos que intenta eliminar se utilizan en la lista de materiales "
"como coincidencia con Componente (Plantilla de producto). Para eliminar "
"estos atributos, elimine primero la línea de la lista de materiales con el "
"componente coincidente.\n"
"Atributos: %(attributes)s\n"
"Lista de materiales: %(bom)s"

#. 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 %(bom)s and "
"attribute(s) %(attributes)s is not present in all such product(s), and this "
"would break the BOM behavior."
msgstr ""
"Esta plantilla de producto se utiliza como componente en las listas de "
"materiales para %(bom)s y atributos %(attributes)s no está presente en todos "
"esos productos, y esto rompería el comportamiento de la lista de materiales."

#. 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) %(attributes)s in the "
"field “Apply on Variants” as it's the same attribute used in the field "
"“Match on Attribute” related to the component %(component)s."
msgstr ""
"No se puede utilizar un valor de atributo para atributo(s) %(attributes)s en "
"el campo \"Aplicar sobre variantes\" ya que es el mismo atributo utilizado "
"en el campo \"Coincidir sobre atributo\" relacionado con el componente "
"%(component)s."
Loading
Loading