You can now toggle showing time columns in work schedule, minor fixes and ui cleanup

This commit is contained in:
Dion Moult
2021-04-20 23:34:10 +10:00
parent 6d9770542f
commit 9beddca2f7
3 changed files with 26 additions and 15 deletions
@@ -2,7 +2,7 @@ import bpy
import json import json
import ifcopenshell.api import ifcopenshell.api
from datetime import datetime from datetime import datetime
from dateutil.parser import parse from dateutil import parser
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.sequence.data import Data from ifcopenshell.api.sequence.data import Data
@@ -587,9 +587,12 @@ class EditTaskTime(bpy.types.Operator):
continue continue
if "Start" in key or "Finish" in key or key == "StatusTime": if "Start" in key or "Finish" in key or key == "StatusTime":
try: try:
attributes[key] = parse(value) attributes[key] = parser.isoparse(value)
except: except:
attributes[key] = None try:
attributes[key] = parser.parse(value, dayfirst=True, fuzzy=True)
except:
attributes[key] = None
return attributes return attributes
@@ -3,7 +3,7 @@ import ifcopenshell.api
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.sequence.data import Data from ifcopenshell.api.sequence.data import Data
from blenderbim.bim.prop import StrProperty, Attribute from blenderbim.bim.prop import StrProperty, Attribute
from dateutil.parser import parse from dateutil import parser
from bpy.types import PropertyGroup from bpy.types import PropertyGroup
from bpy.props import ( from bpy.props import (
PointerProperty, PointerProperty,
@@ -68,14 +68,17 @@ def updateTaskTimeDateTime(self, context, startfinish):
if startfinish_value == "-": if startfinish_value == "-":
return return
self.file = IfcStore.get_file() self.file = IfcStore.get_file()
props = context.scene.BIMWorkScheduleProperties
try: try:
startfinish_datetime = parse(startfinish_value) startfinish_datetime = parser.isoparse(startfinish_value)
except: except:
setattr(self, startfinish, "-") try:
return startfinish_datetime = parser.parse(startfinish_value, dayfirst=True, fuzzy=True)
except:
setattr(self, startfinish, "-")
return
task = self.file.by_id(self.ifc_definition_id) task = self.file.by_id(self.ifc_definition_id)
if task.TaskTime: if task.TaskTime:
@@ -85,6 +88,9 @@ def updateTaskTimeDateTime(self, context, startfinish):
Data.load(IfcStore.get_file()) Data.load(IfcStore.get_file())
if Data.task_times[task_time.id()][startfinish_key] == startfinish_datetime: if Data.task_times[task_time.id()][startfinish_key] == startfinish_datetime:
canonical_startfinish_value = canonicalise_time(startfinish_datetime)
if startfinish_value != canonical_startfinish_value:
setattr(self, startfinish, canonical_startfinish_value)
return return
ifcopenshell.api.run( ifcopenshell.api.run(
@@ -130,6 +136,7 @@ class BIMWorkScheduleProperties(PropertyGroup):
active_task_index: IntProperty(name="Active Task Index") active_task_index: IntProperty(name="Active Task Index")
active_task_id: IntProperty(name="Active Task Id") active_task_id: IntProperty(name="Active Task Id")
task_attributes: CollectionProperty(name="Task Attributes", type=Attribute) task_attributes: CollectionProperty(name="Task Attributes", type=Attribute)
should_show_times: BoolProperty(name="Should Show Times", default=False)
active_task_time_id: IntProperty(name="Active Task Id") active_task_time_id: IntProperty(name="Active Task Id")
task_time_attributes: CollectionProperty(name="Task Time Attributes", type=Attribute) task_time_attributes: CollectionProperty(name="Task Time Attributes", type=Attribute)
contracted_tasks: StringProperty(name="Contracted Task Items", default="[]") contracted_tasks: StringProperty(name="Contracted Task Items", default="[]")
@@ -98,6 +98,9 @@ class BIM_PT_work_schedules(Panel):
if self.props.active_work_schedule_id and self.props.active_work_schedule_id == work_schedule_id: if self.props.active_work_schedule_id and self.props.active_work_schedule_id == work_schedule_id:
if self.props.is_editing == "WORK_SCHEDULE": if self.props.is_editing == "WORK_SCHEDULE":
row.operator("bim.edit_work_schedule", text="", icon="CHECKMARK") row.operator("bim.edit_work_schedule", text="", icon="CHECKMARK")
elif self.props.is_editing == "TASKS":
row.prop(self.props, "should_show_times", text="", icon="TIME")
row.operator("bim.add_summary_task", text="", icon="ADD").work_schedule = work_schedule_id
row.operator("bim.disable_editing_work_schedule", text="", icon="CANCEL") row.operator("bim.disable_editing_work_schedule", text="", icon="CANCEL")
elif self.props.active_work_schedule_id: elif self.props.active_work_schedule_id:
row.operator("bim.remove_work_schedule", text="", icon="X").work_schedule = work_schedule_id row.operator("bim.remove_work_schedule", text="", icon="X").work_schedule = work_schedule_id
@@ -124,9 +127,6 @@ class BIM_PT_work_schedules(Panel):
row.prop(attribute, "is_null", icon="RADIOBUT_OFF" if attribute.is_null else "RADIOBUT_ON", text="") row.prop(attribute, "is_null", icon="RADIOBUT_OFF" if attribute.is_null else "RADIOBUT_ON", text="")
def draw_editable_task_ui(self, work_schedule_id): def draw_editable_task_ui(self, work_schedule_id):
row = self.layout.row(align=True)
row.label(text="X Summary Tasks")
row.operator("bim.add_summary_task", text="", icon="ADD").work_schedule = work_schedule_id
self.layout.template_list( self.layout.template_list(
"BIM_UL_tasks", "BIM_UL_tasks",
"", "",
@@ -256,9 +256,10 @@ class BIM_UL_tasks(UIList):
row.prop(item, "identification", emboss=False, text="") row.prop(item, "identification", emboss=False, text="")
row.prop(item, "name", emboss=False, text="") row.prop(item, "name", emboss=False, text="")
row.prop(item, "start", emboss=False, text="") if props.should_show_times:
row.prop(item, "finish", emboss=False, text="") row.prop(item, "start", emboss=False, text="")
row.prop(item, "duration", emboss=False, text="") row.prop(item, "finish", emboss=False, text="")
row.prop(item, "duration", emboss=False, text="")
if props.active_task_id == item.ifc_definition_id: if props.active_task_id == item.ifc_definition_id:
if props.active_task_time_id: if props.active_task_time_id:
@@ -289,6 +290,6 @@ class BIM_UL_tasks(UIList):
row.operator("bim.remove_task", text="", icon="X").task = item.ifc_definition_id row.operator("bim.remove_task", text="", icon="X").task = item.ifc_definition_id
else: else:
row.operator("bim.enable_editing_task_time", text="", icon="TIME").task = item.ifc_definition_id row.operator("bim.enable_editing_task_time", text="", icon="TIME").task = item.ifc_definition_id
row.operator("bim.add_task", text="", icon="ADD").task = item.ifc_definition_id
row.operator("bim.enable_editing_task", text="", icon="GREASEPENCIL").task = item.ifc_definition_id row.operator("bim.enable_editing_task", text="", icon="GREASEPENCIL").task = item.ifc_definition_id
row.operator("bim.add_task", text="", icon="ADD").task = item.ifc_definition_id
row.operator("bim.remove_task", text="", icon="X").task = item.ifc_definition_id row.operator("bim.remove_task", text="", icon="X").task = item.ifc_definition_id