diff --git a/src/plant_transaction_data/__pycache__/router.cpython-311.pyc b/src/plant_transaction_data/__pycache__/router.cpython-311.pyc index bb611d1..d25561d 100644 Binary files a/src/plant_transaction_data/__pycache__/router.cpython-311.pyc and b/src/plant_transaction_data/__pycache__/router.cpython-311.pyc differ diff --git a/src/plant_transaction_data/__pycache__/schema.cpython-311.pyc b/src/plant_transaction_data/__pycache__/schema.cpython-311.pyc index f03b06c..69eab79 100644 Binary files a/src/plant_transaction_data/__pycache__/schema.cpython-311.pyc and b/src/plant_transaction_data/__pycache__/schema.cpython-311.pyc differ diff --git a/src/plant_transaction_data/__pycache__/service.cpython-311.pyc b/src/plant_transaction_data/__pycache__/service.cpython-311.pyc index e1fc8d9..17e2738 100644 Binary files a/src/plant_transaction_data/__pycache__/service.cpython-311.pyc and b/src/plant_transaction_data/__pycache__/service.cpython-311.pyc differ diff --git a/src/plant_transaction_data/router.py b/src/plant_transaction_data/router.py index fdbc37e..dd85df6 100644 --- a/src/plant_transaction_data/router.py +++ b/src/plant_transaction_data/router.py @@ -5,6 +5,7 @@ from .model import PlantTransactionData from .schema import ( PlantTransactionDataPagination, PlantTransactionDataRead, + PlantChartData, PlantTransactionChart, PlantTransactionDataCreate, 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): - chart_data = await get_charts(db_session=db_session, common=common) - if not chart_data: + chart_data, bep_year, bep_total_lcc = await get_charts( + db_session=db_session, common=common + ) + if not chart_data or not bep_year: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, 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( diff --git a/src/plant_transaction_data/schema.py b/src/plant_transaction_data/schema.py index d13f352..480e922 100644 --- a/src/plant_transaction_data/schema.py +++ b/src/plant_transaction_data/schema.py @@ -107,6 +107,12 @@ class PlantTransactionChart(DefaultBase): 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): pass diff --git a/src/plant_transaction_data/service.py b/src/plant_transaction_data/service.py index 86d3ac6..d8cf11d 100644 --- a/src/plant_transaction_data/service.py +++ b/src/plant_transaction_data/service.py @@ -56,7 +56,32 @@ async def get_charts( query = Select(PlantTransactionData).order_by(PlantTransactionData.tahun.asc()) 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(