[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>
This commit is contained in:
Rémy Voet (ryv)
2019-12-31 09:43:21 +00:00
parent c0a1ff9bc1
commit 4c98c92bd0
2 changed files with 11 additions and 10 deletions
+6 -5
View File
@@ -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):
+5 -5
View File
@@ -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)