mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 09:21:46 +00:00
Fix bug in work schedule cascading where some cascades wouldn't work and non-working dates would lead to an infinite recursion
This commit is contained in:
@@ -117,7 +117,6 @@ def updateTaskTimeDateTime(self, context, startfinish):
|
||||
return "-"
|
||||
return time.strftime("%d/%m/%y")
|
||||
|
||||
startfinish_key = "Schedule" + startfinish.capitalize()
|
||||
startfinish_value = getattr(self, startfinish)
|
||||
|
||||
if startfinish_value == "-":
|
||||
@@ -141,6 +140,7 @@ def updateTaskTimeDateTime(self, context, startfinish):
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=task)
|
||||
Data.load(IfcStore.get_file())
|
||||
|
||||
startfinish_key = "Schedule" + startfinish.capitalize()
|
||||
if Data.task_times[task_time.id()][startfinish_key] == startfinish_datetime:
|
||||
canonical_startfinish_value = canonicalise_time(startfinish_datetime)
|
||||
if startfinish_value != canonical_startfinish_value:
|
||||
@@ -154,10 +154,9 @@ def updateTaskTimeDateTime(self, context, startfinish):
|
||||
)
|
||||
Data.load(IfcStore.get_file())
|
||||
bpy.ops.bim.load_task_properties()
|
||||
setattr(self, startfinish, canonicalise_time(startfinish_datetime))
|
||||
|
||||
|
||||
def updateTaskduration(self, context):
|
||||
def updateTaskDuration(self, context):
|
||||
props = context.scene.BIMWorkScheduleProperties
|
||||
if not props.is_task_update_enabled:
|
||||
return
|
||||
@@ -224,7 +223,7 @@ class Task(PropertyGroup):
|
||||
is_selected: BoolProperty(name="Is Selected")
|
||||
is_expanded: BoolProperty(name="Is Expanded")
|
||||
level_index: IntProperty(name="Level Index")
|
||||
duration: StringProperty(name="Duration", update=updateTaskduration)
|
||||
duration: StringProperty(name="Duration", update=updateTaskDuration)
|
||||
start: StringProperty(name="Start", update=updateTaskTimeStart)
|
||||
finish: StringProperty(name="Finish", update=updateTaskTimeFinish)
|
||||
calendar: StringProperty(name="Calendar")
|
||||
|
||||
@@ -12,9 +12,9 @@ class Usecase:
|
||||
|
||||
def execute(self):
|
||||
self.calendar_cache = {}
|
||||
self.cascade_task(self.settings["task"])
|
||||
self.cascade_task(self.settings["task"], is_first_task=True)
|
||||
|
||||
def cascade_task(self, task):
|
||||
def cascade_task(self, task, is_first_task=False):
|
||||
if not task.TaskTime:
|
||||
return
|
||||
|
||||
@@ -88,13 +88,13 @@ class Usecase:
|
||||
)
|
||||
if potential_finish > finish:
|
||||
start_ifc = ifcopenshell.util.date.datetime2ifc(start, "IfcDateTime")
|
||||
if task.TaskTime.ScheduleStart == start_ifc:
|
||||
if task.TaskTime.ScheduleStart == start_ifc and not is_first_task:
|
||||
return
|
||||
task.TaskTime.ScheduleStart = start_ifc
|
||||
task.TaskTime.ScheduleFinish = ifcopenshell.util.date.datetime2ifc(potential_finish, "IfcDateTime")
|
||||
else:
|
||||
finish_ifc = ifcopenshell.util.date.datetime2ifc(finish, "IfcDateTime")
|
||||
if task.TaskTime.ScheduleFinish == finish_ifc:
|
||||
if task.TaskTime.ScheduleFinish == finish_ifc and not is_first_task:
|
||||
return
|
||||
task.TaskTime.ScheduleFinish = finish_ifc
|
||||
task.TaskTime.ScheduleStart = ifcopenshell.util.date.datetime2ifc(
|
||||
@@ -109,7 +109,7 @@ class Usecase:
|
||||
elif finishes:
|
||||
finish = max(finishes)
|
||||
finish_ifc = ifcopenshell.util.date.datetime2ifc(finish, "IfcDateTime")
|
||||
if task.TaskTime.ScheduleFinish == finish_ifc:
|
||||
if task.TaskTime.ScheduleFinish == finish_ifc and not is_first_task:
|
||||
return
|
||||
task.TaskTime.ScheduleFinish = finish_ifc
|
||||
task.TaskTime.ScheduleStart = ifcopenshell.util.date.datetime2ifc(
|
||||
@@ -124,7 +124,7 @@ class Usecase:
|
||||
elif starts:
|
||||
start = max(starts)
|
||||
start_ifc = ifcopenshell.util.date.datetime2ifc(start, "IfcDateTime")
|
||||
if task.TaskTime.ScheduleStart == start_ifc:
|
||||
if task.TaskTime.ScheduleStart == start_ifc and not is_first_task:
|
||||
return
|
||||
task.TaskTime.ScheduleStart = start_ifc
|
||||
task.TaskTime.ScheduleFinish = ifcopenshell.util.date.datetime2ifc(
|
||||
|
||||
Reference in New Issue
Block a user