feat: add bep year and total lcc to chart API

main
MrWaradana 12 months ago
parent 1d789219dd
commit 48c495ec12

@ -5,6 +5,7 @@ from .model import PlantTransactionData
from .schema import ( from .schema import (
PlantTransactionDataPagination, PlantTransactionDataPagination,
PlantTransactionDataRead, PlantTransactionDataRead,
PlantChartData,
PlantTransactionChart, PlantTransactionChart,
PlantTransactionDataCreate, PlantTransactionDataCreate,
PlantTransactionDataUpdate, PlantTransactionDataUpdate,
@ -40,15 +41,24 @@ async def get_transaction_datas(
) )
@router.get("/charts", response_model=StandardResponse[List[PlantTransactionChart]]) @router.get("/charts", response_model=StandardResponse[PlantChartData])
async def get_chart_data(db_session: DbSession, common: CommonParameters): async def get_chart_data(db_session: DbSession, common: CommonParameters):
chart_data = await get_charts(db_session=db_session, common=common) chart_data, bep_year, bep_total_lcc = await get_charts(
if not chart_data: db_session=db_session, common=common
)
if not chart_data or not bep_year:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND, status_code=status.HTTP_404_NOT_FOUND,
detail="A data with this id does not exist.", detail="A data with this id does not exist.",
) )
return StandardResponse(data=chart_data, message="Data retrieved successfully") return StandardResponse(
data={
"items": chart_data,
"bep_year": bep_year,
"bep_total_lcc": bep_total_lcc,
},
message="Data retrieved successfully",
)
@router.get( @router.get(

@ -107,6 +107,12 @@ class PlantTransactionChart(DefaultBase):
fs_chart_capex_annualized: Optional[float] = Field(None, nullable=True) fs_chart_capex_annualized: Optional[float] = Field(None, nullable=True)
class PlantChartData(DefaultBase):
items: List[PlantTransactionChart]
bep_year: Optional[int] = Field(int, nullable=True)
bep_total_lcc: Optional[float] = Field(float, nullable=True)
class PlantTransactionDataCreate(PlantTransactionDataBase): class PlantTransactionDataCreate(PlantTransactionDataBase):
pass pass

@ -56,7 +56,32 @@ async def get_charts(
query = Select(PlantTransactionData).order_by(PlantTransactionData.tahun.asc()) query = Select(PlantTransactionData).order_by(PlantTransactionData.tahun.asc())
results = await db_session.execute(query) results = await db_session.execute(query)
return results.scalars().all() chart_data = results.scalars().all()
bep_year = None
previous_total_cost = 0
previous_revenue = 0
bep_total_lcc = 0
for item in chart_data:
total_cost = (
item.chart_capex_annualized
+ item.chart_oem_annualized
+ item.chart_fuel_cost_annualized
)
revenue = item.chart_revenue_annualized
if previous_total_cost and previous_revenue:
if (previous_total_cost > previous_revenue and total_cost < revenue) or (
previous_total_cost < previous_revenue and total_cost > revenue
):
bep_total_lcc = total_cost
bep_year = item.tahun
break
previous_total_cost = total_cost
previous_revenue = revenue
return chart_data, bep_year, bep_total_lcc
async def create( async def create(

Loading…
Cancel
Save