feat(objekt): Zugfahrzeug-Flag am Objekttyp + Leitungs-Dashboard-Kacheln
CI / backend-tests (push) Failing after 1m26s
CI / frontend-build (push) Successful in 24s

Objekttyp.ist_zugfahrzeug (Migration 0011) grenzt die Fahrzeug-Zuordnung
serverseitig auf tatsächliche Zugfahrzeuge ein (422 bei Verstoß), Frontend
filtert die Fahrzeug-Dropdowns entsprechend.

Neue Dashboard-Endpunkte /dashboard/einsatzbereitschaft und
/dashboard/prueftermine plus DashboardPage mit drei Kacheln
(Einsatzbereitschaft, Prüftermine, Ablaufdaten). Aktive
Mindermengen-Genehmigung zählt als "eingeschränkt einsatzbereit", nicht als
voll einsatzbereit (U2/Karte 08).

Neue FehlbestandListePage: Fehlbestände eigenständig nachfüllen/Mindermenge
genehmigen, ohne komplette Kontrolle des Objekts zu starten (Backend
existierte bereits, nur das Frontend fehlte).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
This commit is contained in:
2026-09-05 10:33:00 +02:00
co-authored by Claude Sonnet 5
parent 38b8ce1795
commit 54fc29690a
20 changed files with 894 additions and 19 deletions
+31
View File
@@ -1,7 +1,10 @@
import uuid
from datetime import date
from pydantic import BaseModel
from app.models.geraet_instanz import GeraetStatus
class KennzahlenRead(BaseModel):
anzahl_offener_fehlbestaende: int
@@ -18,3 +21,31 @@ class AblaufdatumRead(BaseModel):
ablaufdatum: date
verbleibende_tage: int
status: str
class ObjektMangelRead(BaseModel):
objekt_id: int
code: str
name: str
gruende: list[str]
class EinsatzbereitschaftRead(BaseModel):
einsatzbereit: int
eingeschraenkt_einsatzbereit: int
nicht_einsatzbereit: int
gesamt: int
details: list[ObjektMangelRead]
class PrueftermineintragRead(BaseModel):
geraet_instanz_id: uuid.UUID
objekt_id: int
objektposition_id: uuid.UUID
material_id: int
material_name: str
seriennummer: str
geraet_status: GeraetStatus
naechste_pruefung: date
verbleibende_tage: int
status: str
+2
View File
@@ -54,6 +54,7 @@ class ObjekttypCreate(BaseModel):
bereich_id: int
kategorie_id: int | None = None
name: str
ist_zugfahrzeug: bool = False
class ObjekttypRead(ObjekttypCreate):
@@ -65,6 +66,7 @@ class ObjekttypUpdate(BaseModel):
bereich_id: int | None = None
kategorie_id: int | None = None
name: str | None = None
ist_zugfahrzeug: bool | None = None
class FachCreate(BaseModel):