From 7d2ea57c17574c654f40ae5af0bd2e9f10fce578 Mon Sep 17 00:00:00 2001 From: Matthias Hochmeister Date: Fri, 17 Apr 2026 10:50:42 +0200 Subject: [PATCH] fix(frontend): order status button colors, delivery gate logic, partial delivery chips, and scheduled message form tweaks --- frontend/src/pages/Ausruestungsanfrage.tsx | 12 ++++++++++-- frontend/src/pages/AusruestungsanfrageDetail.tsx | 10 +++++++--- frontend/src/pages/BestellungDetail.tsx | 13 +++++++++---- frontend/src/pages/GeplanteMachrichtenDetail.tsx | 2 +- frontend/src/pages/GeplanteMachrichtenForm.tsx | 5 ++++- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/frontend/src/pages/Ausruestungsanfrage.tsx b/frontend/src/pages/Ausruestungsanfrage.tsx index e5ad503..3285a75 100644 --- a/frontend/src/pages/Ausruestungsanfrage.tsx +++ b/frontend/src/pages/Ausruestungsanfrage.tsx @@ -108,7 +108,11 @@ function MeineAnfragenTab() { {formatOrderId(r)} {r.bezeichnung || '-'} - {r.im_haus ? : null} + + {r.im_haus && r.geliefert_count != null && r.positionen_count != null && r.geliefert_count < r.positionen_count + ? + : r.im_haus ? : null} + {r.positionen_count ?? r.items_count ?? '-'} {r.positionen_count != null && r.positionen_count > 0 @@ -219,7 +223,11 @@ function AlleAnfragenTab() { {r.bezeichnung || '-'} {r.fuer_benutzer_name || r.anfrager_name || r.anfrager_id} - {r.im_haus ? : null} + + {r.im_haus && r.geliefert_count != null && r.positionen_count != null && r.geliefert_count < r.positionen_count + ? + : r.im_haus ? : null} + {r.positionen_count ?? r.items_count ?? '-'} {r.positionen_count != null && r.positionen_count > 0 diff --git a/frontend/src/pages/AusruestungsanfrageDetail.tsx b/frontend/src/pages/AusruestungsanfrageDetail.tsx index 8a6e355..954bde8 100644 --- a/frontend/src/pages/AusruestungsanfrageDetail.tsx +++ b/frontend/src/pages/AusruestungsanfrageDetail.tsx @@ -218,9 +218,13 @@ export default function AusruestungsanfrageDetail() { {anfrage && ( <> - {detail?.im_haus && ( - - )} + {detail?.im_haus && (() => { + const total = detail.positionen.length; + const delivered = detail.positionen.filter(p => p.geliefert).length; + return total > 0 && delivered < total + ? + : ; + })()} p.einzelpreis != null && Number(p.einzelpreis) > 0); - const allItemsReceived = positionen.length === 0 || positionen.every(p => Number(p.erhalten_menge) >= Number(p.menge)); + const allItemsReceived = positionen.length > 0 && positionen.every(p => Number(p.erhalten_menge) >= Number(p.menge)); + const anyItemReceived = positionen.some(p => Number(p.erhalten_menge) > 0); // All statuses except current, for force override const ALL_STATUSES: BestellungStatus[] = ['entwurf', 'wartet_auf_genehmigung', 'bereit_zur_bestellung', 'bestellt', 'teillieferung', 'lieferung_pruefen', 'abgeschlossen']; @@ -1205,15 +1206,19 @@ export default function BestellungDetail() { }) .map((s) => { const isReject = bestellung.status === 'wartet_auf_genehmigung' && s === 'entwurf'; + const isApprove = bestellung.status === 'wartet_auf_genehmigung' && s === 'bereit_zur_bestellung'; const label = isReject ? 'Ablehnen' : BESTELLUNG_STATUS_LABELS[s]; - const color = isReject ? 'error' : 'primary'; + const color = isReject ? 'error' : isApprove ? 'success' : 'info'; const isAbgeschlossen = s === 'abgeschlossen'; return (