You can now customise cost category columns in the cost schedule tree

This commit is contained in:
Dion Moult
2021-08-09 19:06:06 +10:00
parent 9a748e640e
commit 4bb888c862
5 changed files with 73 additions and 3 deletions
@@ -8,6 +8,7 @@ class Data:
cost_items = {}
physical_quantities = {}
cost_values = {}
categories = []
@classmethod
def purge(cls):
@@ -16,6 +17,11 @@ class Data:
cls.cost_items = {}
cls.physical_quantities = {}
cls.cost_values = {}
cls.categories = []
@classmethod
def set_categories(cls, categories):
cls.categories = categories
@classmethod
def load(cls, file):
@@ -81,14 +87,15 @@ class Data:
data["CostValues"] = []
data["TotalCostValue"] = 0.0
data["TotalAppliedValue"] = 0.0
data["CategoryValues"] = {}
for cost_value in cost_item.CostValues or []:
cls.load_cost_item_value(cost_item, cost_value)
cls.load_cost_item_value(data, cost_item, cost_value)
data["CostValues"].append(cost_value.id())
data["TotalAppliedValue"] += cls.cost_values[cost_value.id()]["AppliedValue"]
data["TotalCostValue"] = data["TotalCostQuantity"] * data["TotalAppliedValue"]
@classmethod
def load_cost_item_value(cls, cost_item, cost_value):
def load_cost_item_value(cls, cost_item_data, cost_item, cost_value):
value_data = cost_value.get_info()
del value_data["AppliedValue"]
del value_data["UnitBasis"]
@@ -98,9 +105,14 @@ class Data:
value_data["FixedUntilDate"] = ifcopenshell.util.date.ifc2datetime(value_data["FixedUntilDate"])
value_data["Components"] = [c.id() for c in value_data["Components"] or []]
value_data["AppliedValue"] = cls.calculate_applied_value(cost_item, cost_value)
if cost_value.Category not in [None, "*"]:
cost_item_data["CategoryValues"].setdefault(cost_value.Category, 0)
cost_item_data["CategoryValues"][cost_value.Category] += value_data["AppliedValue"]
cls.cost_values[cost_value.id()] = value_data
for component in cost_value.Components or []:
cls.load_cost_item_value(cost_item, component)
cls.load_cost_item_value(cost_item_data, cost_item, component)
@classmethod
def calculate_applied_value(cls, cost_item, cost_value, category_filter=None):