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 0a7ef80ca7
commit b15926c20a
+22 -17
View File
@@ -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