diff --git a/mrp_multi_level/data/mrp_area_data.xml b/mrp_multi_level/data/mrp_area_data.xml
index 6ce02c128..e0334955c 100644
--- a/mrp_multi_level/data/mrp_area_data.xml
+++ b/mrp_multi_level/data/mrp_area_data.xml
@@ -4,5 +4,6 @@
WH/Stock
+
diff --git a/mrp_multi_level/models/mrp_area.py b/mrp_multi_level/models/mrp_area.py
index 2b3be32e5..630081a5e 100644
--- a/mrp_multi_level/models/mrp_area.py
+++ b/mrp_multi_level/models/mrp_area.py
@@ -19,3 +19,5 @@ class MrpArea(models.Model):
required=True,
)
active = fields.Boolean(default=True)
+ calendar_id = fields.Many2one('resource.calendar',
+ 'Working Hours')
diff --git a/mrp_multi_level/tests/test_mrp_multi_level.py b/mrp_multi_level/tests/test_mrp_multi_level.py
index a8b156bd9..979893078 100644
--- a/mrp_multi_level/tests/test_mrp_multi_level.py
+++ b/mrp_multi_level/tests/test_mrp_multi_level.py
@@ -2,7 +2,7 @@
# (http://www.eficent.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
-from datetime import date, datetime, timedelta
+from datetime import datetime, timedelta
from odoo.tests.common import SavepointCase
from odoo import fields
@@ -37,6 +37,7 @@ class TestMrpMultiLevel(SavepointCase):
cls.stock_location = cls.wh.lot_stock_id
cls.customer_location = cls.env.ref(
'stock.stock_location_customers')
+ cls.calendar = cls.env.ref('resource.resource_calendar_std')
# Partner:
vendor1 = cls.partner_obj.create({'name': 'Vendor 1'})
@@ -53,7 +54,8 @@ class TestMrpMultiLevel(SavepointCase):
})
# Create test picking:
- date_move = datetime.today() + timedelta(days=7)
+ res = cls.calendar.plan_days(7+1, datetime.today())
+ date_move = res.date()
cls.picking_1 = cls.stock_picking_obj.create({
'picking_type_id': cls.env.ref('stock.picking_type_out').id,
'location_id': cls.stock_location.id,
@@ -83,7 +85,7 @@ class TestMrpMultiLevel(SavepointCase):
cls.picking_1.action_confirm()
# Create Test PO:
- date_po = datetime.today() + timedelta(days=1)
+ date_po = cls.calendar.plan_days(1+1, datetime.today()).date()
cls.po = cls.po_obj.create({
'name': 'Test PO-001',
'partner_id': cls.vendor.id,
@@ -99,7 +101,7 @@ class TestMrpMultiLevel(SavepointCase):
})
# Create test MO:
- date_mo = datetime.today() + timedelta(days=9)
+ date_mo = cls.calendar.plan_days(9+1, datetime.today()).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,
@@ -111,13 +113,20 @@ class TestMrpMultiLevel(SavepointCase):
# Dates (Strings):
today = datetime.today()
- cls.date_3 = fields.Date.to_string(today + timedelta(days=3))
- cls.date_5 = fields.Date.to_string(today + timedelta(days=5))
- cls.date_6 = fields.Date.to_string(today + timedelta(days=6))
- cls.date_7 = fields.Date.to_string(today + timedelta(days=7))
- cls.date_8 = fields.Date.to_string(today + timedelta(days=8))
- cls.date_9 = fields.Date.to_string(today + timedelta(days=9))
- cls.date_10 = fields.Date.to_string(today + timedelta(days=10))
+ cls.date_3 = fields.Date.to_string(
+ cls.calendar.plan_days(3+1, datetime.today()).date())
+ cls.date_5 = fields.Date.to_string(
+ cls.calendar.plan_days(5+1, datetime.today()).date())
+ cls.date_6 = fields.Date.to_string(
+ cls.calendar.plan_days(6+1, datetime.today()).date())
+ cls.date_7 = fields.Date.to_string(
+ cls.calendar.plan_days(7+1, datetime.today()).date())
+ cls.date_8 = fields.Date.to_string((
+ cls.calendar.plan_days(8+1, datetime.today()).date()))
+ cls.date_9 = fields.Date.to_string((
+ cls.calendar.plan_days(9+1, datetime.today()).date()))
+ cls.date_10 = fields.Date.to_string(
+ cls.calendar.plan_days(10+1, datetime.today()).date())
# Create Date Ranges:
cls.dr_type = cls.env['date.range.type'].create({
@@ -359,7 +368,7 @@ class TestMrpMultiLevel(SavepointCase):
self.assertTrue(mos)
self.assertEqual(mos.product_qty, 100.0)
datetime_5 = fields.Datetime.to_string(
- date.today() + timedelta(days=5))
+ self.calendar.plan_days(5 + 1, datetime.today()).date())
self.assertEqual(mos.date_planned_start, datetime_5)
# TODO: test procure wizard: pos, multiple...
diff --git a/mrp_multi_level/views/mrp_area_view.xml b/mrp_multi_level/views/mrp_area_view.xml
index 8f7f5dc2a..e887855ea 100644
--- a/mrp_multi_level/views/mrp_area_view.xml
+++ b/mrp_multi_level/views/mrp_area_view.xml
@@ -10,6 +10,7 @@
+
@@ -28,6 +29,7 @@
+
diff --git a/mrp_multi_level/wizards/mrp_multi_level.py b/mrp_multi_level/wizards/mrp_multi_level.py
index 0619a535d..f7e97cea8 100644
--- a/mrp_multi_level/wizards/mrp_multi_level.py
+++ b/mrp_multi_level/wizards/mrp_multi_level.py
@@ -220,8 +220,15 @@ class MultiLevelMrp(models.TransientModel):
else:
mrp_date_supply = mrp_date
- mrp_action_date = mrp_date - timedelta(
- days=mrp_product_id.mrp_lead_time)
+ calendar = mrp_product_id.mrp_area_id.calendar_id
+ if calendar and mrp_product_id.mrp_lead_time:
+ date_str = fields.Date.to_string(mrp_date)
+ dt = fields.Datetime.from_string(date_str)
+ res = calendar.plan_days(-1 * mrp_product_id.mrp_lead_time -1, dt)
+ mrp_action_date = res.date()
+ else:
+ mrp_action_date = mrp_date - timedelta(
+ days=mrp_product_id.mrp_lead_time)
qty_ordered = 0.00
qty_to_order = mrp_qty
@@ -235,8 +242,7 @@ class MultiLevelMrp(models.TransientModel):
qty_ordered = qty_ordered + qty
if mrp_action == 'mo':
- mrp_date_demand = mrp_date - timedelta(
- days=mrp_product_id.mrp_lead_time)
+ mrp_date_demand = mrp_action_date
if mrp_date_demand < date.today():
mrp_date_demand = date.today()
if not mrp_product_id.product_id.bom_ids: