Move the model callbacks into Observables; reduce caching since it held balances incorrectly

This commit is contained in:
Nabeel Shahzad
2018-03-18 20:37:35 -05:00
parent 6b002f24a8
commit 36ea12e135
25 changed files with 336 additions and 266 deletions

View 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();
}
}