mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
[13.0][MIG] mrp_multi_level
This commit is contained in:
@@ -7,20 +7,20 @@ MRP Multi Level
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
:alt: Production/Stable
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
|
||||
:alt: License: LGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/manufacture/tree/12.0/mrp_multi_level
|
||||
:target: https://github.com/OCA/manufacture/tree/13.0/mrp_multi_level
|
||||
:alt: OCA/manufacture
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/manufacture-12-0/manufacture-12-0-mrp_multi_level
|
||||
:target: https://translation.odoo-community.org/projects/manufacture-13-0/manufacture-13-0-mrp_multi_level
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
|
||||
:target: https://runbot.odoo-community.org/runbot/129/12.0
|
||||
:target: https://runbot.odoo-community.org/runbot/129/13.0
|
||||
:alt: Try me on Runbot
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
@@ -82,6 +82,11 @@ To launch replenishment orders (moves, purchases, production orders...):
|
||||
Changelog
|
||||
=========
|
||||
|
||||
13.0.1.0.0 (2019-12-18)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* [MIG] Migration to v13.
|
||||
|
||||
12.0.1.0.0 (2019-08-05)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -147,7 +152,7 @@ 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 smashing it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/manufacture/issues/new?body=module:%20mrp_multi_level%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
`feedback <https://github.com/OCA/manufacture/issues/new?body=module:%20mrp_multi_level%0Aversion:%2013.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.
|
||||
|
||||
@@ -158,14 +163,14 @@ Authors
|
||||
~~~~~~~
|
||||
|
||||
* Ucamco
|
||||
* Eficent
|
||||
* ForgeFlow
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
* Jordi Ballester <jordi.ballester@eficent.com>
|
||||
* Lois Rilo <lois.rilo@eficent.com>
|
||||
* Jordi Ballester <jordi.ballester@forgeflow.com>
|
||||
* Lois Rilo <lois.rilo@forgeflow.com>
|
||||
|
||||
Maintainers
|
||||
~~~~~~~~~~~
|
||||
@@ -180,17 +185,17 @@ 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-jbeficent| image:: https://github.com/jbeficent.png?size=40px
|
||||
:target: https://github.com/jbeficent
|
||||
:alt: jbeficent
|
||||
.. |maintainer-lreficent| image:: https://github.com/lreficent.png?size=40px
|
||||
:target: https://github.com/lreficent
|
||||
:alt: lreficent
|
||||
.. |maintainer-JordiBForgeFlow| image:: https://github.com/JordiBForgeFlow.png?size=40px
|
||||
:target: https://github.com/JordiBForgeFlow
|
||||
:alt: JordiBForgeFlow
|
||||
.. |maintainer-LoisRForgeFlow| image:: https://github.com/LoisRForgeFlow.png?size=40px
|
||||
:target: https://github.com/LoisRForgeFlow
|
||||
:alt: LoisRForgeFlow
|
||||
|
||||
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-jbeficent| |maintainer-lreficent|
|
||||
|maintainer-JordiBForgeFlow| |maintainer-LoisRForgeFlow|
|
||||
|
||||
This module is part of the `OCA/manufacture <https://github.com/OCA/manufacture/tree/12.0/mrp_multi_level>`_ project on GitHub.
|
||||
This module is part of the `OCA/manufacture <https://github.com/OCA/manufacture/tree/13.0/mrp_multi_level>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# Copyright 2016 Ucamco - Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
# Copyright 2016-19 Eficent Business and IT Consulting Services S.L.
|
||||
# Copyright 2016-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
{
|
||||
"name": "MRP Multi Level",
|
||||
"version": "12.0.1.0.1",
|
||||
"development_status": "Beta",
|
||||
"version": "13.0.1.0.0",
|
||||
"development_status": "Production/Stable",
|
||||
"license": "LGPL-3",
|
||||
"author": "Ucamco, " "Eficent, " "Odoo Community Association (OCA)",
|
||||
"maintainers": ["jbeficent", "lreficent"],
|
||||
"author": "Ucamco, ForgeFlow, Odoo Community Association (OCA)",
|
||||
"maintainers": ["JordiBForgeFlow", "LoisRForgeFlow"],
|
||||
"summary": "Adds an MRP Scheduler",
|
||||
"website": "https://github.com/OCA/manufacture",
|
||||
"category": "Manufacturing",
|
||||
|
||||
0
mrp_multi_level/data/mrp_multi_level_cron.xml
Executable file → Normal file
0
mrp_multi_level/data/mrp_multi_level_cron.xml
Executable file → Normal file
@@ -2,7 +2,7 @@
|
||||
<odoo noupdate="1">
|
||||
|
||||
<record id="stock_inventory_mrp_example" model="stock.inventory">
|
||||
<field name="name">Simulating MRP</field>
|
||||
<field name="name">Starting On-hand for MRP demo</field>
|
||||
</record>
|
||||
<record id="stock_inventory_line_1" model="stock.inventory.line">
|
||||
<field name="product_id" ref="product_product_pp_1"/>
|
||||
@@ -25,6 +25,10 @@
|
||||
<field name="product_qty">15</field>
|
||||
<field name="location_id" ref="stock.stock_location_stock"/>
|
||||
</record>
|
||||
|
||||
<function model="stock.inventory" name="_action_start">
|
||||
<function eval="[[('id', '=', ref('stock_inventory_mrp_example'))]]" model="stock.inventory" name="search"/>
|
||||
</function>
|
||||
<function model="stock.inventory" name="action_validate">
|
||||
<function eval="[[('id', '=', ref('stock_inventory_mrp_example'))]]" model="stock.inventory" name="search"/>
|
||||
</function>
|
||||
|
||||
@@ -4,7 +4,5 @@
|
||||
<field name="name">Lazer Tech</field>
|
||||
<field name="is_company">1</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="customer" eval="False"/>
|
||||
<field name="supplier" eval="True"/>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
# Copyright 2019 Eficent Business and IT Consulting Services, S.L.
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
import logging
|
||||
|
||||
from odoo import SUPERUSER_ID, api
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
__name__ = "Upgrade to 11.0.2.0.0"
|
||||
|
||||
|
||||
def _migrate_product_to_product_mrp_area(env):
|
||||
_logger.info("Migrating product parameters to Product MRP Areas")
|
||||
env.cr.execute(
|
||||
"""
|
||||
SELECT DISTINCT mrp_area.id, pr.id, pr.mrp_applicable, pr.mrp_exclude,
|
||||
pr.mrp_inspection_delay, pr.mrp_maximum_order_qty,
|
||||
pr.mrp_minimum_order_qty, pr.mrp_minimum_stock, pr.mrp_nbr_days,
|
||||
pr.mrp_qty_multiple, pr.mrp_transit_delay, pr.mrp_verified, pr.active
|
||||
FROM product_product AS pr
|
||||
CROSS JOIN mrp_area
|
||||
LEFT JOIN product_template AS pt
|
||||
ON pt.id = pr.product_tmpl_id
|
||||
WHERE pr.mrp_exclude = False
|
||||
AND pt.type = 'product'
|
||||
"""
|
||||
)
|
||||
product_mrp_area_model = env["product.mrp.area"]
|
||||
for (
|
||||
mrp_area_id,
|
||||
product_id,
|
||||
mrp_applicable,
|
||||
mrp_exclude,
|
||||
mrp_inspection_delay,
|
||||
mrp_maximum_order_qty,
|
||||
mrp_minimum_order_qty,
|
||||
mrp_minimum_stock,
|
||||
mrp_nbr_days,
|
||||
mrp_qty_multiple,
|
||||
mrp_transit_delay,
|
||||
mrp_verified,
|
||||
active,
|
||||
) in env.cr.fetchall():
|
||||
product_mrp_area_model.create(
|
||||
{
|
||||
"mrp_area_id": mrp_area_id,
|
||||
"product_id": product_id,
|
||||
"mrp_applicable": mrp_applicable,
|
||||
"mrp_exclude": mrp_exclude,
|
||||
"mrp_inspection_delay": mrp_inspection_delay,
|
||||
"mrp_maximum_order_qty": mrp_maximum_order_qty,
|
||||
"mrp_minimum_order_qty": mrp_minimum_order_qty,
|
||||
"mrp_minimum_stock": mrp_minimum_stock,
|
||||
"mrp_nbr_days": mrp_nbr_days,
|
||||
"mrp_qty_multiple": mrp_qty_multiple,
|
||||
"mrp_transit_delay": mrp_transit_delay,
|
||||
"mrp_verified": mrp_verified,
|
||||
"active": active,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def migrate(cr, version):
|
||||
with api.Environment.manage():
|
||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||
_migrate_product_to_product_mrp_area(env)
|
||||
@@ -1,10 +1,10 @@
|
||||
# © 2016 Ucamco - Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
# © 2016-19 Eficent Business and IT Consulting Services S.L.
|
||||
# - Jordi Ballester Alomar <jordi.ballester@eficent.com>
|
||||
# - Lois Rilo Antelo <lois.rilo@eficent.com>
|
||||
# Copyright 2016-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# - Jordi Ballester Alomar <jordi.ballester@forgeflow.com>
|
||||
# - Lois Rilo Antelo <lois.rilo@forgeflow.com>
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class MrpArea(models.Model):
|
||||
@@ -28,7 +28,6 @@ class MrpArea(models.Model):
|
||||
related="warehouse_id.calendar_id",
|
||||
)
|
||||
|
||||
@api.multi
|
||||
def _get_locations(self):
|
||||
self.ensure_one()
|
||||
return self.env["stock.location"].search(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# © 2016 Ucamco - Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
# Copyright 2016-19 Eficent Business and IT Consulting Services S.L.
|
||||
# - Jordi Ballester Alomar <jordi.ballester@eficent.com>
|
||||
# - Lois Rilo Antelo <lois.rilo@eficent.com>
|
||||
# Copyright 2016-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# - Jordi Ballester Alomar <jordi.ballester@forgeflow.com>
|
||||
# - Lois Rilo Antelo <lois.rilo@forgeflow.com>
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from datetime import date, timedelta
|
||||
@@ -63,7 +63,6 @@ class MrpInventory(models.Model):
|
||||
comodel_name="mrp.planned.order", inverse_name="mrp_inventory_id", readonly=True
|
||||
)
|
||||
|
||||
@api.multi
|
||||
def _compute_uom_id(self):
|
||||
for rec in self:
|
||||
rec.uom_id = rec.product_mrp_area_id.product_id.uom_id
|
||||
@@ -75,7 +74,6 @@ class MrpInventory(models.Model):
|
||||
rec.planned_order_ids.mapped("qty_released")
|
||||
)
|
||||
|
||||
@api.multi
|
||||
@api.depends(
|
||||
"product_mrp_area_id",
|
||||
"product_mrp_area_id.main_supplierinfo_id",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# © 2016 Ucamco - Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
# © 2016-18 Eficent Business and IT Consulting Services S.L.
|
||||
# Copyright 2016-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Copyright 2019 Eficent Business and IT Consulting Services S.L.
|
||||
# - Lois Rilo Antelo <lois.rilo@eficent.com>
|
||||
# Copyright 2019 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# - Lois Rilo Antelo <lois.rilo@forgeflow.com>
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Copyright 2016 Ucamco - Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
# Copyright 2016-19 Eficent Business and IT Consulting Services S.L.
|
||||
# - Jordi Ballester Alomar <jordi.ballester@eficent.com>
|
||||
# - Lois Rilo Antelo <lois.rilo@eficent.com>
|
||||
# Copyright 2016-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# - Jordi Ballester Alomar <jordi.ballester@forgeflow.com>
|
||||
# - Lois Rilo Antelo <lois.rilo@forgeflow.com>
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from math import ceil
|
||||
@@ -104,7 +104,6 @@ class ProductMRPArea(models.Model):
|
||||
)
|
||||
]
|
||||
|
||||
@api.multi
|
||||
@api.constrains(
|
||||
"mrp_minimum_order_qty",
|
||||
"mrp_maximum_order_qty",
|
||||
@@ -126,14 +125,15 @@ class ProductMRPArea(models.Model):
|
||||
if any(v < 0 for v in rec.values()):
|
||||
raise ValidationError(_("You cannot use a negative number."))
|
||||
|
||||
@api.multi
|
||||
def name_get(self):
|
||||
return [
|
||||
(area.id, "[{}] {}".format(area.mrp_area_id.name, area.product_id.display_name))
|
||||
(
|
||||
area.id,
|
||||
"[{}] {}".format(area.mrp_area_id.name, area.product_id.display_name),
|
||||
)
|
||||
for area in self
|
||||
]
|
||||
|
||||
@api.multi
|
||||
def _compute_mrp_lead_time(self):
|
||||
produced = self.filtered(lambda r: r.supply_method == "manufacture")
|
||||
purchased = self.filtered(lambda r: r.supply_method == "buy")
|
||||
@@ -145,14 +145,12 @@ class ProductMRPArea(models.Model):
|
||||
for rec in self - produced - purchased:
|
||||
rec.mrp_lead_time = 0
|
||||
|
||||
@api.multi
|
||||
def _compute_qty_available(self):
|
||||
for rec in self:
|
||||
rec.qty_available = rec.product_id.with_context(
|
||||
{"location": rec.mrp_area_id.location_id.id}
|
||||
).qty_available
|
||||
|
||||
@api.multi
|
||||
def _compute_supply_method(self):
|
||||
group_obj = self.env["procurement.group"]
|
||||
for rec in self:
|
||||
@@ -165,7 +163,6 @@ class ProductMRPArea(models.Model):
|
||||
rule = group_obj._get_rule(rec.product_id, proc_loc, values)
|
||||
rec.supply_method = rule.action if rule else "none"
|
||||
|
||||
@api.multi
|
||||
@api.depends("supply_method", "product_id.route_ids", "product_id.seller_ids")
|
||||
def _compute_main_supplier(self):
|
||||
"""Simplified and similar to procurement.rule logic."""
|
||||
@@ -178,7 +175,6 @@ class ProductMRPArea(models.Model):
|
||||
rec.main_supplierinfo_id = suppliers[0]
|
||||
rec.main_supplier_id = suppliers[0].name
|
||||
|
||||
@api.multi
|
||||
def _adjust_qty_to_order(self, qty_to_order):
|
||||
self.ensure_one()
|
||||
if (
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# Copyright 2016 Ucamco - Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
# Copyright 2016-18 Eficent Business and IT Consulting Services S.L.
|
||||
# Copyright 2016-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
import ast
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class Product(models.Model):
|
||||
@@ -32,12 +33,10 @@ class Product(models.Model):
|
||||
compute="_compute_mrp_area_count",
|
||||
)
|
||||
|
||||
@api.multi
|
||||
def _compute_mrp_area_count(self):
|
||||
for rec in self:
|
||||
rec.mrp_area_count = len(rec.mrp_area_ids)
|
||||
|
||||
@api.multi
|
||||
def action_view_mrp_area_parameters(self):
|
||||
self.ensure_one()
|
||||
action = self.env.ref("mrp_multi_level.product_mrp_area_action")
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
# Copyright 2018 Eficent Business and IT Consulting Services S.L.
|
||||
# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
import ast
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ProductTemplate(models.Model):
|
||||
@@ -19,12 +20,10 @@ class ProductTemplate(models.Model):
|
||||
compute="_compute_mrp_area_count",
|
||||
)
|
||||
|
||||
@api.multi
|
||||
def _compute_mrp_area_count(self):
|
||||
for rec in self:
|
||||
rec.mrp_area_count = len(rec.mrp_area_ids)
|
||||
|
||||
@api.multi
|
||||
def action_view_mrp_area_parameters(self):
|
||||
self.ensure_one()
|
||||
action = self.env.ref("mrp_multi_level.product_mrp_area_action")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# © 2016 Ucamco - Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
# © 2016 Eficent Business and IT Consulting Services S.L.
|
||||
# - Jordi Ballester Alomar <jordi.ballester@eficent.com>
|
||||
# Copyright 2016-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# - Jordi Ballester Alomar <jordi.ballester@forgeflow.com>
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
* Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
* Jordi Ballester <jordi.ballester@eficent.com>
|
||||
* Lois Rilo <lois.rilo@eficent.com>
|
||||
* Jordi Ballester <jordi.ballester@forgeflow.com>
|
||||
* Lois Rilo <lois.rilo@forgeflow.com>
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
13.0.1.0.0 (2019-12-18)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* [MIG] Migration to v13.
|
||||
|
||||
12.0.1.0.0 (2019-08-05)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<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 0.15.1: http://docutils.sourceforge.net/" />
|
||||
<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
|
||||
<title>MRP Multi Level</title>
|
||||
<style type="text/css">
|
||||
|
||||
@@ -367,7 +367,7 @@ ul.auto-toc {
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/manufacture/tree/12.0/mrp_multi_level"><img alt="OCA/manufacture" src="https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/manufacture-12-0/manufacture-12-0-mrp_multi_level"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/129/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
|
||||
<p><a class="reference external" 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" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/manufacture/tree/13.0/mrp_multi_level"><img alt="OCA/manufacture" src="https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/manufacture-13-0/manufacture-13-0-mrp_multi_level"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/129/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module allows you to calculate, based in known inventory, demand, and
|
||||
supply, and based on parameters set at product variant level, the new
|
||||
procurements for each product.</p>
|
||||
@@ -387,43 +387,44 @@ Note: You need to install <a class="reference external" href="https://github.com
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#configuration" id="id15">Configuration</a><ul>
|
||||
<li><a class="reference internal" href="#mrp-areas" id="id16">MRP Areas</a></li>
|
||||
<li><a class="reference internal" href="#product-mrp-area-parameters" id="id17">Product MRP Area Parameters</a></li>
|
||||
<li><a class="reference internal" href="#configuration" id="id16">Configuration</a><ul>
|
||||
<li><a class="reference internal" href="#mrp-areas" id="id17">MRP Areas</a></li>
|
||||
<li><a class="reference internal" href="#product-mrp-area-parameters" id="id18">Product MRP Area Parameters</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#usage" id="id18">Usage</a></li>
|
||||
<li><a class="reference internal" href="#changelog" id="id19">Changelog</a><ul>
|
||||
<li><a class="reference internal" href="#id1" id="id20">12.0.1.0.0 (2019-08-05)</a></li>
|
||||
<li><a class="reference internal" href="#id2" id="id21">11.0.3.0.0 (2019-05-22)</a></li>
|
||||
<li><a class="reference internal" href="#id4" id="id22">11.0.2.2.0 (2019-05-02)</a></li>
|
||||
<li><a class="reference internal" href="#id6" id="id23">11.0.2.1.0 (2019-04-02)</a></li>
|
||||
<li><a class="reference internal" href="#id8" id="id24">11.0.2.0.0 (2018-11-20)</a></li>
|
||||
<li><a class="reference internal" href="#id10" id="id25">11.0.1.1.0 (2018-08-30)</a></li>
|
||||
<li><a class="reference internal" href="#id12" id="id26">11.0.1.0.1 (2018-08-03)</a></li>
|
||||
<li><a class="reference internal" href="#id14" id="id27">11.0.1.0.0 (2018-07-09)</a></li>
|
||||
<li><a class="reference internal" href="#usage" id="id19">Usage</a></li>
|
||||
<li><a class="reference internal" href="#changelog" id="id20">Changelog</a><ul>
|
||||
<li><a class="reference internal" href="#id1" id="id21">13.0.1.0.0 (2019-12-18)</a></li>
|
||||
<li><a class="reference internal" href="#id2" id="id22">12.0.1.0.0 (2019-08-05)</a></li>
|
||||
<li><a class="reference internal" href="#id3" id="id23">11.0.3.0.0 (2019-05-22)</a></li>
|
||||
<li><a class="reference internal" href="#id5" id="id24">11.0.2.2.0 (2019-05-02)</a></li>
|
||||
<li><a class="reference internal" href="#id7" id="id25">11.0.2.1.0 (2019-04-02)</a></li>
|
||||
<li><a class="reference internal" href="#id9" id="id26">11.0.2.0.0 (2018-11-20)</a></li>
|
||||
<li><a class="reference internal" href="#id11" id="id27">11.0.1.1.0 (2018-08-30)</a></li>
|
||||
<li><a class="reference internal" href="#id13" id="id28">11.0.1.0.1 (2018-08-03)</a></li>
|
||||
<li><a class="reference internal" href="#id15" id="id29">11.0.1.0.0 (2018-07-09)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="id28">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="id29">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="id30">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="id31">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="id32">Maintainers</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="id30">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="id31">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="id32">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="id33">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="id34">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="configuration">
|
||||
<h2><a class="toc-backref" href="#id15">Configuration</a></h2>
|
||||
<h2><a class="toc-backref" href="#id16">Configuration</a></h2>
|
||||
<div class="section" id="mrp-areas">
|
||||
<h3><a class="toc-backref" href="#id16">MRP Areas</a></h3>
|
||||
<h3><a class="toc-backref" href="#id17">MRP Areas</a></h3>
|
||||
<ul class="simple">
|
||||
<li>Go to <em>Manufacturing > Configuration > MRP Areas</em> and define or edit
|
||||
any existing area. You can specify the working hours for every area.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="product-mrp-area-parameters">
|
||||
<h3><a class="toc-backref" href="#id17">Product MRP Area Parameters</a></h3>
|
||||
<h3><a class="toc-backref" href="#id18">Product MRP Area Parameters</a></h3>
|
||||
<ul class="simple">
|
||||
<li>Go to <em>Manufacturing > Master Data > Product MRP Area Parameters</em> and set
|
||||
the MRP parameters for a given product and area.</li>
|
||||
@@ -431,7 +432,7 @@ the MRP parameters for a given product and area.</li>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="usage">
|
||||
<h2><a class="toc-backref" href="#id18">Usage</a></h2>
|
||||
<h2><a class="toc-backref" href="#id19">Usage</a></h2>
|
||||
<p>To manually run the MRP scheduler:</p>
|
||||
<ol class="arabic simple">
|
||||
<li>Go to <em>Manufacturing > Operations > Run MRP Multi Level</em>.</li>
|
||||
@@ -447,9 +448,15 @@ hand side gears in any record.</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="section" id="changelog">
|
||||
<h2><a class="toc-backref" href="#id19">Changelog</a></h2>
|
||||
<h2><a class="toc-backref" href="#id20">Changelog</a></h2>
|
||||
<div class="section" id="id1">
|
||||
<h3><a class="toc-backref" href="#id20">12.0.1.0.0 (2019-08-05)</a></h3>
|
||||
<h3><a class="toc-backref" href="#id21">13.0.1.0.0 (2019-12-18)</a></h3>
|
||||
<ul class="simple">
|
||||
<li>[MIG] Migration to v13.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="id2">
|
||||
<h3><a class="toc-backref" href="#id22">12.0.1.0.0 (2019-08-05)</a></h3>
|
||||
<ul class="simple">
|
||||
<li>[MIG] Migration to v12:<ul>
|
||||
<li>Estimates as a forecasting mechanism is moved to a new module
|
||||
@@ -458,31 +465,31 @@ hand side gears in any record.</li>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="id2">
|
||||
<h3><a class="toc-backref" href="#id21">11.0.3.0.0 (2019-05-22)</a></h3>
|
||||
<div class="section" id="id3">
|
||||
<h3><a class="toc-backref" href="#id23">11.0.3.0.0 (2019-05-22)</a></h3>
|
||||
<ul class="simple">
|
||||
<li>[REW/IMP] Rework to include Planned Orders.
|
||||
(<a class="reference external" href="https://github.com/OCA/manufacture/pull/365">#365</a>).</li>
|
||||
<li>[IMP] Able to procure from a different location than the area’s location.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="id4">
|
||||
<h3><a class="toc-backref" href="#id22">11.0.2.2.0 (2019-05-02)</a></h3>
|
||||
<div class="section" id="id5">
|
||||
<h3><a class="toc-backref" href="#id24">11.0.2.2.0 (2019-05-02)</a></h3>
|
||||
<ul class="simple">
|
||||
<li>[IMP] Able to run MRP only for selected areas.
|
||||
(<a class="reference external" href="https://github.com/OCA/manufacture/pull/360">#360</a>).</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="id6">
|
||||
<h3><a class="toc-backref" href="#id23">11.0.2.1.0 (2019-04-02)</a></h3>
|
||||
<div class="section" id="id7">
|
||||
<h3><a class="toc-backref" href="#id25">11.0.2.1.0 (2019-04-02)</a></h3>
|
||||
<ul class="simple">
|
||||
<li>[IMP] Implement <em>Nbr. Days</em> functionality to be able to group demand when
|
||||
generating supply proposals.
|
||||
(<a class="reference external" href="https://github.com/OCA/manufacture/pull/345">#345</a>).</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="id8">
|
||||
<h3><a class="toc-backref" href="#id24">11.0.2.0.0 (2018-11-20)</a></h3>
|
||||
<div class="section" id="id9">
|
||||
<h3><a class="toc-backref" href="#id26">11.0.2.0.0 (2018-11-20)</a></h3>
|
||||
<ul class="simple">
|
||||
<li>[REW] Refactor MRP Area.
|
||||
(<a class="reference external" href="https://github.com/OCA/manufacture/pull/322">#322</a>):<ul>
|
||||
@@ -494,15 +501,15 @@ different areas.</li>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="id10">
|
||||
<h3><a class="toc-backref" href="#id25">11.0.1.1.0 (2018-08-30)</a></h3>
|
||||
<div class="section" id="id11">
|
||||
<h3><a class="toc-backref" href="#id27">11.0.1.1.0 (2018-08-30)</a></h3>
|
||||
<ul class="simple">
|
||||
<li>[FIX] Consider <em>Qty Multiple</em> on product to propose the quantity to procure.
|
||||
(<a class="reference external" href="https://github.com/OCA/manufacture/pull/297">#297</a>)</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="id12">
|
||||
<h3><a class="toc-backref" href="#id26">11.0.1.0.1 (2018-08-03)</a></h3>
|
||||
<div class="section" id="id13">
|
||||
<h3><a class="toc-backref" href="#id28">11.0.1.0.1 (2018-08-03)</a></h3>
|
||||
<ul class="simple">
|
||||
<li>[FIX] User and system locales doesn’t break MRP calculation.
|
||||
(<a class="reference external" href="https://github.com/OCA/manufacture/pull/290">#290</a>)</li>
|
||||
@@ -511,48 +518,48 @@ as a related on MRP Areas.
|
||||
(<a class="reference external" href="https://github.com/OCA/manufacture/pull/290">#290</a>)</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="id14">
|
||||
<h3><a class="toc-backref" href="#id27">11.0.1.0.0 (2018-07-09)</a></h3>
|
||||
<div class="section" id="id15">
|
||||
<h3><a class="toc-backref" href="#id29">11.0.1.0.0 (2018-07-09)</a></h3>
|
||||
<ul class="simple">
|
||||
<li>Start of the history.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h2><a class="toc-backref" href="#id28">Bug Tracker</a></h2>
|
||||
<h2><a class="toc-backref" href="#id30">Bug Tracker</a></h2>
|
||||
<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 smashing it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/OCA/manufacture/issues/new?body=module:%20mrp_multi_level%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<a class="reference external" href="https://github.com/OCA/manufacture/issues/new?body=module:%20mrp_multi_level%0Aversion:%2013.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">
|
||||
<h2><a class="toc-backref" href="#id29">Credits</a></h2>
|
||||
<h2><a class="toc-backref" href="#id31">Credits</a></h2>
|
||||
<div class="section" id="authors">
|
||||
<h3><a class="toc-backref" href="#id30">Authors</a></h3>
|
||||
<h3><a class="toc-backref" href="#id32">Authors</a></h3>
|
||||
<ul class="simple">
|
||||
<li>Ucamco</li>
|
||||
<li>Eficent</li>
|
||||
<li>ForgeFlow</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h3><a class="toc-backref" href="#id31">Contributors</a></h3>
|
||||
<h3><a class="toc-backref" href="#id33">Contributors</a></h3>
|
||||
<ul class="simple">
|
||||
<li>Wim Audenaert <<a class="reference external" href="mailto:wim.audenaert@ucamco.com">wim.audenaert@ucamco.com</a>></li>
|
||||
<li>Jordi Ballester <<a class="reference external" href="mailto:jordi.ballester@eficent.com">jordi.ballester@eficent.com</a>></li>
|
||||
<li>Lois Rilo <<a class="reference external" href="mailto:lois.rilo@eficent.com">lois.rilo@eficent.com</a>></li>
|
||||
<li>Jordi Ballester <<a class="reference external" href="mailto:jordi.ballester@forgeflow.com">jordi.ballester@forgeflow.com</a>></li>
|
||||
<li>Lois Rilo <<a class="reference external" href="mailto:lois.rilo@forgeflow.com">lois.rilo@forgeflow.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h3><a class="toc-backref" href="#id32">Maintainers</a></h3>
|
||||
<h3><a class="toc-backref" href="#id34">Maintainers</a></h3>
|
||||
<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>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p>
|
||||
<p><a class="reference external" href="https://github.com/jbeficent"><img alt="jbeficent" src="https://github.com/jbeficent.png?size=40px" /></a> <a class="reference external" href="https://github.com/lreficent"><img alt="lreficent" src="https://github.com/lreficent.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/manufacture/tree/12.0/mrp_multi_level">OCA/manufacture</a> project on GitHub.</p>
|
||||
<p><a class="reference external" href="https://github.com/JordiBForgeFlow"><img alt="JordiBForgeFlow" src="https://github.com/JordiBForgeFlow.png?size=40px" /></a> <a class="reference external" href="https://github.com/LoisRForgeFlow"><img alt="LoisRForgeFlow" src="https://github.com/LoisRForgeFlow.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/manufacture/tree/13.0/mrp_multi_level">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>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Copyright 2018-19 Eficent Business and IT Consulting Services S.L.
|
||||
# (http://www.eficent.com)
|
||||
# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from odoo.tests import Form
|
||||
from odoo.tests.common import SavepointCase
|
||||
|
||||
|
||||
@@ -209,6 +209,7 @@ class TestMrpMultiLevelCommon(SavepointCase):
|
||||
"picking_type_id": cls.env.ref("stock.picking_type_out").id,
|
||||
"location_id": cls.stock_location.id,
|
||||
"location_dest_id": cls.customer_location.id,
|
||||
"scheduled_date": date_move,
|
||||
"move_lines": [
|
||||
(
|
||||
0,
|
||||
@@ -249,6 +250,7 @@ class TestMrpMultiLevelCommon(SavepointCase):
|
||||
"picking_type_id": cls.env.ref("stock.picking_type_out").id,
|
||||
"location_id": cls.stock_location.id,
|
||||
"location_dest_id": cls.customer_location.id,
|
||||
"scheduled_date": date_move,
|
||||
"move_lines": [
|
||||
(
|
||||
0,
|
||||
@@ -323,15 +325,7 @@ class TestMrpMultiLevelCommon(SavepointCase):
|
||||
# Create test MO:
|
||||
date_mo = cls.calendar.plan_days(9 + 1, datetime.today().replace(hour=0)).date()
|
||||
bom_fp_2 = cls.env.ref("mrp_multi_level.mrp_bom_fp_2")
|
||||
cls.mo = cls.mo_obj.create(
|
||||
{
|
||||
"product_id": cls.fp_2.id,
|
||||
"bom_id": bom_fp_2.id,
|
||||
"product_qty": 12.0,
|
||||
"product_uom_id": cls.fp_2.uom_id.id,
|
||||
"date_planned_start": date_mo,
|
||||
}
|
||||
)
|
||||
cls.mo = cls._create_mo(cls.fp_2, bom_fp_2, date_mo, qty=12.0)
|
||||
|
||||
# Dates:
|
||||
today = datetime.today().replace(hour=0)
|
||||
@@ -361,6 +355,7 @@ class TestMrpMultiLevelCommon(SavepointCase):
|
||||
"picking_type_id": cls.env.ref("stock.picking_type_out").id,
|
||||
"location_id": cls.sec_loc.id,
|
||||
"location_dest_id": cls.customer_location.id,
|
||||
"scheduled_date": date_move,
|
||||
"move_lines": [
|
||||
(
|
||||
0,
|
||||
@@ -403,6 +398,7 @@ class TestMrpMultiLevelCommon(SavepointCase):
|
||||
"picking_type_id": cls.env.ref("stock.picking_type_in").id,
|
||||
"location_id": cls.supplier_location.id,
|
||||
"location_dest_id": location.id,
|
||||
"scheduled_date": date_move,
|
||||
"move_lines": [
|
||||
(
|
||||
0,
|
||||
@@ -433,6 +429,7 @@ class TestMrpMultiLevelCommon(SavepointCase):
|
||||
"picking_type_id": cls.env.ref("stock.picking_type_out").id,
|
||||
"location_id": location.id,
|
||||
"location_dest_id": cls.customer_location.id,
|
||||
"scheduled_date": date_move,
|
||||
"move_lines": [
|
||||
(
|
||||
0,
|
||||
@@ -453,3 +450,15 @@ class TestMrpMultiLevelCommon(SavepointCase):
|
||||
)
|
||||
picking.action_confirm()
|
||||
return picking
|
||||
|
||||
@classmethod
|
||||
def _create_mo(cls, product, bom, date, qty=10.0):
|
||||
mo_form = Form(cls.mo_obj)
|
||||
mo_form.product_id = product
|
||||
mo_form.bom_id = bom
|
||||
mo_form.product_qty = qty
|
||||
mo_form.date_planned_start = date
|
||||
mo = mo_form.save()
|
||||
# Confirm the MO to generate stock moves:
|
||||
mo.action_confirm()
|
||||
return mo
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
# Copyright 2018-19 Eficent Business and IT Consulting Services S.L.
|
||||
# (http://www.eficent.com)
|
||||
# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from odoo import fields
|
||||
|
||||
from odoo.addons.mrp_multi_level.tests.common import TestMrpMultiLevelCommon
|
||||
from .common import TestMrpMultiLevelCommon
|
||||
|
||||
|
||||
class TestMrpMultiLevel(TestMrpMultiLevelCommon):
|
||||
@@ -83,11 +82,10 @@ class TestMrpMultiLevel(TestMrpMultiLevelCommon):
|
||||
self.assertEqual(len(fp_2_line_1), 1)
|
||||
self.assertEqual(fp_2_line_1.demand_qty, 15.0)
|
||||
self.assertEqual(fp_2_line_1.to_procure, 15.0)
|
||||
# TODO: ask odoo to fix it... should be date10
|
||||
fp_2_line_2 = self.mrp_inventory_obj.search(
|
||||
[
|
||||
("product_mrp_area_id.product_id", "=", self.fp_2.id),
|
||||
("date", "=", self.date_9),
|
||||
("date", "=", self.date_10),
|
||||
]
|
||||
)
|
||||
self.assertEqual(len(fp_2_line_2), 1)
|
||||
@@ -280,7 +278,7 @@ class TestMrpMultiLevel(TestMrpMultiLevelCommon):
|
||||
|
||||
def test_09_isolated_mrp_area_run(self):
|
||||
"""Test running MRP for just one area."""
|
||||
self.mrp_multi_level_wiz.sudo(self.mrp_manager).create(
|
||||
self.mrp_multi_level_wiz.with_user(self.mrp_manager).create(
|
||||
{"mrp_area_ids": [(6, 0, self.secondary_area.ids)]}
|
||||
).run_mrp_multi_level()
|
||||
this = self.mrp_inventory_obj.search(
|
||||
|
||||
@@ -23,17 +23,13 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="MRP Area">
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="toggle_active" type="object"
|
||||
class="oe_stat_button" icon="fa-archive">
|
||||
<field name="active" widget="boolean_button"
|
||||
options='{"terminology": "archive"}'/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="oe_button_box" name="button_box"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1><field name="name"/></h1>
|
||||
<group colspan="4" col="2">
|
||||
<group>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="warehouse_id"/>
|
||||
<field name="location_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
@@ -51,7 +47,6 @@
|
||||
<field name="name">MRP Area</field>
|
||||
<field name="res_model">mrp.area</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="mrp_area_tree"/>
|
||||
</record>
|
||||
|
||||
@@ -121,7 +121,6 @@
|
||||
<field name="name">MRP Inventory</field>
|
||||
<field name="res_model">mrp.inventory</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,pivot,graph</field>
|
||||
<field name="view_id" ref="mrp_inventory_tree"/>
|
||||
<field name="search_view_id" ref="mrp_inventory_search"/>
|
||||
|
||||
@@ -33,15 +33,11 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Product MRP Area parameters">
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="toggle_active" type="object"
|
||||
class="oe_stat_button" icon="fa-archive">
|
||||
<field name="active" widget="boolean_button"
|
||||
options='{"terminology": "archive"}'/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="oe_button_box" name="button_box"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<group colspan="4" col="2">
|
||||
<group>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="mrp_area_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="product_tmpl_id" invisible="1"/>
|
||||
@@ -120,7 +116,6 @@
|
||||
<field name="name">Product MRP Area Parameters</field>
|
||||
<field name="res_model">product.mrp.area</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="product_mrp_area_tree"/>
|
||||
<field name="search_view_id" ref="product_mrp_area_search"/>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
# Copyright 2018-19 Eficent Business and IT Consulting Services S.L.
|
||||
# (http://www.eficent.com)
|
||||
# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
@@ -64,30 +63,36 @@ class MrpInventoryProcure(models.TransientModel):
|
||||
res["item_ids"] = [(6, 0, items.ids)]
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def make_procurement(self):
|
||||
self.ensure_one()
|
||||
errors = []
|
||||
pg = self.env["procurement.group"]
|
||||
procurements = []
|
||||
for item in self.item_ids:
|
||||
if not item.qty:
|
||||
raise ValidationError(_("Quantity must be positive."))
|
||||
values = item._prepare_procurement_values()
|
||||
# Run procurement
|
||||
try:
|
||||
self.env["procurement.group"].run(
|
||||
procurements.append(
|
||||
pg.Procurement(
|
||||
item.product_id,
|
||||
item.qty,
|
||||
item.uom_id,
|
||||
item.location_id,
|
||||
"INT: " + str(self.env.user.login), # name?
|
||||
"INT: " + str(self.env.user.login), # origin?
|
||||
"MRP: " + str(self.env.user.login), # name?
|
||||
"MRP: " + str(self.env.user.login), # origin?
|
||||
item.mrp_inventory_id.company_id,
|
||||
values,
|
||||
)
|
||||
)
|
||||
# Run procurements
|
||||
try:
|
||||
pg.run(procurements)
|
||||
for item in self.item_ids:
|
||||
item.planned_order_id.qty_released += item.qty
|
||||
except UserError as error:
|
||||
errors.append(error.name)
|
||||
if errors:
|
||||
raise UserError("\n".join(errors))
|
||||
except UserError as error:
|
||||
errors.append(error.name)
|
||||
if errors:
|
||||
raise UserError("\n".join(errors))
|
||||
return {"type": "ir.actions.act_window_close"}
|
||||
|
||||
|
||||
@@ -122,7 +127,6 @@ class MrpInventoryProcureItem(models.TransientModel):
|
||||
"group_id": group,
|
||||
}
|
||||
|
||||
@api.multi
|
||||
@api.onchange("uom_id")
|
||||
def onchange_uom_id(self):
|
||||
for rec in self:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Copyright 2016 Ucamco - Wim Audenaert <wim.audenaert@ucamco.com>
|
||||
# Copyright 2016-19 Eficent Business and IT Consulting Services S.L.
|
||||
# - Jordi Ballester Alomar <jordi.ballester@eficent.com>
|
||||
# - Lois Rilo <lois.rilo@eficent.com>
|
||||
# Copyright 2016-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# - Jordi Ballester Alomar <jordi.ballester@forgeflow.com>
|
||||
# - Lois Rilo <lois.rilo@forgeflow.com>
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
import logging
|
||||
@@ -298,7 +298,9 @@ class MultiLevelMrp(models.TransientModel):
|
||||
products.write({"llc": llc})
|
||||
products = self.env["product.product"].search([("llc", "=", llc)])
|
||||
counter = len(products)
|
||||
log_msg = "Low level code {} finished - Nbr. products: {}".format(llc, counter)
|
||||
log_msg = "Low level code {} finished - Nbr. products: {}".format(
|
||||
llc, counter
|
||||
)
|
||||
logger.info(log_msg)
|
||||
|
||||
mrp_lowest_llc = llc
|
||||
@@ -473,8 +475,7 @@ class MultiLevelMrp(models.TransientModel):
|
||||
continue
|
||||
init_counter += 1
|
||||
log_msg = "MRP Init: {} - {} ".format(
|
||||
init_counter,
|
||||
product_mrp_area.display_name,
|
||||
init_counter, product_mrp_area.display_name
|
||||
)
|
||||
logger.info(log_msg)
|
||||
self._init_mrp_move(product_mrp_area)
|
||||
@@ -603,8 +604,7 @@ class MultiLevelMrp(models.TransientModel):
|
||||
counter += 1
|
||||
|
||||
log_msg = "MRP Calculation LLC {} Finished - Nbr. products: {}".format(
|
||||
llc - 1,
|
||||
counter,
|
||||
llc - 1, counter
|
||||
)
|
||||
logger.info(log_msg)
|
||||
|
||||
@@ -723,7 +723,6 @@ class MultiLevelMrp(models.TransientModel):
|
||||
self._init_mrp_inventory(product_mrp_area)
|
||||
logger.info("End MRP final process")
|
||||
|
||||
@api.multi
|
||||
def run_mrp_multi_level(self):
|
||||
self._mrp_cleanup(self.mrp_area_ids)
|
||||
mrp_lowest_llc = self._low_level_code_calculation()
|
||||
|
||||
@@ -20,10 +20,9 @@
|
||||
|
||||
<act_window name="Run MRP"
|
||||
res_model="mrp.multi.level"
|
||||
src_model="mrp.multi.level"
|
||||
binding_model="mrp.multi.level"
|
||||
view_mode="form"
|
||||
target="new"
|
||||
key2="client_action_multi"
|
||||
id="action_mrp_multi_level"/>
|
||||
|
||||
</odoo>
|
||||
|
||||
Reference in New Issue
Block a user