diff --git a/src/scope_equipment/router.py b/src/scope_equipment/router.py index f83db66..2e24f42 100644 --- a/src/scope_equipment/router.py +++ b/src/scope_equipment/router.py @@ -35,9 +35,9 @@ async def get_scope_name(db_session: DbSession, scope_name: str, exclude: bool = return StandardResponse(data=await get_by_scope_name(db_session=db_session, scope_name=scope_name), message="Data retrieved successfully") -@router.get("/master", response_model=StandardResponse[MasterEquipmentPagination]) -async def get_master_equipment(db_session: DbSession, common: CommonParameters, exclude: Optional[str] = Query(None)): - results = await get_all_master_equipment(db_session=db_session, common=common, exclude=exclude) +@router.get("/available/{scope_name}", response_model=StandardResponse[MasterEquipmentPagination]) +async def get_master_equipment(db_session: DbSession, common: CommonParameters, scope_name: str): + results = await get_all_master_equipment(db_session=db_session, common=common, exclude=scope_name) return StandardResponse(data=results, message="Data retrieved successfully") diff --git a/src/scope_equipment/service.py b/src/scope_equipment/service.py index e1017ca..548b7e3 100644 --- a/src/scope_equipment/service.py +++ b/src/scope_equipment/service.py @@ -1,7 +1,7 @@ from fastapi import HTTPException, status -from sqlalchemy import Select, Delete, desc, func, not_, insert +from sqlalchemy import Select, Delete, desc, func, not_, insert, or_ from src.workorder.model import MasterWorkOrder from .model import ScopeEquipment, MasterEquipment @@ -51,7 +51,7 @@ async def create(*, db_session: DbSession, scope_equipment_in: ScopeEquipmentCre status_code=status.HTTP_404_NOT_FOUND, detail="A scope with this name does not exist.", ) - + results = [] for assetnum in assetnums: @@ -64,7 +64,7 @@ async def create(*, db_session: DbSession, scope_equipment_in: ScopeEquipmentCre "scope_id": scope.id } ) - + db_session.execute(stmt) results.append(assetnum) @@ -89,9 +89,24 @@ async def update(*, db_session: DbSession, scope_equipment: ScopeEquipment, scop async def delete(*, db_session: DbSession, scope_equipment_id: str): """Deletes a document.""" - query = Delete(ScopeEquipment).where( + # query = Delete(ScopeEquipment).where( + # ScopeEquipment.id == scope_equipment_id) + # await db_session.execute(query) + # await db_session.commit() + + query = Select(ScopeEquipment).filter( ScopeEquipment.id == scope_equipment_id) - await db_session.execute(query) + scope_equipment = await db_session.execute(query) + scope_equipment = scope_equipment.scalars().one_or_none() + + if not scope_equipment: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="A data with this id does not exist.", + ) + + scope_equipment.scope_id = None + await db_session.commit() @@ -126,9 +141,15 @@ async def get_exculed_scope_name(*, db_session: DbSession, scope_name: Union[str async def get_all_master_equipment(*, db_session: DbSession, exclude: Optional[str] = None, common: CommonParameters): query = Select(MasterEquipment).filter(MasterEquipment.assetnum != None) + query = query.outerjoin( + ScopeEquipment, MasterEquipment.assetnum == ScopeEquipment.assetnum) + if exclude: query = query.filter( - not_(MasterEquipment.location_tag.op("~")(f"{exclude.capitalize()}$"))) + not_(MasterEquipment.location_tag.op('~')('A$')) | (ScopeEquipment.scope_id.is_(None)) + ) + else: + query = query.filter(ScopeEquipment.scope_id.is_(None)) results = await search_filter_sort_paginate(model=query, **common) return results