fix: Ein Uebertragsvorschlag erscheint nur noch einmal
Jedes Paar steht in der Kandidatenliste zweimal, einmal je Richtung. Was verknuepft wird, faellt ueber "verbraucht" heraus - ein blosser Vorschlag aber nicht. Also bot /uebertraege/vorschlaege dieselbe Zahlung zweimal zum Verbinden an, und wer das zweite anklickte, bekam "bereits verknuepft" fuer etwas, das er gerade selbst verknuepft hatte. Betrifft auch die Weboberflaeche: Uebertragsvorschlaege.jsx zeigt die Liste unveraendert an und hatte denselben Doppeleintrag. Gefunden beim Bauen der Arbeitsliste fuer die iOS-App - die Pruefdatei brachte den Vorschlag doppelt zurueck. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -310,6 +310,17 @@ def finde(db: Session, user: User, nur_vorschlaege: bool = False) -> dict:
|
||||
verbraucht: set[int] = set()
|
||||
verknuepft = 0
|
||||
vorschlaege: list[tuple[Transaction, Transaction]] = []
|
||||
# Jedes Paar steht in ``kandidaten`` zweimal, einmal je Richtung. Was
|
||||
# verknüpft wird, fällt über ``verbraucht`` heraus – ein Vorschlag aber
|
||||
# nicht, und so kam dieselbe Zahlung zweimal zum Verbinden angeboten.
|
||||
vorgeschlagen: set[tuple[int, int]] = set()
|
||||
|
||||
def schlage_vor(a: Transaction, b: Transaction) -> None:
|
||||
paar = (min(a.id, b.id), max(a.id, b.id))
|
||||
if paar in vorgeschlagen:
|
||||
return
|
||||
vorgeschlagen.add(paar)
|
||||
vorschlaege.append((a, b))
|
||||
|
||||
for a_id in sorted(kandidaten):
|
||||
if a_id in verbraucht:
|
||||
@@ -321,17 +332,17 @@ def finde(db: Session, user: User, nur_vorschlaege: bool = False) -> dict:
|
||||
gegen = _eindeutig(a, offen, kandidaten, verbraucht)
|
||||
if gegen is None:
|
||||
if offen:
|
||||
vorschlaege.append((a, offen[0]))
|
||||
schlage_vor(a, offen[0])
|
||||
continue
|
||||
# Automatisch nur ohne Kategorie und mit Hinweis – siehe _hat_hinweis.
|
||||
if a.category_id is not None or gegen.category_id is not None:
|
||||
vorschlaege.append((a, gegen))
|
||||
schlage_vor(a, gegen)
|
||||
continue
|
||||
if not _hat_hinweis(a, gegen, bezeichner, typen):
|
||||
vorschlaege.append((a, gegen))
|
||||
schlage_vor(a, gegen)
|
||||
continue
|
||||
if nur_vorschlaege:
|
||||
vorschlaege.append((a, gegen))
|
||||
schlage_vor(a, gegen)
|
||||
continue
|
||||
verbinde(db, user, a, gegen, automatisch=True)
|
||||
verbraucht.update((a.id, gegen.id))
|
||||
|
||||
Reference in New Issue
Block a user