fix: Zwei Uebertraege ueber denselben Betrag sind erlaubt – es wird nur gefragt
Zwischen zwei Konten liess sich kein zweiter Uebertrag ueber denselben Betrag buchen. Die Begruendung stimmte fuer den haeufigen Fall: Beide Seiten kommen oft getrennt herein, einmal von der Bank, einmal aus der Datei – wer beide einzeln verknuepft, verschiebt das Geld zweimal. Nur ist sie nicht immer richtig. Revolut-Aufrundungen sind reihenweise CHF 1.00 zwischen demselben Paar in denselben Tagen, und die sind alle echt. Als einziger Ausweg blieb, den vorhandenen Uebertrag zu loeschen. Jetzt wird gefragt statt verboten: dieselbe Warnung, aber ueber "trotzdem" zu uebergehen – der Weg, den alle anderen Pruefungen hier schon nehmen. Entscheiden muss das der Nutzer; die Regel kann es nicht wissen. Dabei fiel auf, dass die Rueckfrage HINTER dem Fenster lag, das sie aufgeworfen hat: Modal rendert per Portal an den Koerper und liegt damit spaeter im Baum, bei gleicher Ebene gewinnt der spaetere. Eine Rueckfrage gehoert ueber das, wonach sie fragt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b867b272ba
commit
54ff6d6896
@@ -147,21 +147,28 @@ def _schon_als_uebertrag(db: Session, user: User, konto: Account, ziel: Account,
|
||||
def _pruefe_gegenseite(db: Session, user: User, konto: Account, ziel: Account,
|
||||
eigener_typ: TxnType, erwartet: int | None, datum,
|
||||
exakt: bool, trotzdem: bool) -> None:
|
||||
# Zuerst der Fall, der sich NICHT uebergehen laesst: Zwischen denselben
|
||||
# beiden Konten bewegt schon ein Uebertrag dasselbe Geld. Ein zweiter
|
||||
# verschoebe es ein zweites Mal – das ist keine Ansichtssache.
|
||||
if trotzdem:
|
||||
return
|
||||
|
||||
# Zwischen denselben beiden Konten steht schon ein Uebertrag ueber
|
||||
# denselben Betrag. Meist ist das dieselbe Bewegung, zweimal hereingekommen
|
||||
# – einmal von der Bank, einmal aus der Datei –, und ein zweiter Uebertrag
|
||||
# verschoebe das Geld noch einmal.
|
||||
#
|
||||
# Aber eben nur meist: Revolut-Aufrundungen sind reihenweise CHF 1.00
|
||||
# zwischen demselben Paar in denselben Tagen, und die sind alle echt.
|
||||
# Deshalb fragen statt verbieten – wer es weiss, bucht trotzdem.
|
||||
doppelt = _schon_als_uebertrag(db, user, konto, ziel, erwartet, datum, exakt)
|
||||
if doppelt is not None:
|
||||
raise UebertragFehler(
|
||||
f"Zwischen '{konto.name}' und '{ziel.name}' steht für den "
|
||||
f"{doppelt.date.strftime('%d.%m.%Y')} schon ein Übertrag über "
|
||||
f"denselben Betrag. Diese Bewegung ist damit bereits erfasst – ein "
|
||||
f"zweiter Übertrag verschöbe das Geld noch einmal. Wenn diese "
|
||||
f"Buchung dieselbe Zahlung ist, lösch sie; wenn es wirklich zwei "
|
||||
f"Zahlungen waren, lösch zuerst den vorhandenen Übertrag."
|
||||
f"denselben Betrag. Ist das dieselbe Bewegung, wäre sie damit "
|
||||
f"doppelt erfasst – das Quellkonto zweimal belastet, das Ziel "
|
||||
f"zweimal gutgeschrieben. Waren es wirklich zwei Zahlungen, buch "
|
||||
f"trotzdem.",
|
||||
nachfragen=True,
|
||||
)
|
||||
if trotzdem:
|
||||
return
|
||||
schon = _gebuchte_gegenseite(db, user, konto, ziel, eigener_typ, erwartet,
|
||||
datum, exakt)
|
||||
if schon is None:
|
||||
|
||||
Reference in New Issue
Block a user