Inline-Nachfüll-Dialog nach Abweichung in der Kontrolle (Karte 07)
CI / backend-tests (push) Successful in 54s
CI / frontend-build (push) Successful in 7m17s

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
2026-09-04 09:04:20 +02:00
co-authored by Claude Sonnet 5
parent db245c5e43
commit d70558f124
6 changed files with 173 additions and 11 deletions
+17 -1
View File
@@ -31,6 +31,18 @@ function keyFor(kontrolleId: string, materialId: number): string {
return `${kontrolleId}:${materialId}`;
}
// Karte 07 (Sofort-Nachfüllung): die PWA soll direkt nach einer Abweichung
// fragen können "jetzt nachfüllen?", ohne ins Dashboard zu wechseln. Der
// Queue-Eintrag verschwindet bei Erfolg (siehe sendeEintrag), daher hier ein
// einmaliger Callback pro Key statt dauerhaftem State - reicht für den
// unmittelbaren Dialog in derselben Sitzung.
type ErgebnisListener = (fehlbestandId: string | null, abweichung: boolean) => void;
const ergebnisListener = new Map<string, ErgebnisListener>();
export function aufErgebnisWarten(kontrolleId: string, materialId: number, listener: ErgebnisListener): void {
ergebnisListener.set(keyFor(kontrolleId, materialId), listener);
}
export async function enqueue(
kontrolleId: string,
materialId: number,
@@ -88,7 +100,11 @@ async function sendeEintrag(item: QueueItem): Promise<void> {
// Erfolgreich übertragen (idempotent - ein erneutes Senden desselben Werts
// durch die Queue vor einem Absturz führt zu keinem doppelten Fehlbestand,
// siehe Backend app/services/kontrolle.py erfasse_position) -> aus Queue entfernen.
void ergebnis;
const listener = ergebnisListener.get(item.key);
if (listener) {
listener(ergebnis.fehlbestand_id, ergebnis.abweichung);
ergebnisListener.delete(item.key);
}
await del(item.key, store);
} catch (error) {
if (error instanceof ApiError && error.status >= 400 && error.status < 500) {