fix cascading schedule when parent tasks have sequence relationships #3772

This commit is contained in:
Sigma Dimensions (Yass)
2023-09-20 01:05:19 +01:00
parent 377bcfe6da
commit a3802c25c0
2 changed files with 29 additions and 1 deletions
@@ -135,7 +135,9 @@ class Usecase:
finishes = []
starts = []
for rel in task.IsSuccessorFrom:
for rel in ifcopenshell.util.sequence.get_sequence_assignment(
task, "predecessor"
):
predecessor = rel.RelatingProcess
predecessor_duration = (
ifcopenshell.util.date.ifc2datetime(
@@ -314,6 +316,12 @@ class Usecase:
for rel in task.IsPredecessorTo:
self.cascade_task(rel.RelatedProcess, task_sequence=task_sequence + [task])
for rel in task.IsNestedBy:
[
self.cascade_task(nested_task, task_sequence=task_sequence + [task])
for nested_task in rel.RelatedObjects or []
]
def get_lag_time_days(self, lag_time):
return ifcopenshell.util.date.ifc2datetime(lag_time.LagValue.wrappedValue).days
@@ -426,3 +426,23 @@ def get_tasks_for_product(product, schedule=None):
]
return inputs, outputs
def get_sequence_assignment(task, sequence="successor"):
if sequence == "successor":
relationship_attr = "IsPredecessorTo"
elif sequence == "predecessor":
relationship_attr = "IsSuccessorFrom"
else:
return []
relationship = getattr(task, relationship_attr, None)
if relationship:
return relationship
for rel in task.Nests or []:
result = get_sequence_assignment(rel.RelatingObject, sequence)
if result:
return result
return []