feat: plant admin data APIs
parent
b5919a79df
commit
aed6a5cffd
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,37 @@
|
||||
from sqlalchemy import Column, Float, String, UUID
|
||||
from src.database.core import Base
|
||||
from src.models import DefaultMixin, IdentityMixin
|
||||
|
||||
|
||||
class PlantMasterData(Base, DefaultMixin, IdentityMixin):
|
||||
__tablename__ = "lcc_plant_ms_data"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, index=True)
|
||||
discount_rate = Column(Float, nullable=True)
|
||||
total_project_cost = Column(Float, nullable=True)
|
||||
umur_teknis = Column(Float, nullable=True)
|
||||
interest_rate = Column(Float, nullable=True)
|
||||
loan_portion = Column(Float, nullable=True)
|
||||
equity_portion = Column(Float, nullable=True)
|
||||
loan = Column(Float, nullable=True)
|
||||
loan_tenor = Column(Float, nullable=True)
|
||||
principal_interest_payment = Column(Float, nullable=True)
|
||||
corporate_tax_rate = Column(Float, nullable=True)
|
||||
wacc_on_project = Column(Float, nullable=True)
|
||||
wacc_on_equity = Column(Float, nullable=True)
|
||||
equity = Column(Float, nullable=True)
|
||||
daya_mampu_netto = Column(Float, nullable=True)
|
||||
auxiliary = Column(Float, nullable=True)
|
||||
susut_trafo = Column(Float, nullable=True)
|
||||
sfc = Column(Float, nullable=True)
|
||||
electricity_price_a = Column(Float, nullable=True)
|
||||
electricity_price_b = Column(Float, nullable=True)
|
||||
electricity_price_c = Column(Float, nullable=True)
|
||||
electricity_price_d = Column(Float, nullable=True)
|
||||
harga_bahan_bakar = Column(Float, nullable=True)
|
||||
calc_on_project_irr = Column(Float, nullable=True)
|
||||
calc_on_project_npv = Column(Float, nullable=True)
|
||||
calc_on_equity_irr = Column(Float, nullable=True)
|
||||
calc_on_equity_npv = Column(Float, nullable=True)
|
||||
calc_roa_all = Column(Float, nullable=True)
|
||||
calc_roa_current = Column(Float, nullable=True)
|
||||
@ -0,0 +1,100 @@
|
||||
from typing import Optional
|
||||
from fastapi import APIRouter, HTTPException, status, Query
|
||||
|
||||
from .model import PlantMasterData
|
||||
from .schema import (
|
||||
PlantMasterDataPagination,
|
||||
PlantMasterDataRead,
|
||||
PlantMasterDataCreate,
|
||||
PlantMasterDataUpdate,
|
||||
)
|
||||
from .service import get, get_all, create, update, delete
|
||||
|
||||
from src.database.service import CommonParameters, search_filter_sort_paginate
|
||||
from src.database.core import DbSession
|
||||
from src.auth.service import CurrentUser
|
||||
from src.models import StandardResponse
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("", response_model=StandardResponse[PlantMasterDataPagination])
|
||||
async def get_masterdatas(
|
||||
db_session: DbSession,
|
||||
common: CommonParameters,
|
||||
items_per_page: Optional[int] = Query(5),
|
||||
search: Optional[str] = Query(None),
|
||||
):
|
||||
"""Get all documents."""
|
||||
# return
|
||||
master_datas = await get_all(
|
||||
db_session=db_session,
|
||||
items_per_page=items_per_page,
|
||||
search=search,
|
||||
common=common,
|
||||
)
|
||||
return StandardResponse(
|
||||
data=master_datas,
|
||||
message="Data retrieved successfully",
|
||||
)
|
||||
|
||||
|
||||
@router.get("/{masterdata_id}", response_model=StandardResponse[PlantMasterDataRead])
|
||||
async def get_masterdata(db_session: DbSession, masterdata_id: str):
|
||||
masterdata = await get(db_session=db_session, masterdata_id=masterdata_id)
|
||||
if not masterdata:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="A data with this id does not exist.",
|
||||
)
|
||||
|
||||
return StandardResponse(data=masterdata, message="Data retrieved successfully")
|
||||
|
||||
|
||||
@router.post("", response_model=StandardResponse[PlantMasterDataRead])
|
||||
async def create_masterdata(
|
||||
db_session: DbSession, masterdata_in: PlantMasterDataCreate, current_user: CurrentUser
|
||||
):
|
||||
masterdata_in.created_by = current_user.name
|
||||
masterdata = await create(db_session=db_session, masterdata_in=masterdata_in)
|
||||
|
||||
return StandardResponse(data=masterdata, message="Data created successfully")
|
||||
|
||||
|
||||
@router.put("/{masterdata_id}", response_model=StandardResponse[PlantMasterDataRead])
|
||||
async def update_masterdata(
|
||||
db_session: DbSession,
|
||||
masterdata_id: str,
|
||||
masterdata_in: PlantMasterDataUpdate,
|
||||
current_user: CurrentUser,
|
||||
):
|
||||
masterdata = await get(db_session=db_session, masterdata_id=masterdata_id)
|
||||
|
||||
if not masterdata:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="A data with this id does not exist.",
|
||||
)
|
||||
masterdata_in.updated_by = current_user.name
|
||||
|
||||
return StandardResponse(
|
||||
data=await update(
|
||||
db_session=db_session, masterdata=masterdata, masterdata_in=masterdata_in
|
||||
),
|
||||
message="Data updated successfully",
|
||||
)
|
||||
|
||||
|
||||
@router.delete("/{masterdata_id}", response_model=StandardResponse[PlantMasterDataRead])
|
||||
async def delete_masterdata(db_session: DbSession, masterdata_id: str):
|
||||
masterdata = await get(db_session=db_session, masterdata_id=masterdata_id)
|
||||
|
||||
if not masterdata:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail=[{"msg": "A data with this id does not exist."}],
|
||||
)
|
||||
|
||||
await delete(db_session=db_session, masterdata_id=masterdata_id)
|
||||
|
||||
return StandardResponse(message="Data deleted successfully", data=masterdata)
|
||||
@ -0,0 +1,85 @@
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import Field
|
||||
from src.models import DefaultBase, Pagination
|
||||
from src.auth.service import CurrentUser
|
||||
|
||||
|
||||
class PlantMasterdataBase(DefaultBase):
|
||||
discount_rate: Optional[float] = Field(None, nullable=True)
|
||||
total_project_cost: Optional[float] = Field(None, nullable=True)
|
||||
umur_teknis: Optional[float] = Field(None, nullable=True)
|
||||
interest_rate: Optional[float] = Field(None, nullable=True)
|
||||
loan_portion: Optional[float] = Field(None, nullable=True)
|
||||
equity_portion: Optional[float] = Field(None, nullable=True)
|
||||
loan: Optional[float] = Field(None, nullable=True)
|
||||
loan_tenor: Optional[float] = Field(None, nullable=True)
|
||||
principal_interest_payment: Optional[float] = Field(None, nullable=True)
|
||||
corporate_tax_rate: Optional[float] = Field(None, nullable=True)
|
||||
wacc_on_project: Optional[float] = Field(None, nullable=True)
|
||||
wacc_on_equity: Optional[float] = Field(None, nullable=True)
|
||||
equity: Optional[float] = Field(None, nullable=True)
|
||||
daya_mampu_netto: Optional[float] = Field(None, nullable=True)
|
||||
auxiliary: Optional[float] = Field(None, nullable=True)
|
||||
susut_trafo: Optional[float] = Field(None, nullable=True)
|
||||
sfc: Optional[float] = Field(None, nullable=True)
|
||||
electricity_price_a: Optional[float] = Field(None, nullable=True)
|
||||
electricity_price_b: Optional[float] = Field(None, nullable=True)
|
||||
electricity_price_c: Optional[float] = Field(None, nullable=True)
|
||||
electricity_price_d: Optional[float] = Field(None, nullable=True)
|
||||
harga_bahan_bakar: Optional[float] = Field(None, nullable=True)
|
||||
calc_on_project_irr: Optional[float] = Field(None, nullable=True)
|
||||
calc_on_project_npv: Optional[float] = Field(None, nullable=True)
|
||||
calc_on_equity_irr: Optional[float] = Field(None, nullable=True)
|
||||
calc_on_equity_npv: Optional[float] = Field(None, nullable=True)
|
||||
calc_roa_all: Optional[float] = Field(None, nullable=True)
|
||||
calc_roa_current: Optional[float] = Field(None, nullable=True)
|
||||
created_at: Optional[datetime] = Field(None, nullable=True)
|
||||
updated_at: Optional[datetime] = Field(None, nullable=True)
|
||||
created_by: Optional[str] = Field(None, nullable=True)
|
||||
updated_by: Optional[str] = Field(None, nullable=True)
|
||||
|
||||
|
||||
class PlantMasterDataCreate(PlantMasterdataBase):
|
||||
discount_rate: float = Field(..., nullable=True)
|
||||
total_project_cost: float = Field(..., nullable=True)
|
||||
umur_teknis: float = Field(..., nullable=True)
|
||||
interest_rate: float = Field(..., nullable=True)
|
||||
loan_portion: float = Field(..., nullable=True)
|
||||
equity_portion: float = Field(..., nullable=True)
|
||||
loan: float = Field(..., nullable=True)
|
||||
loan_tenor: float = Field(..., nullable=True)
|
||||
principal_interest_payment: float = Field(..., nullable=True)
|
||||
corporate_tax_rate: float = Field(..., nullable=True)
|
||||
wacc_on_project: float = Field(..., nullable=True)
|
||||
wacc_on_equity: float = Field(..., nullable=True)
|
||||
equity: float = Field(..., nullable=True)
|
||||
daya_mampu_netto: float = Field(..., nullable=True)
|
||||
auxiliary: float = Field(..., nullable=True)
|
||||
susut_trafo: float = Field(..., nullable=True)
|
||||
sfc: float = Field(..., nullable=True)
|
||||
electricity_price_a: float = Field(..., nullable=True)
|
||||
electricity_price_b: float = Field(..., nullable=True)
|
||||
electricity_price_c: float = Field(..., nullable=True)
|
||||
electricity_price_d: float = Field(..., nullable=True)
|
||||
harga_bahan_bakar: float = Field(..., nullable=True)
|
||||
calc_on_project_irr: float = Field(..., nullable=True)
|
||||
calc_on_project_npv: float = Field(..., nullable=True)
|
||||
calc_on_equity_irr: float = Field(..., nullable=True)
|
||||
calc_on_equity_npv: float = Field(..., nullable=True)
|
||||
calc_roa_all: float = Field(..., nullable=True)
|
||||
calc_roa_current: float = Field(..., nullable=True)
|
||||
|
||||
|
||||
class PlantMasterDataUpdate(PlantMasterdataBase):
|
||||
pass
|
||||
|
||||
|
||||
class PlantMasterDataRead(PlantMasterdataBase):
|
||||
id: UUID
|
||||
|
||||
|
||||
class PlantMasterDataPagination(Pagination):
|
||||
items: List[PlantMasterDataRead] = []
|
||||
@ -0,0 +1,68 @@
|
||||
from sqlalchemy import Select, Delete
|
||||
|
||||
from src.database.service import search_filter_sort_paginate
|
||||
from .model import PlantMasterData
|
||||
from .schema import PlantMasterDataCreate, PlantMasterDataUpdate
|
||||
from typing import Optional
|
||||
|
||||
from src.database.core import DbSession
|
||||
from src.auth.service import CurrentUser
|
||||
|
||||
|
||||
async def get(
|
||||
*, db_session: DbSession, masterdata_id: str
|
||||
) -> Optional[PlantMasterData]:
|
||||
"""Returns a document based on the given document id."""
|
||||
query = Select(PlantMasterData).filter(PlantMasterData.id == masterdata_id)
|
||||
result = await db_session.execute(query)
|
||||
return result.scalars().one_or_none()
|
||||
|
||||
|
||||
async def get_all(
|
||||
*, db_session: DbSession, items_per_page: int, search: str = None, common
|
||||
) -> list[PlantMasterData]:
|
||||
"""Returns all documents."""
|
||||
query = Select(PlantMasterData)
|
||||
|
||||
if search:
|
||||
query = query.filter(PlantMasterData.total_project_cost.ilike(f"%{search}%"))
|
||||
common["page"] = 1
|
||||
|
||||
common["items_per_page"] = items_per_page
|
||||
result = await search_filter_sort_paginate(model=query, **common)
|
||||
return result
|
||||
|
||||
|
||||
async def create(*, db_session: DbSession, masterdata_in: PlantMasterDataCreate):
|
||||
"""Creates a new document."""
|
||||
masterdata = PlantMasterData(**masterdata_in.model_dump())
|
||||
db_session.add(masterdata)
|
||||
await db_session.commit()
|
||||
return masterdata
|
||||
|
||||
|
||||
async def update(
|
||||
*,
|
||||
db_session: DbSession,
|
||||
masterdata: PlantMasterData,
|
||||
masterdata_in: PlantMasterDataUpdate,
|
||||
):
|
||||
"""Updates a document."""
|
||||
data = masterdata_in.model_dump()
|
||||
|
||||
update_data = masterdata_in.model_dump(exclude_defaults=True)
|
||||
|
||||
for field in data:
|
||||
if field in update_data:
|
||||
setattr(masterdata, field, update_data[field])
|
||||
|
||||
await db_session.commit()
|
||||
|
||||
return masterdata
|
||||
|
||||
|
||||
async def delete(*, db_session: DbSession, masterdata_id: str):
|
||||
"""Deletes a document."""
|
||||
query = Delete(PlantMasterData).where(PlantMasterData.id == masterdata_id)
|
||||
await db_session.execute(query)
|
||||
await db_session.commit()
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,61 @@
|
||||
from sqlalchemy import Column, Float, Integer, String, UUID
|
||||
from src.database.core import Base
|
||||
from src.models import DefaultMixin, IdentityMixin
|
||||
|
||||
|
||||
class PlantTransactionData(Base, DefaultMixin, IdentityMixin):
|
||||
__tablename__ = "lcc_plant_tr_data"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, index=True)
|
||||
tahun = Column(Integer, nullable=False)
|
||||
is_actual = Column(Integer, nullable=False)
|
||||
seq = Column(Integer, nullable=False)
|
||||
net_capacity_factor = Column(Float, nullable=True)
|
||||
eaf = Column(Float, nullable=True)
|
||||
production_bruto = Column(Float, nullable=True)
|
||||
production_netto = Column(Float, nullable=True)
|
||||
energy_sales = Column(Float, nullable=True)
|
||||
fuel_consumption = Column(Float, nullable=True)
|
||||
revenue_a = Column(Float, nullable=True)
|
||||
revenue_b = Column(Float, nullable=True)
|
||||
revenue_c = Column(Float, nullable=True)
|
||||
revenue_d = Column(Float, nullable=True)
|
||||
revenue_total = Column(Float, nullable=True)
|
||||
revenue_pv = Column(Float, nullable=True)
|
||||
revenue_annualized = Column(Float, nullable=True)
|
||||
cost_a_replacement = Column(Float, nullable=True)
|
||||
cost_a_pm = Column(Float, nullable=True)
|
||||
cost_a_acquisition = Column(Float, nullable=True)
|
||||
cost_a_pinjaman = Column(Float, nullable=True)
|
||||
cost_a_depreciation = Column(Float, nullable=True)
|
||||
cost_a_total = Column(Float, nullable=True)
|
||||
cost_a_pv = Column(Float, nullable=True)
|
||||
cost_a_annualized = Column(Float, nullable=True)
|
||||
cost_c_fuel = Column(Float, nullable=True)
|
||||
cost_c_pv = Column(Float, nullable=True)
|
||||
cost_c_annualized = Column(Float, nullable=True)
|
||||
cost_bd_om = Column(Float, nullable=True)
|
||||
cost_bd_pm_nonmi = Column(Float, nullable=True)
|
||||
cost_bd_bd = Column(Float, nullable=True)
|
||||
cost_bd_total = Column(Float, nullable=True)
|
||||
cost_bd_pv = Column(Float, nullable=True)
|
||||
cost_bd_annualized = Column(Float, nullable=True)
|
||||
total_expense = Column(Float, nullable=True)
|
||||
total_cost_eac = Column(Float, nullable=True)
|
||||
total_profit_loss = Column(Float, nullable=True)
|
||||
total_residual_value = Column(Float, nullable=True)
|
||||
calc_depreciation = Column(Float, nullable=True)
|
||||
calc_interest_payment = Column(Float, nullable=True)
|
||||
calc_principal_payment = Column(Float, nullable=True)
|
||||
calc_dept_amount = Column(Float, nullable=True)
|
||||
calc2_ebitda = Column(Float, nullable=True)
|
||||
calc2_earning_before_tax = Column(Float, nullable=True)
|
||||
calc2_tax = Column(Float, nullable=True)
|
||||
calc2_earning_after_tax = Column(Float, nullable=True)
|
||||
calc2_nopat = Column(Float, nullable=True)
|
||||
calc3_interest_after_tax = Column(Float, nullable=True)
|
||||
calc3_free_cash_flow_on_project = Column(Float, nullable=True)
|
||||
calc3_discounted_fcf_on_project = Column(Float, nullable=True)
|
||||
calc4_principal_repayment = Column(Float, nullable=True)
|
||||
calc4_free_cash_flow_on_equity = Column(Float, nullable=True)
|
||||
calc4_discounted_fcf_on_equity = Column(Float, nullable=True)
|
||||
@ -0,0 +1,120 @@
|
||||
from typing import Optional
|
||||
from fastapi import APIRouter, HTTPException, status, Query
|
||||
|
||||
from .model import PlantTransactionData
|
||||
from .schema import (
|
||||
PlantTransactionDataPagination,
|
||||
PlantTransactionDataRead,
|
||||
PlantTransactionDataCreate,
|
||||
PlantTransactionDataUpdate,
|
||||
)
|
||||
from .service import get, get_all, create, update, delete
|
||||
|
||||
from src.database.service import CommonParameters, search_filter_sort_paginate
|
||||
from src.database.core import DbSession
|
||||
from src.auth.service import CurrentUser
|
||||
from src.models import StandardResponse
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("", response_model=StandardResponse[PlantTransactionDataPagination])
|
||||
async def get_transaction_datas(
|
||||
db_session: DbSession,
|
||||
common: CommonParameters,
|
||||
items_per_page: Optional[int] = Query(5),
|
||||
search: Optional[str] = Query(None),
|
||||
):
|
||||
"""Get all transaction_data pagination."""
|
||||
year_data = await get_all(
|
||||
db_session=db_session,
|
||||
items_per_page=items_per_page,
|
||||
search=search,
|
||||
common=common,
|
||||
)
|
||||
# return
|
||||
return StandardResponse(
|
||||
data=year_data,
|
||||
message="Data retrieved successfully",
|
||||
)
|
||||
|
||||
|
||||
@router.get(
|
||||
"/{transaction_data_id}", response_model=StandardResponse[PlantTransactionDataRead]
|
||||
)
|
||||
async def get_transaction_data(db_session: DbSession, transaction_data_id: str):
|
||||
transaction_data = await get(
|
||||
db_session=db_session, transaction_data_id=transaction_data_id
|
||||
)
|
||||
if not transaction_data:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="A data with this id does not exist.",
|
||||
)
|
||||
|
||||
return StandardResponse(
|
||||
data=transaction_data, message="Data retrieved successfully"
|
||||
)
|
||||
|
||||
|
||||
@router.post("", response_model=StandardResponse[PlantTransactionDataRead])
|
||||
async def create_transaction_data(
|
||||
db_session: DbSession,
|
||||
transaction_data_in: PlantTransactionDataCreate,
|
||||
current_user: CurrentUser,
|
||||
):
|
||||
transaction_data_in.created_by = current_user.name
|
||||
transaction_data = await create(
|
||||
db_session=db_session, transaction_data_in=transaction_data_in
|
||||
)
|
||||
|
||||
return StandardResponse(data=transaction_data, message="Data created successfully")
|
||||
|
||||
|
||||
@router.put(
|
||||
"/{transaction_data_id}", response_model=StandardResponse[PlantTransactionDataRead]
|
||||
)
|
||||
async def update_transaction_data(
|
||||
db_session: DbSession,
|
||||
transaction_data_id: str,
|
||||
transaction_data_in: PlantTransactionDataUpdate,
|
||||
current_user: CurrentUser,
|
||||
):
|
||||
transaction_data = await get(
|
||||
db_session=db_session, transaction_data_id=transaction_data_id
|
||||
)
|
||||
|
||||
if not transaction_data:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="A data with this id does not exist.",
|
||||
)
|
||||
transaction_data_in.updated_by = current_user.name
|
||||
|
||||
return StandardResponse(
|
||||
data=await update(
|
||||
db_session=db_session,
|
||||
transaction_data=transaction_data,
|
||||
transaction_data_in=transaction_data_in,
|
||||
),
|
||||
message="Data updated successfully",
|
||||
)
|
||||
|
||||
|
||||
@router.delete(
|
||||
"/{transaction_data_id}", response_model=StandardResponse[PlantTransactionDataRead]
|
||||
)
|
||||
async def delete_transaction_data(db_session: DbSession, transaction_data_id: str):
|
||||
transaction_data = await get(
|
||||
db_session=db_session, transaction_data_id=transaction_data_id
|
||||
)
|
||||
|
||||
if not transaction_data:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail=[{"msg": "A data with this id does not exist."}],
|
||||
)
|
||||
|
||||
await delete(db_session=db_session, transaction_data_id=transaction_data_id)
|
||||
|
||||
return StandardResponse(message="Data deleted successfully", data=transaction_data)
|
||||
@ -0,0 +1,83 @@
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import Field
|
||||
from src.models import DefaultBase, Pagination
|
||||
|
||||
|
||||
class PlantTransactionDataBase(DefaultBase):
|
||||
year: Optional[int] = Field(None, nullable=True)
|
||||
rp_per_kwh: Optional[float] = Field(None, nullable=True)
|
||||
tahun: Optional[int] = Field(None, nullable=True)
|
||||
is_actual: Optional[int] = Field(None, nullable=True)
|
||||
seq: Optional[int] = Field(None, nullable=True)
|
||||
net_capacity_factor: Optional[float] = Field(None, nullable=True)
|
||||
eaf: Optional[float] = Field(None, nullable=True)
|
||||
production_bruto: Optional[float] = Field(None, nullable=True)
|
||||
production_netto: Optional[float] = Field(None, nullable=True)
|
||||
energy_sales: Optional[float] = Field(None, nullable=True)
|
||||
fuel_consumption: Optional[float] = Field(None, nullable=True)
|
||||
revenue_a: Optional[float] = Field(None, nullable=True)
|
||||
revenue_b: Optional[float] = Field(None, nullable=True)
|
||||
revenue_c: Optional[float] = Field(None, nullable=True)
|
||||
revenue_d: Optional[float] = Field(None, nullable=True)
|
||||
revenue_total: Optional[float] = Field(None, nullable=True)
|
||||
revenue_pv: Optional[float] = Field(None, nullable=True)
|
||||
revenue_annualized: Optional[float] = Field(None, nullable=True)
|
||||
cost_a_replacement: Optional[float] = Field(None, nullable=True)
|
||||
cost_a_pm: Optional[float] = Field(None, nullable=True)
|
||||
cost_a_acquisition: Optional[float] = Field(None, nullable=True)
|
||||
cost_a_pinjaman: Optional[float] = Field(None, nullable=True)
|
||||
cost_a_depreciation: Optional[float] = Field(None, nullable=True)
|
||||
cost_a_total: Optional[float] = Field(None, nullable=True)
|
||||
cost_a_pv: Optional[float] = Field(None, nullable=True)
|
||||
cost_a_annualized: Optional[float] = Field(None, nullable=True)
|
||||
cost_c_fuel: Optional[float] = Field(None, nullable=True)
|
||||
cost_c_pv: Optional[float] = Field(None, nullable=True)
|
||||
cost_c_annualized: Optional[float] = Field(None, nullable=True)
|
||||
cost_bd_om: Optional[float] = Field(None, nullable=True)
|
||||
cost_bd_pm_nonmi: Optional[float] = Field(None, nullable=True)
|
||||
cost_bd_bd: Optional[float] = Field(None, nullable=True)
|
||||
cost_bd_total: Optional[float] = Field(None, nullable=True)
|
||||
cost_bd_pv: Optional[float] = Field(None, nullable=True)
|
||||
cost_bd_annualized: Optional[float] = Field(None, nullable=True)
|
||||
total_expense: Optional[float] = Field(None, nullable=True)
|
||||
total_cost_eac: Optional[float] = Field(None, nullable=True)
|
||||
total_profit_loss: Optional[float] = Field(None, nullable=True)
|
||||
total_residual_value: Optional[float] = Field(None, nullable=True)
|
||||
calc_depreciation: Optional[float] = Field(None, nullable=True)
|
||||
calc_interest_payment: Optional[float] = Field(None, nullable=True)
|
||||
calc_principal_payment: Optional[float] = Field(None, nullable=True)
|
||||
calc_dept_amount: Optional[float] = Field(None, nullable=True)
|
||||
calc2_ebitda: Optional[float] = Field(None, nullable=True)
|
||||
calc2_earning_before_tax: Optional[float] = Field(None, nullable=True)
|
||||
calc2_tax: Optional[float] = Field(None, nullable=True)
|
||||
calc2_earning_after_tax: Optional[float] = Field(None, nullable=True)
|
||||
calc2_nopat: Optional[float] = Field(None, nullable=True)
|
||||
calc3_interest_after_tax: Optional[float] = Field(None, nullable=True)
|
||||
calc3_free_cash_flow_on_project: Optional[float] = Field(None, nullable=True)
|
||||
calc3_discounted_fcf_on_project: Optional[float] = Field(None, nullable=True)
|
||||
calc4_principal_repayment: Optional[float] = Field(None, nullable=True)
|
||||
calc4_free_cash_flow_on_equity: Optional[float] = Field(None, nullable=True)
|
||||
calc4_discounted_fcf_on_equity: Optional[float] = Field(None, nullable=True)
|
||||
created_at: Optional[datetime] = Field(None, nullable=True)
|
||||
updated_at: Optional[datetime] = Field(None, nullable=True)
|
||||
created_by: Optional[str] = Field(None, nullable=True)
|
||||
updated_by: Optional[str] = Field(None, nullable=True)
|
||||
|
||||
|
||||
class PlantTransactionDataCreate(PlantTransactionDataBase):
|
||||
pass
|
||||
|
||||
|
||||
class PlantTransactionDataUpdate(PlantTransactionDataBase):
|
||||
pass
|
||||
|
||||
|
||||
class PlantTransactionDataRead(PlantTransactionDataBase):
|
||||
id: UUID
|
||||
|
||||
|
||||
class PlantTransactionDataPagination(Pagination):
|
||||
items: List[PlantTransactionDataRead] = []
|
||||
@ -0,0 +1,74 @@
|
||||
from sqlalchemy import Select, Delete, cast, String
|
||||
from .model import PlantTransactionData
|
||||
from .schema import PlantTransactionDataCreate, PlantTransactionDataUpdate
|
||||
from src.database.service import search_filter_sort_paginate
|
||||
from typing import Optional
|
||||
|
||||
from src.database.core import DbSession
|
||||
from src.auth.service import CurrentUser
|
||||
|
||||
|
||||
async def get(
|
||||
*, db_session: DbSession, transaction_data_id: str
|
||||
) -> Optional[PlantTransactionData]:
|
||||
"""Returns a document based on the given document id."""
|
||||
query = Select(PlantTransactionData).filter(PlantTransactionData.id == transaction_data_id)
|
||||
result = await db_session.execute(query)
|
||||
return result.scalars().one_or_none()
|
||||
|
||||
|
||||
async def get_all(
|
||||
*,
|
||||
db_session: DbSession,
|
||||
items_per_page: Optional[int],
|
||||
search: Optional[str] = None,
|
||||
common,
|
||||
):
|
||||
"""Returns all documents."""
|
||||
query = Select(PlantTransactionData).order_by(PlantTransactionData.tahun.desc())
|
||||
if search:
|
||||
query = query.filter(
|
||||
cast(PlantTransactionData.tahun, String).ilike(f"%{search}%")
|
||||
)
|
||||
common["page"] = 1
|
||||
|
||||
common["items_per_page"] = items_per_page
|
||||
results = await search_filter_sort_paginate(model=query, **common)
|
||||
|
||||
# return results.scalars().all()
|
||||
return results
|
||||
|
||||
|
||||
async def create(*, db_session: DbSession, yeardata_in: PlantTransactionDataCreate):
|
||||
"""Creates a new document."""
|
||||
yeardata = PlantTransactionData(**yeardata_in.model_dump())
|
||||
db_session.add(yeardata)
|
||||
await db_session.commit()
|
||||
return yeardata
|
||||
|
||||
|
||||
async def update(
|
||||
*,
|
||||
db_session: DbSession,
|
||||
yeardata: PlantTransactionData,
|
||||
yeardata_in: PlantTransactionDataUpdate,
|
||||
):
|
||||
"""Updates a document."""
|
||||
data = yeardata_in.model_dump()
|
||||
|
||||
update_data = yeardata_in.model_dump(exclude_defaults=True)
|
||||
|
||||
for field in data:
|
||||
if field in update_data:
|
||||
setattr(yeardata, field, update_data[field])
|
||||
|
||||
await db_session.commit()
|
||||
|
||||
return yeardata
|
||||
|
||||
|
||||
async def delete(*, db_session: DbSession, transaction_data_id: str):
|
||||
"""Deletes a document."""
|
||||
query = Delete(PlantTransactionData).where(PlantTransactionData.id == transaction_data_id)
|
||||
await db_session.execute(query)
|
||||
await db_session.commit()
|
||||
Loading…
Reference in New Issue