Speisekammer — Produkt bei Anzahl 0 aus der Liste entfernen, aber in Scan-Station-Historie rückgängig machbar halten #194
Labels
No labels
priority/could
priority/must
priority/should
priority/wont
status/blocked
status/claimed
status/done-migrated
type/bug
type/feature
type/infra
type/tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
robert/todo#194
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Story: Auschecken auf 0 entfernt Produkt aus der aktiven Liste, bleibt aber über die Historie rückgängig machbar
As a Speisekammer-Nutzer,
I want to dass ein Produkt, dessen Anzahl durch Auschecken auf 0 fällt, nicht länger mit "0" in der aktiven Speisekammer-Liste stehen bleibt, sondern automatisch verschwindet,
so that die Liste nur tatsächlich vorhandene Produkte zeigt und ich nicht ständig 0er-Karteileichen wegräumen muss — ohne dabei die Möglichkeit zu verlieren, einen versehentlichen Check-Out rückgängig zu machen.
Hintergrund: Der bestehende Scan-Station-Undo (#172,
InvertPantryActivityEventCommandHandler) invertiert einen Check-In/Check-Out-Aktivitätseintrag, verlangt dafür aber aktuell, dass die zugehörigePantryProductEntity-Zeile noch existiert ("Cannot invert an event whose product no longer exists."). Ein einfaches Hard-Delete des Produkts bei Anzahl 0 würde dieses Undo also brechen — das muss diese Story mit lösen.Acceptance criteria:
Out of scope for this story:
Open questions: (escalate to human if unanswered)
IsHidden/RemovedAt) aufPantryProductEntitystatt physischem Löschen, damit Invert/Undo und Stammdaten-Erhalt (Barcode/Name/Kategorie) ohne Bruch funktionieren — keine Entscheidung, die die Story selbst treffen muss.Als Backlog-Item vom Nutzer eingereicht (per Chat, nicht im laufenden Loop-Zyklus geclaimt).
Start: Claim durch den autonomen Loop (auf Wunsch des Menschen). Architect-Entscheidung zur offenen Frage: Soft-Hide-Flag
IsHiddenauf dem Speisekammer-Produkt statt Hard-Delete. Check-Out, der die Anzahl auf 0 bringt, setztIsHidden; jede Operation, die die Anzahl wieder ueber 0 hebt (Check-In, Scan, Invertieren/Rueckgaengig in der Scan-Station-Historie, Anzahl manuell setzen), hebt es wieder auf. Die aktive Liste blendet versteckte Produkte aus; Zeile, Barcode, Name, Kategorie, Labels, Kommentare, Soll-Menge und Historie bleiben unveraendert erhalten. Erneuter Scan desselben Barcodes findet die versteckte Zeile (kein Duplikat); manuelles Neuanlegen mit gleichem Namen belebt die versteckte Zeile wieder statt eine zweite anzulegen. Nur Check-Out versteckt - ein manuell auf 0 gesetztes oder neu mit 0 angelegtes Produkt bleibt sichtbar (AC spricht explizit von Check-Out).Erledigt (Commits
4816d695,443e7d25,179f9eb9).Umfang: Neues Soft-Hide-Flag
IsHiddenauf dem Speisekammer-Produkt (MigrationAddPantryProductIsHidden), kein Hard-Delete. Ein Check-Out, der die Anzahl auf 0 bringt, setzt das Flag im selben atomaren UPDATE. Jeder Weg, der die Anzahl wieder ueber 0 hebt (Check-In, erneuter Scan, Invertieren/Loeschen in der Scan-Station-Historie, Anzahl manuell setzen, CSV-Import), hebt es wieder auf. Eine Korrektur in der Historie, die auf 0 faellt, versteckt wieder. Das Produkt behaelt Barcode, Name, Kategorie, Labels, Kommentare, Soll-Menge und Historie. Ein erneuter Scan desselben Barcodes findet dieselbe Zeile. Manuelles Neuanlegen mit gleichem Namen (ohne Beachtung der Gross-/Kleinschreibung) bzw. gleichem Barcode belebt die versteckte Zeile wieder, statt ein Duplikat anzulegen.Frontend: Die Speisekammer-Seite blendet versteckte Produkte aus (auch fuer die Leer-Anzeige). Beim Scan-Check-Out auf 0 erscheint ein Hinweis-Toast. Der Offline-Spiegel fuer Check-In/-Out wendet dieselbe Regel an, der CSV-Export laesst versteckte Produkte weg. Suche und MHD-Benachrichtigungen ignorieren versteckte Produkte.
Bewusste Entscheidungen: Nur Check-Out versteckt. Ein manuell auf 0 gesetztes Produkt bleibt sichtbar. Bereits vorhandene 0er-Zeilen von vor diesem Update bleiben sichtbar (man weiss nicht, ob sie durch Check-Out entstanden sind). Die Soll-Menge-Uebersicht zeigt versteckte Produkte weiterhin (out of scope). Das Duplizieren eines Vorratsschranks kopiert sie weiterhin mit, wie alle anderen Produkte mit Anzahl 0.
Tests: 13 neue Backend-Tests (PantryProductHideAtZeroTests), 4 neue PantryPage-Tests, 2 neue Offline-Tests. Lokal: Backend 1052+63+119 gruen, Frontend 1485 gruen, Build ok. Self-Review und Security-Review ohne Befund.