mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-09 22:26:04 +00:00
Remove all uses of "finalAccountBalance", move towards one function to rule them all.
This commit is contained in:
@@ -137,9 +137,12 @@ class MonthReportGenerator implements ReportGeneratorInterface
|
|||||||
;
|
;
|
||||||
$journals = $collector->getExtractedJournals();
|
$journals = $collector->getExtractedJournals();
|
||||||
$journals = array_reverse($journals, true);
|
$journals = array_reverse($journals, true);
|
||||||
// this call is correct.
|
|
||||||
Log::debug(sprintf('getAuditReport: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
Log::debug(sprintf('getAuditReport: Call accountsBalancesOptimized with date/time "%s"', $date->toIso8601String()));
|
||||||
$dayBeforeBalance = Steam::finalAccountBalance($account, $date);
|
// 2025-10-08 replace with accountsBalancesOptimized.
|
||||||
|
// $dayBeforeBalance = Steam::finalAccountBalance($account, $date);
|
||||||
|
$dayBeforeBalance = Steam::accountsBalancesOptimized(new Collection()->push($account), $date)[$account->id];
|
||||||
|
|
||||||
$startBalance = $dayBeforeBalance['balance'];
|
$startBalance = $dayBeforeBalance['balance'];
|
||||||
$primaryCurrency = app('amount')->getPrimaryCurrencyByUserGroup($account->user->userGroup);
|
$primaryCurrency = app('amount')->getPrimaryCurrencyByUserGroup($account->user->userGroup);
|
||||||
$currency = $accountRepository->getAccountCurrency($account) ?? $primaryCurrency;
|
$currency = $accountRepository->getAccountCurrency($account) ?? $primaryCurrency;
|
||||||
@@ -176,12 +179,14 @@ class MonthReportGenerator implements ReportGeneratorInterface
|
|||||||
// call is correct.
|
// call is correct.
|
||||||
Log::debug(sprintf('getAuditReport end: Call finalAccountBalance with date/time "%s"', $this->end->toIso8601String()));
|
Log::debug(sprintf('getAuditReport end: Call finalAccountBalance with date/time "%s"', $this->end->toIso8601String()));
|
||||||
|
|
||||||
|
// 2025-10-08 replace with accountsBalancesOptimized:
|
||||||
return [
|
return [
|
||||||
'journals' => $journals,
|
'journals' => $journals,
|
||||||
'currency' => $currency,
|
'currency' => $currency,
|
||||||
'exists' => 0 !== count($journals),
|
'exists' => 0 !== count($journals),
|
||||||
'end' => $this->end->isoFormat((string) trans('config.month_and_day_moment_js', [], $locale)),
|
'end' => $this->end->isoFormat((string) trans('config.month_and_day_moment_js', [], $locale)),
|
||||||
'endBalance' => Steam::finalAccountBalance($account, $this->end)['balance'],
|
// 'endBalance' => Steam::finalAccountBalance($account, $this->end)['balance'],
|
||||||
|
'endBalance' => Steam::accountsBalancesOptimized(new Collection()->push($account), $this->end)[$account->id]['balance'],
|
||||||
'dayBefore' => $date->isoFormat((string) trans('config.month_and_day_moment_js', [], $locale)),
|
'dayBefore' => $date->isoFormat((string) trans('config.month_and_day_moment_js', [], $locale)),
|
||||||
'dayBeforeBalance' => $dayBeforeBalance,
|
'dayBeforeBalance' => $dayBeforeBalance,
|
||||||
];
|
];
|
||||||
|
@@ -62,12 +62,13 @@ trait AccountCollection
|
|||||||
if (null === $account) {
|
if (null === $account) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2025-10-08 replace with accountsBalancesOptimized
|
||||||
// the balance must be found BEFORE the transaction date.
|
// the balance must be found BEFORE the transaction date.
|
||||||
// so sub one second. This is not perfect, but works well enough.
|
// so inclusive = false
|
||||||
$date = clone $transaction['date'];
|
Log::debug(sprintf('accountBalanceIs: Call accountsBalancesOptimized with date/time "%s"', $transaction['date']->toIso8601String()));
|
||||||
$date->subSecond();
|
$balance = Steam::accountsBalancesOptimized(new Collection()->push($account), $transaction['date'], convertToPrimary: null, inclusive: false)[$account->id];
|
||||||
Log::debug(sprintf('accountBalanceIs: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
// $balance = Steam::finalAccountBalance($account, $date);
|
||||||
$balance = Steam::finalAccountBalance($account, $date);
|
|
||||||
$result = bccomp((string) $balance['balance'], $value);
|
$result = bccomp((string) $balance['balance'], $value);
|
||||||
Log::debug(sprintf('"%s" vs "%s" is %d', $balance['balance'], $value, $result));
|
Log::debug(sprintf('"%s" vs "%s" is %d', $balance['balance'], $value, $result));
|
||||||
|
|
||||||
|
@@ -39,6 +39,7 @@ use FireflyIII\User;
|
|||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
|
||||||
@@ -113,13 +114,20 @@ class ReconcileController extends Controller
|
|||||||
$start->startOfDay();
|
$start->startOfDay();
|
||||||
$end->endOfDay();
|
$end->endOfDay();
|
||||||
|
|
||||||
$startDate = clone $start;
|
// $startDate = clone $start;
|
||||||
$startDate->subDay()->endOfDay(); // this is correct, subday endofday ends at 23:59:59
|
// $startDate->subDay()->endOfDay(); // this is correct, subday endofday ends at 23:59:59
|
||||||
// both are validated and are correct.
|
// both are validated and are correct.
|
||||||
Log::debug(sprintf('reconcile: Call finalAccountBalance with date/time "%s"', $startDate->toIso8601String()));
|
// Log::debug(sprintf('reconcile: Call finalAccountBalance with date/time "%s"', $startDate->toIso8601String()));
|
||||||
Log::debug(sprintf('reconcile2: Call finalAccountBalance with date/time "%s"', $end->toIso8601String()));
|
// Log::debug(sprintf('reconcile2: Call finalAccountBalance with date/time "%s"', $end->toIso8601String()));
|
||||||
$startBalance = Steam::bcround(Steam::finalAccountBalance($account, $startDate)['balance'], $currency->decimal_places);
|
// $startBalance = Steam::bcround(Steam::finalAccountBalance($account, $startDate)['balance'], $currency->decimal_places);
|
||||||
$endBalance = Steam::bcround(Steam::finalAccountBalance($account, $end)['balance'], $currency->decimal_places);
|
// $endBalance = Steam::bcround(Steam::finalAccountBalance($account, $end)['balance'], $currency->decimal_places);
|
||||||
|
|
||||||
|
// 2025-10-08 replace with accountsBalancesOptimized
|
||||||
|
// no longer need to do subday->endofday on $start, set inclusive = false for the same effect.
|
||||||
|
$startBalance = Steam::bcround(Steam::accountsBalancesOptimized(new Collection()->push($account), $start, convertToPrimary: null, inclusive: false)[$account->id]['balance'], $currency->decimal_places);
|
||||||
|
$endBalance = Steam::bcround(Steam::accountsBalancesOptimized(new Collection()->push($account), $end)[$account->id]['balance'], $currency->decimal_places);
|
||||||
|
|
||||||
|
|
||||||
$subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $account->accountType->type));
|
$subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $account->accountType->type));
|
||||||
$subTitle = (string) trans('firefly.reconcile_account', ['account' => $account->name]);
|
$subTitle = (string) trans('firefly.reconcile_account', ['account' => $account->name]);
|
||||||
|
|
||||||
|
@@ -169,8 +169,9 @@ class ShowController extends Controller
|
|||||||
$now = $end;
|
$now = $end;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log::debug(sprintf('show: Call finalAccountBalance with date/time "%s"', $now->toIso8601String()));
|
// 2025-10-08 replace finalAccountBalance with accountsBalancesOptimized.
|
||||||
$balances = Steam::filterAccountBalance(Steam::finalAccountBalance($account, $now), $account, $this->convertToPrimary, $accountCurrency);
|
$balances = Steam::accountsBalancesOptimized(new Collection()->push($account), $now)[$account->id];
|
||||||
|
// $balances = Steam::filterAccountBalance(Steam::finalAccountBalance($account, $now), $account, $this->convertToPrimary, $accountCurrency);
|
||||||
|
|
||||||
return view(
|
return view(
|
||||||
'accounts.show',
|
'accounts.show',
|
||||||
@@ -237,8 +238,11 @@ class ShowController extends Controller
|
|||||||
$chartUrl = route('chart.account.period', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]);
|
$chartUrl = route('chart.account.period', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]);
|
||||||
$showAll = true;
|
$showAll = true;
|
||||||
// correct
|
// correct
|
||||||
Log::debug(sprintf('showAll: Call finalAccountBalance with date/time "%s"', $end->toIso8601String()));
|
Log::debug(sprintf('showAll: Call accountsBalancesOptimized with date/time "%s"', $end->toIso8601String()));
|
||||||
$balances = Steam::filterAccountBalance(Steam::finalAccountBalance($account, $end), $account, $this->convertToPrimary, $accountCurrency);
|
|
||||||
|
// 2025-10-08 replace finalAccountBalance with accountsBalancesOptimized.
|
||||||
|
// $balances = Steam::filterAccountBalance(Steam::finalAccountBalance($account, $end), $account, $this->convertToPrimary, $accountCurrency);
|
||||||
|
$balances = Steam::accountsBalancesOptimized(new Collection()->push($account), $end)[$account->id];
|
||||||
|
|
||||||
return view(
|
return view(
|
||||||
'accounts.show',
|
'accounts.show',
|
||||||
|
@@ -522,9 +522,9 @@ class AccountController extends Controller
|
|||||||
$range = Steam::filterAccountBalances($range, $account, $this->convertToPrimary, $accountCurrency);
|
$range = Steam::filterAccountBalances($range, $account, $this->convertToPrimary, $accountCurrency);
|
||||||
Log::debug('Get and filter balance for entire range end');
|
Log::debug('Get and filter balance for entire range end');
|
||||||
// temp, get end balance.
|
// temp, get end balance.
|
||||||
Log::debug(sprintf('period: Call finalAccountBalance with date/time "%s"', $end->toIso8601String()));
|
// Log::debug(sprintf('period: Call finalAccountBalance with date/time "%s"', $end->toIso8601String()));
|
||||||
Steam::finalAccountBalance($account, $end);
|
// Steam::finalAccountBalance($account, $end);
|
||||||
Log::debug('END temp get end balance done');
|
// Log::debug('END temp get end balance done');
|
||||||
|
|
||||||
$previous = array_values($range)[0];
|
$previous = array_values($range)[0];
|
||||||
$accountCurrency ??= $this->primaryCurrency; // do this AFTER getting the balances.
|
$accountCurrency ??= $this->primaryCurrency; // do this AFTER getting the balances.
|
||||||
|
@@ -197,10 +197,16 @@ class ReconcileController extends Controller
|
|||||||
|
|
||||||
$currency = $this->accountRepos->getAccountCurrency($account) ?? $this->primaryCurrency;
|
$currency = $this->accountRepos->getAccountCurrency($account) ?? $this->primaryCurrency;
|
||||||
// correct
|
// correct
|
||||||
Log::debug(sprintf('transactions: Call finalAccountBalance with date/time "%s"', $startDate->toIso8601String()));
|
Log::debug(sprintf('transactions: Call accountsBalancesOptimized with date/time "%s"', $startDate->toIso8601String()));
|
||||||
Log::debug(sprintf('transactions2: Call finalAccountBalance with date/time "%s"', $end->toIso8601String()));
|
Log::debug(sprintf('transactions2: Call accountsBalancesOptimized with date/time "%s"', $end->toIso8601String()));
|
||||||
$startBalance = Steam::bcround(Steam::finalAccountBalance($account, $startDate)['balance'], $currency->decimal_places);
|
|
||||||
$endBalance = Steam::bcround(Steam::finalAccountBalance($account, $end)['balance'], $currency->decimal_places);
|
// 2025-10-08 replace finalAccountBalance with accountsBalancesOptimized
|
||||||
|
// $startBalance = Steam::bcround(Steam::finalAccountBalance($account, $startDate)['balance'], $currency->decimal_places);
|
||||||
|
// $endBalance = Steam::bcround(Steam::finalAccountBalance($account, $end)['balance'], $currency->decimal_places);
|
||||||
|
|
||||||
|
$startBalance = Steam::accountsBalancesOptimized(new Collection()->push($account), $startDate)[$account->id];
|
||||||
|
$endBalance = Steam::accountsBalancesOptimized(new Collection()->push($account), $end)[$account->id];
|
||||||
|
|
||||||
|
|
||||||
// get the transactions
|
// get the transactions
|
||||||
$selectionStart = clone $start;
|
$selectionStart = clone $start;
|
||||||
|
@@ -37,6 +37,7 @@ use FireflyIII\Models\TransactionJournal;
|
|||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Services\Internal\Update\JournalUpdateService;
|
use FireflyIII\Services\Internal\Update\JournalUpdateService;
|
||||||
|
use FireflyIII\Support\Facades\Amount;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use FireflyIII\Support\Http\Controllers\ModelInformation;
|
use FireflyIII\Support\Http\Controllers\ModelInformation;
|
||||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||||
@@ -45,6 +46,7 @@ use Illuminate\Contracts\View\Factory;
|
|||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
|
||||||
@@ -228,11 +230,13 @@ class ConvertController extends Controller
|
|||||||
foreach ($accountList as $account) {
|
foreach ($accountList as $account) {
|
||||||
$date = today()->endOfDay();
|
$date = today()->endOfDay();
|
||||||
Log::debug(sprintf('getLiabilities: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
Log::debug(sprintf('getLiabilities: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
||||||
$balance = Steam::finalAccountBalance($account, $date)['balance'];
|
// 2025-10-08 replace finalAccountBalance with accountsBalancesOptimized.
|
||||||
|
// $balance = Steam::finalAccountBalance($account, $date)['balance'];
|
||||||
|
$balance = Steam::accountsBalancesOptimized(new Collection()->push($account), $date)[$account->id]['balance'] ?? '0';
|
||||||
$currency = $this->accountRepository->getAccountCurrency($account) ?? $this->primaryCurrency;
|
$currency = $this->accountRepository->getAccountCurrency($account) ?? $this->primaryCurrency;
|
||||||
$role = 'l_'.$account->accountType->type;
|
$role = sprintf('l_%s',$account->accountType->type);
|
||||||
$key = (string) trans('firefly.opt_group_'.$role);
|
$key = (string) trans(sprintf('firefly.opt_group_%s',$role));
|
||||||
$grouped[$key][$account->id] = $account->name.' ('.app('amount')->formatAnything($currency, $balance, false).')';
|
$grouped[$key][$account->id] = sprintf('%s (%s)', $account->name, Amount::formatAnything($currency, $balance, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $grouped;
|
return $grouped;
|
||||||
@@ -252,15 +256,18 @@ class ConvertController extends Controller
|
|||||||
foreach ($accountList as $account) {
|
foreach ($accountList as $account) {
|
||||||
$date = today()->endOfDay();
|
$date = today()->endOfDay();
|
||||||
Log::debug(sprintf('getAssetAccounts: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
Log::debug(sprintf('getAssetAccounts: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
||||||
$balance = Steam::finalAccountBalance($account, $date)['balance'];
|
// 2025-10-08 replace finalAccountBalance with accountsBalancesOptimized.
|
||||||
|
// $balance = Steam::finalAccountBalance($account, $date)['balance'];
|
||||||
|
$balance = Steam::accountsBalancesOptimized(new Collection()->push($account), $date)[$account->id]['balance'] ?? '0';
|
||||||
|
|
||||||
$currency = $this->accountRepository->getAccountCurrency($account) ?? $this->primaryCurrency;
|
$currency = $this->accountRepository->getAccountCurrency($account) ?? $this->primaryCurrency;
|
||||||
$role = (string) $this->accountRepository->getMetaValue($account, 'account_role');
|
$role = (string) $this->accountRepository->getMetaValue($account, 'account_role');
|
||||||
if ('' === $role) {
|
if ('' === $role) {
|
||||||
$role = 'no_account_type';
|
$role = 'no_account_type';
|
||||||
}
|
}
|
||||||
|
|
||||||
$key = (string) trans('firefly.opt_group_'.$role);
|
$key = (string) trans(sprintf('firefly.opt_group_%s',$role));
|
||||||
$grouped[$key][$account->id] = $account->name.' ('.app('amount')->formatAnything($currency, $balance, false).')';
|
$grouped[$key][$account->id] = sprintf('%s (%s)', $account->name, Amount::formatAnything($currency, $balance, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $grouped;
|
return $grouped;
|
||||||
|
@@ -375,7 +375,9 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface, UserGroupInte
|
|||||||
{
|
{
|
||||||
Log::debug(sprintf('leftOnAccount("%s","%s","%s")', $piggyBank->name, $account->name, $date->format('Y-m-d H:i:s')));
|
Log::debug(sprintf('leftOnAccount("%s","%s","%s")', $piggyBank->name, $account->name, $date->format('Y-m-d H:i:s')));
|
||||||
Log::debug(sprintf('leftOnAccount: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
Log::debug(sprintf('leftOnAccount: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
||||||
$balance = Steam::finalAccountBalance($account, $date)['balance'];
|
// 2025-10-08 replace finalAccountBalance with accountsBalancesOptimized.
|
||||||
|
$balance = Steam::accountsBalancesOptimized(new Collection()->push($account), $date)[$account->id];
|
||||||
|
//$balance = Steam::finalAccountBalance($account, $date)['balance'];
|
||||||
|
|
||||||
Log::debug(sprintf('Balance is: %s', $balance));
|
Log::debug(sprintf('Balance is: %s', $balance));
|
||||||
|
|
||||||
|
@@ -122,6 +122,9 @@ class Steam
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls accountsBalancesOptimized for the given accounts and makes sure that inclusive is set to false, so it properly gets the balance of a range.
|
||||||
|
*/
|
||||||
public function accountsBalancesInRange(Carbon $start, Carbon $end, Collection $accounts, ?TransactionCurrency $primary = null, ?bool $convertToPrimary = null): array
|
public function accountsBalancesInRange(Carbon $start, Carbon $end, Collection $accounts, ?TransactionCurrency $primary = null, ?bool $convertToPrimary = null): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@@ -281,6 +284,7 @@ class Steam
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @deprecated
|
||||||
* By default this method returns "smaller than or equal to", so be careful with END OF DAY.
|
* By default this method returns "smaller than or equal to", so be careful with END OF DAY.
|
||||||
* If you need end of day balance, use "inclusive = false".
|
* If you need end of day balance, use "inclusive = false".
|
||||||
*
|
*
|
||||||
|
@@ -30,6 +30,7 @@ use FireflyIII\Repositories\User\UserRepositoryInterface;
|
|||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use FireflyIII\Support\Search\OperatorQuerySearch;
|
use FireflyIII\Support\Search\OperatorQuerySearch;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use League\CommonMark\GithubFlavoredMarkdownConverter;
|
use League\CommonMark\GithubFlavoredMarkdownConverter;
|
||||||
@@ -155,9 +156,12 @@ class General extends AbstractExtension
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @var Carbon $date */
|
/** @var Carbon $date */
|
||||||
$date = session('end', today(config('app.timezone'))->endOfMonth());
|
$date = now();
|
||||||
Log::debug(sprintf('twig balance: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
Log::debug(sprintf('twig balance: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
|
||||||
$info = Steam::finalAccountBalance($account, $date);
|
|
||||||
|
// 2025-10-08 replace finalAccountBalance with accountsBalancesOptimized.
|
||||||
|
$info = Steam::accountsBalancesOptimized(new Collection()->push($account), $date)[$account->id];
|
||||||
|
// $info = Steam::finalAccountBalance($account, $date);
|
||||||
$currency = Steam::getAccountCurrency($account);
|
$currency = Steam::getAccountCurrency($account);
|
||||||
$primary = Amount::getPrimaryCurrency();
|
$primary = Amount::getPrimaryCurrency();
|
||||||
$convertToPrimary = Amount::convertToPrimary();
|
$convertToPrimary = Amount::convertToPrimary();
|
||||||
|
Reference in New Issue
Block a user