Erstellt vor 3 Jahren
Geschlossen vor 14 Monaten
#1925 closed Fehler (fixed)
Bei SEPA-Lastschrift wird datepaid in ar nicht gesetzt
| Erstellt von: | grichardson@… | Verantwortlicher: | t.heck@… |
|---|---|---|---|
| Priorität: | normal | Meilenstein: | 3.1.0 |
| Komponente: | kivitendo ERP | Version: | 2.7.0 |
| Schweregrad: | normal | Stichworte: | |
| Beobachter: |
Beschreibung
Als Folge bleibt datepaid NULL, und beim Forderungsbericht werden durch eine NULL-Abfrage in RP->aging (AND (datepaid is NOT NULL)) die offenen Forderungen von per SEPA-Lastschrift bezahlten Rechnungen nicht aufgelistet.
Fix ist vermutlich in SEPA->post_payment bei update_arap noch eine Ergänzung für datepaid nach dem paid aktualisiert wird
datepaid = ?
Für die Datenkorrektur schlage ich vor:
update ar a set datepaid = (select max(acc.transdate) from acc_trans acc left join chart c on (c.id = acc.chart_id) where acc.trans_id = a.id and link like '%paid%') where datepaid is null and paid = amount and amount != 0 and storno is false;
Moritz, was meinst du?
Änderungshistorie (7)
comment:1 Geändert vor 3 Jahren durch m.bunkus@…
comment:2 Geändert vor 3 Jahren durch grichardson@…
Gut, ich habe den SEPA-Code in Commit 6e8a3dd um ein set_datepaid erweitert.
paid = amount wollte ich in dem Fall, damit möglichst nur die fehlenden datepaids aus dem SEPA-Einzug aktualisiert werden. Wenn in anderen Fällen ebenfalls datepaid fehlt würde ich die Fälle lieber auch aufspüren und dort auch den Code verbesseren, als einfach über alles drüberbügeln.
comment:3 Geändert vor 3 Jahren durch m.bunkus@…
OK. Aber niemand zwingt dich, per SEPA immer die Rechnung voll zu bezahlen. Also wäre eher eine Koppelung des Queries an die SEPA-Überweisungen selber sinnvoll, sprich sowas wie
UPDATE ar SET datepaid = ( SELECT MAX(acc.transdate) FROM acc_trans acc LEFT JOIN chart c ON (c.id = acc.chart_id) WHERE (acc.trans_id = ar.id) AND (c.link LIKE '%paid%') ) WHERE (ar.amount != 0) AND NOT ar.storno AND ar.id IN ( SELECT sei.ar_id FROM sepa_export_items sei WHERE (sei.ar_id IS NOT NULL) AND sei.executed )
comment:4 Geändert vor 2 Jahren durch m.bunkus@…
- Status von new nach assigned geändert
- Verantwortlicher von m.bunkus@… nach t.heck@… geändert
comment:5 Geändert vor 2 Jahren durch m.bunkus@…
- Meilenstein auf 3.0.0 gesetzt
comment:6 Geändert vor 2 Jahren durch s.schoeling@…
- Meilenstein von 3.0.0 nach 3.1.0 geändert
comment:7 Geändert vor 14 Monaten durch m.bunkus@…
- Lösung auf fixed gesetzt
- Status von assigned nach closed geändert

Zum Code: datepaid sollte natürlich aktualisiert werden, aber nur, wenn darin kein Datum steht bzw. das Datum darin kleiner als das Datum der SEPA-Zahlungen ist. Es gibt auch schon eine zentrale Funktion IO::set_datepaid, die genau das macht, wenn ich sie richtig lese.
Zum Datenbankupdate: Warum der Check paid = amount? Würde ich weglassen. Bei Teilzahlungen wird in anderen Funktionen datepaid auch gesetzt. Rest OK, meiner Meinung nach.