feat(dashboard): drei fehlende Kacheln (Kennzahlen, Mängel, Qualifikationsablauf)
Kennzahlen: bestehender Endpoint /dashboard/kennzahlen war seit Prompt 12.1 nie im Frontend verdrahtet - jetzt eigene Kachel (offene Fehlbestände, genehmigte Mindermengen, kürzlich erledigt, problematische Objekte, Objekte gesamt). Mängel: eigene Übersicht (offen/kritisch-Zahl + aufklappbare Liste) zusätzlich zur bisherigen Erwähnung als Grund in Kachel 1 - nutzt bestehendes GET /maengel, kein neuer Backend-Code. Qualifikationsablauf: neuer Endpoint /dashboard/qualifikationsablaeufe (bevorstehende_qualifikationsablaeufe(), 60 Tage Vorlauf) - analog bevorstehende_prueftermine, aber für BenutzerQualifikation.gueltig_bis (Nutzer-Vorgabe: "wer verliert bald Führerschein/Lehrgang-Gültigkeit"). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
This commit is contained in:
@@ -137,3 +137,62 @@ async def test_benutzer_einheit_zuordnung(client, admin_user):
|
||||
f"/api/v1/benutzer/{benutzer_id}", json={"einheit_id": None}, headers=auth_header(token)
|
||||
)
|
||||
assert geloest.json()["einheit_id"] is None
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_bald_ablaufende_qualifikation_erscheint_im_dashboard(
|
||||
client, admin_user, mitarbeiter_user
|
||||
):
|
||||
from datetime import date, timedelta
|
||||
|
||||
token = await login(client, "admin1")
|
||||
quali = await client.post(
|
||||
"/api/v1/qualifikationstypen",
|
||||
json={"name": "Führerschein C1", "kategorie": "fuehrerschein"},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
quali_id = quali.json()["id"]
|
||||
|
||||
await client.post(
|
||||
f"/api/v1/benutzer/{mitarbeiter_user.id}/qualifikationen",
|
||||
json={
|
||||
"benutzer_id": mitarbeiter_user.id,
|
||||
"qualifikationstyp_id": quali_id,
|
||||
"erworben_am": (date.today() - timedelta(days=365)).isoformat(),
|
||||
"gueltig_bis": (date.today() + timedelta(days=10)).isoformat(),
|
||||
},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
|
||||
response = await client.get("/api/v1/dashboard/qualifikationsablaeufe", headers=auth_header(token))
|
||||
body = response.json()
|
||||
assert len(body) == 1
|
||||
assert body[0]["status"] == "bald_ablaufend"
|
||||
assert body[0]["benutzer_id"] == mitarbeiter_user.id
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_unbefristete_qualifikation_erscheint_nicht_im_dashboard(client, admin_user, mitarbeiter_user):
|
||||
from datetime import date, timedelta
|
||||
|
||||
token = await login(client, "admin1")
|
||||
quali = await client.post(
|
||||
"/api/v1/qualifikationstypen",
|
||||
json={"name": "Sanitätshelfer", "kategorie": "lehrgang"},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
quali_id = quali.json()["id"]
|
||||
|
||||
await client.post(
|
||||
f"/api/v1/benutzer/{mitarbeiter_user.id}/qualifikationen",
|
||||
json={
|
||||
"benutzer_id": mitarbeiter_user.id,
|
||||
"qualifikationstyp_id": quali_id,
|
||||
"erworben_am": (date.today() - timedelta(days=365)).isoformat(),
|
||||
"gueltig_bis": None,
|
||||
},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
|
||||
response = await client.get("/api/v1/dashboard/qualifikationsablaeufe", headers=auth_header(token))
|
||||
assert response.json() == []
|
||||
|
||||
Reference in New Issue
Block a user