Transaktions-Buchung auf Rechnung sehr verwirrend / falsch
Vorgehen:
- Zahlungs-Transaktion erstellen über
\QUI\ERP\Accounting\Payments\Transactions\Factory::createPaymentTransaction() - Das Invoice-Modul reagiert darauf über
\QUI\ERP\Accounting\Invoice\EventHandler::onTransactionCreate() - In
$Invoice->addTransaction()wird einQUI\ERP\Accounting\Calc::calculatePayments($this)ausgeführt (s. https://dev.quiqqer.com/quiqqer/invoice/-/blob/master/src/QUI/ERP/Accounting/Invoice/Invoice.php#L925)
Das bewirkt folgendes:
- Die Zahlungen der Rechnung werden alle berechnet, inklusive der soeben erstellten Transaktion
- Das Attribut
paid_statusder Rechnung wird aufQUI\ERP\Constants::PAYMENT_STATUS_PAIDgesetzt -> Gilt also als bezahlt - ABER: Dadurch geht er hier bereits raus: https://dev.quiqqer.com/quiqqer/invoice/-/blob/master/src/QUI/ERP/Accounting/Invoice/Invoice.php#L937
Probleme:
- Es werden keinerlei
quiqqerInvoiceAddTransaction-Events gefeuert - Die Invoice ist in der Datenbank NICHT (!) als bezahlt markiert
- Die Invoice wird erst dann als bezahlt markiert, wenn irgendwo
$Invoice->calculatePayments()aufgerufen wird, weil da derpaid_statusauch in die Datenbank geschrieben wird- Der Status wird in der Funktion auch dann in die DB geschrieben, wenn er sich nicht geändert hat, das Event
onQuiqqerInvoicePaymentStatusChangedwird aber nicht gefeuert, da durch dasQUI\ERP\Accounting\Calc::calculatePayments($this)der altepaid_statusbereits aufPAIDgesetzt ist (s. https://dev.quiqqer.com/quiqqer/invoice/-/blob/master/src/QUI/ERP/Accounting/Invoice/Invoice.php#L1072)
- Der Status wird in der Funktion auch dann in die DB geschrieben, wenn er sich nicht geändert hat, das Event
Generell ist der Zahlungsstatus der Invoice davon abhängig, das irgendwo $Invoice->calculatePayments() gemacht wird. Das ist aber nicht zwangsweise gegeben, nachdem man eine Transaktion hinzufügt. Das funktioniert aktuell nur, weil wir überall, wo die Rechnung geladen wird, zufällig auch $Invoice->getPaidStatusInformation() aufrufen.
Im Endeffekt:
- Warum wird hier rausgegangen? https://dev.quiqqer.com/quiqqer/invoice/-/blob/master/src/QUI/ERP/Accounting/Invoice/Invoice.php#L925
- Wäre es schlimm wenn wir an der Stelle ein
$Invoice->calculatePayments()machen?