fix scope equipment scope

main
Cizz22 1 year ago
parent 6711f4a8f7
commit 59251ea089

@ -12,9 +12,23 @@ class ScopeEquipment(Base, DefaultMixin):
assetnum = Column(String, nullable=True)
scope_id = Column(UUID(as_uuid=True), ForeignKey(
'oh_scope.id'), nullable=True)
current_scope_id = Column(UUID(as_uuid=True), ForeignKey(
'oh_scope.id'), nullable=False)
scope = relationship("Scope", backref="scope_equipments", lazy="raise")
parent_scope = relationship(
"Scope",
foreign_keys=[scope_id],
backref="equipments",
lazy="raise"
)
current_scope = relationship(
"Scope",
foreign_keys=[current_scope_id],
backref="overhaul_equipments",
lazy="raise"
)
master_equipment = relationship(
"MasterEquipment",
lazy="raise",
@ -23,8 +37,8 @@ class ScopeEquipment(Base, DefaultMixin):
)
work_orders = relationship("MasterWorkOrder", lazy="selectin",
primaryjoin="and_(ScopeEquipment.assetnum == foreign(MasterWorkOrder.assetnum))")
@hybrid_property
@ hybrid_property
def total_cost(self):
return sum(wo.total_cost_max for wo in self.work_orders if wo.total_cost_max)

@ -29,7 +29,8 @@ class ScopeEquipmentUpdate(ScopeEquipmentBase):
class ScopeEquipmentRead(ScopeEquipmentBase):
id: UUID
assetnum: str
scope: ScopeRead
parent_scope: ScopeRead
current_scope: ScopeRead
master_equipment: MasterEquipmentBase
total_cost: float

@ -34,14 +34,14 @@ async def get_by_assetnum(*, db_session: DbSession, assetnum: str):
async def get_all(*, db_session: DbSession, common, scope_name: str = None, exclude: bool = False):
"""Returns all documents."""
query = Select(ScopeEquipment).options(selectinload(
ScopeEquipment.scope), selectinload(ScopeEquipment.master_equipment))
ScopeEquipment.parent_scope), selectinload(ScopeEquipment.current_scope), selectinload(ScopeEquipment.master_equipment))
query = query.order_by(desc(ScopeEquipment.created_at))
if scope_name:
scope = await get_scope_by_name_service(db_session=db_session, scope_name=scope_name)
query = query.filter(ScopeEquipment.scope_id == scope.id) if not exclude else query.filter(
ScopeEquipment.scope_id != scope.id)
query = query.filter(ScopeEquipment.current_scope_id == scope.id) if not exclude else query.filter(
ScopeEquipment.current_scope_id != scope.id)
results = await search_filter_sort_paginate(model=query, **common)
return results
@ -65,13 +65,13 @@ async def create(*, db_session: DbSession, scope_equipment_in: ScopeEquipmentCre
for assetnum in assetnums:
stmt = insert(ScopeEquipment).values(
assetnum=assetnum,
scope_id=scope.id
current_scope_id=scope.id
)
stmt = stmt.on_conflict_do_update(
index_elements=["assetnum"],
set_={
"scope_id": scope.id
"current_scope_id": scope.id
}
)
@ -106,8 +106,9 @@ async def delete(*, db_session: DbSession, scope_equipment_id: str):
query = Select(ScopeEquipment).filter(
ScopeEquipment.id == scope_equipment_id)
scope_equipment = await db_session.execute(query)
scope_equipment = scope_equipment.scalars().one_or_none()
scope_equipment: ScopeEquipment = scope_equipment.scalars().one_or_none()
if not scope_equipment:
raise HTTPException(
@ -115,8 +116,10 @@ async def delete(*, db_session: DbSession, scope_equipment_id: str):
detail="A data with this id does not exist.",
)
scope_equipment.scope_id = None
if not scope_equipment.scope_id:
await db_session.delete(scope_equipment)
else:
scope_equipment.current_scope_id = scope_equipment.scope_id
await db_session.commit()
@ -127,7 +130,7 @@ async def get_by_scope_name(*, db_session: DbSession, scope_name: Union[str, lis
query = Select(ScopeEquipment)
if scope:
query = query.filter(ScopeEquipment.scope_id == scope.id)
query = query.filter(ScopeEquipment.current_scope_id == scope.id)
result = await db_session.execute(query)
return result.scalars().all()
@ -139,10 +142,10 @@ async def get_exculed_scope_name(*, db_session: DbSession, scope_name: Union[str
query = Select(ScopeEquipment)
if scope:
query = query.filter(ScopeEquipment.scope_id != scope.id)
query = query.filter(ScopeEquipment.current_scope_id != scope.id)
else:
query = query.filter(ScopeEquipment.scope_id != None)
query = query.filter(ScopeEquipment.current_scope_id != None)
result = await db_session.execute(query)
return result.scalars().all()
@ -158,11 +161,8 @@ async def get_all_master_equipment(*, db_session: DbSession, exclude: Optional[s
if scope:
query = query.filter(
not_(ScopeEquipment.scope_id == scope.id) | (
ScopeEquipment.scope_id.is_(None))
not_(ScopeEquipment.current_scope_id == scope.id)
)
else:
query = query.filter(ScopeEquipment.scope_id.is_(None))
results = await search_filter_sort_paginate(model=query, **common)
return results

Loading…
Cancel
Save