mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-24 01:28:01 +00:00
fix cascading schedule when parent tasks have sequence relationships #3772
This commit is contained in:
@@ -135,7 +135,9 @@ class Usecase:
|
|||||||
finishes = []
|
finishes = []
|
||||||
starts = []
|
starts = []
|
||||||
|
|
||||||
for rel in task.IsSuccessorFrom:
|
for rel in ifcopenshell.util.sequence.get_sequence_assignment(
|
||||||
|
task, "predecessor"
|
||||||
|
):
|
||||||
predecessor = rel.RelatingProcess
|
predecessor = rel.RelatingProcess
|
||||||
predecessor_duration = (
|
predecessor_duration = (
|
||||||
ifcopenshell.util.date.ifc2datetime(
|
ifcopenshell.util.date.ifc2datetime(
|
||||||
@@ -314,6 +316,12 @@ class Usecase:
|
|||||||
for rel in task.IsPredecessorTo:
|
for rel in task.IsPredecessorTo:
|
||||||
self.cascade_task(rel.RelatedProcess, task_sequence=task_sequence + [task])
|
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):
|
def get_lag_time_days(self, lag_time):
|
||||||
return ifcopenshell.util.date.ifc2datetime(lag_time.LagValue.wrappedValue).days
|
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
|
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