Fix baseline gantt chart bug when new tasks are added to the planned schedule

This commit is contained in:
Sigma Dimensions
2023-05-05 23:43:27 +01:00
parent 0b9e7af325
commit eb29543d24
+21 -16
View File
@@ -1476,13 +1476,15 @@ class Sequence(blenderbim.core.tool.Sequence):
is_baseline = False is_baseline = False
if work_schedule.PredefinedType == "BASELINE": if work_schedule.PredefinedType == "BASELINE":
is_baseline = True is_baseline = True
relating_work_schedule = work_schedule.IsDeclaredBy[0].RelatingObject
work_schedule = relating_work_schedule
tasks_json = [] tasks_json = []
for task in ifcopenshell.util.sequence.get_root_tasks(work_schedule): for task in ifcopenshell.util.sequence.get_root_tasks(relating_work_schedule):
cls.create_new_task_json(task, tasks_json, sequence_type_map, is_baseline=is_baseline) cls.create_new_task_json(task, tasks_json, sequence_type_map, baseline_schedule=work_schedule)
return tasks_json return tasks_json
@classmethod @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 task_time = task.TaskTime
resources = ifcopenshell.util.sequence.get_task_resources(task, is_deep=False) 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_start = task_time.ScheduleStart if task_time else ""
schedule_finish = task_time.ScheduleFinish 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 baseline_task = None
if declared_by_task and declared_by_task.TaskTime: if baseline_schedule:
compare_start = declared_by_task.TaskTime.ScheduleStart for rel in task.Declares:
compare_finish = declared_by_task.TaskTime.ScheduleFinish 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: else:
compare_start = schedule_start compare_start = schedule_start
compare_finish = schedule_finish compare_finish = schedule_finish
@@ -1507,14 +1516,10 @@ class Sequence(blenderbim.core.tool.Sequence):
"pID": task.id(), "pID": task.id(),
"pName": task.Name, "pName": task.Name,
"pCaption": task.Name, "pCaption": task.Name,
"pStart": declared_by_task.TaskTime.ScheduleStart "pStart": schedule_start,
if declared_by_task and declared_by_task.TaskTime "pEnd": schedule_finish ,
else schedule_start, "pPlanStart": compare_start,
"pEnd": declared_by_task.TaskTime.ScheduleFinish "pPlanEnd": compare_finish,
if declared_by_task and declared_by_task.TaskTime
else schedule_finish,
"pPlanStart": schedule_start,
"pPlanEnd": schedule_finish,
"pMile": 1 if task.IsMilestone else 0, "pMile": 1 if task.IsMilestone else 0,
"pRes": string_resources, "pRes": string_resources,
"pComp": 0, "pComp": 0,
@@ -1541,7 +1546,7 @@ class Sequence(blenderbim.core.tool.Sequence):
) )
json.append(data) json.append(data)
for nested_task in ifcopenshell.util.sequence.get_nested_tasks(task): 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 @classmethod
def generate_gantt_browser_chart(cls, task_json, work_schedule): def generate_gantt_browser_chart(cls, task_json, work_schedule):