|
|
|
@ -4,7 +4,7 @@ from sqlalchemy.orm import selectinload
|
|
|
|
from src.database.service import search_filter_sort_paginate
|
|
|
|
from src.database.service import search_filter_sort_paginate
|
|
|
|
from .model import Equipment, MasterRecords
|
|
|
|
from .model import Equipment, MasterRecords
|
|
|
|
from ..equipment_master.model import EquipmentMaster
|
|
|
|
from ..equipment_master.model import EquipmentMaster
|
|
|
|
from .schema import EquipmentCreate, EquipmentUpdate
|
|
|
|
from .schema import EquipmentCreate, EquipmentUpdate, MasterBase
|
|
|
|
from typing import Optional
|
|
|
|
from typing import Optional
|
|
|
|
|
|
|
|
|
|
|
|
from src.database.core import DbSession
|
|
|
|
from src.database.core import DbSession
|
|
|
|
@ -37,6 +37,16 @@ async def get_master_by_assetnum(
|
|
|
|
master_result = await db_session.execute(master_query)
|
|
|
|
master_result = await db_session.execute(master_query)
|
|
|
|
records = master_result.scalars().all()
|
|
|
|
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
|
|
|
|
# Third query specifically for minimum eac_eac
|
|
|
|
min_query = (
|
|
|
|
min_query = (
|
|
|
|
Select(func.min(func.cast(MasterRecords.eac_eac, Float)), MasterRecords.seq)
|
|
|
|
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
|
|
|
|
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()
|
|
|
|
# return result.scalars().all()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -81,11 +91,77 @@ async def get_all(
|
|
|
|
return result
|
|
|
|
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):
|
|
|
|
async def create(*, db_session: DbSession, equipment_in: EquipmentCreate):
|
|
|
|
"""Creates a new document."""
|
|
|
|
"""Creates a new document."""
|
|
|
|
equipment = Equipment(**equipment_in.model_dump())
|
|
|
|
equipment = Equipment(**equipment_in.model_dump())
|
|
|
|
db_session.add(equipment)
|
|
|
|
db_session.add(equipment)
|
|
|
|
await db_session.commit()
|
|
|
|
await db_session.commit()
|
|
|
|
|
|
|
|
await generate_transaction(db_session=db_session, data_in=equipment_in)
|
|
|
|
return equipment
|
|
|
|
return equipment
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|