[11.0][REW/IMP] mrp_multi_level:

* Extract concept of planned orders from mrp.move.
* Fix error grouping demand when there is no supply for a the first day of grouping.
* Adapt tests.
This commit is contained in:
Lois Rilo
2019-05-21 12:51:37 +02:00
committed by davidborromeo
parent 26c97b4169
commit 4625b79bc9
18 changed files with 467 additions and 348 deletions

View File

@@ -1,6 +1,9 @@
# Copyright 2016 Ucamco - Wim Audenaert <wim.audenaert@ucamco.com>
# Copyright 2016-18 Eficent Business and IT Consulting Services S.L.
# 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>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from math import ceil
from odoo import api, fields, models
@@ -36,7 +39,7 @@ class ProductMRPArea(models.Model):
mrp_minimum_order_qty = fields.Float(
string='Minimum Order Qty', default=0.0,
)
mrp_minimum_stock = fields.Float(string='Minimum Stock')
mrp_minimum_stock = fields.Float(string="Safety Stock")
mrp_nbr_days = fields.Integer(
string='Nbr. Days', default=0,
help="Number of days to group demand for this product during the "
@@ -51,7 +54,7 @@ class ProductMRPArea(models.Model):
)
mrp_lead_time = fields.Float(
string='Lead Time',
related='product_id.produce_delay',
compute='_compute_mrp_lead_time',
)
main_supplier_id = fields.Many2one(
comodel_name='res.partner', string='Main Supplier',
@@ -71,13 +74,20 @@ class ProductMRPArea(models.Model):
compute='_compute_supply_method',
)
qty_available = fields.Float('Quantity Available',
compute='_compute_qty_available')
qty_available = fields.Float(
string="Quantity Available",
compute="_compute_qty_available",
)
mrp_move_ids = fields.One2many(
comodel_name='mrp.move',
inverse_name='product_mrp_area_id',
readonly=True,
)
planned_order_ids = fields.One2many(
comodel_name="mrp.planned.order",
inverse_name="product_mrp_area_id",
readonly=True,
)
_sql_constraints = [
('product_mrp_area_uniq', 'unique(product_id, mrp_area_id)',
'The product/MRP Area parameters combination must be unique.'),
@@ -89,10 +99,21 @@ class ProductMRPArea(models.Model):
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")
for rec in produced:
rec.mrp_lead_time = rec.product_id.produce_delay
for rec in purchased:
rec.mrp_lead_time = rec.main_supplierinfo_id.delay
# TODO: 'move' supply method.
for rec in (self - produced - purchased):
rec.mrp_lead_time = 0
@api.multi
def _compute_qty_available(self):
for rec in self:
# TODO: move mrp_qty_available computation, maybe unreserved??
rec.qty_available = rec.product_id.with_context(
{'location': rec.mrp_area_id.location_id.id}).qty_available