Merge PR #1349 into 17.0

Signed-off-by pedrobaeza
This commit is contained in:
OCA-git-bot
2024-10-28 07:23:04 +00:00
18 changed files with 1105 additions and 0 deletions

View File

@@ -0,0 +1,103 @@
=========================
MRP Mass Production Order
=========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:b8163fbebaf9ee80087e0a25c01cbcf016c2a556f4f813565076fac36d838311
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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_mass_production_order
: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_mass_production_order
: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 allows to create multiple manufacturing orders through a
wizard. The wizard have the possiblity to put all manufacturing orders
in state done or confirmed.
**Table of contents**
.. contents::
:local:
Usage
=====
To use this module, you need to:
1. Go to Manufacture > Operations > Massive MRP Production Orders.
2. Set Picking Type Operation and if you would change the finished
products location.
3. Check the produce all checkbox if the productions are already
produced, otherwise the production will be confirmed
4. Set the production tags if you want
5. Select the products that will be produced with the quantity
6. The manufacturing order will be created
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_mass_production_order%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
-------
* Antoni Marroig
* APSL-Nagarro
Contributors
------------
- [APSL-Nagarro](https://apsl.tech):
- Antoni Marroig <amarroig@apsl.net>
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-peluko00| image:: https://github.com/peluko00.png?size=40px
:target: https://github.com/peluko00
:alt: peluko00
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-peluko00|
This module is part of the `OCA/manufacture <https://github.com/OCA/manufacture/tree/17.0/mrp_mass_production_order>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import wizards

View File

@@ -0,0 +1,18 @@
# Copyright 2024 Antoni Marroig(APSL-Nagarro)<amarroig@apsl.net>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "MRP Mass Production Order",
"summary": "Create multiple manufacturing orders in one step",
"version": "17.0.1.0.0",
"category": "Manufacturing",
"website": "https://github.com/OCA/manufacture",
"author": "Antoni Marroig, APSL-Nagarro, Odoo Community Association (OCA)",
"maintainers": ["peluko00"],
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": [
"mrp_tag",
],
"data": ["wizards/mrp_mass_order_wizard.xml", "security/ir.model.access.csv"],
}

View File

@@ -0,0 +1,194 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_mass_production_order
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-19 06:44+0000\n"
"PO-Revision-Date: 2024-09-19 06:44+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_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__bom_id
msgid "Bill of Material"
msgstr "Llistat de materials"
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__bom_id
msgid ""
"Bills of Materials, also called recipes, are used to autocomplete components"
" and work order instructions."
msgstr ""
"Les llistes de materials, també conegudes quan com a recetes de producció, "
"s'utilizen per autocompletar els components i les instruccions de les ordres"
" de treball."
#. module: mrp_mass_production_order
#: model_terms:ir.ui.view,arch_db:mrp_mass_production_order.wizard_mass_mrp_production_order
msgid "Cancel"
msgstr "Cancelar"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_uom_category_id
msgid "Category"
msgstr "Categoria"
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_wizard__produce_all
msgid ""
"Check it if all orders have been produced otherwise they will be confirmed"
msgstr ""
"Confirma si totes les comandes s'han produït, en cas contrari, es "
"confirmaran"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__company_id
msgid "Company"
msgstr "Companyia"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__location_src_id
msgid "Components Location"
msgstr "Ubicació dels components"
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_uom_category_id
msgid ""
"Conversion between Units of Measure can only occur if they belong to the "
"same category. The conversion will be made based on the ratios."
msgstr ""
"La conversió entre les unitats de mesura només és possible si pertanyen a la"
" mateixa categoria. La conversió es basarà en les ràtios establertes."
#. module: mrp_mass_production_order
#: model_terms:ir.ui.view,arch_db:mrp_mass_production_order.wizard_mass_mrp_production_order
msgid "Create"
msgstr "Crear"
#. module: mrp_mass_production_order
#: model_terms:ir.ui.view,arch_db:mrp_mass_production_order.wizard_mass_mrp_production_order
msgid "Create MRP Prodcution Orders"
msgstr "Crear Múltiples Ordres de Fabricació"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__create_uid
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__create_uid
msgid "Created by"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__create_date
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__create_date
msgid "Created on"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__display_name
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__display_name
msgid "Display Name"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__location_dest_id
msgid "Finished Products Location"
msgstr "Ubicació dels productes finalitzats"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__id
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__id
msgid "ID"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__write_uid
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__write_uid
msgid "Last Updated by"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__write_date
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__write_date
msgid "Last Updated on"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_wizard__location_src_id
msgid "Location where the system will look for components."
msgstr "Ubicació on el sistema buscarà els components."
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_wizard__location_dest_id
msgid "Location where the system will stock the finished products."
msgstr "Ubicació on el sistema emmagatzemarà els productes finalitzats."
#. module: mrp_mass_production_order
#: model_terms:ir.ui.view,arch_db:mrp_mass_production_order.wizard_mass_mrp_production_order
msgid "MRP Production Orders"
msgstr "Ordres de Fabricació"
#. module: mrp_mass_production_order
#. odoo-python
#: code:addons/mrp_mass_production_order/wizards/mrp_mass_order_wizard.py:0
#, python-format
msgid "MRP Production Orders Created"
msgstr "Ordres de fabricació creats"
#. module: mrp_mass_production_order
#: model:ir.model,name:mrp_mass_production_order.model_mrp_mass_production_order_entry_wizard
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__mrp_production_order_entries
msgid "MRP production order entries"
msgstr "Registres de les ordres de fabricació"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__mrp_production_order_entry_id
msgid "MRP production order entry"
msgstr "Registre de una ordre de fabricació"
#. module: mrp_mass_production_order
#: model:ir.actions.act_window,name:mrp_mass_production_order.wizard_mass_mrp_production_order_action
#: model:ir.ui.menu,name:mrp_mass_production_order.wizard_mass_mrp_production_order_menu_action
msgid "Massive MRP Production Orders"
msgstr "Producció massiva d'ordres de fabricació"
#. module: mrp_mass_production_order
#: model:ir.model,name:mrp_mass_production_order.model_mrp_mass_production_order_wizard
msgid "Multiple MRP production order"
msgstr "Múltiples ordres de fabricació"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__picking_type_id
msgid "Operation Type"
msgstr "Tipus d'operació"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__produce_all
msgid "Produce All"
msgstr "Produir Tot"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_id
msgid "Product"
msgstr "Producte"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_uom_id
msgid "Product Unit of Measure"
msgstr "Unitat de mesura del producte"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_qty
msgid "Quantity"
msgstr "Quantitat"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__tag_ids
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__tag_ids
msgid "Tags"
msgstr "Etiquetes"

View File

@@ -0,0 +1,194 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_mass_production_order
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-19 06:45+0000\n"
"PO-Revision-Date: 2024-09-19 06:45+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_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__bom_id
msgid "Bill of Material"
msgstr "Lista de materiales"
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__bom_id
msgid ""
"Bills of Materials, also called recipes, are used to autocomplete components"
" and work order instructions."
msgstr ""
"Las listas de materiales, también conocidas como recetas de producción, se "
"utilizan para autocompletar los componentes y las instrucciones de las "
"órdenes de trabajo."
#. module: mrp_mass_production_order
#: model_terms:ir.ui.view,arch_db:mrp_mass_production_order.wizard_mass_mrp_production_order
msgid "Cancel"
msgstr "Cancelar"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_uom_category_id
msgid "Category"
msgstr "Categoria"
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_wizard__produce_all
msgid ""
"Check it if all orders have been produced otherwise they will be confirmed"
msgstr ""
"Confirma si se han producido todos los pedidos, de lo contrario se "
"confirmarán."
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__company_id
msgid "Company"
msgstr "Compañia"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__location_src_id
msgid "Components Location"
msgstr "Ubicació de los componentes"
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_uom_category_id
msgid ""
"Conversion between Units of Measure can only occur if they belong to the "
"same category. The conversion will be made based on the ratios."
msgstr ""
"La conversión entre las unidades de medidas sólo puede ocurrir si pertenecen"
" a la misma categoría. La conversión se basará en los índices establecidos."
#. module: mrp_mass_production_order
#: model_terms:ir.ui.view,arch_db:mrp_mass_production_order.wizard_mass_mrp_production_order
msgid "Create"
msgstr "Crear"
#. module: mrp_mass_production_order
#: model_terms:ir.ui.view,arch_db:mrp_mass_production_order.wizard_mass_mrp_production_order
msgid "Create MRP Prodcution Orders"
msgstr "Crear Múltiples Órdenes de Fabricación"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__create_uid
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__create_uid
msgid "Created by"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__create_date
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__create_date
msgid "Created on"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__display_name
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__display_name
msgid "Display Name"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__location_dest_id
msgid "Finished Products Location"
msgstr "Ubicación de los productos finalizados"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__id
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__id
msgid "ID"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__write_uid
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__write_uid
msgid "Last Updated by"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__write_date
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__write_date
msgid "Last Updated on"
msgstr ""
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_wizard__location_src_id
msgid "Location where the system will look for components."
msgstr "Ubicación donde el sistema buscará los componentes."
#. module: mrp_mass_production_order
#: model:ir.model.fields,help:mrp_mass_production_order.field_mrp_mass_production_order_wizard__location_dest_id
msgid "Location where the system will stock the finished products."
msgstr "Ubicación donde el sistema almacenará los productos terminados."
#. module: mrp_mass_production_order
#: model_terms:ir.ui.view,arch_db:mrp_mass_production_order.wizard_mass_mrp_production_order
msgid "MRP Production Orders"
msgstr "Órdenes de Fabricación"
#. module: mrp_mass_production_order
#. odoo-python
#: code:addons/mrp_mass_production_order/wizards/mrp_mass_order_wizard.py:0
#, python-format
msgid "MRP Production Orders Created"
msgstr "Órdenes de fabricación creados"
#. module: mrp_mass_production_order
#: model:ir.model,name:mrp_mass_production_order.model_mrp_mass_production_order_entry_wizard
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__mrp_production_order_entries
msgid "MRP production order entries"
msgstr "Registros de órdenes de fabricación"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__mrp_production_order_entry_id
msgid "MRP production order entry"
msgstr "Registro de una orden de fabricación"
#. module: mrp_mass_production_order
#: model:ir.actions.act_window,name:mrp_mass_production_order.wizard_mass_mrp_production_order_action
#: model:ir.ui.menu,name:mrp_mass_production_order.wizard_mass_mrp_production_order_menu_action
msgid "Massive MRP Production Orders"
msgstr "Producción masiva de órdenes de fabricación"
#. module: mrp_mass_production_order
#: model:ir.model,name:mrp_mass_production_order.model_mrp_mass_production_order_wizard
msgid "Multiple MRP production order"
msgstr "Múltiples órdenes de fabricación"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__picking_type_id
msgid "Operation Type"
msgstr "Tipo de operación"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__produce_all
msgid "Produce All"
msgstr "Producir Todo"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_id
msgid "Product"
msgstr "Producto"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_uom_id
msgid "Product Unit of Measure"
msgstr "Unidad de medida del producto"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__product_qty
msgid "Quantity"
msgstr "Cantidad"
#. module: mrp_mass_production_order
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_entry_wizard__tag_ids
#: model:ir.model.fields,field_description:mrp_mass_production_order.field_mrp_mass_production_order_wizard__tag_ids
msgid "Tags"
msgstr "Etiquetas"

View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -0,0 +1,2 @@
- \[APSL-Nagarro\](<https://apsl.tech>):
- Antoni Marroig \<<amarroig@apsl.net>\>

View File

@@ -0,0 +1 @@
This module allows to create multiple manufacturing orders through a wizard. The wizard have the possiblity to put all manufacturing orders in state done or confirmed.

View File

@@ -0,0 +1,8 @@
To use this module, you need to:
1. Go to Manufacture \> Operations \> Massive MRP Production Orders.
2. Set Picking Type Operation and if you would change the finished products location.
3. Check the produce all checkbox if the productions are already produced, otherwise the production will be confirmed
4. Set the production tags if you want
4. Select the products that will be produced with the quantity
5. The manufacturing order will be created

View File

@@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
mrp_mass_production_order_wizard,mrp.mass.production.order.wizard,model_mrp_mass_production_order_wizard,mrp.group_mrp_user,1,1,1,1
mrp_mass_production_order_entry_wizard,mrp.mass.production.order.entry.wizard,model_mrp_mass_production_order_entry_wizard,mrp.group_mrp_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 mrp_mass_production_order_wizard mrp.mass.production.order.wizard model_mrp_mass_production_order_wizard mrp.group_mrp_user 1 1 1 1
3 mrp_mass_production_order_entry_wizard mrp.mass.production.order.entry.wizard model_mrp_mass_production_order_entry_wizard mrp.group_mrp_user 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -0,0 +1,124 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Module name</h2>
<p>This module was written to extend the functionality of ... to support ... and allow you to ...</p>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Installation</h2>
</div>
<div class="oe_span6">
<p class="oe_mt32">To install this module, you need to:
<ul>
<li>...</li>
</ul>
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.odoo.com/saas_master/demo?lang=en_US&module=crm">
<img src="crm_sc_01.png">
</a>
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Configuration</h2>
</div>
<div class="oe_span6">
<p class="oe_mt32">To configure this module, you need to:
<ul>
<li>...</li>
</ul>
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.odoo.com/saas_master/demo?lang=en_US&module=crm">
<img src="crm_sc_01.png">
</a>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Usage</h2>
</div>
<div class="oe_span6">
<p class="oe_mt32">To use this module, you need to:
<ul>
<li>...</li>
</ul>
</p>
<p class="oe_mt32">For further information, please visit:
<ul>
<li><a href="https://www.odoo.com/forum/help-1">https://www.odoo.com/forum/help-1</a></li>
</ul>
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.odoo.com/saas_master/demo?lang=en_US&module=crm">
<img src="crm_sc_01.png">
</a>
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Known issues / Roadmap</h2>
</div>
<div class="oe_span6">
<p class="oe_mt32">
<ul>
<li>...</li>
</ul>
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.odoo.com/saas_master/demo?lang=en_US&module=crm">
<img src="crm_sc_01.png">
</a>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row">
<div class="oe_span12">
<h2 class="oe_slogan">Credits</h2>
</div>
<div class="oe_span12">
<h3>Contributors</h3>
<ul>
<li>Firstname Lastname &lt;<a href="mailto:email.address@example.com">email.address@example.com</a>&gt;</li>
</ul>
</div>
<div class="oe_span12">
<h3>Maintainer</h3>
<p>
This module is maintained by the OCA.<br/>
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.<br/>
To contribute to this module, please visit <a href="http://odoo-community.org">http://odoo-community.org</a>.<br/>
<a href="http://odoo-community.org"><img class="oe_picture oe_centered" src="http://odoo-community.org/logo.png"></a>
</p>
</div>
</div>
</section>

View File

@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import test_mrp_mass_production_order

View File

@@ -0,0 +1,81 @@
# Copyright 2024 Antoni Marroig(APSL-Nagarro)<amarroig@apsl.net>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import Command
from odoo.tests.common import Form, TransactionCase
class TestMRPMassProductionOrder(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.product_delivery_01 = cls.env.ref("product.product_delivery_01")
cls.product_delivery_02 = cls.env.ref("product.product_delivery_02")
cls.tag = cls.env["mrp.tag"].create({"name": "Test"})
cls.bom = cls.env["mrp.bom"].create(
{
"product_tmpl_id": cls.product_delivery_01.product_tmpl_id.id,
"product_qty": 1.0,
"type": "normal",
"bom_line_ids": [
Command.create(
{
"product_id": cls.env.ref("product.product_order_01").id,
"product_qty": 2,
}
),
Command.create(
{
"product_id": cls.env.ref("product.product_product_3").id,
"product_qty": 2,
}
),
],
}
)
wizard_form = Form(
cls.env["mrp.mass.production.order.wizard"].with_context(
default_mrp_production_order_entries=[
Command.create(
{"product_id": cls.product_delivery_01.id, "product_qty": 2}
),
Command.create({"product_id": cls.product_delivery_02.id}),
],
default_tag_ids=[cls.tag.id],
),
"mrp_mass_production_order.wizard_mass_mrp_production_order",
)
wizard_form.save().action_create()
cls.mrp1, cls.mrp2 = cls.env["mrp.production"].search(
[
(
"product_id",
"in",
[cls.product_delivery_01.id, cls.product_delivery_02.id],
)
]
)
def test_wizard_mrp_mass_entries(self):
self.assertEqual(self.mrp1.bom_id, self.bom)
self.assertEqual(self.mrp1.product_uom_id, self.product_delivery_01.uom_id)
self.assertEqual(len(self.mrp2.bom_id), 0)
self.assertEqual(self.mrp2.product_qty, 1)
def test_wizard_mrp(self):
picking_type = self.env["stock.picking.type"].search(
[
("code", "=", "mrp_operation"),
],
limit=1,
)
self.assertEqual(self.mrp1.state and self.mrp2.state, "done")
self.assertEqual(self.mrp1.tag_ids and self.mrp2.tag_ids, self.tag)
self.assertEqual(self.mrp1.picking_type_id, picking_type)
self.assertEqual(
self.mrp1.location_src_id, picking_type.default_location_src_id
)
self.assertEqual(
self.mrp1.location_dest_id, picking_type.default_location_dest_id
)

View File

@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import mrp_mass_order_wizard

View File

@@ -0,0 +1,214 @@
# Copyright 2024 Antoni Marroig(APSL-Nagarro)<amarroig@apsl.net>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
class MassMrpProductionOrderEntryWizard(models.TransientModel):
_name = "mrp.mass.production.order.entry.wizard"
_description = "MRP production order entries"
product_id = fields.Many2one(
"product.product",
"Product",
domain="[('type', 'in', ['product', 'consu'])]",
required=True,
)
product_qty = fields.Float(
"Quantity", digits="Product Unit of Measure", required=True, default=1
)
product_uom_id = fields.Many2one(
"uom.uom",
"Product Unit of Measure",
required=True,
store=True,
readonly=False,
compute="_compute_uom_id",
precompute=True,
domain="[('category_id', '=', product_uom_category_id)]",
)
product_uom_category_id = fields.Many2one(related="product_id.uom_id.category_id")
mrp_production_order_entry_id = fields.Many2one(
"mrp.mass.production.order.wizard", "MRP production order entry"
)
bom_id = fields.Many2one(
"mrp.bom",
"Bill of Material",
domain="""[
'&',
'|',
('product_tmpl_id','=',product_id),
'&',
('product_id.product_tmpl_id.product_variant_ids','=',product_id),
('product_id','=',False),
('type', '=', 'normal')]""",
compute="_compute_bom_id",
precompute=True,
readonly=False,
store=True,
help="Bills of Materials, also called recipes, "
"are used to autocomplete components and work order instructions.",
)
tag_ids = fields.Many2many(
"mrp.tag",
compute="_compute_tag_ids",
precompute=True,
readonly=False,
store=True,
string="Tags",
)
@api.depends("bom_id", "product_id")
def _compute_uom_id(self):
for production in self:
if production.bom_id and production._origin.bom_id != production.bom_id:
production.product_uom_id = production.bom_id.product_uom_id
elif production.product_id:
production.product_uom_id = production.product_id.uom_id
else:
production.product_uom_id = False
@api.depends("product_id", "mrp_production_order_entry_id.picking_type_id")
def _compute_bom_id(self):
for mo in self:
if not mo.product_id and not mo.bom_id:
mo.bom_id = False
continue
bom = (
self.env["mrp.bom"]
.with_context(active_test=True)
._bom_find(
mo.product_id,
picking_type=mo.mrp_production_order_entry_id.picking_type_id,
company_id=mo.mrp_production_order_entry_id.company_id.id,
bom_type="normal",
)[mo.product_id]
)
mo.bom_id = bom.id or False
@api.depends("product_id")
def _compute_tag_ids(self):
for record in self:
record.tag_ids = record.mrp_production_order_entry_id.tag_ids
class MassMrpProductionOrderWizard(models.TransientModel):
_name = "mrp.mass.production.order.wizard"
_description = "Multiple MRP production order"
@api.model
def _get_default_picking_type_id(self):
return self.env["stock.picking.type"].search(
[
("code", "=", "mrp_operation"),
],
limit=1,
)
mrp_production_order_entries = fields.One2many(
"mrp.mass.production.order.entry.wizard",
"mrp_production_order_entry_id",
"MRP production order entries",
change_default=True,
)
location_src_id = fields.Many2one(
"stock.location",
"Components Location",
compute="_compute_locations",
store=True,
readonly=False,
required=True,
precompute=True,
domain="[('usage','=','internal')]",
help="Location where the system will look for components.",
)
location_dest_id = fields.Many2one(
"stock.location",
"Finished Products Location",
compute="_compute_locations",
readonly=False,
store=True,
required=True,
precompute=True,
domain="[('usage','=','internal')]",
help="Location where the system will stock the finished products.",
)
picking_type_id = fields.Many2one(
"stock.picking.type",
"Operation Type",
default=_get_default_picking_type_id,
precompute=True,
domain="[('code', '=', 'mrp_operation')]",
required=True,
)
company_id = fields.Many2one(
"res.company", "Company", default=lambda self: self.env.company, required=True
)
produce_all = fields.Boolean(
default=True,
help="Check it if all orders have been produced "
"otherwise they will be confirmed",
)
tag_ids = fields.Many2many(
"mrp.tag",
string="Tags",
)
@api.depends("picking_type_id")
def _compute_locations(self):
for production in self:
if (
not production.picking_type_id.default_location_src_id
or not production.picking_type_id.default_location_dest_id
):
company_id = (
production.company_id.id
if (
production.company_id
and production.company_id in self.env.companies
)
else self.env.company.id
)
fallback_loc = (
self.env["stock.warehouse"]
.search([("company_id", "=", company_id)], limit=1)
.lot_stock_id
)
production.location_src_id = (
production.picking_type_id.default_location_src_id.id or fallback_loc.id
)
production.location_dest_id = (
production.picking_type_id.default_location_dest_id.id
or fallback_loc.id
)
def action_create(self):
mrp_ids = []
for entry in self.mrp_production_order_entries:
mrp = self.env["mrp.production"].create(
{
"product_id": entry.product_id.id,
"product_qty": entry.product_qty,
"picking_type_id": self.picking_type_id.id,
"location_src_id": self.location_src_id.id,
"location_dest_id": self.location_dest_id.id,
"product_uom_id": entry.product_uom_id.id,
"bom_id": entry.bom_id.id,
"tag_ids": entry.tag_ids,
}
)
mrp.button_mark_done() if self.produce_all else mrp.action_confirm()
mrp_ids.append(mrp.id)
return {
"name": _("MRP Production Orders Created"),
"type": "ir.actions.act_window",
"view_mode": "tree,form",
"res_model": "mrp.production",
"domain": [("id", "in", mrp_ids)],
}
@api.onchange("tag_ids")
def onchange_tag_ids(self):
for entry in self.mrp_production_order_entries:
entry.tag_ids = self.tag_ids

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- # Copyright 2024 Antoni Marroig(APSL-Nagarro)<amarroig@apsl.net>
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="wizard_mass_mrp_production_order" model="ir.ui.view">
<field name="name">Mass MRP Production Order</field>
<field name="model">mrp.mass.production.order.wizard</field>
<field name="arch" type="xml">
<form string="Create MRP Prodcution Orders">
<group>
<field name="picking_type_id" />
<field name="location_src_id" />
<field name="location_dest_id" />
<field name="produce_all" />
<field
name="tag_ids"
widget="many2many_tags"
options="{'color_field': 'color', 'no_create_edit': True}"
/>
</group>
<notebook>
<page string="MRP Production Orders">
<field name="mrp_production_order_entries">
<tree editable="bottom">
<field name="product_id" />
<field name="product_qty" />
<field name="bom_id" />
<field
name="mrp_production_order_entry_id"
column_invisible="1"
/>
<field
name="product_uom_category_id"
column_invisible="1"
/>
<field name="product_uom_id" />
<field
name="tag_ids"
widget="many2many_tags"
options="{'color_field': 'color', 'no_create_edit': True}"
/>
</tree>
</field>
</page>
</notebook>
<footer>
<button
name="action_create"
type="object"
string="Create"
class="oe_highlight"
/>
<button special="cancel" string="Cancel" />
</footer>
</form>
</field>
</record>
<record id="wizard_mass_mrp_production_order_action" model="ir.actions.act_window">
<field name="name">Massive MRP Production Orders</field>
<field name="res_model">mrp.mass.production.order.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<menuitem
id="wizard_mass_mrp_production_order_menu_action"
action="wizard_mass_mrp_production_order_action"
parent="mrp.menu_mrp_manufacturing"
/>
</odoo>