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:
Dion Moult
2021-08-10 12:35:07 +10:00
parent ebd84a662e
commit 538029f396
2 changed files with 9 additions and 10 deletions
@@ -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(