add new endpoint
parent
63dd671ef7
commit
b1f21c8c48
@ -0,0 +1,33 @@
|
||||
from decimal import Decimal, getcontext
|
||||
|
||||
def get_material_cost(scope, total_equipment):
|
||||
# Set precision to 28 digits (maximum precision for Decimal)
|
||||
getcontext().prec = 28
|
||||
|
||||
if not total_equipment: # Guard against division by zero
|
||||
return float(0)
|
||||
|
||||
if scope == 'B':
|
||||
result = Decimal('365539731101') / Decimal(str(total_equipment))
|
||||
return float(result)
|
||||
else:
|
||||
result = Decimal('8565468127') / Decimal(str(total_equipment))
|
||||
return float(result)
|
||||
|
||||
return float(0)
|
||||
|
||||
def get_service_cost(scope, total_equipment):
|
||||
# Set precision to 28 digits (maximum precision for Decimal)
|
||||
getcontext().prec = 28
|
||||
|
||||
if not total_equipment: # Guard against division by zero
|
||||
return float(0)
|
||||
|
||||
if scope == 'B':
|
||||
result = Decimal('36405830225') / Decimal(str(total_equipment))
|
||||
return float(result)
|
||||
else:
|
||||
result = Decimal('36000000000') / Decimal(str(total_equipment))
|
||||
return float(result)
|
||||
|
||||
return float(0)
|
||||
@ -0,0 +1,22 @@
|
||||
|
||||
from sqlalchemy import UUID, Column, Float, Integer, String, ForeignKey
|
||||
from src.database.core import Base
|
||||
from src.models import DefaultMixin, IdentityMixin, TimeStampMixin
|
||||
from sqlalchemy.orm import relationship
|
||||
from src.workorder.model import MasterWorkOrder
|
||||
from sqlalchemy.ext.hybrid import hybrid_property
|
||||
|
||||
|
||||
class ScopeEquipmentJob(Base, DefaultMixin):
|
||||
__tablename__ = "oh_mas_scope_equipment_job"
|
||||
|
||||
assetnum = Column(String, nullable=False)
|
||||
job_id = Column(UUID(as_uuid=True), ForeignKey(
|
||||
"oh_ms_job.id", ondelete="cascade"))
|
||||
|
||||
master_equipments = relationship(
|
||||
"MasterEquipment", lazy="raise", primaryjoin="and_(ScopeEquipmentJob.assetnum == foreign(MasterEquipment.assetnum))", uselist=False)
|
||||
|
||||
job = relationship(
|
||||
"MasterActivity", lazy="raise"
|
||||
)
|
||||
@ -0,0 +1,41 @@
|
||||
|
||||
from typing import Dict, List
|
||||
from fastapi import APIRouter, HTTPException, Query, status
|
||||
|
||||
from .service import get_all, delete, create
|
||||
from .schema import ScopeEquipmentJobCreate, ScopeEquipmentJobPagination
|
||||
|
||||
from src.models import StandardResponse
|
||||
from src.database.service import CommonParameters, search_filter_sort_paginate, DbSession
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/{assetnum}", response_model=StandardResponse[ScopeEquipmentJobPagination])
|
||||
async def get_scope_equipment_jobs(db_session: DbSession, assetnum, common: CommonParameters):
|
||||
"""Get all scope activity pagination."""
|
||||
# return
|
||||
data = await get_all(db_session=db_session, assetnum=assetnum, common=common)
|
||||
|
||||
return StandardResponse(
|
||||
data=data,
|
||||
message="Data retrieved successfully",
|
||||
)
|
||||
|
||||
|
||||
@router.post("/{assetnum}", response_model=StandardResponse[None])
|
||||
async def create_scope_equipment_jobs(db_session: DbSession, assetnum, scope_job_in: ScopeEquipmentJobCreate):
|
||||
"""Get all scope activity pagination."""
|
||||
# return
|
||||
await create(db_session=db_session, assetnum=assetnum, scope_job_in=scope_job_in)
|
||||
|
||||
return StandardResponse(
|
||||
data=None,
|
||||
message="Data created successfully",
|
||||
)
|
||||
|
||||
|
||||
@router.delete("/{assetnum}", response_model=StandardResponse[None])
|
||||
async def delete_scope_equipment_job(db_session: DbSession, assetnum, scope_job_id):
|
||||
|
||||
await delete(db_session=db_session, assetnum=assetnum, scope_job_id=scope_job_id)
|
||||
@ -0,0 +1,70 @@
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import Field, BaseModel
|
||||
from src.job.schema import ActivityMasterRead
|
||||
from src.models import DefultBase, Pagination
|
||||
|
||||
|
||||
class ScopeEquipmentJobBase(DefultBase):
|
||||
assetnum: str = Field(..., description="Assetnum is required")
|
||||
|
||||
|
||||
class ScopeEquipmentJobCreate(ScopeEquipmentJobBase):
|
||||
job_ids: Optional[List[UUID]] = []
|
||||
|
||||
|
||||
class ScopeEquipmentJobUpdate(ScopeEquipmentJobBase):
|
||||
name: Optional[str] = Field(None)
|
||||
cost: Optional[str] = Field(0)
|
||||
|
||||
|
||||
class ScopeEquipmentJobRead(ScopeEquipmentJobBase):
|
||||
id: UUID
|
||||
assetnum: str
|
||||
job: ActivityMasterRead
|
||||
|
||||
|
||||
class ScopeEquipmentJobPagination(Pagination):
|
||||
items: List[ScopeEquipmentJobRead] = []
|
||||
|
||||
|
||||
# {
|
||||
# "overview": {
|
||||
# "totalEquipment": 30,
|
||||
# "nextSchedule": {
|
||||
# "date": "2025-01-12",
|
||||
# "Overhaul": "B",
|
||||
# "equipmentCount": 30
|
||||
# }
|
||||
# },
|
||||
# "criticalParts": [
|
||||
# "Boiler feed pump",
|
||||
# "Boiler reheater system",
|
||||
# "Drum Level (Right) Root Valve A",
|
||||
# "BCP A Discharge Valve",
|
||||
# "BFPT A EXH Press HI Root VLV"
|
||||
# ],
|
||||
# "schedules": [
|
||||
# {
|
||||
# "date": "2025-01-12",
|
||||
# "Overhaul": "B",
|
||||
# "status": "upcoming"
|
||||
# }
|
||||
# // ... other scheduled overhauls
|
||||
# ],
|
||||
# "systemComponents": {
|
||||
# "boiler": {
|
||||
# "status": "operational",
|
||||
# "lastOverhaul": "2024-06-15"
|
||||
# },
|
||||
# "turbine": {
|
||||
# "hpt": { "status": "operational" },
|
||||
# "ipt": { "status": "operational" },
|
||||
# "lpt": { "status": "operational" }
|
||||
# }
|
||||
# // ... other major components
|
||||
# }
|
||||
# }
|
||||
@ -0,0 +1,94 @@
|
||||
|
||||
|
||||
import random
|
||||
from sqlalchemy import Select, Delete, and_
|
||||
from sqlalchemy.orm import selectinload
|
||||
from typing import Optional
|
||||
|
||||
from src.scope_equipment.model import MasterEquipment, MasterEquipmentTree
|
||||
from src.scope_equipment.service import get_equipment_level_by_no
|
||||
|
||||
from .model import ScopeEquipmentJob
|
||||
from .schema import ScopeEquipmentJobCreate
|
||||
|
||||
from src.database.core import DbSession
|
||||
from src.database.service import CommonParameters, search_filter_sort_paginate
|
||||
from src.auth.service import CurrentUser
|
||||
|
||||
|
||||
# async def get(*, db_session: DbSession, scope_equipment_activity_id: str) -> Optional[ScopeEquipmentActivity]:
|
||||
# """Returns a document based on the given document id."""
|
||||
# result = await db_session.get(ScopeEquipmentActivity, scope_equipment_activity_id)
|
||||
# return result
|
||||
|
||||
|
||||
async def get_all(db_session: DbSession, assetnum: Optional[str], common):
|
||||
# Example usage
|
||||
if not assetnum:
|
||||
raise ValueError("assetnum parameter is required")
|
||||
|
||||
# First get the parent equipment
|
||||
equipment_stmt = Select(MasterEquipment).where(
|
||||
MasterEquipment.assetnum == assetnum)
|
||||
equipment: MasterEquipment = await db_session.scalar(equipment_stmt)
|
||||
|
||||
if not equipment:
|
||||
raise ValueError(f"No equipment found with assetnum: {assetnum}")
|
||||
|
||||
# Build query for parts
|
||||
stmt = (
|
||||
Select(ScopeEquipmentJob)
|
||||
.where(
|
||||
ScopeEquipmentJob.assetnum == assetnum
|
||||
).options(selectinload(ScopeEquipmentJob.job))
|
||||
)
|
||||
|
||||
results = await search_filter_sort_paginate(model=stmt, **common)
|
||||
|
||||
return results
|
||||
|
||||
|
||||
async def create(*, db_session: DbSession, assetnum, scope_job_in: ScopeEquipmentJobCreate):
|
||||
scope_jobs = []
|
||||
|
||||
if not assetnum:
|
||||
raise ValueError("assetnum parameter is required")
|
||||
|
||||
# First get the parent equipment
|
||||
equipment_stmt = Select(MasterEquipment).where(
|
||||
MasterEquipment.assetnum == assetnum)
|
||||
equipment: MasterEquipment = await db_session.scalar(equipment_stmt)
|
||||
|
||||
if not equipment:
|
||||
raise ValueError(f"No equipment found with assetnum: {assetnum}")
|
||||
|
||||
for job_id in scope_job_in.job_ids:
|
||||
scope_equipment_job = ScopeEquipmentJob(
|
||||
assetnum=assetnum, job_id=job_id)
|
||||
scope_jobs.appeand(scope_equipment_job)
|
||||
|
||||
db_session.add_all(scope_jobs)
|
||||
await db_session.commit()
|
||||
return
|
||||
|
||||
|
||||
# async def update(*, db_session: DbSession, activity: ScopeEquipmentActivity, scope_equipment_activty_in: ScopeEquipmentActivityUpdate):
|
||||
# """Updates a document."""
|
||||
# data = scope_equipment_activty_in.model_dump()
|
||||
|
||||
# update_data = scope_equipment_activty_in.model_dump(exclude_defaults=True)
|
||||
|
||||
# for field in data:
|
||||
# if field in update_data:
|
||||
# setattr(activity, field, update_data[field])
|
||||
|
||||
# await db_session.commit()
|
||||
|
||||
# return activity
|
||||
|
||||
|
||||
async def delete(*, db_session: DbSession, assetnum, scope_job_id):
|
||||
"""Deletes a document."""
|
||||
activity = await db_session.get(ScopeEquipmentJob, scope_job_id)
|
||||
await db_session.delete(activity)
|
||||
await db_session.commit()
|
||||
Loading…
Reference in New Issue