- Schalter stehen in assets/feature_flags.json (Key -> enabled +
Beschreibung) statt als Konstanten im Code
- Enum Feature buendelt die stabilen Keys; FeatureFlags liest die Datei,
ignoriert unbekannte Keys und nutzt fuer fehlende den Default aus dem Enum
- Laden beim App-Start im AppBloc, bereitgestellt per RepositoryProvider;
FeatureGate blendet Bereiche bei inaktivem Feature komplett aus
- articles.credit_section = false: Abschnitt "Gutschriften" im
Artikel-Step ist ausgeblendet
- Bisheriges Stepper-Flag migriert (articles.credit_amount_stepper); die
fuenf ungenutzten statischen Flags mit veralteten Kommentaren entfernt
- Tests: Asset enthaelt alle Keys, Parsing, Defaults, FeatureGate
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Neuer Workflow-Step "Zahlung" zeigt ausgelieferte Artikel mit Menge und
Preis, Betragsaufstellung, Zahlungsstatus und einen grossen Button
"Zahlung abwickeln" (fest unten)
- Zahlungs-Modal: grosser offener Betrag, Methoden als Cards aus den
Backend-Stammdaten, bei EC-Karte gross die Kundennummer; schliesst nur
ueber Abbrechen, "Zahlung erhalten" oder "Lieferung abbrechen" (mit Grund)
- Bestaetigung wird am Server protokolliert (RecordDeliveryPayment); bis
dahin sind "Weiter" und die Uebersicht gesperrt, ausser es ist nichts
offen (bereits bezahlt). Aendert sich der Betrag danach, wird die Zahlung
als veraltet markiert und muss erneut abgewickelt werden
- Uebersicht zeigt die abgewickelte Zahlung statt eigener Methodenauswahl;
Unterschrift-Flow ohne doppelte Inkasso-Stufe; Abschluss sendet Methode
und Inkasso-Flag der gueltigen Zahlung
- DeliveryPaymentStatus als einzige Quelle fuer offenen Betrag
(gleiche Formel wie Backend); Artikelliste/Betragskarte als geteilte
Widgets; Begruendungs-Dialog geteilt mit Info-Step
- API-Client aus aktueller Backend-Spec neu generiert
- Tests fuer Zahlungsstatus und Modal
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kunde meldete haeufig 'Sitzung abgelaufen' und danach dauerhaft rotes
'Sitzung abgelaufen' bei den Zahlungsmethoden trotz erfolgreichem Login.
Token-Refresh:
- _performRefresh wertete JEDEN Fehler als tote Session (Logout + Refresh-
Token geloescht) - auch Mobilfunk-/VPN-Aussetzer. Jetzt gilt nur noch eine
echte Ablehnung durch Keycloak (OAuth invalid_grant o. ae.) als abgelaufen;
voruebergehende Fehler behalten die Session, nutzen den noch gueltigen
Access-Token weiter oder werfen AuthTemporarilyUnavailableException
- Interceptor schickt Requests nicht mehr tokenlos weiter (ergab 401 ->
irrefuehrendes 'Sitzung abgelaufen'), sondern bricht als Verbindungsfehler ab
- restoreSession verwirft den Refresh-Token bei fehlendem Netz nicht mehr
Zahlungsmethoden:
- Cubit lud nur einmal beim App-Start (vor dem Login -> 401) und blieb danach
fuer immer im Fehlerzustand. Jetzt Reload bei jedem Wechsel auf Authenticated
- Fehlerkarte in der Uebersicht hat einen 'Erneut laden'-Button
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Ein Set kann mehrfach bestellt sein (Oberartikel-Menge = Set-Anzahl),
daher bleibt der Mengen-Stepper beim Entfernen über den Oberartikel
erhalten. Die gewählte Set-Anzahl kaskadiert PROPORTIONAL auf die
Komponenten (Stückzahl je Set × entfernte Sets, geklemmt auf Restmenge)
— funktioniert für 1:1-Mengen wie für Komponenten mit Stückzahl je Set.
Einzelne Komponenten bleiben weiterhin nicht direkt entfernbar.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A) Nach erfolgreichem Abschluss (aktiv→completed) poppt die Detail-Page
automatisch zurück zur Übersicht. Scaffold ist jetzt StatefulWidget
mit BlocListener<TourBloc>; nur „gearmt", wenn die Lieferung beim
Öffnen aktiv war → erneutes Öffnen einer fertigen Lieferung poppt nicht.
B) Step „Info": Artikelliste zeigt weiter die Ursprungsmenge
(requiredQuantity). Bei entfernten/teilweise gutgeschriebenen Positionen
erscheint pro Zeile ein „Menge geändert"-Hinweis + ein tappbares Banner,
das zu Step 3 „Artikel" springt.
C) Beladen: nicht-scanbare Set-Köpfe (Parent-Komponenten) werden jetzt
IMMER mit ihrem Set gezeigt — als Kopf in der Lagergruppe ihrer
Komponenten statt isoliert unter „Dienstleistungen". _ItemRow leitet
scanNotRequired aus der Artikel-Scanbarkeit ab.
D) Step „Übersicht": Wording der Zahlungsweise-Sperre bei offen==0
präzisiert („Keine Zahlung mehr offen (bereits bezahlt)").
E) Step „Artikel": Komponenten eines Sets sind einzeln nicht mehr
entfernbar (kein Button + Hinweis). Das Entfernen/Wiederherstellen läuft
nur über den Oberartikel und kaskadiert auf das ganze Set (ganz oder
gar nix). Set-Entfernen ist blockiert, solange eine Komponente noch
nicht verladen ist.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Steht kein offener Betrag mehr aus (vollständig vorab bezahlt oder per
Gutschrift ausgeglichen), wird die Zahlungsmethoden-Auswahl gesperrt und
ein erklärender Hinweis angezeigt — analog zur Sperre bei bereits
abgeschlossener Lieferung.
- Offener-Betrag-Formel in Helper _openAmount(delivery, credit)
extrahiert (Single Source; vorher nur in _PaymentSummary).
- _PaymentMethodPicker bekommt die Gutschrift und sperrt das Dropdown
bei state != active ODER offen == 0 (editable = active && offen > 0).
- Sperr-/Info-Hinweis in wiederverwendbares _PickerHint-Widget gezogen.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>