refactor: equipment API

main
MrWaradana 11 months ago
parent 03c5155ee5
commit 5c2cf398ca

@ -38,40 +38,40 @@ class MasterRecords(Base, DefaultMixin, IdentityMixin):
# )
assetnum = Column(String, nullable=False)
tahun = Column(String, nullable=False)
seq = Column(String, nullable=False)
is_actual = Column(String, nullable=False)
raw_cm_interval = Column(String, nullable=False)
raw_cm_material_cost = Column(String, nullable=False)
raw_cm_labor_time = Column(String, nullable=False)
raw_cm_labor_human = Column(String, nullable=False)
raw_pm_interval = Column(String, nullable=False)
raw_pm_material_cost = Column(String, nullable=False)
raw_pm_labor_time = Column(String, nullable=False)
raw_pm_labor_human = Column(String, nullable=False)
raw_predictive_labor_time = Column(String, nullable=False)
raw_predictive_labor_human = Column(String, nullable=False)
raw_oh_material_cost = Column(String, nullable=False)
raw_oh_labor_time = Column(String, nullable=False)
raw_oh_labor_human = Column(String, nullable=False)
raw_project_task_material_cost = Column(String, nullable=False)
raw_loss_output_MW = Column(String, nullable=False)
raw_loss_output_price = Column(String, nullable=False)
raw_operational_cost = Column(String, nullable=False)
raw_maintenance_cost = Column(String, nullable=False)
rc_cm_material_cost = Column(String, nullable=False)
rc_cm_labor_cost = Column(String, nullable=False)
rc_pm_material_cost = Column(String, nullable=False)
rc_pm_labor_cost = Column(String, nullable=False)
rc_predictive_labor_cost = Column(String, nullable=False)
rc_oh_material_cost = Column(String, nullable=False)
rc_oh_labor_cost = Column(String, nullable=False)
rc_project_material_cost = Column(String, nullable=False)
rc_lost_cost = Column(String, nullable=False)
rc_operation_cost = Column(String, nullable=False)
rc_maintenance_cost = Column(String, nullable=False)
rc_total_cost = Column(String, nullable=False)
eac_npv = Column(String, nullable=False)
eac_annual_mnt_cost = Column(String, nullable=False)
eac_annual_acq_cost = Column(String, nullable=False)
eac_eac = Column(String, nullable=False)
tahun = Column(Integer, nullable=False)
seq = Column(Integer, nullable=False)
is_actual = Column(Integer, nullable=False)
raw_cm_interval = Column(Float, nullable=False)
raw_cm_material_cost = Column(Float, nullable=False)
raw_cm_labor_time = Column(Float, nullable=False)
raw_cm_labor_human = Column(Float, nullable=False)
raw_pm_interval = Column(Float, nullable=False)
raw_pm_material_cost = Column(Float, nullable=False)
raw_pm_labor_time = Column(Float, nullable=False)
raw_pm_labor_human = Column(Float, nullable=False)
raw_predictive_labor_time = Column(Float, nullable=False)
raw_predictive_labor_human = Column(Float, nullable=False)
raw_oh_material_cost = Column(Float, nullable=False)
raw_oh_labor_time = Column(Float, nullable=False)
raw_oh_labor_human = Column(Float, nullable=False)
raw_project_task_material_cost = Column(Float, nullable=False)
raw_loss_output_MW = Column(Float, nullable=False)
raw_loss_output_price = Column(Float, nullable=False)
raw_operational_cost = Column(Float, nullable=False)
raw_maintenance_cost = Column(Float, nullable=False)
rc_cm_material_cost = Column(Float, nullable=False)
rc_cm_labor_cost = Column(Float, nullable=False)
rc_pm_material_cost = Column(Float, nullable=False)
rc_pm_labor_cost = Column(Float, nullable=False)
rc_predictive_labor_cost = Column(Float, nullable=False)
rc_oh_material_cost = Column(Float, nullable=False)
rc_oh_labor_cost = Column(Float, nullable=False)
rc_project_material_cost = Column(Float, nullable=False)
rc_lost_cost = Column(Float, nullable=False)
rc_operation_cost = Column(Float, nullable=False)
rc_maintenance_cost = Column(Float, nullable=False)
rc_total_cost = Column(Float, nullable=False)
eac_npv = Column(Float, nullable=False)
eac_annual_mnt_cost = Column(Float, nullable=False)
eac_annual_acq_cost = Column(Float, nullable=False)
eac_eac = Column(Float, nullable=False)

@ -48,9 +48,14 @@ async def get_equipment_tree():
@router.get("/{assetnum}", response_model=StandardResponse[EquipmentRead])
async def get_equipment(db_session: DbSession, assetnum: str):
equipment_master_record, equipment_data, chart_data, min_eac_value, min_seq = (
await get_master_by_assetnum(db_session=db_session, assetnum=assetnum)
)
(
equipment_master_record,
equipment_data,
chart_data,
min_eac_value,
min_seq,
last_actual_year,
) = await get_master_by_assetnum(db_session=db_session, assetnum=assetnum)
# raise Exception(equipment[0])
if not chart_data:
raise HTTPException(
@ -65,6 +70,7 @@ async def get_equipment(db_session: DbSession, assetnum: str):
chart_data=chart_data,
min_eac_value=min_eac_value,
min_seq=min_seq,
last_actual_year=last_actual_year,
),
message="Data retrieved successfully",
)

@ -28,8 +28,8 @@ class EquipmentMasterBase(DefaultBase):
class MasterBase(DefaultBase):
assetnum: Optional[str] = Field(None, nullable=True)
tahun: Optional[float] = Field(None, nullable=True)
seq: Optional[float] = Field(None, nullable=True)
tahun: Optional[int] = Field(None, nullable=True)
seq: Optional[int] = Field(None, nullable=True)
is_actual: Optional[float] = Field(None, nullable=True)
raw_cm_interval: Optional[float] = Field(None, nullable=True)
raw_cm_material_cost: Optional[float] = Field(None, nullable=True)
@ -81,6 +81,7 @@ class EquipmentRead(DefaultBase):
chart_data: List[MasterBase]
min_eac_value: Optional[float] = Field(None, nullable=True)
min_seq: Optional[float] = Field(None, nullable=True)
last_actual_year: Optional[int] = Field(None, nullable=True)
class EquipmentDataMaster(EquipmentBase):

@ -4,7 +4,7 @@ from sqlalchemy.orm import selectinload
from src.database.service import search_filter_sort_paginate
from .model import Equipment, MasterRecords
from ..equipment_master.model import EquipmentMaster
from .schema import EquipmentCreate, EquipmentUpdate
from .schema import EquipmentCreate, EquipmentUpdate, MasterBase
from typing import Optional
from src.database.core import DbSession
@ -37,6 +37,16 @@ async def get_master_by_assetnum(
master_result = await db_session.execute(master_query)
records = master_result.scalars().all()
# Get the last actual year
last_actual_year_query = (
Select(func.max(MasterRecords.tahun))
.join(MasterRecords.equipment)
.filter(Equipment.assetnum == assetnum)
.filter(MasterRecords.is_actual == 1)
)
last_actual_year_result = await db_session.execute(last_actual_year_query)
last_actual_year = last_actual_year_result.scalar()
# Third query specifically for minimum eac_eac
min_query = (
Select(func.min(func.cast(MasterRecords.eac_eac, Float)), MasterRecords.seq)
@ -53,7 +63,7 @@ async def get_master_by_assetnum(
)
min_seq = min_record[1] if min_record else None
return equipment_master_record, equipment_record, records, min_eac_value, min_seq
return equipment_master_record, equipment_record, records, min_eac_value, min_seq, last_actual_year
# return result.scalars().all()
@ -81,11 +91,77 @@ async def get_all(
return result
async def generate_transaction(*, db_session: DbSession, data_in: EquipmentCreate):
# Delete all existing master records for this asset number and prediction data
query = (
Delete(MasterRecords)
.where(MasterRecords.assetnum == data_in.assetnum)
.where(MasterRecords.is_actual == 0)
)
await db_session.execute(query)
await db_session.commit()
"""Generate transaction for equipment."""
base_transaction = {
"assetnum": data_in.assetnum,
"is_actual": 0,
"raw_cm_interval": None,
"raw_cm_material_cost": None,
"raw_cm_labor_time": None,
"raw_cm_labor_human": None,
"raw_pm_interval": None,
"raw_pm_material_cost": None,
"raw_pm_labor_time": None,
"raw_pm_labor_human": None,
"raw_predictive_labor_time": None,
"raw_predictive_labor_human": None,
"raw_oh_material_cost": None,
"raw_oh_labor_time": None,
"raw_oh_labor_human": None,
"raw_project_task_material_cost": None,
"raw_loss_output_MW": None,
"raw_loss_output_price": None,
"raw_operational_cost": None,
"raw_maintenance_cost": None,
"rc_cm_material_cost": None,
"rc_cm_labor_cost": None,
"rc_pm_material_cost": None,
"rc_pm_labor_cost": None,
"rc_predictive_labor_cost": None,
"rc_oh_material_cost": None,
"rc_oh_labor_cost": None,
"rc_project_material_cost": None,
"rc_lost_cost": None,
"rc_operation_cost": None,
"rc_maintenance_cost": None,
"rc_total_cost": None,
"eac_npv": None,
"eac_annual_mnt_cost": None,
"eac_annual_acq_cost": None,
"eac_eac": None,
}
transactions = []
for sequence, year in enumerate(
range(data_in.acquisition_year - 1, data_in.forecasting_target_year + 1), 0
):
transaction = base_transaction.copy()
transaction.update({"tahun": int(year), "seq": int(sequence)})
transactions.append(MasterRecords(**transaction))
db_session.add_all(transactions)
await db_session.commit()
# Return the number of transactions created
return len(transactions)
async def create(*, db_session: DbSession, equipment_in: EquipmentCreate):
"""Creates a new document."""
equipment = Equipment(**equipment_in.model_dump())
db_session.add(equipment)
await db_session.commit()
await generate_transaction(db_session=db_session, data_in=equipment_in)
return equipment

Loading…
Cancel
Save