From 37141c89acb9ba95cc8428eebe4bc985d5821950 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 20 Nov 2024 20:20:28 +0500 Subject: [PATCH] bim.assign_cost_item_quantity - to show error if no related objects were found Just to make UI more responsive - e.g. if some objects are selected but they are not products. --- src/bonsai/bonsai/bim/module/cost/operator.py | 7 ++++++- src/bonsai/bonsai/core/cost.py | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/cost/operator.py b/src/bonsai/bonsai/bim/module/cost/operator.py index c7b825ac1e..b7819c76e6 100644 --- a/src/bonsai/bonsai/bim/module/cost/operator.py +++ b/src/bonsai/bonsai/bim/module/cost/operator.py @@ -265,13 +265,18 @@ class AssignCostItemQuantity(bpy.types.Operator, tool.Ifc.Operator): prop_name: bpy.props.StringProperty() def _execute(self, context): - core.assign_cost_item_quantity( + result = core.assign_cost_item_quantity( tool.Ifc, tool.Cost, cost_item=tool.Ifc.get().by_id(self.cost_item), related_object_type=self.related_object_type, prop_name=self.prop_name, # TODO: REVIEW PROP_NAME USABILITY ) + if not result: + self.report( + {"ERROR"}, + f"Cost item wasn't assigned - no objects of type '{self.related_object_type}' are selected.", + ) class UnassignCostItemQuantity(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/core/cost.py b/src/bonsai/bonsai/core/cost.py index b465ba0f8c..4ba7f69940 100644 --- a/src/bonsai/bonsai/core/cost.py +++ b/src/bonsai/bonsai/core/cost.py @@ -160,11 +160,14 @@ def assign_cost_item_quantity( cost_item: ifcopenshell.entity_instance, related_object_type: tool.Cost.RELATED_OBJECT_TYPE, prop_name: str, -) -> None: +) -> bool: 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_quantity_assignments(cost_item, related_object_type=related_object_type) + return True + else: + return False def load_cost_item_quantities(cost: tool.Cost) -> None: