From 4d0d5c8d880e18cb9408a03efdcec8736b6a0a5b Mon Sep 17 00:00:00 2001 From: troogs Date: Mon, 2 Nov 2026 19:27:54 +0100 Subject: [PATCH] fix(transfers): show consistent source target and prevent same-account edits (U11) --- docs/usability-umsetzung.md | 4 ++ .../Dialogs/AddTransferDialog.razor | 12 +++++- .../Dialogs/AddTransferDialog.razor.cs | 7 ++++ .../Services/EntryService.cs | 5 +++ .../TransferDirectionTests.cs | 41 +++++++++++++++++++ 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 tests/Duempelkas.Tests/TransferDirectionTests.cs diff --git a/docs/usability-umsetzung.md b/docs/usability-umsetzung.md index 9c5d897..9c32a4d 100644 --- a/docs/usability-umsetzung.md +++ b/docs/usability-umsetzung.md @@ -71,3 +71,7 @@ Beschriftetes Aktionsmenü je Buchung, sichtbares Bearbeiten/Löschen und Wieder ## U10 – Löschen und Rückweg Gelöschte Zeilen sind standardmäßig ausgeblendet und gezählt erreichbar; sichtbare Historie erklärt die Nichtberücksichtigung im Kontostand. Bestätigungen nennen Datum, Beschreibung, Betrag, Konto und bei Umbuchungen beide Konten mit gemeinsamer Wirkung. Erfolg bietet gezieltes Rückgängig; Mehrfachauslösung wird gesperrt, bereits veränderter Zustand geprüft. Gerenderter Integrationstest löscht eine Umbuchung, prüft Gegenkonto, Historie und Rückgängig auf beiden Seiten. + +## U11 – Umbuchungsrichtung + +Beide Seiten zeigen dieselbe Richtung Von → Nach und erklären das feste aktuelle sowie änderbare Gegenkonto. Vorschau zeigt Minus/Plus und unveränderte Vereinssumme; nur ein Konto erklärt die fehlende Voraussetzung. Der Dienst weist beim Bearbeiten gleiche Konten und fehlende Gegenkonten vor jeder Änderung ab. Tests öffnen beide Seiten, ändern die Quelle einer empfangenen Umbuchung und prüfen den unveränderten Bestand nach unzulässiger Änderung. diff --git a/src/Duempelkas.App/Components/Dialogs/AddTransferDialog.razor b/src/Duempelkas.App/Components/Dialogs/AddTransferDialog.razor index 27ba6cb..11cda45 100644 --- a/src/Duempelkas.App/Components/Dialogs/AddTransferDialog.razor +++ b/src/Duempelkas.App/Components/Dialogs/AddTransferDialog.razor @@ -6,11 +6,21 @@
@(EditEntry != null ? "Umbuchung bearbeiten" : "Neue Umbuchung")

Erfasst nur die Buchung. Führt keine Banküberweisung aus.

+

Von: @FromName → Nach: @ToName

+

@CurrentAccountName bleibt fest. @(IsIncoming ? "Das abgebende Konto ist änderbar." : "Das empfangende Konto ist änderbar.")

+ @if (accounts.Count < 2) + { +

Für eine Umbuchung brauchst du ein zweites Konto. Lege es in der Kontenübersicht an.

+ } + @if (ValidAmount && targetAccountId > 0) + { +

@FromName −@Money(amount), @ToName +@Money(amount); Gesamtsumme unverändert.

+ }
- +