diff --git a/src/blenderbim/blenderbim/tool/sequence.py b/src/blenderbim/blenderbim/tool/sequence.py index 3634d7efbd..681fc5ce59 100644 --- a/src/blenderbim/blenderbim/tool/sequence.py +++ b/src/blenderbim/blenderbim/tool/sequence.py @@ -1476,13 +1476,15 @@ class Sequence(blenderbim.core.tool.Sequence): is_baseline = False if work_schedule.PredefinedType == "BASELINE": is_baseline = True + relating_work_schedule = work_schedule.IsDeclaredBy[0].RelatingObject + work_schedule = relating_work_schedule tasks_json = [] - for task in ifcopenshell.util.sequence.get_root_tasks(work_schedule): - cls.create_new_task_json(task, tasks_json, sequence_type_map, is_baseline=is_baseline) + for task in ifcopenshell.util.sequence.get_root_tasks(relating_work_schedule): + cls.create_new_task_json(task, tasks_json, sequence_type_map, baseline_schedule=work_schedule) return tasks_json @classmethod - def create_new_task_json(cls, task, json, type_map=None, is_baseline=False): + def create_new_task_json(cls, task, json, type_map=None, baseline_schedule=None): task_time = task.TaskTime resources = ifcopenshell.util.sequence.get_task_resources(task, is_deep=False) @@ -1495,10 +1497,17 @@ class Sequence(blenderbim.core.tool.Sequence): schedule_start = task_time.ScheduleStart if task_time else "" schedule_finish = task_time.ScheduleFinish if task_time else "" - declared_by_task = task.IsDeclaredBy[0].RelatingObject if is_baseline else None - if declared_by_task and declared_by_task.TaskTime: - compare_start = declared_by_task.TaskTime.ScheduleStart - compare_finish = declared_by_task.TaskTime.ScheduleFinish + baseline_task = None + if baseline_schedule: + for rel in task.Declares: + for baseline_task in rel.RelatedObjects: + if baseline_schedule.id() == ifcopenshell.util.sequence.get_task_work_schedule(baseline_task).id(): + baseline_task = task + break + + if baseline_task and baseline_task.TaskTime: + compare_start = baseline_task.TaskTime.ScheduleStart + compare_finish = baseline_task.TaskTime.ScheduleFinish else: compare_start = schedule_start compare_finish = schedule_finish @@ -1507,14 +1516,10 @@ class Sequence(blenderbim.core.tool.Sequence): "pID": task.id(), "pName": task.Name, "pCaption": task.Name, - "pStart": declared_by_task.TaskTime.ScheduleStart - if declared_by_task and declared_by_task.TaskTime - else schedule_start, - "pEnd": declared_by_task.TaskTime.ScheduleFinish - if declared_by_task and declared_by_task.TaskTime - else schedule_finish, - "pPlanStart": schedule_start, - "pPlanEnd": schedule_finish, + "pStart": schedule_start, + "pEnd": schedule_finish , + "pPlanStart": compare_start, + "pPlanEnd": compare_finish, "pMile": 1 if task.IsMilestone else 0, "pRes": string_resources, "pComp": 0, @@ -1541,7 +1546,7 @@ class Sequence(blenderbim.core.tool.Sequence): ) json.append(data) for nested_task in ifcopenshell.util.sequence.get_nested_tasks(task): - cls.create_new_task_json(nested_task, json, type_map, is_baseline) + cls.create_new_task_json(nested_task, json, type_map, baseline_schedule) @classmethod def generate_gantt_browser_chart(cls, task_json, work_schedule): @@ -1598,4 +1603,4 @@ class Sequence(blenderbim.core.tool.Sequence): @classmethod def is_sort_reversed(cls): - return bpy.context.scene.BIMWorkScheduleProperties.is_sort_reversed + return bpy.context.scene.BIMWorkScheduleProperties.is_sort_reversed \ No newline at end of file