fix material cost and service cost

feature/reliability_stat
Cizz22 1 year ago
parent 99b0288239
commit 6b6aa09877

@ -26,6 +26,7 @@ from src.overhaul_scope.router import router as scope_router
from src.overhaul_activity.router import router as overhaul_activity_router
from src.calculation_target_reliability.router import router as calculation_target_reliability
from src.scope_equipment_job.router import router as scope_equipment_job_router
from src.job.router import router as job_router
class ErrorMessage(BaseModel):
msg: str
@ -58,6 +59,8 @@ authenticated_api_router = APIRouter(dependencies=[Depends(JWTBearer())],
authenticated_api_router.include_router(
overhaul_router, prefix="/overhauls", tags=["overhaul"])
authenticated_api_router.include_router(
job_router, prefix="/jobs", tags=["job"])
# # Overhaul session data
authenticated_api_router.include_router(
@ -72,7 +75,7 @@ authenticated_api_router.include_router(
)
authenticated_api_router.include_router(
scope_equipment_job_router, prefix="/scope-equipment-jobs"
scope_equipment_job_router, prefix="/scope-equipment-jobs", tags=["scope_equipment", "job"]
)
# authenticated_api_router.include_router(

@ -10,7 +10,7 @@ from sqlalchemy.ext.hybrid import hybrid_property
class MasterActivity(Base, DefaultMixin):
__tablename__ = "oh_ms_job"
name = Column(String, nullable=False)
description = Column(String, nullable=False)
# details = relationship(
# "MasterActivityDetail",

@ -8,7 +8,7 @@ from src.models import DefultBase, Pagination
class ActivityMaster(DefultBase):
name: str
pass
class ActivityMasterDetail(DefultBase):
@ -21,7 +21,7 @@ class ActivityMasterCreate(ActivityMaster):
class ActivityMasterRead(ActivityMaster):
id: UUID
details: List[ActivityMasterDetail] = []
description: str
class ActivityMasterPagination(Pagination):

@ -4,7 +4,7 @@ from sqlalchemy import Select, Delete
from sqlalchemy.orm import joinedload, selectinload
from typing import Optional
from .model import MasterActivity, MasterActivityDetail
from .model import MasterActivity
from .schema import ActivityMaster, ActivityMasterCreate
from src.database.core import DbSession
@ -19,8 +19,7 @@ async def get(*, db_session: DbSession, activity_id: str) -> Optional[ActivityMa
async def get_all(common: CommonParameters):
query = Select(MasterActivity).options(
selectinload(MasterActivity.details))
query = Select(MasterActivity)
results = await search_filter_sort_paginate(model=query, **common)

@ -1,5 +1,5 @@
from typing import Optional
from typing import List, Optional
from uuid import UUID
from fastapi import APIRouter, HTTPException, Query, status
@ -25,7 +25,7 @@ async def get_scope_equipments(common: CommonParameters, overhaul_session: str,
)
@ router.post("/{overhaul_session}", response_model=StandardResponse[OverhaulActivityRead])
@ router.post("/{overhaul_session}", response_model=StandardResponse[List[str]])
async def create_overhaul_equipment(db_session: DbSession, overhaul_activty_in: OverhaulActivityCreate, overhaul_session: str):
activity = await create(db_session=db_session, overhaul_activty_in=overhaul_activty_in, overhaul_session_id=overhaul_session)

@ -9,7 +9,7 @@ from src.scope_equipment.schema import MasterEquipmentRead
class OverhaulActivityBase(DefultBase):
assetnum: str = Field(..., description="Assetnum is required")
pass
class OverhaulActivityCreate(OverhaulActivityBase):
@ -25,6 +25,7 @@ class OverhaulActivityRead(OverhaulActivityBase):
id: UUID
material_cost: Optional[float] = Field(0)
service_cost: Optional[float] = Field(0)
assetnum: str = Field(..., description="Assetnum is required")
status: str
equipment: MasterEquipmentRead

@ -2,9 +2,10 @@
import asyncio
from uuid import UUID
from sqlalchemy import Select, Delete, func, insert, select, update as sqlUpdate
from sqlalchemy import Select, Delete, func, select, update as sqlUpdate
from sqlalchemy.orm import joinedload
from typing import List, Optional
from sqlalchemy.dialects.postgresql import insert
from src.overhaul_activity.utils import get_material_cost, get_service_cost
from src.overhaul_scope.model import OverhaulScope
@ -88,41 +89,44 @@ async def create(*, db_session: DbSession, overhaul_activty_in: OverhaulActivity
return []
# Get session and count in parallel
session, equipment_count = await asyncio.gather(
get_session(db_session=db_session, overhaul_session_id=overhaul_session_id),
db_session.scalar(
select(func.count())
.select_from(OverhaulActivity)
.where(OverhaulActivity.overhaul_scope_id == overhaul_session_id)
)
session = await get_session(db_session=db_session, overhaul_session_id=overhaul_session_id)
equipment_count = await db_session.scalar(
select(func.count())
.select_from(OverhaulActivity)
.where(OverhaulActivity.overhaul_scope_id == overhaul_session_id)
)
# Calculate costs for all records
total_equipment = equipment_count + len(assetnums)
material_cost = get_material_cost(scope=session.type, total_equipment=total_equipment)
service_cost = get_service_cost(scope=session.type, total_equipment=total_equipment)
# Bulk create new activities
overhaul_activities = [
OverhaulActivity(
assetnum=assetnum,
overhaul_scope_id=overhaul_session_id,
material_cost=material_cost,
service_cost=service_cost
)
material_cost = get_material_cost(
scope=session.type, total_equipment=total_equipment)
service_cost = get_service_cost(
scope=session.type, total_equipment=total_equipment)
# Create the insert statement
stmt = insert(OverhaulActivity).values([
{
'assetnum': assetnum,
'overhaul_scope_id': overhaul_session_id,
'material_cost': material_cost,
'service_cost': service_cost
}
for assetnum in assetnums
]
# Add new records and update all existing records in parallel
await asyncio.gather(
db_session.add_all(overhaul_activities),
db_session.execute(
update(OverhaulActivity)
.where(OverhaulActivity.overhaul_scope_id == overhaul_session_id)
.values(material_cost=material_cost, service_cost=service_cost)
])
# Add the ON CONFLICT DO NOTHING clause
stmt = stmt.on_conflict_do_nothing(
index_elements=["assetnum", "overhaul_scope_id"]
)
# Execute the statement
db_session.execute(stmt)
await db_session.execute(
sqlUpdate(OverhaulActivity)
.where(OverhaulActivity.overhaul_scope_id == overhaul_session_id)
.values(material_cost=material_cost, service_cost=service_cost)
)
await db_session.commit()
return assetnums

@ -8,7 +8,7 @@ from sqlalchemy.ext.hybrid import hybrid_property
class ScopeEquipmentJob(Base, DefaultMixin):
__tablename__ = "oh_mas_scope_equipment_job"
__tablename__ = "oh_ms_scope_equipment_job"
assetnum = Column(String, nullable=False)
job_id = Column(UUID(as_uuid=True), ForeignKey(

@ -9,7 +9,7 @@ from src.models import DefultBase, Pagination
class ScopeEquipmentJobBase(DefultBase):
assetnum: str = Field(..., description="Assetnum is required")
assetnum: Optional[str] = Field(None, description="Assetnum is required")
class ScopeEquipmentJobCreate(ScopeEquipmentJobBase):

@ -65,7 +65,7 @@ async def create(*, db_session: DbSession, assetnum, scope_job_in: ScopeEquipmen
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)
scope_jobs.append(scope_equipment_job)
db_session.add_all(scope_jobs)
await db_session.commit()

Loading…
Cancel
Save