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

@@ -0,0 +1,49 @@
<?php
namespace FireflyIII\Console\Commands\Correction;
use DB;
use FireflyIII\Models\AccountBalance;
use FireflyIII\Models\Transaction;
use Illuminate\Console\Command;
use stdClass;
/**
* Class CorrectionSkeleton
* TODO DONT FORGET TO ADD THIS TO THE DOCKER BUILD
*/
class CorrectBalanceAmounts extends Command
{
protected $description = 'Recalculate all account balance amounts';
protected $signature = 'firefly-iii:correct-balance-amounts';
/**
* @return int
*/
public function handle(): int
{
$this->correctBalanceAmounts();
return 0;
}
private function correctBalanceAmounts(): void
{
$result = Transaction
::groupBy(['account_id', 'transaction_currency_id'])
->get(['account_id', 'transaction_currency_id', DB::raw('SUM(amount) as amount_sum')]);
/** @var stdClass $entry */
foreach ($result as $entry) {
$account = (int) $entry->account_id;
$currency = (int) $entry->transaction_currency_id;
$sum = $entry->amount_sum;
AccountBalance::updateOrCreate(
['account_id' => $account, 'transaction_currency_id' => $currency],
['balance' => $sum]
);
}
}
}

View File

@@ -74,6 +74,7 @@ class CorrectDatabase extends Command
'firefly-iii:unify-group-accounts',
'firefly-iii:trigger-credit-recalculation',
'firefly-iii:migrate-preferences',
'firefly-iii:correct-balance-amounts',
];
foreach ($commands as $command) {
$this->friendlyLine(sprintf('Now executing command "%s"', $command));