summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Voet (ryv) <ryv@odoo.com>2019-12-31 09:43:21 +0000
committerRémy Voet (ryv) <ryv@odoo.com>2019-12-31 09:43:21 +0000
commit4c98c92bd05928ee6232fbe392d7a2a697dbc79e (patch)
tree8072661879970a42c347e351803c851fb33397b3
parentc0a1ff9bc13fa02f31ea30cce620ea7615d1ca13 (diff)
[FIX] mrp: fix gantt unavailability
_get_unavailability_intervals didn't return the correct dict (describe in the docstring). Then the override in maintenance module was wrong. task-2082261 closes odoo/odoo#42530 Signed-off-by: Simon Lejeune (sle) <sle@openerp.com>
-rw-r--r--addons/mrp/models/mrp_workcenter.py11
-rw-r--r--addons/mrp/models/mrp_workorder.py10
2 files changed, 11 insertions, 10 deletions
diff --git a/addons/mrp/models/mrp_workcenter.py b/addons/mrp/models/mrp_workcenter.py
index f9d7881ce20..cae9181da48 100644
--- a/addons/mrp/models/mrp_workcenter.py
+++ b/addons/mrp/models/mrp_workcenter.py
@@ -192,16 +192,17 @@ class MrpWorkcenter(models.Model):
return action
def _get_unavailability_intervals(self, start_datetime, end_datetime):
- """Get Unavailability Intervals foreach workcenter in self.
+ """Get the unavailabilities intervals for the workcenters in `self`.
- Return a dictionnary with key as workcenter id in self and values
- as a list of unavailability slot as tuple (start, end) of datetime.
+ Return the list of unavailabilities (a tuple of datetimes) indexed
+ by workcenter id.
:param start_datetime: filter unavailability with only slots after this start_datetime
:param end_datetime: filter unavailability with only slots before this end_datetime
- :rtype: dict of tuple (datetime, datetime)
+ :rtype: dict
"""
- return self.resource_id._get_unavailable_intervals(start_datetime, end_datetime)
+ unavailability_ressources = self.resource_id._get_unavailable_intervals(start_datetime, end_datetime)
+ return {wc.id: unavailability_ressources.get(wc.resource_id.id, []) for wc in self}
class MrpWorkcenterProductivityLossType(models.Model):
diff --git a/addons/mrp/models/mrp_workorder.py b/addons/mrp/models/mrp_workorder.py
index 8b457130a6b..af87dcac3ea 100644
--- a/addons/mrp/models/mrp_workorder.py
+++ b/addons/mrp/models/mrp_workorder.py
@@ -600,13 +600,13 @@ class MrpWorkorder(models.Model):
# Only notable interval (more than one case) is send to the front-end (avoid sending useless information)
cell_dt = (scale in ['day', 'week'] and timedelta(hours=1)) or (scale == 'month' and timedelta(days=1)) or timedelta(days=28)
- def add_unavailability(row, workcenter=None):
+ def add_unavailability(row, workcenter_id=None):
if row.get('groupedBy') and row.get('groupedBy')[0] == 'workcenter_id' and row.get('resId'):
- workcenter = self.env['mrp.workcenter'].browse(row.get('resId'))
- if workcenter:
- notable_intervals = filter(lambda interval: interval[1] - interval[0] >= cell_dt, unavailability_mapping[workcenter.resource_id.id])
+ workcenter_id = row.get('resId')
+ if workcenter_id:
+ notable_intervals = filter(lambda interval: interval[1] - interval[0] >= cell_dt, unavailability_mapping[workcenter_id])
row['unavailabilities'] = [{'start': interval[0], 'stop': interval[1]} for interval in notable_intervals]
- return {'workcenter': workcenter}
+ return {'workcenter_id': workcenter_id}
for row in rows:
traverse_inplace(add_unavailability, row)