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_status
der Rechnung wird aufQUI\ERP\Constants::PAYMENT_STATUS_PAID
gesetzt -> 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_status
auch 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
onQuiqqerInvoicePaymentStatusChanged
wird aber nicht gefeuert, da durch dasQUI\ERP\Accounting\Calc::calculatePayments($this)
der altepaid_status
bereits aufPAID
gesetzt 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?