Files
Aislo/B08_wf5_Quantity/B08_wf5_Quantity_Router_Costing.py
T

23 lines
1.9 KiB
Python

from fastapi import APIRouter,Depends
from B08_wf5_Quantity.B08_wf5_Quantity_Engine_CostBasis import calculate_cost_basis
from B08_wf5_Quantity.B08_wf5_Quantity_Engine_UnitCost import calculate_equipment_rate,calculate_unit_cost
from B08_wf5_Quantity.B08_wf5_Quantity_Repository_CostBasis import CostBasisRepository
from B08_wf5_Quantity.B08_wf5_Quantity_Repository_Pricing import PricingResolver
from B08_wf5_Quantity.B08_wf5_Quantity_Repository_UnitCost import UnitCostRepository
from B08_wf5_Quantity.B08_wf5_Quantity_Schema_CostBasis import CostBasis
from B08_wf5_Quantity.B08_wf5_Quantity_Schema_UnitCost import CostResult,EquipmentRate,UnitCost
def router_for(connection_provider):
r=APIRouter()
@r.get("/{project_id}/costing")
async def get(project_id:str,db=Depends(connection_provider)):return {**await UnitCostRepository(db).list_all(project_id),"cost_basis":await CostBasisRepository(db).list_all(project_id)}
@r.post("/{project_id}/unit-costs",response_model=CostResult)
async def unit(project_id:str,data:UnitCost,db=Depends(connection_provider)):
data.components=await PricingResolver(db).hydrate(data.components);result=calculate_unit_cost(data);await UnitCostRepository(db).save_unit_cost(project_id,data,result);return result
@r.post("/{project_id}/equipment-rates",response_model=CostResult)
async def equipment(project_id:str,data:EquipmentRate,db=Depends(connection_provider)):
data.components=await PricingResolver(db).hydrate(data.components);result=calculate_equipment_rate(data);await UnitCostRepository(db).save_equipment(project_id,data,result);return result
@r.post("/{project_id}/cost-basis",response_model=CostResult)
async def basis(project_id:str,data:CostBasis,db=Depends(connection_provider)):
data.components=await PricingResolver(db).hydrate(data.components);result=calculate_cost_basis(data);await CostBasisRepository(db).save(project_id,data,result);return result
return r