23 lines
1.9 KiB
Python
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 |