|
|
|
|
@ -1,9 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from sqlalchemy import Select, Delete, desc, func
|
|
|
|
|
from fastapi import HTTPException, status
|
|
|
|
|
from sqlalchemy import Select, Delete, desc, func, not_, insert
|
|
|
|
|
|
|
|
|
|
from src.workorder.model import MasterWorkOrder
|
|
|
|
|
from .model import ScopeEquipment
|
|
|
|
|
from .model import ScopeEquipment, MasterEquipment
|
|
|
|
|
from src.scope.service import get_by_scope_name as get_scope_by_name_service
|
|
|
|
|
from .schema import ScopeEquipmentCreate, ScopeEquipmentUpdate
|
|
|
|
|
from typing import Optional, Union
|
|
|
|
|
@ -27,7 +28,6 @@ async def get_all(*, db_session: DbSession, common, scope_name: str = None, excl
|
|
|
|
|
query = Select(ScopeEquipment).options(selectinload(
|
|
|
|
|
ScopeEquipment.scope), selectinload(ScopeEquipment.master_equipment))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
query = query.order_by(desc(ScopeEquipment.created_at))
|
|
|
|
|
|
|
|
|
|
if scope_name:
|
|
|
|
|
@ -41,10 +41,35 @@ async def get_all(*, db_session: DbSession, common, scope_name: str = None, excl
|
|
|
|
|
|
|
|
|
|
async def create(*, db_session: DbSession, scope_equipment_in: ScopeEquipmentCreate):
|
|
|
|
|
"""Creates a new document."""
|
|
|
|
|
scope_equipment = ScopeEquipment(**scope_equipment_in.model_dump())
|
|
|
|
|
db_session.add(scope_equipment)
|
|
|
|
|
# scope_equipment = ScopeEquipment(**scope_equipment_in.model_dump())
|
|
|
|
|
assetnums = scope_equipment_in.assetnums
|
|
|
|
|
scope = get_scope_by_name_service(
|
|
|
|
|
db_session=db_session, scope_name=scope_equipment_in.scope_name)
|
|
|
|
|
|
|
|
|
|
if not scope:
|
|
|
|
|
raise HTTPException(
|
|
|
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
|
|
|
detail="A scope with this name does not exist.",
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
results = []
|
|
|
|
|
|
|
|
|
|
for assetnum in assetnums:
|
|
|
|
|
stmt = insert(ScopeEquipment).values(
|
|
|
|
|
assetnum=assetnum,
|
|
|
|
|
scope_id=scope.id
|
|
|
|
|
).on_conflict_do_update(
|
|
|
|
|
index_elements=["assetnum"],
|
|
|
|
|
set_={
|
|
|
|
|
"scope_id": scope.id
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
db_session.execute(stmt)
|
|
|
|
|
results.append(assetnum)
|
|
|
|
|
|
|
|
|
|
await db_session.commit()
|
|
|
|
|
return scope_equipment
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def update(*, db_session: DbSession, scope_equipment: ScopeEquipment, scope_equipment_in: ScopeEquipmentUpdate):
|
|
|
|
|
@ -96,3 +121,14 @@ async def get_exculed_scope_name(*, db_session: DbSession, scope_name: Union[str
|
|
|
|
|
|
|
|
|
|
result = await db_session.execute(query)
|
|
|
|
|
return result.scalars().all()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def get_all_master_equipment(*, db_session: DbSession, exclude: Optional[str] = None, common: CommonParameters):
|
|
|
|
|
query = Select(MasterEquipment).filter(MasterEquipment.assetnum != None)
|
|
|
|
|
|
|
|
|
|
if exclude:
|
|
|
|
|
query = query.filter(
|
|
|
|
|
not_(MasterEquipment.location_tag.op("~")(f"{exclude.capitalize()}$")))
|
|
|
|
|
|
|
|
|
|
results = await search_filter_sort_paginate(model=query, **common)
|
|
|
|
|
return results
|
|
|
|
|
|