ifcopenshell.api.cost.calculate_cost_item_resource_value

Module Contents

ifcopenshell.api.cost.calculate_cost_item_resource_value.calculate_cost_item_resource_value(file: ifcopenshell.file, cost_item: ifcopenshell.entity_instance) None

Calculates the total cost of all resources associated with a cost item

A cost item may have construction resources (e.g. equipment, material, etc) assigned to it. Construction resources may be assigned directly to the cost item, or assigned first to a task, and the task is then assigned to the cost item.

The cost of a resource is calculated by the total sum of all of its base costs. If no quantity is provided, that sum is considered to be the total cost. Otherwise, it is considered to be a unit cost, and is then multiplied by the resource quantity. The quantity is either stored as a base quantity (such as a volume) for a things like material resources, or as a duration as a daily rate for labour resources.

The final calculated cost is set as the cost item’s value. Any previously existing values are removed.

Parameters:

cost_item (ifccopenshell.entity_instance.entity_instance) – The IfcCostItem to calculate

Returns:

None

Return type:

None

Example:

# First, we need a cost schedule and item
schedule = ifcopenshell.api.cost.add_cost_schedule(model)
item = ifcopenshell.api.cost.add_cost_item(model, cost_schedule=schedule)

# Let's imagine we have our own formworking crew
crew = ifcopenshell.api.resource.add_resource(model, ifc_class="IfcCrewResource")

# ... and they need concrete
concrete = ifcopenshell.api.resource.add_resource(model,
    ifc_class="IfcConstructionMaterialResource", parent_resource=crew)
ifcopenshell.api.control.assign_control(model,
    relating_control=item, related_object=concrete)
# ... which has a unit price of 42.0 per m3
value = ifcopenshell.api.cost.add_cost_value(model, parent=concrete)
ifcopenshell.api.cost.edit_cost_value(model, cost_value=value,
    attributes={"AppliedValue": 42.0})
# ... and a volume of 200m3
quantity = ifcopenshell.api.resource.add_resource_quantity(model,
    resource=concrete, ifc_class="IfcQuantityVolume")
ifcopenshell.api.resource.edit_resource_quantity(model,
    physical_quantity=quantity, "attributes": {"VolumeValue": 200.0})

# Let's say they also need some equipment
equipment = ifcopenshell.api.resource.add_resource(model,
    ifc_class="IfcConstructionEquipmentResource", parent_resource=crew)
ifcopenshell.api.control.assign_control(model,
    relating_control=item, related_object=equipment)
# ... with a fixed price of 50,000
value = ifcopenshell.api.cost.add_cost_value(model, parent=concrete)
ifcopenshell.api.cost.edit_cost_value(model, cost_value=value,
    attributes={"AppliedValue": 42.0})

# (42 * 200) + 50000 = 58400 is our calculated cost
ifcopenshell.api.cost.calculate_cost_item_resource_value(model, cost_item=item)