from datetime import datetime, timezone from sqlalchemy import func, select from sqlalchemy.ext.asyncio import AsyncSession from app.models.mangel import Mangel, MangelPrioritaet, MangelStatus OFFENE_MANGEL_STATI = ( MangelStatus.neu, MangelStatus.in_bearbeitung, MangelStatus.ersatzteil_bestellt, MangelStatus.reparatur_geplant, ) async def objekt_ids_mit_kritischem_offenem_mangel(db: AsyncSession) -> set[int]: """Dashboard/Einsatzbereitschaft (Nutzer-Vorgabe): nur ein offener Mangel mit prioritaet=hoch macht ein Objekt "nicht einsatzbereit" - niedrige/normale Mängel sind Hinweise, aber kein Einsatzbereitschafts-Blocker.""" result = await db.execute( select(func.distinct(Mangel.objekt_id)).where( Mangel.status.in_(OFFENE_MANGEL_STATI), Mangel.prioritaet == MangelPrioritaet.hoch ) ) return set(result.scalars().all()) async def erledige_mangel(db: AsyncSession, *, mangel: Mangel, benutzer_id: int) -> Mangel: mangel.status = MangelStatus.erledigt mangel.erledigt_von = benutzer_id mangel.erledigt_am = datetime.now(timezone.utc) await db.flush() return mangel