From 1353554cf8adf57ba04255fbec22fc12dfbb5577 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 9 Aug 2025 16:38:32 +0200 Subject: [PATCH] Remove expensive call from loop. --- .../V1/Controllers/Autocomplete/AccountController.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/Api/V1/Controllers/Autocomplete/AccountController.php b/app/Api/V1/Controllers/Autocomplete/AccountController.php index 56de438135..a2049fe8e0 100644 --- a/app/Api/V1/Controllers/Autocomplete/AccountController.php +++ b/app/Api/V1/Controllers/Autocomplete/AccountController.php @@ -31,6 +31,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Support\Debug\Timer; +use FireflyIII\Support\Facades\Amount; use FireflyIII\Support\Facades\Steam; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\User; @@ -90,6 +91,8 @@ class AccountController extends Controller // set date to subday + end-of-day for account balance. so it is at $date 23:59:59 $date->endOfDay(); + $allBalances = Steam::accountsBalancesOptimized($result, $date, $this->primaryCurrency, $this->convertToPrimary); + /** @var Account $account */ foreach ($result as $account) { $nameWithBalance = $account->name; @@ -98,15 +101,11 @@ class AccountController extends Controller if (in_array($account->accountType->type, $this->balanceTypes, true)) { // this one is correct. Log::debug(sprintf('accounts: Call finalAccountBalance with date/time "%s"', $date->toIso8601String())); - $balance = Steam::finalAccountBalance($account, $date); + $balance = $allBalances[$account->id] ?? []; $key = $this->convertToPrimary && $currency->id !== $this->primaryCurrency->id ? 'pc_balance' : 'balance'; $useCurrency = $this->convertToPrimary && $currency->id !== $this->primaryCurrency->id ? $this->primaryCurrency : $currency; $amount = $balance[$key] ?? '0'; - $nameWithBalance = sprintf( - '%s (%s)', - $account->name, - app('amount')->formatAnything($useCurrency, $amount, false) - ); + $nameWithBalance = sprintf('%s (%s)', $account->name, Amount::formatAnything($useCurrency, $amount, false)); } $return[] = [