diff --git a/app/Http/Controllers/Account/IndexController.php b/app/Http/Controllers/Account/IndexController.php index 7ca768cafa..72d26d1b57 100644 --- a/app/Http/Controllers/Account/IndexController.php +++ b/app/Http/Controllers/Account/IndexController.php @@ -154,6 +154,7 @@ class IndexController extends Controller $startBalances = app('steam')->finalAccountsBalance($accounts, $start); $endBalances = app('steam')->finalAccountsBalance($accounts, $end); $activities = app('steam')->getLastActivities($ids); + $accounts->each( function (Account $account) use ($activities, $startBalances, $endBalances): void { $interest = (string) $this->repository->getMetaValue($account, 'interest'); diff --git a/app/Http/Controllers/Chart/AccountController.php b/app/Http/Controllers/Chart/AccountController.php index b48438aa10..385dcb3eb5 100644 --- a/app/Http/Controllers/Chart/AccountController.php +++ b/app/Http/Controllers/Chart/AccountController.php @@ -89,14 +89,13 @@ class AccountController extends Controller /** @var Carbon $end */ $end = clone session('end', today(config('app.timezone'))->endOfMonth()); - $convertToNative = app('preferences')->get('convert_to_native', false)->data; $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); - $cache->addProperty($convertToNative); + $cache->addProperty($this->convertToNative); $cache->addProperty('chart.account.expense-accounts'); if ($cache->has()) { - // return response()->json($cache->get()); + return response()->json($cache->get()); } $start->subDay(); @@ -127,16 +126,16 @@ class AccountController extends Controller * @var string $endBalance */ foreach ($expenses as $key => $endBalance) { - if(!$convertToNative && 'native_balance' === $key) { + if(!$this->convertToNative && 'native_balance' === $key) { Log::debug(sprintf('[a] Will skip expense array "%s"', $key)); continue; } - if($convertToNative && 'native_balance' !== $key) { + if($this->convertToNative && 'native_balance' !== $key) { Log::debug(sprintf('[b] Will skip expense array "%s"', $key)); continue; } Log::debug(sprintf('Will process expense array "%s" with amount %s', $key, $endBalance)); - $searchCode = $convertToNative ? $default->code: $key; + $searchCode = $this->convertToNative ? $default->code: $key; Log::debug(sprintf('Search code is %s', $searchCode)); // see if there is an accompanying start amount. // grab the difference and find the currency. @@ -518,13 +517,12 @@ class AccountController extends Controller /** @var Carbon $end */ $end = clone session('end', today(config('app.timezone'))->endOfMonth()); $cache = new CacheProperties(); - $convertToNative = app('preferences')->get('convert_to_native', false)->data; $cache->addProperty($start); $cache->addProperty($end); - $cache->addProperty($convertToNative); + $cache->addProperty($this->convertToNative); $cache->addProperty('chart.account.revenue-accounts'); if ($cache->has()) { - // return response()->json($cache->get()); + return response()->json($cache->get()); } $start->subDay(); @@ -556,16 +554,16 @@ class AccountController extends Controller * @var string $endBalance */ foreach ($expenses as $key => $endBalance) { - if(!$convertToNative && 'native_balance' === $key) { + if(!$this->convertToNative && 'native_balance' === $key) { Log::debug(sprintf('[a] Will skip expense array "%s"', $key)); continue; } - if($convertToNative && 'native_balance' !== $key) { + if($this->convertToNative && 'native_balance' !== $key) { Log::debug(sprintf('[b] Will skip expense array "%s"', $key)); continue; } Log::debug(sprintf('Will process expense array "%s" with amount %s', $key, $endBalance)); - $searchCode = $convertToNative ? $default->code: $key; + $searchCode = $this->convertToNative ? $default->code: $key; Log::debug(sprintf('Search code is %s', $searchCode)); // see if there is an accompanying start amount. // grab the difference and find the currency. diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index 06f7042592..ff45fe7a6a 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -378,12 +378,11 @@ class BudgetController extends Controller { $start = session('start', today(config('app.timezone'))->startOfMonth()); $end = session('end', today(config('app.timezone'))->endOfMonth()); - $convertToNative = app('preferences')->get('convert_to_native', false)->data; // chart properties for cache: $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); - $cache->addProperty($convertToNative); + $cache->addProperty($this->convertToNative); $cache->addProperty('chart.budget.frontpage'); if ($cache->has()) { // return response()->json($cache->get()); @@ -393,7 +392,7 @@ class BudgetController extends Controller $chartGenerator->setUser(auth()->user()); $chartGenerator->setStart($start); $chartGenerator->setEnd($end); - $chartGenerator->convertToNative = $convertToNative; + $chartGenerator->convertToNative = $this->convertToNative; $chartGenerator->default = Amount::getDefaultCurrency(); $chartData = $chartGenerator->generate(); diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index 3600090e84..f4f6958dd9 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -106,12 +106,11 @@ class CategoryController extends Controller { $start = session('start', today(config('app.timezone'))->startOfMonth()); $end = session('end', today(config('app.timezone'))->endOfMonth()); - $convertToNative = app('preferences')->get('convert_to_native', false)->data; // chart properties for cache: $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); - $cache->addProperty($convertToNative); + $cache->addProperty($this->convertToNative); $cache->addProperty('chart.category.frontpage'); if ($cache->has()) { // return response()->json($cache->get()); diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 85bf05ea07..f2e42d114e 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -52,6 +52,7 @@ abstract class Controller extends BaseController protected string $dateTimeFormat; protected string $monthAndDayFormat; + protected bool $convertToNative = false; protected string $monthFormat; protected string $redirectUrl = '/'; @@ -116,12 +117,12 @@ abstract class Controller extends BaseController $language = Steam::getLanguage(); $locale = Steam::getLocale(); $darkMode = app('preferences')->get('darkMode', 'browser')->data; - $convertToNative =app('preferences')->get('convert_to_native', false)->data; + $this->convertToNative =app('preferences')->get('convert_to_native', false)->data; $page = $this->getPageName(); $shownDemo = $this->hasSeenDemo(); View::share('language', $language); View::share('locale', $locale); - View::share('convertToNative', $convertToNative); + View::share('convertToNative', $this->convertToNative); View::share('shownDemo', $shownDemo); View::share('current_route_name', $page); View::share('original_route_name', Route::currentRouteName()); diff --git a/app/Http/Controllers/Json/BoxController.php b/app/Http/Controllers/Json/BoxController.php index 58f91c3060..bfcf049956 100644 --- a/app/Http/Controllers/Json/BoxController.php +++ b/app/Http/Controllers/Json/BoxController.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Json; use Carbon\Carbon; +use FireflyIII\Enums\TransactionTypeEnum; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Helpers\Report\NetWorthInterface; use FireflyIII\Http\Controllers\Controller; @@ -65,14 +66,13 @@ class BoxController extends Controller /** @var Carbon $end */ $end = session('end', today(config('app.timezone'))->endOfMonth()); - $convertToNative = app('preferences')->get('convert_to_native', false)->data; $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); - $cache->addProperty($convertToNative); + $cache->addProperty($this->convertToNative); $cache->addProperty('box-balance'); if ($cache->has()) { - // return response()->json($cache->get()); + return response()->json($cache->get()); } // prep some arrays: $incomes = []; @@ -90,7 +90,7 @@ class BoxController extends Controller /** @var array $journal */ foreach ($set as $journal) { - $currencyId = $convertToNative ? $currency->id : (int) $journal['currency_id']; + $currencyId = $this->convertToNative ? $currency->id : (int) $journal['currency_id']; $amount = Amount::getAmountFromJournal($journal); $incomes[$currencyId] ??= '0'; $incomes[$currencyId] = bcadd($incomes[$currencyId], app('steam')->positive($amount)); @@ -102,12 +102,12 @@ class BoxController extends Controller /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end) - ->setTypes([TransactionType::WITHDRAWAL]); + ->setTypes([TransactionTypeEnum::WITHDRAWAL->value]); $set = $collector->getExtractedJournals(); /** @var array $journal */ foreach ($set as $journal) { - $currencyId = $convertToNative ? $currency->id : (int) $journal['currency_id']; + $currencyId = $this->convertToNative ? $currency->id : (int) $journal['currency_id']; $amount = Amount::getAmountFromJournal($journal); $expenses[$currencyId] ??= '0'; $expenses[$currencyId] = bcadd($expenses[$currencyId], $amount); diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index ae85a0cb5c..290e60ea86 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -103,7 +103,7 @@ class PreferencesController extends Controller $darkMode = app('preferences')->get('darkMode', 'browser')->data; $customFiscalYear = app('preferences')->get('customFiscalYear', 0)->data; $fiscalYearStartStr = app('preferences')->get('fiscalYearStart', '01-01')->data; - $convertToNative = app('preferences')->get('convert_to_native', false)->data; + $convertToNative = $this->convertToNative; if (is_array($fiscalYearStartStr)) { $fiscalYearStartStr = '01-01'; } diff --git a/app/Support/Http/Controllers/BasicDataSupport.php b/app/Support/Http/Controllers/BasicDataSupport.php index bbd35dad87..ccaba3aeb8 100644 --- a/app/Support/Http/Controllers/BasicDataSupport.php +++ b/app/Support/Http/Controllers/BasicDataSupport.php @@ -38,7 +38,8 @@ trait BasicDataSupport */ protected function isInArray(array $array, int $entryId) { - return $array[$entryId]['balance'] ?? '0'; + $key = $this->convertToNative ? 'native_balance' : 'balance'; + return $array[$entryId][$key] ?? '0'; } /** diff --git a/app/Support/Steam.php b/app/Support/Steam.php index c136007c53..d50ba94bf2 100644 --- a/app/Support/Steam.php +++ b/app/Support/Steam.php @@ -282,12 +282,6 @@ class Steam $accountCurrency = $this->getAccountCurrency($account); $hasCurrency = null !== $accountCurrency; $currency = $hasCurrency ? $accountCurrency : $native; - if (!$hasCurrency) { - //Log::debug('Pretend native currency is fake, because account has no currency.'); - // fake currency - //$native = new TransactionCurrency(); - } - //unset($accountCurrency); $return = []; // first, the "balance", as described earlier. @@ -336,10 +330,16 @@ class Steam Log::debug('All balances are (joined)', $others); // if the account has no own currency preference, drop balance in favor of native balance if ($hasCurrency && !$convertToNative) { - $return['balance'] = $others[$currency->code] ?? null; - $return['native_balance'] = $others[$currency->code] ?? null; + $return['balance'] = $others[$currency->code] ?? '0'; + $return['native_balance'] = $others[$currency->code] ?? '0'; Log::debug(sprintf('Set balance + native_balance to %s', $return['balance'])); } + + // if the currency is the same as the native currency, set the native_balance to the balance for consistency. + if($currency->id === $native->id) { + $return['native_balance'] = $return['balance']; + } + if (!$hasCurrency) { Log::debug('Account has no currency preference, dropping balance in favor of native balance.'); $sum = bcadd($return['balance'], $return['native_balance']);