diff --git a/app/Api/V1/Controllers/Chart/BudgetController.php b/app/Api/V1/Controllers/Chart/BudgetController.php index 77bddb9593..7035ffe65d 100644 --- a/app/Api/V1/Controllers/Chart/BudgetController.php +++ b/app/Api/V1/Controllers/Chart/BudgetController.php @@ -277,30 +277,31 @@ class BudgetController extends Controller private function filterLimit(int $currencyId, Collection $limits): ?BudgetLimit { - $amount = '0'; - $limit = null; - $converter = new ExchangeRateConverter(); + $amount = '0'; + $limit = null; + $converter = new ExchangeRateConverter(); + /** @var BudgetLimit $current */ foreach ($limits as $current) { - if(true === $this->convertToNative) { - if($current->transaction_currency_id === $this->nativeCurrency->id) { + if (true === $this->convertToNative) { + if ($current->transaction_currency_id === $this->nativeCurrency->id) { // simply add it. $amount = bcadd($amount, (string)$current->amount); - Log::debug(sprintf('Set amount in limit to %s' , $amount)); + Log::debug(sprintf('Set amount in limit to %s', $amount)); } - if($current->transaction_currency_id !== $this->nativeCurrency->id) { + if ($current->transaction_currency_id !== $this->nativeCurrency->id) { // convert and then add it. - $converted = $converter->convert($current->transactionCurrency,$this->nativeCurrency, $limit->start_date, $limit->amount); - $amount = bcadd($amount, $converted); + $converted = $converter->convert($current->transactionCurrency, $this->nativeCurrency, $limit->start_date, $limit->amount); + $amount = bcadd($amount, $converted); Log::debug(sprintf('Budgeted in limit #%d: %s %s, converted to %s %s', $current->id, $current->transactionCurrency->code, $current->amount, $this->nativeCurrency->code, $converted)); Log::debug(sprintf('Set amount in limit to %s', $amount)); } } if ($current->transaction_currency_id === $currencyId) { - $limit = $current; + $limit = $current; } } - if(null !== $limit && true === $this->convertToNative) { + if (null !== $limit && true === $this->convertToNative) { // convert and add all amounts. $limit->amount = app('steam')->positive($amount); Log::debug(sprintf('Final amount in limit with converted amount %s', $limit->amount)); diff --git a/app/Api/V1/Controllers/Chart/CategoryController.php b/app/Api/V1/Controllers/Chart/CategoryController.php index b70383e947..874cad31f1 100644 --- a/app/Api/V1/Controllers/Chart/CategoryController.php +++ b/app/Api/V1/Controllers/Chart/CategoryController.php @@ -80,7 +80,7 @@ class CategoryController extends Controller public function dashboard(DateRequest $request): JsonResponse { /** @var Carbon $start */ - $start = $this->parameters->get('start'); + $start = $this->parameters->get('start'); /** @var Carbon $end */ $end = $this->parameters->get('end'); @@ -91,11 +91,11 @@ class CategoryController extends Controller // get journals for entire period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->withAccountInformation(); $collector->setXorAccounts($accounts)->withCategoryInformation(); - $collector->setTypes([TransactionTypeEnum::WITHDRAWAL->value, TransactionTypeEnum::RECONCILIATION->value]); - $journals = $collector->getExtractedJournals(); + $collector->setTypes([TransactionTypeEnum::WITHDRAWAL->value, TransactionTypeEnum::RECONCILIATION->value]); + $journals = $collector->getExtractedJournals(); /** @var array $journal */ foreach ($journals as $journal) { @@ -117,14 +117,14 @@ class CategoryController extends Controller $currencyCode = (string)$this->nativeCurrency->code; $currencySymbol = (string)$this->nativeCurrency->symbol; $currencyDecimalPlaces = (int)$this->nativeCurrency->decimal_places; - $convertedAmount = $converter->convert($currency, $this->nativeCurrency, $journal['date'], $amount); + $convertedAmount = $converter->convert($currency, $this->nativeCurrency, $journal['date'], $amount); Log::debug(sprintf('Converted %s %s to %s %s', $journal['currency_code'], $amount, $this->nativeCurrency->code, $convertedAmount)); - $amount = $convertedAmount; + $amount = $convertedAmount; } - $categoryName = $journal['category_name'] ?? (string)trans('firefly.no_category'); - $key = sprintf('%s-%s', $categoryName, $currencyCode); + $categoryName = $journal['category_name'] ?? (string)trans('firefly.no_category'); + $key = sprintf('%s-%s', $categoryName, $currencyCode); // create arrays $return[$key] ??= [ 'label' => $categoryName, @@ -140,12 +140,12 @@ class CategoryController extends Controller ]; // add monies - $return[$key]['amount'] = bcadd($return[$key]['amount'], (string)$amount); + $return[$key]['amount'] = bcadd($return[$key]['amount'], (string)$amount); } - $return = array_values($return); + $return = array_values($return); // order by amount - usort($return, static fn(array $a, array $b) => (float)$a['amount'] < (float)$b['amount'] ? 1 : -1); + usort($return, static fn (array $a, array $b) => (float)$a['amount'] < (float)$b['amount'] ? 1 : -1); return response()->json($this->clean($return)); } diff --git a/app/Repositories/Budget/OperationsRepository.php b/app/Repositories/Budget/OperationsRepository.php index 7201ee93e5..cc4f5b654b 100644 --- a/app/Repositories/Budget/OperationsRepository.php +++ b/app/Repositories/Budget/OperationsRepository.php @@ -65,7 +65,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn ++$count; app('log')->debug(sprintf('Found %d budget limits. Per day is %s, total is %s', $count, $perDay, $total)); } - $avg = $total; + $avg = $total; if ($count > 0) { $avg = bcdiv($total, (string)$count); } @@ -86,21 +86,21 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn // get all transactions: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts($accounts)->setRange($start, $end); $collector->setBudgets($budgets); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); // loop transactions: /** @var array $journal */ foreach ($journals as $journal) { // prep data array for currency: - $budgetId = (int)$journal['budget_id']; - $budgetName = $journal['budget_name']; - $currencyId = (int)$journal['currency_id']; - $key = sprintf('%d-%d', $budgetId, $currencyId); + $budgetId = (int)$journal['budget_id']; + $budgetName = $journal['budget_name']; + $currencyId = (int)$journal['currency_id']; + $key = sprintf('%d-%d', $budgetId, $currencyId); - $data[$key] ??= [ + $data[$key] ??= [ 'id' => $budgetId, 'name' => sprintf('%s (%s)', $budgetName, $journal['currency_name']), 'sum' => '0', @@ -126,7 +126,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn public function listExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $budgets = null): array { /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end)->setTypes([TransactionTypeEnum::WITHDRAWAL->value]); if ($accounts instanceof Collection && $accounts->count() > 0) { $collector->setAccounts($accounts); @@ -138,8 +138,8 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn $collector->setBudgets($this->getBudgets()); } $collector->withBudgetInformation()->withAccountInformation()->withCategoryInformation(); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; // if needs conversion to native. $convertToNative = Amount::convertToNative($this->user); @@ -149,14 +149,14 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn $currencyName = $nativeCurrency->name; $currencySymbol = $nativeCurrency->symbol; $currencyDecimalPlaces = $nativeCurrency->decimal_places; - $converter = new ExchangeRateConverter(); - $currencies = [ + $converter = new ExchangeRateConverter(); + $currencies = [ $currencyId => $nativeCurrency, ]; foreach ($journals as $journal) { - $amount = app('steam')->negative($journal['amount']); - $journalCurrencyId = (int)$journal['currency_id']; + $amount = app('steam')->negative($journal['amount']); + $journalCurrencyId = (int)$journal['currency_id']; if (false === $convertToNative) { $currencyId = $journalCurrencyId; $currencyName = $journal['currency_name']; @@ -164,13 +164,13 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn $currencyCode = $journal['currency_code']; $currencyDecimalPlaces = $journal['currency_decimal_places']; } - if(true === $convertToNative && $journalCurrencyId !== $currencyId) { - $currencies[$journalCurrencyId]??= TransactionCurrency::find($journalCurrencyId); - $amount = $converter->convert($currencies[$journalCurrencyId], $nativeCurrency, $journal['date'], $amount); + if (true === $convertToNative && $journalCurrencyId !== $currencyId) { + $currencies[$journalCurrencyId] ??= TransactionCurrency::find($journalCurrencyId); + $amount = $converter->convert($currencies[$journalCurrencyId], $nativeCurrency, $journal['date'], $amount); } - $budgetId = (int)$journal['budget_id']; - $budgetName = (string)$journal['budget_name']; + $budgetId = (int)$journal['budget_id']; + $budgetName = (string)$journal['budget_name']; // catch "no budget" entries. if (0 === $budgetId) { @@ -178,7 +178,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn } // info about the currency: - $array[$currencyId] ??= [ + $array[$currencyId] ??= [ 'budgets' => [], 'currency_id' => $currencyId, 'currency_name' => $currencyName, @@ -231,8 +231,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn ?Collection $budgets = null, ?TransactionCurrency $currency = null, bool $convertToNative = false - ): array - { + ): array { Log::debug(sprintf('Start of %s(date, date, array, array, "%s", %s).', __METHOD__, $currency?->code, var_export($convertToNative, true))); // this collector excludes all transfers TO liabilities (which are also withdrawals) // because those expenses only become expenses once they move from the liability to the friend. @@ -240,8 +239,8 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn $repository = app(AccountRepositoryInterface::class); $repository->setUser($this->user); - $subset = $repository->getAccountsByType(config('firefly.valid_liabilities')); - $selection = new Collection(); + $subset = $repository->getAccountsByType(config('firefly.valid_liabilities')); + $selection = new Collection(); /** @var Account $account */ foreach ($subset as $account) { @@ -251,11 +250,12 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn } /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user) - ->setRange($start, $end) + ->setRange($start, $end) // ->excludeDestinationAccounts($selection) - ->setTypes([TransactionTypeEnum::WITHDRAWAL->value]); + ->setTypes([TransactionTypeEnum::WITHDRAWAL->value]) + ; if ($accounts instanceof Collection) { $collector->setAccounts($accounts); @@ -270,7 +270,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn if ($budgets->count() > 0) { $collector->setBudgets($budgets); } - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); // same but for transactions in the foreign currency: if ($currency instanceof TransactionCurrency) { diff --git a/config/firefly.php b/config/firefly.php index a1a1cce666..0c0ef9d451 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -79,7 +79,7 @@ return [ // see cer.php for exchange rates feature flag. ], 'version' => 'develop/2025-07-30', - 'build_time' => 1753858473, + 'build_time' => 1753878970, 'api_version' => '2.1.0', // field is no longer used. 'db_version' => 26,