fix(dashboard): Ablaufdaten zeigen Namen statt roher IDs
CI / backend-tests (push) Failing after 2m5s
CI / frontend-build (push) Successful in 18s

"Bevorstehende Ablaufdaten" zeigte "Objekt #67 – Material #222" statt
lesbarer Bezeichnungen. bevorstehende_ablaufdaten() liefert jetzt
objekt_name/material_name mit, Dashboard nutzt sie.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-07 00:27:20 +02:00
co-authored by Claude Sonnet 5
parent 06baf03708
commit 456fc2963e
3 changed files with 10 additions and 3 deletions
+2
View File
@@ -15,7 +15,9 @@ class KennzahlenRead(BaseModel):
class AblaufdatumRead(BaseModel):
objekt_id: int
objekt_name: str
material_id: int
material_name: str
ablaufdatum: date
verbleibende_tage: int
status: str
+5 -2
View File
@@ -75,12 +75,13 @@ async def bevorstehende_ablaufdaten(db: AsyncSession) -> list[dict]:
aufsteigend (dringendste zuerst). "gueltig" gehört nicht in diese Liste."""
heute = datetime.now(timezone.utc).date()
result = await db.execute(
select(Objektposition, Material)
select(Objektposition, Material, Objekt)
.join(Material, Objektposition.material_id == Material.id)
.join(Objekt, Objektposition.objekt_id == Objekt.id)
.where(Objektposition.ablaufdatum.is_not(None))
)
eintraege = []
for objektposition, material in result.all():
for objektposition, material, objekt in result.all():
warnzeitraum = material.warnzeitraum_tage or STANDARD_WARNZEITRAUM_TAGE
status_wert, verbleibende_tage = _ablauf_status(objektposition.ablaufdatum, warnzeitraum, heute)
if status_wert == "gueltig":
@@ -88,7 +89,9 @@ async def bevorstehende_ablaufdaten(db: AsyncSession) -> list[dict]:
eintraege.append(
{
"objekt_id": objektposition.objekt_id,
"objekt_name": objekt.name,
"material_id": objektposition.material_id,
"material_name": material.name,
"ablaufdatum": objektposition.ablaufdatum,
"verbleibende_tage": verbleibende_tage,
"status": status_wert,
+3 -1
View File
@@ -58,7 +58,9 @@ interface Prueftermineintrag {
interface Ablaufdatumeintrag {
objekt_id: number;
objekt_name: string;
material_id: number;
material_name: string;
ablaufdatum: string;
verbleibende_tage: number;
status: string;
@@ -237,7 +239,7 @@ export function DashboardPage() {
{ablaufdaten.map((a) => (
<li key={`${a.objekt_id}-${a.material_id}`} className="row-between" style={{ padding: "0.3rem 0" }}>
<span>
<Link to={`/akte/objekt/${a.objekt_id}`}>Objekt #{a.objekt_id}</Link> Material #{a.material_id}{" "}
<Link to={`/akte/objekt/${a.objekt_id}`}>{a.objekt_name}</Link> {a.material_name}{" "}
<span className="text-muted">({a.ablaufdatum})</span>
</span>
<InventoryStatus status={a.status} tage={a.verbleibende_tage} />