James Cole 2024-09-28 08:26:54 +02:00
parent dedc06a46b
commit 441ada70b8
No known key found for this signature in database
GPG Key ID: B49A324B7EAD6D80

View File

@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Support\Models; namespace FireflyIII\Support\Models;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\AccountBalance; use FireflyIII\Models\AccountBalance;
@ -74,7 +75,7 @@ class AccountBalanceCalculator
foreach ($transactionJournal->transactions as $transaction) { foreach ($transactionJournal->transactions as $transaction) {
$accounts->push($transaction->account); $accounts->push($transaction->account);
} }
$object->optimizedCalculation($accounts); $object->optimizedCalculation($accounts, $transactionJournal->date);
} }
private function getAccountBalanceByAccount(int $account, int $currency): AccountBalance private function getAccountBalanceByAccount(int $account, int $currency): AccountBalance
@ -98,7 +99,7 @@ class AccountBalanceCalculator
return $entry; return $entry;
} }
private function optimizedCalculation(Collection $accounts): void private function optimizedCalculation(Collection $accounts, Carbon $notBefore = null): void
{ {
Log::debug('start of optimizedCalculation'); Log::debug('start of optimizedCalculation');
if ($accounts->count() > 0) { if ($accounts->count() > 0) {
@ -120,6 +121,10 @@ class AccountBalanceCalculator
if ($accounts->count() > 0) { if ($accounts->count() > 0) {
$query->whereIn('transactions.account_id', $accounts->pluck('id')->toArray()); $query->whereIn('transactions.account_id', $accounts->pluck('id')->toArray());
} }
if(null !== $notBefore) {
$notBefore->startOfDay();
$query->where('transaction_journals.date', '>=', $notBefore);
}
$set = $query->get(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount']); $set = $query->get(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount']);