Eigener Workflow für Schäden/Defekte, getrennt von Fehlbestand (Mengen- Abweichung Soll/Ist). Status: neu → in_bearbeitung → ersatzteil_bestellt/ reparatur_geplant → erledigt. entitaet_typ/entitaet_id optional (Objektposition oder Geräteinstanz), analog zum bestehenden historie.entitaet_typ-Muster, objekt_id immer gesetzt für Dashboard-Abfragen. Ein offener Mangel mit prioritaet=hoch macht das Objekt "nicht einsatzbereit" (neuer Grund mangel_kritisch_offen in dashboard.einsatzbereitschaft) - niedrige/normale Mängel blockieren nicht. Melden/Lesen: alle Mitarbeiter+. Status ändern: Materialverantwortliche+. Neue Seite /maengel für alle eingeloggten Nutzer (Nav-Link "Mängel"). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
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
|