Add routine that caches account balances. Add it to the /flush routine as well.

This commit is contained in:
James Cole
2024-05-12 06:24:11 +02:00
parent d356d39d43
commit cebfaa32bf
6 changed files with 121 additions and 5 deletions

View File

@@ -23,7 +23,10 @@ declare(strict_types=1);
namespace FireflyIII\Handlers\Observer;
use DB;
use FireflyIII\Models\AccountBalance;
use FireflyIII\Models\Transaction;
use stdClass;
/**
* Class TransactionObserver
@@ -35,4 +38,20 @@ class TransactionObserver
app('log')->debug('Observe "deleting" of a transaction.');
$transaction?->transactionJournal?->delete();
}
public function updated(Transaction $transaction): void
{
app('log')->debug('Observe "updated" of a transaction.');
// refresh account balance:
/** @var stdClass $result */
$result = Transaction::groupBy(['account_id', 'transaction_currency_id'])->where('account_id', $transaction->account_id)->first(['account_id', 'transaction_currency_id', DB::raw('SUM(amount) as amount_sum')]);
if (null !== $result) {
$account = (int) $result->account_id;
$currency = (int) $result->transaction_currency_id;
$sum = $result->amount_sum;
AccountBalance::updateOrCreate(['account_id' => $account, 'transaction_currency_id' => $currency], ['balance' => $sum]);
}
}
}