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@…

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.

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

In 1b3cfa7bcfd98ff171824aed2690ddb5b813dde3/erp:

Feld ar.datepaid bei durch SEPA-Zahlungen nachträglich richtig setzen

Behebt #1925.

Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.