Move the model callbacks into Observables; reduce caching since it held balances incorrectly
This commit is contained in:
60
app/Models/Observers/JournalTransactionObserver.php
Normal file
60
app/Models/Observers/JournalTransactionObserver.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Observers;
|
||||
|
||||
use App\Models\JournalTransaction;
|
||||
|
||||
class JournalTransactionObserver
|
||||
{
|
||||
/**
|
||||
* Set the ID to a UUID
|
||||
* @param JournalTransaction $transaction
|
||||
*/
|
||||
public function creating(JournalTransaction $transaction): void
|
||||
{
|
||||
if (!$transaction->id) {
|
||||
$transaction->id = \Ramsey\Uuid\Uuid::uuid4()->toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* After transaction is saved, adjust the journal balance
|
||||
* @param JournalTransaction $transaction
|
||||
*/
|
||||
public function saved(JournalTransaction $transaction): void
|
||||
{
|
||||
$journal = $transaction->journal;
|
||||
if ($transaction['credit']) {
|
||||
$balance = $journal->balance->toAmount();
|
||||
$journal->balance = (int) $balance + $transaction->credit;
|
||||
}
|
||||
|
||||
if ($transaction['debit']) {
|
||||
$balance = $journal->balance->toAmount();
|
||||
#$journal->balance = $journal->balance->subtract($transaction['debit']);
|
||||
$journal->balance = (int) $balance - $transaction->debit;
|
||||
}
|
||||
|
||||
$journal->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* After transaction is deleted, adjust the balance on the journal
|
||||
* @param JournalTransaction $transaction
|
||||
*/
|
||||
public function deleted(JournalTransaction $transaction): void
|
||||
{
|
||||
$journal = $transaction->journal;
|
||||
if ($transaction['credit']) {
|
||||
$balance = $journal->balance->toAmount();
|
||||
$journal->balance = $balance - $transaction['credit'];
|
||||
}
|
||||
|
||||
if ($transaction['debit']) {
|
||||
$balance = $journal->balance->toAmount();
|
||||
$journal->balance = $balance + $transaction['debit'];
|
||||
}
|
||||
|
||||
$journal->save();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user