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
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, ConfigDict, model_validator
|
|
|
|
from app.models.mangel import MangelPrioritaet, MangelStatus
|
|
|
|
EntitaetTyp = Literal["objektposition", "geraet_instanz"]
|
|
|
|
|
|
class MangelCreate(BaseModel):
|
|
objekt_id: int
|
|
entitaet_typ: EntitaetTyp | None = None
|
|
entitaet_id: str | None = None
|
|
beschreibung: str
|
|
prioritaet: MangelPrioritaet = MangelPrioritaet.normal
|
|
|
|
@model_validator(mode="after")
|
|
def _entitaet_beide_oder_keins(self) -> "MangelCreate":
|
|
if (self.entitaet_typ is None) != (self.entitaet_id is None):
|
|
raise ValueError("entitaet_typ und entitaet_id müssen beide gesetzt oder beide leer sein")
|
|
return self
|
|
|
|
|
|
class MangelRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
id: uuid.UUID
|
|
objekt_id: int
|
|
entitaet_typ: str | None
|
|
entitaet_id: str | None
|
|
beschreibung: str
|
|
prioritaet: MangelPrioritaet
|
|
status: MangelStatus
|
|
gemeldet_von: int
|
|
gemeldet_am: datetime
|
|
erledigt_von: int | None
|
|
erledigt_am: datetime | None
|
|
|
|
|
|
class MangelStatusUpdate(BaseModel):
|
|
status: MangelStatus
|