61 lines
1.7 KiB
PHP
61 lines
1.7 KiB
PHP
|
<?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();
|
||
|
}
|
||
|
}
|