mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-09 21:53:40 +00:00
Fix baseline gantt chart bug when new tasks are added to the planned schedule
This commit is contained in:
@@ -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):
|
||||||
@@ -1598,4 +1603,4 @@ class Sequence(blenderbim.core.tool.Sequence):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def is_sort_reversed(cls):
|
def is_sort_reversed(cls):
|
||||||
return bpy.context.scene.BIMWorkScheduleProperties.is_sort_reversed
|
return bpy.context.scene.BIMWorkScheduleProperties.is_sort_reversed
|
||||||
Reference in New Issue
Block a user