Merge PR #1274 into 17.0

Signed-off-by LoisRForgeFlow
This commit is contained in:
OCA-git-bot
2024-12-23 06:39:22 +00:00
19 changed files with 1706 additions and 0 deletions

View File

@@ -0,0 +1,101 @@
========================
MRP Planned Order Matrix
========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3ca7a03b19be36dcaeaf196fcd1d98c2c2cf35b7ceb9ecb285ca847fe787fa30
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
: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
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github
:target: https://github.com/OCA/manufacture/tree/17.0/mrp_planned_order_matrix
: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_planned_order_matrix
: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 fixed planned orders using a grid view.
**Table of contents**
.. contents::
:local:
Installation
============
This module relies on:
- The OCA module '2D matrix for x2many fields', and can be downloaded
from Github:
https://github.com/OCA/web/tree/15.0/web_widget_x2many_2d_matrix
- The OCA module 'Date Range', and can be downloaded from Github:
https://github.com/OCA/server-ux/tree/15.0/date_range
Usage
=====
- Go to *Inventory / Configuration / Date Ranges* and define your
estimating periods.
- Go to *Manufacturing / Planning / Create Fixed Planned Orders* to
create or update your fixed planned orders.
- Go to *Manufacturing / Planning / Planned Orders* to review the
planned orders in the system.
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_planned_order_matrix%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
-------
* ForgeFlow
Contributors
------------
- ForgeFlow, S.L. (https://www.forgeflow.com)
- Jordi Ballester Alomar <jordi.ballester@forgeflow.com>
- Lois Rilo <lois.rilo@forgeflow.com>
- Hector Villarreal <hector.villarreal@forgeflow.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_planned_order_matrix>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1 @@
from . import wizards

View File

@@ -0,0 +1,18 @@
# Copyright 2019-22 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "MRP Planned Order Matrix",
"summary": "Allows to create fixed planned orders on a grid view.",
"version": "17.0.1.0.0",
"development_status": "Production/Stable",
"author": "ForgeFlow, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/manufacture",
"category": "Warehouse Management",
"depends": ["mrp_multi_level", "web_widget_x2many_2d_matrix", "date_range"],
"data": [
"security/ir.model.access.csv",
"wizards/mrp_planned_order_wizard_view.xml",
],
"license": "AGPL-3",
"installable": True,
}

View File

@@ -0,0 +1,221 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_planned_order_matrix
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-03-25 21:33+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_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "Cancel"
msgstr "Cancelar"
#. module: mrp_planned_order_matrix
#: model:ir.actions.act_window,name:mrp_planned_order_matrix.action_mrp_planned_order_wizard
#: model:ir.ui.menu,name:mrp_planned_order_matrix.menu_stock_mrp_planned_order_wizard
msgid "Create Fixed Planned Orders"
msgstr "Crear Órdenes Planificadas Fijas"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__create_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__create_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__create_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__create_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__create_date
msgid "Created on"
msgstr "Creado el"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__date_start
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__date_start
msgid "Date From"
msgstr "Fecha Desde"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__date_range_id
msgid "Date Range"
msgstr "Rango Fechas"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__date_range_type_id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__date_range_type_id
msgid "Date Range Type"
msgstr "Tipo de Rango de Fecha"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__date_end
msgid "Date To"
msgstr "Fecha Hasta"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__date_end
msgid "Date to"
msgstr "Fecha hasta"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__display_name
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__display_name
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__display_name
msgid "Display Name"
msgstr "Mostrar Nombre"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__id
msgid "ID"
msgstr "ID"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__line_ids
msgid "Items"
msgstr "Artículos"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet____last_update
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line____last_update
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard____last_update
msgid "Last Modified on"
msgstr "Última Modificación el"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__write_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__write_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__write_uid
msgid "Last Updated by"
msgstr "Última Actualización por"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__write_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__write_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__write_date
msgid "Last Updated on"
msgstr "Última Actualización el"
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#: model:ir.model,name:mrp_planned_order_matrix.model_mrp_planned_order_sheet
#, python-format
msgid "MPS Sheet"
msgstr "Hoja MPS"
#. module: mrp_planned_order_matrix
#: model:ir.model,name:mrp_planned_order_matrix.model_mrp_planned_order_sheet_line
msgid "MPS Sheet Line"
msgstr "Línea Hoja MPS"
#. module: mrp_planned_order_matrix
#: model:ir.model,name:mrp_planned_order_matrix.model_mrp_planned_order_wizard
msgid "MPS Wizard"
msgstr "Asistente MPS"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "MPS quantity"
msgstr "Cantidad MPS"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__mrp_planned_order_ids
msgid "Mrp Planned Order"
msgstr "Orden Planificada Mrp"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__value_x
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "Period"
msgstr "Periodo"
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "Planned Orders"
msgstr "Órdenes Planificadas"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
msgid "Prepare"
msgstr "Preparar"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__value_y
msgid "Product"
msgstr "Producto"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__product_mrp_area_ids
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__product_mrp_area_id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__product_mrp_area_ids
msgid "Product Parameters"
msgstr "Parámetros del Producto"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
msgid "Products"
msgstr "Productos"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__product_qty
msgid "Quantity"
msgstr "Cantidad"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "TEST DOS"
msgstr "PRUEBA DOS"
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "The start date cannot be later than the end date."
msgstr "La fecha de inicio no puede ser posterior a la fecha final."
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "There are no date ranges created."
msgstr "No se han creado intervalos de fechas."
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "Validate"
msgstr "Validar"
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "You must select at least one Product MRP parameter."
msgstr "Debe seleccionar al menos un parámetro MRP Producto."
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
msgid "or"
msgstr "o"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "to"
msgstr "a"

View File

@@ -0,0 +1,221 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_planned_order_matrix
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-11-16 12:43+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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.17\n"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "Cancel"
msgstr "Annulla"
#. module: mrp_planned_order_matrix
#: model:ir.actions.act_window,name:mrp_planned_order_matrix.action_mrp_planned_order_wizard
#: model:ir.ui.menu,name:mrp_planned_order_matrix.menu_stock_mrp_planned_order_wizard
msgid "Create Fixed Planned Orders"
msgstr "Crea ordini pianificati fissi"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__create_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__create_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__create_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__create_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__create_date
msgid "Created on"
msgstr "Creato il"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__date_start
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__date_start
msgid "Date From"
msgstr "Dalla data"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__date_range_id
msgid "Date Range"
msgstr "Intervallo data"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__date_range_type_id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__date_range_type_id
msgid "Date Range Type"
msgstr "Tipo intervallo date"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__date_end
msgid "Date To"
msgstr "Alla data"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__date_end
msgid "Date to"
msgstr "Alla data"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__display_name
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__display_name
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__id
msgid "ID"
msgstr "ID"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__line_ids
msgid "Items"
msgstr "Elementi"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet____last_update
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line____last_update
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__write_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__write_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__write_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__write_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#: model:ir.model,name:mrp_planned_order_matrix.model_mrp_planned_order_sheet
#, python-format
msgid "MPS Sheet"
msgstr "Foglio MPS"
#. module: mrp_planned_order_matrix
#: model:ir.model,name:mrp_planned_order_matrix.model_mrp_planned_order_sheet_line
msgid "MPS Sheet Line"
msgstr "Riga foglio MPS"
#. module: mrp_planned_order_matrix
#: model:ir.model,name:mrp_planned_order_matrix.model_mrp_planned_order_wizard
msgid "MPS Wizard"
msgstr "Procedura guidata MPS"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "MPS quantity"
msgstr "Quantità MPS"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__mrp_planned_order_ids
msgid "Mrp Planned Order"
msgstr "Ordine MRP pianificato"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__value_x
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "Period"
msgstr "Periodo"
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "Planned Orders"
msgstr "Ordini pianificati"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
msgid "Prepare"
msgstr "Prepara"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__value_y
msgid "Product"
msgstr "Prodotto"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__product_mrp_area_ids
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__product_mrp_area_id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__product_mrp_area_ids
msgid "Product Parameters"
msgstr "Parametri prodotto"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
msgid "Products"
msgstr "Prodotti"
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__product_qty
msgid "Quantity"
msgstr "Quantità"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "TEST DOS"
msgstr "DOS TEST"
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "The start date cannot be later than the end date."
msgstr "La data di inizio non può essere successiva alla data di fine."
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "There are no date ranges created."
msgstr "Non sono stati creati intervalli date."
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "Validate"
msgstr "Valida"
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "You must select at least one Product MRP parameter."
msgstr "Bisogna selezionare almeno un parametro MRP prodotto."
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
msgid "or"
msgstr "o"
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "to"
msgstr "al"

View File

@@ -0,0 +1,218 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_planned_order_matrix
#
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: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "Cancel"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.actions.act_window,name:mrp_planned_order_matrix.action_mrp_planned_order_wizard
#: model:ir.ui.menu,name:mrp_planned_order_matrix.menu_stock_mrp_planned_order_wizard
msgid "Create Fixed Planned Orders"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__create_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__create_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__create_uid
msgid "Created by"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__create_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__create_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__create_date
msgid "Created on"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__date_start
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__date_start
msgid "Date From"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__date_range_id
msgid "Date Range"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__date_range_type_id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__date_range_type_id
msgid "Date Range Type"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__date_end
msgid "Date To"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__date_end
msgid "Date to"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__display_name
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__display_name
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__display_name
msgid "Display Name"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__id
msgid "ID"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__line_ids
msgid "Items"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet____last_update
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line____last_update
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard____last_update
msgid "Last Modified on"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__write_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__write_uid
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__write_uid
msgid "Last Updated by"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__write_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__write_date
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__write_date
msgid "Last Updated on"
msgstr ""
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#: model:ir.model,name:mrp_planned_order_matrix.model_mrp_planned_order_sheet
#, python-format
msgid "MPS Sheet"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model,name:mrp_planned_order_matrix.model_mrp_planned_order_sheet_line
msgid "MPS Sheet Line"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model,name:mrp_planned_order_matrix.model_mrp_planned_order_wizard
msgid "MPS Wizard"
msgstr ""
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "MPS quantity"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__mrp_planned_order_ids
msgid "Mrp Planned Order"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__value_x
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "Period"
msgstr ""
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "Planned Orders"
msgstr ""
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
msgid "Prepare"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__value_y
msgid "Product"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet__product_mrp_area_ids
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__product_mrp_area_id
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_wizard__product_mrp_area_ids
msgid "Product Parameters"
msgstr ""
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
msgid "Products"
msgstr ""
#. module: mrp_planned_order_matrix
#: model:ir.model.fields,field_description:mrp_planned_order_matrix.field_mrp_planned_order_sheet_line__product_qty
msgid "Quantity"
msgstr ""
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "TEST DOS"
msgstr ""
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "The start date cannot be later than the end date."
msgstr ""
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "There are no date ranges created."
msgstr ""
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "Validate"
msgstr ""
#. module: mrp_planned_order_matrix
#. odoo-python
#: code:addons/mrp_planned_order_matrix/wizards/mrp_planned_order_wizard.py:0
#, python-format
msgid "You must select at least one Product MRP parameter."
msgstr ""
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
msgid "or"
msgstr ""
#. module: mrp_planned_order_matrix
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.mrp_planned_order_wizard_view_form
#: model_terms:ir.ui.view,arch_db:mrp_planned_order_matrix.stock_mrp_planned_order_sheet_view_form
msgid "to"
msgstr ""

View File

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

View File

@@ -0,0 +1,4 @@
- ForgeFlow, S.L. (<https://www.forgeflow.com>)
- Jordi Ballester Alomar \<<jordi.ballester@forgeflow.com>\>
- Lois Rilo \<<lois.rilo@forgeflow.com>\>
- Hector Villarreal \<<hector.villarreal@forgeflow.com>\>

View File

@@ -0,0 +1 @@
This module allows to create fixed planned orders using a grid view.

View File

@@ -0,0 +1,7 @@
This module relies on:
- The OCA module '2D matrix for x2many fields', and can be downloaded
from Github:
<https://github.com/OCA/web/tree/15.0/web_widget_x2many_2d_matrix>
- The OCA module 'Date Range', and can be downloaded from Github:
<https://github.com/OCA/server-ux/tree/15.0/date_range>

View File

@@ -0,0 +1,6 @@
- Go to *Inventory / Configuration / Date Ranges* and define your
estimating periods.
- Go to *Manufacturing / Planning / Create Fixed Planned Orders* to
create or update your fixed planned orders.
- Go to *Manufacturing / Planning / Planned Orders* to review the
planned orders in the system.

View File

@@ -0,0 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_mrp_planned_order_wizard,mrp.planned.order.wizard user,model_mrp_planned_order_wizard,mrp.group_mrp_user,1,1,1,1
access_mrp_planned_order_sheet,mrp.planned.order.sheet user,model_mrp_planned_order_sheet,mrp.group_mrp_user,1,1,1,1
access_mrp_planned_order_sheet_line,mrp.planned.order.sheet.line user,model_mrp_planned_order_sheet_line,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 access_mrp_planned_order_wizard mrp.planned.order.wizard user model_mrp_planned_order_wizard mrp.group_mrp_user 1 1 1 1
3 access_mrp_planned_order_sheet mrp.planned.order.sheet user model_mrp_planned_order_sheet mrp.group_mrp_user 1 1 1 1
4 access_mrp_planned_order_sheet_line mrp.planned.order.sheet.line user model_mrp_planned_order_sheet_line mrp.group_mrp_user 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,452 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>MRP Planned Order Matrix</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="mrp-planned-order-matrix">
<h1 class="title">MRP Planned Order Matrix</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3ca7a03b19be36dcaeaf196fcd1d98c2c2cf35b7ceb9ecb285ca847fe787fa30
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/manufacture/tree/17.0/mrp_planned_order_matrix"><img alt="OCA/manufacture" src="https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/manufacture-17-0/manufacture-17-0-mrp_planned_order_matrix"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/manufacture&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module allows to create fixed planned orders using a grid view.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="toc-entry-1">Installation</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="installation">
<h1><a class="toc-backref" href="#toc-entry-1">Installation</a></h1>
<p>This module relies on:</p>
<ul class="simple">
<li>The OCA module 2D matrix for x2many fields, and can be downloaded
from Github:
<a class="reference external" href="https://github.com/OCA/web/tree/15.0/web_widget_x2many_2d_matrix">https://github.com/OCA/web/tree/15.0/web_widget_x2many_2d_matrix</a></li>
<li>The OCA module Date Range, and can be downloaded from Github:
<a class="reference external" href="https://github.com/OCA/server-ux/tree/15.0/date_range">https://github.com/OCA/server-ux/tree/15.0/date_range</a></li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<ul class="simple">
<li>Go to <em>Inventory / Configuration / Date Ranges</em> and define your
estimating periods.</li>
<li>Go to <em>Manufacturing / Planning / Create Fixed Planned Orders</em> to
create or update your fixed planned orders.</li>
<li>Go to <em>Manufacturing / Planning / Planned Orders</em> to review the
planned orders in the system.</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/manufacture/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/manufacture/issues/new?body=module:%20mrp_planned_order_matrix%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
<ul class="simple">
<li>ForgeFlow</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
<ul class="simple">
<li>ForgeFlow, S.L. (<a class="reference external" href="https://www.forgeflow.com">https://www.forgeflow.com</a>)<ul>
<li>Jordi Ballester Alomar &lt;<a class="reference external" href="mailto:jordi.ballester&#64;forgeflow.com">jordi.ballester&#64;forgeflow.com</a>&gt;</li>
<li>Lois Rilo &lt;<a class="reference external" href="mailto:lois.rilo&#64;forgeflow.com">lois.rilo&#64;forgeflow.com</a>&gt;</li>
<li>Hector Villarreal &lt;<a class="reference external" href="mailto:hector.villarreal&#64;forgeflow.com">hector.villarreal&#64;forgeflow.com</a>&gt;</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/manufacture/tree/17.0/mrp_planned_order_matrix">OCA/manufacture</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1 @@
from . import test_mrp_planned_order_matrix

View File

@@ -0,0 +1,108 @@
# Copyright 2020-21 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from dateutil.rrule import MONTHLY
from odoo import fields
from odoo.addons.mrp_multi_level.tests.common import TestMrpMultiLevelCommon
class TestMrpPlannedOrderMatrix(TestMrpMultiLevelCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.mrp_planned_order_matrix_wiz = cls.env["mrp.planned.order.wizard"]
cls.drt_monthly = cls.env["date.range.type"].create(
{"name": "Month", "allow_overlap": False}
)
generator = cls.env["date.range.generator"]
generator = generator.create(
{
"date_start": "1943-01-01",
"name_prefix": "1943-",
"type_id": cls.drt_monthly.id,
"duration_count": 1,
"unit_of_time": str(MONTHLY),
"count": 12,
}
)
generator.action_apply()
# Create a product:
cls.product_1 = cls.product_obj.create(
{"name": "Test Product 1", "type": "product", "default_code": "PROD1"}
)
# Create a product mrp area:
cls.product_mrp_area_1 = cls.product_mrp_area_obj.create(
{"product_id": cls.product_1.id, "mrp_area_id": cls.mrp_area.id}
)
def test_01_mrp_planned_order_matrix(self):
"""Tests creation of planned orders using matrix wizard."""
wiz = self.mrp_planned_order_matrix_wiz
wiz = wiz.create(
{
"date_start": "1943-01-01",
"date_end": "1943-12-31",
"date_range_type_id": self.drt_monthly.id,
"product_mrp_area_ids": [(6, 0, [self.product_mrp_area_1.id])],
}
)
wiz.create_sheet()
sheets = self.env["mrp.planned.order.sheet"].search([])
for sheet in sheets:
self.assertEqual(
len(sheet.line_ids),
12,
"There should be 12 lines.",
)
self.assertEqual(
fields.Date.to_string(sheet.date_start),
"1943-01-01",
"The date start should be 1943-01-01",
)
self.assertEqual(
fields.Date.to_string(sheet.date_end),
"1943-12-31",
"The date end should be 1943-12-31",
)
for line in sheet.line_ids:
line.product_qty = 1
self.assertEqual(
line.product_mrp_area_id.product_id.id,
self.product_1.id,
"The product does not match in the line",
)
sheet.button_validate()
ranges = self.env["date.range"].search(
[("type_id", "=", self.drt_monthly.id)],
)
mrp_planned_order_sheet_lines = self.env[
"mrp.planned.order.sheet.line"
].search([("date_range_id", "in", ranges.ids)])
self.assertEqual(
len(mrp_planned_order_sheet_lines),
12,
"There should be 12 estimate records.",
)
for planned_order in mrp_planned_order_sheet_lines:
self.assertEqual(
planned_order.product_mrp_area_id.product_id.id,
self.product_1.id,
"The product does not match in the estimate",
)
self.assertEqual(
planned_order.product_qty,
1,
"The product qty does not match",
)
mrp_planned_orders = self.env["mrp.planned.order"].search(
[("product_mrp_area_id", "=", self.product_mrp_area_1.id)]
)
self.assertEqual(
len(mrp_planned_orders),
12,
"There should be 12 planned order records.",
)

View File

@@ -0,0 +1 @@
from . import mrp_planned_order_wizard

View File

@@ -0,0 +1,229 @@
# Copyright 2020-21 ForgeFlow S.L. (https://www.forgeflow.com)
# - Jordi Ballester Alomar <jordi.ballester@forgeflow.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from datetime import timedelta
from itertools import zip_longest
from odoo import _, api, fields, models
from odoo.exceptions import UserError, ValidationError
from odoo.osv import expression
from odoo.tools.float_utils import float_compare
class MrpPlannedOrderWizard(models.TransientModel):
_name = "mrp.planned.order.wizard"
_description = "MPS Wizard"
date_start = fields.Date(string="Date From", required=True)
date_end = fields.Date(string="Date To", required=True)
date_range_type_id = fields.Many2one(
string="Date Range Type",
comodel_name="date.range.type",
required=True,
)
product_mrp_area_ids = fields.Many2many(
string="Product Parameters", comodel_name="product.mrp.area", required=True
)
@api.constrains("date_start", "date_end")
def _check_start_end_dates(self):
self.ensure_one()
if self.date_start > self.date_end:
raise ValidationError(
_("The start date cannot be later than the end date.")
)
def create_sheet(self):
self.ensure_one()
if not self.product_mrp_area_ids:
raise ValidationError(
_("You must select at least one Product MRP parameter.")
)
# 2d matrix widget need real records to work
sheet = self.env["mrp.planned.order.sheet"].create(
{
"date_start": self.date_start,
"date_end": self.date_end,
"date_range_type_id": self.date_range_type_id.id,
"product_mrp_area_ids": [(6, 0, self.product_mrp_area_ids.ids)],
}
)
sheet._onchange_dates()
res = {
"name": _("MPS Sheet"),
"src_model": "mrp.planned.order.wizard",
"view_mode": "form",
"target": "new",
"res_model": "mrp.planned.order.sheet",
"res_id": sheet.id,
"type": "ir.actions.act_window",
}
return res
class MprPlannedOrderSheet(models.TransientModel):
_name = "mrp.planned.order.sheet"
_description = "MPS Sheet"
date_start = fields.Date(string="Date From", readonly=True)
date_end = fields.Date(string="Date to", readonly=True)
date_range_type_id = fields.Many2one(
string="Date Range Type",
comodel_name="date.range.type",
readonly=True,
)
product_mrp_area_ids = fields.Many2many(
string="Product Parameters", comodel_name="product.mrp.area"
)
line_ids = fields.Many2many(
string="Items", comodel_name="mrp.planned.order.sheet.line"
)
@api.onchange("date_start", "date_end", "date_range_type_id")
def _onchange_dates(self):
if not all([self.date_start, self.date_end, self.date_range_type_id]):
return
ranges = self._get_ranges()
if not ranges:
raise UserError(_("There are no date ranges created."))
lines = []
for rec in self.product_mrp_area_ids:
for d_range in ranges:
items = self.env["mrp.planned.order"].search(
[
("product_mrp_area_id", "=", rec.id),
("due_date", ">=", d_range.date_start),
("due_date", "<", d_range.date_end),
("fixed", "=", True),
]
)
if items:
uom_qty = sum(items.mapped("mrp_qty"))
item_ids = items.ids
else:
uom_qty = 0.0
item_ids = []
lines.append(
[
0,
0,
self._get_default_sheet_line(d_range, rec, uom_qty, item_ids),
]
)
self.line_ids = lines
def _get_ranges(self):
domain_1 = [
"&",
("type_id", "=", self.date_range_type_id.id),
"|",
"&",
("date_start", ">=", self.date_start),
("date_start", "<=", self.date_end),
"&",
("date_end", ">=", self.date_start),
("date_end", "<=", self.date_end),
]
domain_2 = [
"&",
("type_id", "=", self.date_range_type_id.id),
"&",
("date_start", "<=", self.date_start),
("date_end", ">=", self.date_start),
]
domain = expression.OR([domain_1, domain_2])
ranges = self.env["date.range"].search(domain)
return ranges
def _get_default_sheet_line(self, d_range, product_mrp, uom_qty, item_ids):
name_y = f"{product_mrp.display_name} - {product_mrp.product_id.uom_id.name}"
values = {
"value_x": d_range.name,
"value_y": name_y,
"date_range_id": d_range.id,
"product_mrp_area_id": product_mrp.id,
"product_qty": uom_qty,
"mrp_planned_order_ids": [(6, 0, item_ids)],
}
return values
@api.model
def _prepare_planned_order_data(self, line, qty):
calendar = line.product_mrp_area_id.mrp_area_id.calendar_id
due_date = line.date_range_id.date_start
lt = line.product_mrp_area_id.mrp_lead_time
due_date_dt = fields.Datetime.from_string(due_date)
if calendar:
res = calendar.plan_days(-1 * lt - 1, due_date_dt)
release_date = res.date()
else:
release_date = due_date_dt - timedelta(days=lt)
return {
"name": "Planned Order for %s"
% line.product_mrp_area_id.product_id.display_name,
"order_release_date": release_date,
"due_date": due_date,
"product_mrp_area_id": line.product_mrp_area_id.id,
"mrp_qty": qty,
"qty_released": 0.0,
"mrp_action": line.product_mrp_area_id.supply_method,
"fixed": True,
}
def button_validate(self):
res_ids = []
for line in self.line_ids:
quantities = []
qty_to_order = line.product_qty
while qty_to_order > 0.0:
qty = line.product_mrp_area_id._adjust_qty_to_order(qty_to_order)
quantities.append(qty)
qty_to_order -= qty
rounding = line.product_mrp_area_id.product_id.uom_id.rounding
for proposed, current in zip_longest(
quantities, line.mrp_planned_order_ids
):
if not proposed:
current.unlink()
elif not current:
data = self._prepare_planned_order_data(line, proposed)
item = self.env["mrp.planned.order"].create(data)
res_ids.append(item.id)
elif (
float_compare(
proposed, current.mrp_qty, precision_rounding=rounding
)
== 0
):
res_ids.append(current.id)
else:
current.mrp_qty = proposed
res_ids.append(current.id)
res = {
"domain": [("id", "in", res_ids)],
"name": _("Planned Orders"),
"src_model": "mrp.planned.order.wizard",
"view_mode": "tree,form,pivot",
"res_model": "mrp.planned.order",
"type": "ir.actions.act_window",
}
return res
class MprPlannedOrderSheetLine(models.TransientModel):
_name = "mrp.planned.order.sheet.line"
_description = "MPS Sheet Line"
mrp_planned_order_ids = fields.Many2many(comodel_name="mrp.planned.order")
product_mrp_area_id = fields.Many2one(
string="Product Parameters", comodel_name="product.mrp.area"
)
date_range_id = fields.Many2one(
comodel_name="date.range",
string="Date Range",
)
value_x = fields.Char(string="Period")
value_y = fields.Char(string="Product")
product_qty = fields.Float(string="Quantity", digits="Product UoM")

View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019-20 ForgeFlow S.L. (https://www.forgeflow.com)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="mrp_planned_order_wizard_view_form" model="ir.ui.view">
<field name="name">mrp.planned.order.wizard.form</field>
<field name="model">mrp.planned.order.wizard</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="dates">
<label for="date_start" string="Period" />
<div><field name="date_start" class="oe_inline" /> to <field
name="date_end"
class="oe_inline"
/></div>
</group>
<group>
<group name="attributes">
<field
name="date_range_type_id"
options="{'no_create': True}"
/>
</group>
</group>
<group name="products" string="Products" />
<field name="product_mrp_area_ids" nolabel="1">
<tree>
<field name="product_id" />
<field name="mrp_area_id" />
<field name="location_id" />
<field name="supply_method" />
</tree>
</field>
<footer>
<button
name="create_sheet"
string="Prepare"
type="object"
class="oe_highlight"
/> or
<button string="Cancel" class="oe_link" special="cancel" />
</footer>
</sheet>
</form>
</field>
</record>
<record id="stock_mrp_planned_order_sheet_view_form" model="ir.ui.view">
<field name="name">mrp.planned.order.sheet.form</field>
<field name="model">mrp.planned.order.sheet</field>
<field name="arch" type="xml">
<form string="TEST DOS">
<group name="dates">
<label for="date_start" string="Period" />
<div><field name="date_start" class="oe_inline" /> to <field
name="date_end"
class="oe_inline"
/></div>
</group>
<group>
<group name="attributes" colspan="2">
<field
name="date_range_type_id"
options="{'no_create': True}"
/>
</group>
</group>
<group name="mps_quantity" string="MPS quantity" />
<field
name="line_ids"
nolabel="1"
widget="x2many_2d_matrix"
field_x_axis="value_x"
field_y_axis="value_y"
field_value="product_qty"
x_axis_clickable="0"
y_axis_clickable="0"
>
<tree editable="bottom">
<field name="value_x" />
<field name="value_y" />
<field name="product_qty" />
</tree>
</field>
<footer>
<button
name="button_validate"
type="object"
string="Validate"
class="oe_highlight"
/>
<button class="oe_link" special="cancel" string="Cancel" />
</footer>
</form>
</field>
</record>
<record id="action_mrp_planned_order_wizard" model="ir.actions.act_window">
<field name="name">Create Fixed Planned Orders</field>
<field name="res_model">mrp.planned.order.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="binding_model_id" ref="model_mrp_planned_order_sheet" />
<field name="binding_view_types">list</field>
</record>
<menuitem
id="menu_stock_mrp_planned_order_wizard"
parent="mrp.mrp_planning_menu_root"
action="action_mrp_planned_order_wizard"
/>
</odoo>