mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
fix cascading schedule when parent tasks have sequence relationships #3772
This commit is contained in:
@@ -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 []
|
||||
|
||||
Reference in New Issue
Block a user