mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-18 18:44:16 +00:00
This commit is contained in:
@@ -312,6 +312,12 @@ PUSHER_ID=
|
|||||||
DEMO_USERNAME=
|
DEMO_USERNAME=
|
||||||
DEMO_PASSWORD=
|
DEMO_PASSWORD=
|
||||||
|
|
||||||
|
#
|
||||||
|
# Disable or enable the running balance column data
|
||||||
|
# Please disable this. It's a very experimental feature.
|
||||||
|
#
|
||||||
|
USE_RUNNING_BALANCE=false
|
||||||
|
|
||||||
#
|
#
|
||||||
# The v2 layout is very experimental. If it breaks you get to keep both parts.
|
# The v2 layout is very experimental. If it breaks you get to keep both parts.
|
||||||
# Be wary of data loss.
|
# Be wary of data loss.
|
||||||
|
@@ -78,6 +78,33 @@ class AccountBalanceCalculator
|
|||||||
$object->optimizedCalculation($accounts, $transactionJournal->date);
|
$object->optimizedCalculation($accounts, $transactionJournal->date);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getLatestBalance(int $accountId, int $currencyId, ?Carbon $notBefore): string
|
||||||
|
{
|
||||||
|
if (null === $notBefore) {
|
||||||
|
Log::debug('getLatestBalance: no notBefore date, returning 0');
|
||||||
|
return '0';
|
||||||
|
}
|
||||||
|
Log::debug(sprintf('getLatestBalance: notBefore date is "%s", calculating', $notBefore->format('Y-m-d')));
|
||||||
|
$query = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||||
|
->whereNull('transactions.deleted_at')
|
||||||
|
->where('transaction_journals.transaction_currency_id', $currencyId)
|
||||||
|
->whereNull('transaction_journals.deleted_at')
|
||||||
|
// this order is the same as GroupCollector, but in the exact reverse.
|
||||||
|
->orderBy('transaction_journals.date', 'asc')
|
||||||
|
->orderBy('transaction_journals.order', 'desc')
|
||||||
|
->orderBy('transaction_journals.id', 'asc')
|
||||||
|
->orderBy('transaction_journals.description', 'asc')
|
||||||
|
->orderBy('transactions.amount', 'asc')
|
||||||
|
->where('transactions.account_id', $accountId);
|
||||||
|
$notBefore->startOfDay();
|
||||||
|
$query->where('transaction_journals.date', '<', $notBefore);
|
||||||
|
|
||||||
|
$first = $query->first(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount','transactions.balance_after']);
|
||||||
|
$balance = $first->balance_after ?? '0';
|
||||||
|
Log::debug(sprintf('getLatestBalance: found balance: %s in transaction #%d', $balance, $first->id ?? 0));
|
||||||
|
return $balance;
|
||||||
|
}
|
||||||
|
|
||||||
private function getAccountBalanceByAccount(int $account, int $currency): AccountBalance
|
private function getAccountBalanceByAccount(int $account, int $currency): AccountBalance
|
||||||
{
|
{
|
||||||
$query = AccountBalance::where('title', 'balance')->where('account_id', $account)->where('transaction_currency_id', $currency);
|
$query = AccountBalance::where('title', 'balance')->where('account_id', $account)->where('transaction_currency_id', $currency);
|
||||||
@@ -102,6 +129,11 @@ class AccountBalanceCalculator
|
|||||||
private function optimizedCalculation(Collection $accounts, ?Carbon $notBefore = null): void
|
private function optimizedCalculation(Collection $accounts, ?Carbon $notBefore = null): void
|
||||||
{
|
{
|
||||||
Log::debug('start of optimizedCalculation');
|
Log::debug('start of optimizedCalculation');
|
||||||
|
if(false === config('firefly.feature_flags.running_balance_column')) {
|
||||||
|
Log::debug('optimizedCalculation is disabled, return.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ($accounts->count() > 0) {
|
if ($accounts->count() > 0) {
|
||||||
Log::debug(sprintf('Limited to %d account(s)', $accounts->count()));
|
Log::debug(sprintf('Limited to %d account(s)', $accounts->count()));
|
||||||
}
|
}
|
||||||
@@ -116,8 +148,7 @@ class AccountBalanceCalculator
|
|||||||
->orderBy('transaction_journals.order', 'desc')
|
->orderBy('transaction_journals.order', 'desc')
|
||||||
->orderBy('transaction_journals.id', 'asc')
|
->orderBy('transaction_journals.id', 'asc')
|
||||||
->orderBy('transaction_journals.description', 'asc')
|
->orderBy('transaction_journals.description', 'asc')
|
||||||
->orderBy('transactions.amount', 'asc')
|
->orderBy('transactions.amount', 'asc');
|
||||||
;
|
|
||||||
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());
|
||||||
}
|
}
|
||||||
@@ -132,7 +163,7 @@ class AccountBalanceCalculator
|
|||||||
foreach ($set as $entry) {
|
foreach ($set as $entry) {
|
||||||
// start with empty array:
|
// start with empty array:
|
||||||
$balances[$entry->account_id] ??= [];
|
$balances[$entry->account_id] ??= [];
|
||||||
$balances[$entry->account_id][$entry->transaction_currency_id] ??= '0';
|
$balances[$entry->account_id][$entry->transaction_currency_id] ??= $this->getLatestBalance($entry->account_id, $entry->transaction_currency_id, $notBefore);
|
||||||
|
|
||||||
// before and after are easy:
|
// before and after are easy:
|
||||||
$before = $balances[$entry->account_id][$entry->transaction_currency_id];
|
$before = $balances[$entry->account_id][$entry->transaction_currency_id];
|
||||||
|
@@ -29,7 +29,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
|||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use FireflyIII\Support\Search\OperatorQuerySearch;
|
use FireflyIII\Support\Search\OperatorQuerySearch;
|
||||||
use League\CommonMark\GithubFlavoredMarkdownConverter;
|
use League\CommonMark\GithubFlavoredMarkdownConverter;
|
||||||
use Route;
|
|
||||||
use Twig\Extension\AbstractExtension;
|
use Twig\Extension\AbstractExtension;
|
||||||
use Twig\TwigFilter;
|
use Twig\TwigFilter;
|
||||||
use Twig\TwigFunction;
|
use Twig\TwigFunction;
|
||||||
@@ -64,7 +63,14 @@ class General extends AbstractExtension
|
|||||||
|
|
||||||
/** @var Carbon $date */
|
/** @var Carbon $date */
|
||||||
$date = session('end', today(config('app.timezone'))->endOfMonth());
|
$date = session('end', today(config('app.timezone'))->endOfMonth());
|
||||||
|
$runningBalance = config('firefly.feature_flags.running_balance_column');
|
||||||
|
$info = [];
|
||||||
|
if (true === $runningBalance) {
|
||||||
$info = app('steam')->balanceByTransactions($account, $date, null);
|
$info = app('steam')->balanceByTransactions($account, $date, null);
|
||||||
|
}
|
||||||
|
if (false === $runningBalance) {
|
||||||
|
$info[] = app('steam')->balance($account, $date);
|
||||||
|
}
|
||||||
|
|
||||||
$strings = [];
|
$strings = [];
|
||||||
foreach ($info as $currencyId => $balance) {
|
foreach ($info as $currencyId => $balance) {
|
||||||
|
@@ -65,10 +65,6 @@ use FireflyIII\Support\Binder\UserGroupAccount;
|
|||||||
use FireflyIII\Support\Binder\UserGroupBill;
|
use FireflyIII\Support\Binder\UserGroupBill;
|
||||||
use FireflyIII\Support\Binder\UserGroupTransaction;
|
use FireflyIII\Support\Binder\UserGroupTransaction;
|
||||||
use FireflyIII\TransactionRules\Actions\AddTag;
|
use FireflyIII\TransactionRules\Actions\AddTag;
|
||||||
use FireflyIII\TransactionRules\Actions\AppendDescription;
|
|
||||||
use FireflyIII\TransactionRules\Actions\AppendDescriptionToNotes;
|
|
||||||
use FireflyIII\TransactionRules\Actions\AppendNotes;
|
|
||||||
use FireflyIII\TransactionRules\Actions\AppendNotesToDescription;
|
|
||||||
use FireflyIII\TransactionRules\Actions\ClearBudget;
|
use FireflyIII\TransactionRules\Actions\ClearBudget;
|
||||||
use FireflyIII\TransactionRules\Actions\ClearCategory;
|
use FireflyIII\TransactionRules\Actions\ClearCategory;
|
||||||
use FireflyIII\TransactionRules\Actions\ClearNotes;
|
use FireflyIII\TransactionRules\Actions\ClearNotes;
|
||||||
@@ -77,10 +73,6 @@ use FireflyIII\TransactionRules\Actions\ConvertToTransfer;
|
|||||||
use FireflyIII\TransactionRules\Actions\ConvertToWithdrawal;
|
use FireflyIII\TransactionRules\Actions\ConvertToWithdrawal;
|
||||||
use FireflyIII\TransactionRules\Actions\DeleteTransaction;
|
use FireflyIII\TransactionRules\Actions\DeleteTransaction;
|
||||||
use FireflyIII\TransactionRules\Actions\LinkToBill;
|
use FireflyIII\TransactionRules\Actions\LinkToBill;
|
||||||
use FireflyIII\TransactionRules\Actions\MoveDescriptionToNotes;
|
|
||||||
use FireflyIII\TransactionRules\Actions\MoveNotesToDescription;
|
|
||||||
use FireflyIII\TransactionRules\Actions\PrependDescription;
|
|
||||||
use FireflyIII\TransactionRules\Actions\PrependNotes;
|
|
||||||
use FireflyIII\TransactionRules\Actions\RemoveAllTags;
|
use FireflyIII\TransactionRules\Actions\RemoveAllTags;
|
||||||
use FireflyIII\TransactionRules\Actions\RemoveTag;
|
use FireflyIII\TransactionRules\Actions\RemoveTag;
|
||||||
use FireflyIII\TransactionRules\Actions\SetAmount;
|
use FireflyIII\TransactionRules\Actions\SetAmount;
|
||||||
@@ -115,6 +107,7 @@ return [
|
|||||||
'webhooks' => true,
|
'webhooks' => true,
|
||||||
'handle_debts' => true,
|
'handle_debts' => true,
|
||||||
'expression_engine' => true,
|
'expression_engine' => true,
|
||||||
|
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
|
||||||
// see cer.php for exchange rates feature flag.
|
// see cer.php for exchange rates feature flag.
|
||||||
],
|
],
|
||||||
'version' => 'develop/2024-09-28',
|
'version' => 'develop/2024-09-28',
|
||||||
|
Reference in New Issue
Block a user