diff --git a/mrp_multi_level/models/product_mrp_area.py b/mrp_multi_level/models/product_mrp_area.py
index 635a9699c..ff6d153e0 100644
--- a/mrp_multi_level/models/product_mrp_area.py
+++ b/mrp_multi_level/models/product_mrp_area.py
@@ -6,7 +6,8 @@
from math import ceil
-from odoo import api, fields, models
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
class ProductMRPArea(models.Model):
@@ -98,11 +99,30 @@ class ProductMRPArea(models.Model):
inverse_name="product_mrp_area_id",
readonly=True,
)
+ group_estimate_days = fields.Integer(
+ string="Group Days of Estimates",
+ default=1,
+ )
_sql_constraints = [
('product_mrp_area_uniq', 'unique(product_id, mrp_area_id)',
'The product/MRP Area parameters combination must be unique.'),
]
+ @api.multi
+ @api.constrains(
+ "mrp_minimum_order_qty", "mrp_maximum_order_qty", "mrp_qty_multiple",
+ "mrp_minimum_stock", "mrp_nbr_days", "group_estimate_days",
+ )
+ def _check_negatives(self):
+ values = self.read([
+ "mrp_minimum_order_qty", "mrp_maximum_order_qty",
+ "mrp_qty_multiple",
+ "mrp_minimum_stock", "mrp_nbr_days", "group_estimate_days",
+ ])
+ for rec in values:
+ 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, '[%s] %s' % (
diff --git a/mrp_multi_level/views/product_mrp_area_views.xml b/mrp_multi_level/views/product_mrp_area_views.xml
index 0bd3b7e61..db4df6315 100644
--- a/mrp_multi_level/views/product_mrp_area_views.xml
+++ b/mrp_multi_level/views/product_mrp_area_views.xml
@@ -51,6 +51,7 @@
+
diff --git a/mrp_multi_level/wizards/mrp_multi_level.py b/mrp_multi_level/wizards/mrp_multi_level.py
index cb3f19a71..69241b853 100644
--- a/mrp_multi_level/wizards/mrp_multi_level.py
+++ b/mrp_multi_level/wizards/mrp_multi_level.py
@@ -58,7 +58,7 @@ class MultiLevelMrp(models.TransientModel):
'purchase_order_id': None,
'purchase_line_id': None,
'stock_move_id': None,
- 'mrp_qty': -daily_qty,
+ 'mrp_qty': -daily_qty * product_mrp_area.group_estimate_days,
'current_qty': -daily_qty,
'mrp_date': date,
'current_date': date,
@@ -360,21 +360,28 @@ class MultiLevelMrp(models.TransientModel):
return True
@api.model
- def _init_mrp_move_from_forecast(self, product_mrp_area):
+ def _estimates_domain(self, product_mrp_area):
locations = product_mrp_area.mrp_area_id._get_locations()
- today = fields.Date.today()
- estimates = self.env['stock.demand.estimate'].search([
+ return [
('product_id', '=', product_mrp_area.product_id.id),
('location_id', 'in', locations.ids),
- ('date_range_id.date_end', '>=', today)
- ])
+ ('date_range_id.date_end', '>=', fields.Date.today()),
+ ]
+
+ @api.model
+ def _init_mrp_move_from_forecast(self, product_mrp_area):
+ if not product_mrp_area.group_estimate_days:
+ return False
+ today = fields.Date.today()
+ domain = self._estimates_domain(product_mrp_area)
+ estimates = self.env['stock.demand.estimate'].search(domain)
for rec in estimates:
start = rec.date_range_id.date_start
if start < today:
start = today
mrp_date = fields.Date.from_string(start)
date_end = fields.Date.from_string(rec.date_range_id.date_end)
- delta = timedelta(days=1)
+ delta = timedelta(days=product_mrp_area.group_estimate_days)
while mrp_date <= date_end:
mrp_move_data = \
self._prepare_mrp_move_data_from_forecast(