From 4c98c92bd05928ee6232fbe392d7a2a697dbc79e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Voet=20=28ryv=29?= Date: Tue, 31 Dec 2019 09:43:21 +0000 Subject: [PATCH] [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) --- addons/mrp/models/mrp_workcenter.py | 11 ++++++----- addons/mrp/models/mrp_workorder.py | 10 +++++----- 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)