From 53aa5e5fe0fe2e79628923932da186128c4f1df6 Mon Sep 17 00:00:00 2001 From: Sigma Dimensions <79010126+myoualid@users.noreply.github.com> Date: Wed, 29 Mar 2023 00:23:32 +0000 Subject: [PATCH] You can now clear all cost assignements at once --- .../blenderbim/bim/module/cost/__init__.py | 1 + .../blenderbim/bim/module/cost/operator.py | 17 ++++++++++++++ .../blenderbim/bim/module/cost/ui.py | 15 ++++++++++++ src/blenderbim/blenderbim/core/cost.py | 23 +++++++++++++++---- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/cost/__init__.py b/src/blenderbim/blenderbim/bim/module/cost/__init__.py index cbcc610dc6..08a6dbea48 100644 --- a/src/blenderbim/blenderbim/bim/module/cost/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/cost/__init__.py @@ -67,6 +67,7 @@ classes = ( operator.ExpandCostItemRate, operator.ContractCostItemRate, operator.CalculateCostItemResourceValue, + operator.ClearCostItemAssignments, operator.LoadCostItemElementQuantities, operator.LoadCostItemTaskQuantities, operator.LoadCostItemResourceQuantities, diff --git a/src/blenderbim/blenderbim/bim/module/cost/operator.py b/src/blenderbim/blenderbim/bim/module/cost/operator.py index 1176177410..baf7112f81 100644 --- a/src/blenderbim/blenderbim/bim/module/cost/operator.py +++ b/src/blenderbim/blenderbim/bim/module/cost/operator.py @@ -635,3 +635,20 @@ class ExportCostSchedules(bpy.types.Operator): def draw(self, context): self.layout.label(text="Choose a format") self.layout.prop(self, "format") + + +class ClearCostItemAssignments(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.clear_cost_item_assignments" + bl_label = "Clear Cost Item Product Assignments" + bl_options = {"REGISTER", "UNDO"} + cost_item: bpy.props.IntProperty() + related_object_type: bpy.props.StringProperty() + + def _execute(self, context): + core.clear_cost_item_assignments( + tool.Ifc, + tool.Cost, + cost_item=tool.Ifc.get().by_id(self.cost_item), + related_object_type=self.related_object_type, + ) + return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/cost/ui.py b/src/blenderbim/blenderbim/bim/module/cost/ui.py index 96f123ffd5..f0a347efc9 100644 --- a/src/blenderbim/blenderbim/bim/module/cost/ui.py +++ b/src/blenderbim/blenderbim/bim/module/cost/ui.py @@ -374,6 +374,11 @@ class BIM_PT_cost_item_quantities(Panel): "active_cost_item_product_index", ) + row2 = col.row() + op = row2.operator("bim.clear_cost_item_assignments", text="Clear assignments", icon="X") + op.cost_item = cost_item.ifc_definition_id + op.related_object_type = "IfcElement" + if has_quantity_names: row2 = col.row() row2.prop(self.props, "product_quantity_names", text="") @@ -414,6 +419,11 @@ class BIM_PT_cost_item_quantities(Panel): "active_cost_item_process_index", ) + row2 = col.row() + op = row2.operator("bim.clear_cost_item_assignments", text="Clear assignments", icon="X") + op.cost_item = cost_item.ifc_definition_id + op.related_object_type = "IfcProcess" + if has_quantity_names: row2 = col.row() row2.prop(self.props, "process_quantity_names", text="") @@ -457,6 +467,11 @@ class BIM_PT_cost_item_quantities(Panel): "active_cost_item_resource_index", ) + row2 = col.row() + op = row2.operator("bim.clear_cost_item_assignments", text="Clear assignments", icon="X") + op.cost_item = cost_item.ifc_definition_id + op.related_object_type = "IfcResource" + if has_quantity_names: row2 = col.row() row2.prop(self.props, "resource_quantity_names", text="") diff --git a/src/blenderbim/blenderbim/core/cost.py b/src/blenderbim/blenderbim/core/cost.py index 2ecc940cb4..995d38b711 100644 --- a/src/blenderbim/blenderbim/core/cost.py +++ b/src/blenderbim/blenderbim/core/cost.py @@ -107,8 +107,9 @@ def assign_cost_item_quantity(ifc, cost, cost_item, related_object_type, prop_na products = cost.get_products(related_object_type) if products: ifc.run("cost.assign_cost_item_quantity", cost_item=cost_item, products=products, prop_name=prop_name) - cost.load_cost_item_quantities(cost_item) - + cost.load_cost_item_quantity_assignments(cost_item, related_object_type="PRODUCT") + cost.load_cost_item_quantity_assignments(cost_item, related_object_type="PROCESS") + cost.load_cost_item_quantity_assignments(cost_item, related_object_type="RESOURCE") def load_cost_item_quantities(cost): cost_item = cost.get_highlighted_cost_item() @@ -136,7 +137,9 @@ def load_schedule_of_rates(cost, schedule_of_rates): def unassign_cost_item_quantity(ifc, cost, cost_item, products): ifc.run("cost.unassign_cost_item_quantity", cost_item=cost_item, products=products) - cost.load_cost_item_quantities(cost_item) + cost.load_cost_item_quantity_assignments(cost_item, related_object_type="PRODUCT") + cost.load_cost_item_quantity_assignments(cost_item, related_object_type="PROCESS") + cost.load_cost_item_quantity_assignments(cost_item, related_object_type="RESOURCE") def enable_editing_cost_item_quantities(cost, cost_item): cost.enable_editing_cost_item_quantities(cost_item) @@ -161,7 +164,10 @@ def edit_cost_item_quantity(ifc, cost, physical_quantity): attributes = cost.get_cost_item_quantity_attributes() ifc.run("cost.edit_cost_item_quantity", physical_quantity=physical_quantity, attributes=attributes) cost.disable_editing_cost_item_quantity() - # cost.load_cost_item_quantities(cost.get_active_cost_item()) + #TODO: REVIEW usefulness + cost.load_cost_item_quantity_assignments(cost.get_highlighted_cost_item(), related_object_type="PRODUCT") + cost.load_cost_item_quantity_assignments(cost.get_highlighted_cost_item(), related_object_type="PROCESS") + cost.load_cost_item_quantity_assignments(cost.get_highlighted_cost_item(), related_object_type="RESOURCE") def add_cost_value(ifc, cost, parent, cost_type, cost_category): value = ifc.run("cost.add_cost_value", parent=parent) @@ -226,4 +232,11 @@ def calculate_cost_item_resource_value(ifc, cost_item): ifc.run("cost.calculate_cost_item_resource_value", cost_item=cost_item) def export_cost_schedules(cost, format): - cost.export_cost_schedules(format) \ No newline at end of file + cost.export_cost_schedules(format) + +def clear_cost_item_assignments(ifc, cost, cost_item, related_object_type): + products = cost.get_cost_item_assignments(cost_item, filter_by_type=related_object_type) + if products: + ifc.run("cost.unassign_cost_item_quantity", cost_item=cost_item, products=products) + cost.load_cost_item_quantity_assignments(cost_item, related_object_type=related_object_type) + cost.load_cost_schedule_tree()