mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 02:36:28 +00:00 
			
		
		
		
	Expand some multi currency things.
This commit is contained in:
		| @@ -36,6 +36,7 @@ use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; | ||||
| use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; | ||||
| use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; | ||||
| use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; | ||||
| use FireflyIII\Support\Http\Api\ExchangeRateConverter; | ||||
| use FireflyIII\Support\Http\Controllers\DateCalculation; | ||||
| use Illuminate\Contracts\View\Factory; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| @@ -161,6 +162,7 @@ class IndexController extends Controller | ||||
| 
 | ||||
|     private function getAllAvailableBudgets(Carbon $start, Carbon $end): array | ||||
|     { | ||||
|         $converter = new ExchangeRateConverter(); | ||||
|         // get all available budgets.
 | ||||
|         $ab               = $this->abRepository->get($start, $end); | ||||
|         $availableBudgets = []; | ||||
| @@ -175,14 +177,17 @@ class IndexController extends Controller | ||||
|             // spent in period:
 | ||||
|             $spentArr            = $this->opsRepository->sumExpenses($entry->start_date, $entry->end_date, null, null, $entry->transactionCurrency); | ||||
|             $array['spent']      = $spentArr[$entry->transaction_currency_id]['sum'] ?? '0'; | ||||
| 
 | ||||
|             $array['native_spent'] = $this->convertToNative && $entry->transaction_currency_id !== $this->defaultCurrency->id ? $converter->convert($entry->transactionCurrency, $this->defaultCurrency, $entry->start_date, $array['spent']) : null; | ||||
|             // budgeted in period:
 | ||||
|             $budgeted            = $this->blRepository->budgeted($entry->start_date, $entry->end_date, $entry->transactionCurrency); | ||||
|             $array['budgeted']   = $budgeted; | ||||
|             $array['native_budgeted'] = $this->convertToNative && $entry->transaction_currency_id !== $this->defaultCurrency->id ? $converter->convert($entry->transactionCurrency, $this->defaultCurrency, $entry->start_date, $budgeted) : null; | ||||
|             // this time, because of complex sums, use the currency converter.
 | ||||
| 
 | ||||
| 
 | ||||
|             $availableBudgets[]  = $array; | ||||
|             unset($spentArr); | ||||
|         } | ||||
| 
 | ||||
|         return $availableBudgets; | ||||
|     } | ||||
| 
 | ||||
|   | ||||
| @@ -158,21 +158,28 @@ class BudgetController extends Controller | ||||
|         $cache                                  = new CacheProperties(); | ||||
|         $cache->addProperty($start); | ||||
|         $cache->addProperty($end); | ||||
|         $cache->addProperty($this->convertToNative); | ||||
|         $cache->addProperty('chart.budget.budget.limit'); | ||||
|         $cache->addProperty($budgetLimit->id); | ||||
|         $cache->addProperty($budget->id); | ||||
| 
 | ||||
|         if ($cache->has()) { | ||||
|             return response()->json($cache->get()); | ||||
|              return response()->json($cache->get()); | ||||
|         } | ||||
|         $locale                                 = app('steam')->getLocale(); | ||||
|         $entries                                = []; | ||||
|         $amount                                 = $budgetLimit->amount; | ||||
|         $budgetCollection                       = new Collection([$budget]); | ||||
|         $currency                               = $budgetLimit->transactionCurrency; | ||||
|         if($this->convertToNative) { | ||||
|             $amount                                 = $budgetLimit->native_amount; | ||||
|             $currency = $this->defaultCurrency; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         while ($start <= $end) { | ||||
|             $current          = clone $start; | ||||
|             $expenses         = $this->opsRepository->sumExpenses($current, $current, null, $budgetCollection, $currency); | ||||
|             $expenses         = $this->opsRepository->sumExpenses($current, $current, null, $budgetCollection, $budgetLimit->transactionCurrency); | ||||
|             $spent            = $expenses[$currency->id]['sum'] ?? '0'; | ||||
|             $amount           = bcadd($amount, $spent); | ||||
|             $format           = $start->isoFormat((string) trans('config.month_and_day_js', [], $locale)); | ||||
| @@ -182,8 +189,8 @@ class BudgetController extends Controller | ||||
|         } | ||||
|         $data                                   = $this->generator->singleSet((string) trans('firefly.left'), $entries); | ||||
|         // add currency symbol from budget limit:
 | ||||
|         $data['datasets'][0]['currency_symbol'] = $budgetLimit->transactionCurrency->symbol; | ||||
|         $data['datasets'][0]['currency_code']   = $budgetLimit->transactionCurrency->code; | ||||
|         $data['datasets'][0]['currency_symbol'] = $currency->symbol; | ||||
|         $data['datasets'][0]['currency_code']   = $currency->code; | ||||
|         $cache->store($data); | ||||
| 
 | ||||
|         return response()->json($data); | ||||
|   | ||||
| @@ -49,14 +49,13 @@ class JavascriptController extends Controller | ||||
|         $accounts = $repository->getAccountsByType( | ||||
|             [AccountType::DEFAULT, AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD] | ||||
|         ); | ||||
|         $default  = app('amount')->getDefaultCurrency(); | ||||
|         $data     = ['accounts' => []]; | ||||
| 
 | ||||
|         /** @var Account $account */ | ||||
|         foreach ($accounts as $account) { | ||||
|             $accountId                    = $account->id; | ||||
|             $currency                     = (int) $repository->getMetaValue($account, 'currency_id'); | ||||
|             $currency                     = 0 === $currency ? $default->id : $currency; | ||||
|             $currency                     = 0 === $currency ? $this->defaultCurrency->id : $currency; | ||||
|             $entry                        = ['preferredCurrency' => $currency, 'name' => $account->name]; | ||||
|             $data['accounts'][$accountId] = $entry; | ||||
|         } | ||||
| @@ -96,9 +95,9 @@ class JavascriptController extends Controller | ||||
|     public function variables(Request $request, AccountRepositoryInterface $repository): Response | ||||
|     { | ||||
|         $account                   = $repository->find((int) $request->get('account')); | ||||
|         $currency                  = app('amount')->getDefaultCurrency(); | ||||
|         $currency = $this->defaultCurrency; | ||||
|         if (null !== $account) { | ||||
|             $currency = $repository->getAccountCurrency($account) ?? $currency; | ||||
|             $currency = $repository->getAccountCurrency($account) ?? $this->defaultCurrency; | ||||
|         } | ||||
|         $locale                    = app('steam')->getLocale(); | ||||
|         $accounting                = app('amount')->getJsConfig(); | ||||
|   | ||||
| @@ -179,22 +179,26 @@ trait AugumentData | ||||
|         $cache->addProperty($start); | ||||
|         $cache->addProperty($end); | ||||
|         $cache->addProperty($budget->id); | ||||
|         $cache->addProperty($this->convertToNative); | ||||
|         $cache->addProperty('get-limits'); | ||||
| 
 | ||||
|         if ($cache->has()) { | ||||
|             return $cache->get(); | ||||
|              // return $cache->get();
 | ||||
|         } | ||||
| 
 | ||||
|         $set              = $blRepository->getBudgetLimits($budget, $start, $end); | ||||
|         $limits           = new Collection(); | ||||
| 
 | ||||
|         $budgetCollection = new Collection([$budget]); | ||||
| 
 | ||||
|         // merge sets based on a key, in case of convert to native
 | ||||
|         $limits = new Collection(); | ||||
| 
 | ||||
|         /** @var BudgetLimit $entry */ | ||||
|         foreach ($set as $entry) { | ||||
|             $currency     = $entry->transactionCurrency; | ||||
| 
 | ||||
|             if (null === $currency) { | ||||
|                 $currency = app('amount')->getDefaultCurrency(); | ||||
|             if($this->convertToNative) { | ||||
|                 // the sumExpenses method already handles this.
 | ||||
|                 $currency = $this->defaultCurrency; | ||||
|             } | ||||
| 
 | ||||
|             // clone because these objects change each other.
 | ||||
| @@ -214,7 +218,7 @@ trait AugumentData | ||||
|         } | ||||
|         $cache->store($limits); | ||||
| 
 | ||||
|         return $set; | ||||
|         return $limits; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|   | ||||
| @@ -75,11 +75,11 @@ trait PeriodOverview | ||||
|      */ | ||||
|     protected function getAccountPeriodOverview(Account $account, Carbon $start, Carbon $end): array | ||||
|     { | ||||
|         $range         = app('navigation')->getViewRange(true); | ||||
|         $range = app('navigation')->getViewRange(true); | ||||
|         [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; | ||||
| 
 | ||||
|         // properties for cache
 | ||||
|         $cache         = new CacheProperties(); | ||||
|         $cache = new CacheProperties(); | ||||
|         $cache->addProperty($start); | ||||
|         $cache->addProperty($end); | ||||
|         $cache->addProperty('account-show-period-entries'); | ||||
| @@ -89,32 +89,32 @@ trait PeriodOverview | ||||
|         } | ||||
| 
 | ||||
|         /** @var array $dates */ | ||||
|         $dates         = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries       = []; | ||||
|         $dates   = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries = []; | ||||
| 
 | ||||
|         // collect all expenses in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setAccounts(new Collection([$account])); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::DEPOSIT]); | ||||
|         $earnedSet     = $collector->getExtractedJournals(); | ||||
|         $earnedSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // collect all income in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setAccounts(new Collection([$account])); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::WITHDRAWAL]); | ||||
|         $spentSet      = $collector->getExtractedJournals(); | ||||
|         $spentSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // collect all transfers in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setAccounts(new Collection([$account])); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::TRANSFER]); | ||||
|         $transferSet   = $collector->getExtractedJournals(); | ||||
|         $transferSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // loop dates
 | ||||
|         foreach ($dates as $currentDate) { | ||||
| @@ -125,15 +125,15 @@ trait PeriodOverview | ||||
|             $transferredIn   = $this->filterTransferredIn($account, $this->filterJournalsByDate($transferSet, $currentDate['start'], $currentDate['end'])); | ||||
|             $entries[] | ||||
|                              = [ | ||||
|                                  'title'              => $title, | ||||
|                                  'route'              => route('accounts.show', [$account->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), | ||||
|                 'title' => $title, | ||||
|                 'route' => route('accounts.show', [$account->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), | ||||
| 
 | ||||
|                                  'total_transactions' => count($spent) + count($earned) + count($transferredAway) + count($transferredIn), | ||||
|                                  'spent'              => $this->groupByCurrency($spent), | ||||
|                                  'earned'             => $this->groupByCurrency($earned), | ||||
|                                  'transferred_away'   => $this->groupByCurrency($transferredAway), | ||||
|                                  'transferred_in'     => $this->groupByCurrency($transferredIn), | ||||
|                              ]; | ||||
|                 'total_transactions' => count($spent) + count($earned) + count($transferredAway) + count($transferredIn), | ||||
|                 'spent'              => $this->groupByCurrency($spent), | ||||
|                 'earned'             => $this->groupByCurrency($earned), | ||||
|                 'transferred_away'   => $this->groupByCurrency($transferredAway), | ||||
|                 'transferred_in'     => $this->groupByCurrency($transferredIn), | ||||
|             ]; | ||||
|         } | ||||
|         $cache->store($entries); | ||||
| 
 | ||||
| @@ -197,37 +197,44 @@ trait PeriodOverview | ||||
| 
 | ||||
|         /** @var array $journal */ | ||||
|         foreach ($journals as $journal) { | ||||
|             $currencyId                    = (int) $journal['currency_id']; | ||||
|             $foreignCurrencyId             = $journal['foreign_currency_id']; | ||||
|             if (!array_key_exists($currencyId, $return)) { | ||||
|                 $return[$currencyId] = [ | ||||
|                     'amount'                  => '0', | ||||
|                     'count'                   => 0, | ||||
|                     'currency_id'             => $currencyId, | ||||
|                     'currency_name'           => $journal['currency_name'], | ||||
|                     'currency_code'           => $journal['currency_code'], | ||||
|                     'currency_symbol'         => $journal['currency_symbol'], | ||||
|                     'currency_decimal_places' => $journal['currency_decimal_places'], | ||||
|                 ]; | ||||
|             } | ||||
|             $return[$currencyId]['amount'] = bcadd($return[$currencyId]['amount'], $journal['amount'] ?? '0'); | ||||
|             ++$return[$currencyId]['count']; | ||||
|             $currencyId            = (int) $journal['currency_id']; | ||||
|             $currencyCode          = $journal['currency_code']; | ||||
|             $currencyName          = $journal['currency_name']; | ||||
|             $currencySymbol        = $journal['currency_symbol']; | ||||
|             $currencyDecimalPlaces = $journal['currency_decimal_places']; | ||||
|             $foreignCurrencyId     = $journal['foreign_currency_id']; | ||||
|             $amount                = $journal['amount']; | ||||
| 
 | ||||
|             if (null !== $foreignCurrencyId && null !== $journal['foreign_amount']) { | ||||
|                 if (!array_key_exists($foreignCurrencyId, $return)) { | ||||
|                     $return[$foreignCurrencyId] = [ | ||||
|                         'amount'                  => '0', | ||||
|                         'count'                   => 0, | ||||
|                         'currency_id'             => (int) $foreignCurrencyId, | ||||
|                         'currency_name'           => $journal['foreign_currency_name'], | ||||
|                         'currency_code'           => $journal['foreign_currency_code'], | ||||
|                         'currency_symbol'         => $journal['foreign_currency_symbol'], | ||||
|                         'currency_decimal_places' => $journal['foreign_currency_decimal_places'], | ||||
|                     ]; | ||||
|                 } | ||||
|                 ++$return[$foreignCurrencyId]['count']; | ||||
|                 $return[$foreignCurrencyId]['amount'] = bcadd($return[$foreignCurrencyId]['amount'], $journal['foreign_amount']); | ||||
| 
 | ||||
|             if ($this->convertToNative && $currencyId !== $this->defaultCurrency->id && $foreignCurrencyId !== $this->defaultCurrency->id) { | ||||
|                 $amount                = $journal['native_amount']; | ||||
|                 $currencyId            = $this->defaultCurrency->id; | ||||
|                 $currencyCode          = $this->defaultCurrency->code; | ||||
|                 $currencyName          = $this->defaultCurrency->name; | ||||
|                 $currencySymbol        = $this->defaultCurrency->symbol; | ||||
|                 $currencyDecimalPlaces = $this->defaultCurrency->decimal_places; | ||||
|             } | ||||
|             if ($this->convertToNative && $currencyId !== $this->defaultCurrency->id && $foreignCurrencyId === $this->defaultCurrency->id) { | ||||
|                 $currencyId             = (int) $foreignCurrencyId; | ||||
|                 $currencyCode          = $journal['foreign_currency_code']; | ||||
|                 $currencyName          = $journal['foreign_currency_name']; | ||||
|                 $currencySymbol        = $journal['foreign_currency_symbol']; | ||||
|                 $currencyDecimalPlaces = $journal['foreign_currency_decimal_places']; | ||||
|                 $amount                = $journal['foreign_amount']; | ||||
|             } | ||||
|             $return[$currencyId] ??= [ | ||||
|                 'amount'                  => '0', | ||||
|                 'count'                   => 0, | ||||
|                 'currency_id'             => $currencyId, | ||||
|                 'currency_name'           => $currencyName, | ||||
|                 'currency_code'           => $currencyCode, | ||||
|                 'currency_symbol'         => $currencySymbol, | ||||
|                 'currency_decimal_places' => $currencyDecimalPlaces, | ||||
|             ]; | ||||
| 
 | ||||
| 
 | ||||
|             $return[$currencyId]['amount'] = bcadd($return[$currencyId]['amount'], $amount); | ||||
|             ++$return[$currencyId]['count']; | ||||
|         } | ||||
| 
 | ||||
|         return $return; | ||||
| @@ -240,11 +247,11 @@ trait PeriodOverview | ||||
|      */ | ||||
|     protected function getCategoryPeriodOverview(Category $category, Carbon $start, Carbon $end): array | ||||
|     { | ||||
|         $range         = app('navigation')->getViewRange(true); | ||||
|         $range = app('navigation')->getViewRange(true); | ||||
|         [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; | ||||
| 
 | ||||
|         // properties for entries with their amounts.
 | ||||
|         $cache         = new CacheProperties(); | ||||
|         $cache = new CacheProperties(); | ||||
|         $cache->addProperty($start); | ||||
|         $cache->addProperty($end); | ||||
|         $cache->addProperty($range); | ||||
| @@ -256,32 +263,32 @@ trait PeriodOverview | ||||
|         } | ||||
| 
 | ||||
|         /** @var array $dates */ | ||||
|         $dates         = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries       = []; | ||||
|         $dates   = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries = []; | ||||
| 
 | ||||
|         // collect all expenses in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setCategory($category); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::DEPOSIT]); | ||||
|         $earnedSet     = $collector->getExtractedJournals(); | ||||
|         $earnedSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // collect all income in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setCategory($category); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::WITHDRAWAL]); | ||||
|         $spentSet      = $collector->getExtractedJournals(); | ||||
|         $spentSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // collect all transfers in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setCategory($category); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::TRANSFER]); | ||||
|         $transferSet   = $collector->getExtractedJournals(); | ||||
|         $transferSet = $collector->getExtractedJournals(); | ||||
|         foreach ($dates as $currentDate) { | ||||
|             $spent       = $this->filterJournalsByDate($spentSet, $currentDate['start'], $currentDate['end']); | ||||
|             $earned      = $this->filterJournalsByDate($earnedSet, $currentDate['start'], $currentDate['end']); | ||||
| @@ -289,17 +296,17 @@ trait PeriodOverview | ||||
|             $title       = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); | ||||
|             $entries[] | ||||
|                          = [ | ||||
|                              'transactions'       => 0, | ||||
|                              'title'              => $title, | ||||
|                              'route'              => route( | ||||
|                                  'categories.show', | ||||
|                                  [$category->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')] | ||||
|                              ), | ||||
|                              'total_transactions' => count($spent) + count($earned) + count($transferred), | ||||
|                              'spent'              => $this->groupByCurrency($spent), | ||||
|                              'earned'             => $this->groupByCurrency($earned), | ||||
|                              'transferred'        => $this->groupByCurrency($transferred), | ||||
|                          ]; | ||||
|                 'transactions'       => 0, | ||||
|                 'title'              => $title, | ||||
|                 'route'              => route( | ||||
|                     'categories.show', | ||||
|                     [$category->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')] | ||||
|                 ), | ||||
|                 'total_transactions' => count($spent) + count($earned) + count($transferred), | ||||
|                 'spent'              => $this->groupByCurrency($spent), | ||||
|                 'earned'             => $this->groupByCurrency($earned), | ||||
|                 'transferred'        => $this->groupByCurrency($transferred), | ||||
|             ]; | ||||
|         } | ||||
|         $cache->store($entries); | ||||
| 
 | ||||
| @@ -315,42 +322,43 @@ trait PeriodOverview | ||||
|      */ | ||||
|     protected function getNoBudgetPeriodOverview(Carbon $start, Carbon $end): array | ||||
|     { | ||||
|         $range         = app('navigation')->getViewRange(true); | ||||
|         $range = app('navigation')->getViewRange(true); | ||||
| 
 | ||||
|         [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; | ||||
| 
 | ||||
|         $cache         = new CacheProperties(); | ||||
|         $cache = new CacheProperties(); | ||||
|         $cache->addProperty($start); | ||||
|         $cache->addProperty($end); | ||||
|         $cache->addProperty($this->convertToNative); | ||||
|         $cache->addProperty('no-budget-period-entries'); | ||||
| 
 | ||||
|         if ($cache->has()) { | ||||
|             return $cache->get(); | ||||
|             // return $cache->get();
 | ||||
|         } | ||||
| 
 | ||||
|         /** @var array $dates */ | ||||
|         $dates         = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries       = []; | ||||
|         $dates   = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries = []; | ||||
| 
 | ||||
|         // get all expenses without a budget.
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setRange($start, $end)->withoutBudget()->withAccountInformation()->setTypes([TransactionType::WITHDRAWAL]); | ||||
|         $journals      = $collector->getExtractedJournals(); | ||||
|         $journals = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         foreach ($dates as $currentDate) { | ||||
|             $set   = $this->filterJournalsByDate($journals, $currentDate['start'], $currentDate['end']); | ||||
|             $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); | ||||
|             $entries[] | ||||
|                    = [ | ||||
|                        'title'              => $title, | ||||
|                        'route'              => route('budgets.no-budget', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), | ||||
|                        'total_transactions' => count($set), | ||||
|                        'spent'              => $this->groupByCurrency($set), | ||||
|                        'earned'             => [], | ||||
|                        'transferred_away'   => [], | ||||
|                        'transferred_in'     => [], | ||||
|                    ]; | ||||
|                 'title'              => $title, | ||||
|                 'route'              => route('budgets.no-budget', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), | ||||
|                 'total_transactions' => count($set), | ||||
|                 'spent'              => $this->groupByCurrency($set), | ||||
|                 'earned'             => [], | ||||
|                 'transferred_away'   => [], | ||||
|                 'transferred_in'     => [], | ||||
|             ]; | ||||
|         } | ||||
|         $cache->store($entries); | ||||
| 
 | ||||
| @@ -367,38 +375,38 @@ trait PeriodOverview | ||||
|     protected function getNoCategoryPeriodOverview(Carbon $theDate): array | ||||
|     { | ||||
|         app('log')->debug(sprintf('Now in getNoCategoryPeriodOverview(%s)', $theDate->format('Y-m-d'))); | ||||
|         $range       = app('navigation')->getViewRange(true); | ||||
|         $first       = $this->journalRepos->firstNull(); | ||||
|         $start       = null === $first ? new Carbon() : $first->date; | ||||
|         $end         = clone $theDate; | ||||
|         $end         = app('navigation')->endOfPeriod($end, $range); | ||||
|         $range = app('navigation')->getViewRange(true); | ||||
|         $first = $this->journalRepos->firstNull(); | ||||
|         $start = null === $first ? new Carbon() : $first->date; | ||||
|         $end   = clone $theDate; | ||||
|         $end   = app('navigation')->endOfPeriod($end, $range); | ||||
| 
 | ||||
|         app('log')->debug(sprintf('Start for getNoCategoryPeriodOverview() is %s', $start->format('Y-m-d'))); | ||||
|         app('log')->debug(sprintf('End for getNoCategoryPeriodOverview() is %s', $end->format('Y-m-d'))); | ||||
| 
 | ||||
|         // properties for cache
 | ||||
|         $dates       = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries     = []; | ||||
|         $dates   = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries = []; | ||||
| 
 | ||||
|         // collect all expenses in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector   = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->withoutCategory(); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::DEPOSIT]); | ||||
|         $earnedSet   = $collector->getExtractedJournals(); | ||||
|         $earnedSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // collect all income in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector   = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->withoutCategory(); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::WITHDRAWAL]); | ||||
|         $spentSet    = $collector->getExtractedJournals(); | ||||
|         $spentSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // collect all transfers in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector   = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->withoutCategory(); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::TRANSFER]); | ||||
| @@ -412,13 +420,13 @@ trait PeriodOverview | ||||
|             $title       = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); | ||||
|             $entries[] | ||||
|                          = [ | ||||
|                              'title'              => $title, | ||||
|                              'route'              => route('categories.no-category', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), | ||||
|                              'total_transactions' => count($spent) + count($earned) + count($transferred), | ||||
|                              'spent'              => $this->groupByCurrency($spent), | ||||
|                              'earned'             => $this->groupByCurrency($earned), | ||||
|                              'transferred'        => $this->groupByCurrency($transferred), | ||||
|                          ]; | ||||
|                 'title'              => $title, | ||||
|                 'route'              => route('categories.no-category', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), | ||||
|                 'total_transactions' => count($spent) + count($earned) + count($transferred), | ||||
|                 'spent'              => $this->groupByCurrency($spent), | ||||
|                 'earned'             => $this->groupByCurrency($earned), | ||||
|                 'transferred'        => $this->groupByCurrency($transferred), | ||||
|             ]; | ||||
|         } | ||||
|         app('log')->debug('End of loops'); | ||||
| 
 | ||||
| @@ -432,11 +440,11 @@ trait PeriodOverview | ||||
|      */ | ||||
|     protected function getTagPeriodOverview(Tag $tag, Carbon $start, Carbon $end): array // period overview for tags.
 | ||||
|     { | ||||
|         $range         = app('navigation')->getViewRange(true); | ||||
|         $range = app('navigation')->getViewRange(true); | ||||
|         [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; | ||||
| 
 | ||||
|         // properties for cache
 | ||||
|         $cache         = new CacheProperties(); | ||||
|         $cache = new CacheProperties(); | ||||
|         $cache->addProperty($start); | ||||
|         $cache->addProperty($end); | ||||
|         $cache->addProperty('tag-period-entries'); | ||||
| @@ -446,37 +454,37 @@ trait PeriodOverview | ||||
|         } | ||||
| 
 | ||||
|         /** @var array $dates */ | ||||
|         $dates         = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries       = []; | ||||
|         $dates   = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries = []; | ||||
| 
 | ||||
|         // collect all expenses in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setTag($tag); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::DEPOSIT]); | ||||
|         $earnedSet     = $collector->getExtractedJournals(); | ||||
|         $earnedSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // collect all income in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setTag($tag); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::WITHDRAWAL]); | ||||
|         $spentSet      = $collector->getExtractedJournals(); | ||||
|         $spentSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // collect all transfers in this period:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setTag($tag); | ||||
|         $collector->setRange($start, $end); | ||||
|         $collector->setTypes([TransactionType::TRANSFER]); | ||||
|         $transferSet   = $collector->getExtractedJournals(); | ||||
|         $transferSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         // filer all of them:
 | ||||
|         $earnedSet     = $this->filterJournalsByTag($earnedSet, $tag); | ||||
|         $spentSet      = $this->filterJournalsByTag($spentSet, $tag); | ||||
|         $transferSet   = $this->filterJournalsByTag($transferSet, $tag); | ||||
|         $earnedSet   = $this->filterJournalsByTag($earnedSet, $tag); | ||||
|         $spentSet    = $this->filterJournalsByTag($spentSet, $tag); | ||||
|         $transferSet = $this->filterJournalsByTag($transferSet, $tag); | ||||
| 
 | ||||
|         foreach ($dates as $currentDate) { | ||||
|             $spent       = $this->filterJournalsByDate($spentSet, $currentDate['start'], $currentDate['end']); | ||||
| @@ -485,17 +493,17 @@ trait PeriodOverview | ||||
|             $title       = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); | ||||
|             $entries[] | ||||
|                          = [ | ||||
|                              'transactions'       => 0, | ||||
|                              'title'              => $title, | ||||
|                              'route'              => route( | ||||
|                                  'tags.show', | ||||
|                                  [$tag->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')] | ||||
|                              ), | ||||
|                              'total_transactions' => count($spent) + count($earned) + count($transferred), | ||||
|                              'spent'              => $this->groupByCurrency($spent), | ||||
|                              'earned'             => $this->groupByCurrency($earned), | ||||
|                              'transferred'        => $this->groupByCurrency($transferred), | ||||
|                          ]; | ||||
|                 'transactions'       => 0, | ||||
|                 'title'              => $title, | ||||
|                 'route'              => route( | ||||
|                     'tags.show', | ||||
|                     [$tag->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')] | ||||
|                 ), | ||||
|                 'total_transactions' => count($spent) + count($earned) + count($transferred), | ||||
|                 'spent'              => $this->groupByCurrency($spent), | ||||
|                 'earned'             => $this->groupByCurrency($earned), | ||||
|                 'transferred'        => $this->groupByCurrency($transferred), | ||||
|             ]; | ||||
|         } | ||||
| 
 | ||||
|         return $entries; | ||||
| @@ -505,7 +513,7 @@ trait PeriodOverview | ||||
|     { | ||||
|         $return = []; | ||||
|         foreach ($set as $entry) { | ||||
|             $found    = false; | ||||
|             $found = false; | ||||
| 
 | ||||
|             /** @var array $localTag */ | ||||
|             foreach ($entry['tags'] as $localTag) { | ||||
| @@ -527,12 +535,12 @@ trait PeriodOverview | ||||
|      */ | ||||
|     protected function getTransactionPeriodOverview(string $transactionType, Carbon $start, Carbon $end): array | ||||
|     { | ||||
|         $range         = app('navigation')->getViewRange(true); | ||||
|         $types         = config(sprintf('firefly.transactionTypesByType.%s', $transactionType)); | ||||
|         $range = app('navigation')->getViewRange(true); | ||||
|         $types = config(sprintf('firefly.transactionTypesByType.%s', $transactionType)); | ||||
|         [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; | ||||
| 
 | ||||
|         // properties for cache
 | ||||
|         $cache         = new CacheProperties(); | ||||
|         $cache = new CacheProperties(); | ||||
|         $cache->addProperty($start); | ||||
|         $cache->addProperty($end); | ||||
|         $cache->addProperty('transactions-period-entries'); | ||||
| @@ -542,13 +550,13 @@ trait PeriodOverview | ||||
|         } | ||||
| 
 | ||||
|         /** @var array $dates */ | ||||
|         $dates         = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries       = []; | ||||
|         $dates   = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries = []; | ||||
| 
 | ||||
|         // collect all journals in this period (regardless of type)
 | ||||
|         $collector     = app(GroupCollectorInterface::class); | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes($types)->setRange($start, $end); | ||||
|         $genericSet    = $collector->getExtractedJournals(); | ||||
|         $genericSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         foreach ($dates as $currentDate) { | ||||
|             $spent       = []; | ||||
| @@ -567,14 +575,14 @@ trait PeriodOverview | ||||
|                 $transferred = $this->filterJournalsByDate($genericSet, $currentDate['start'], $currentDate['end']); | ||||
|             } | ||||
|             $entries[] | ||||
|                          = [ | ||||
|                              'title'              => $title, | ||||
|                              'route'              => route('transactions.index', [$transactionType, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), | ||||
|                              'total_transactions' => count($spent) + count($earned) + count($transferred), | ||||
|                              'spent'              => $this->groupByCurrency($spent), | ||||
|                              'earned'             => $this->groupByCurrency($earned), | ||||
|                              'transferred'        => $this->groupByCurrency($transferred), | ||||
|                          ]; | ||||
|                 = [ | ||||
|                 'title'              => $title, | ||||
|                 'route'              => route('transactions.index', [$transactionType, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), | ||||
|                 'total_transactions' => count($spent) + count($earned) + count($transferred), | ||||
|                 'spent'              => $this->groupByCurrency($spent), | ||||
|                 'earned'             => $this->groupByCurrency($earned), | ||||
|                 'transferred'        => $this->groupByCurrency($transferred), | ||||
|             ]; | ||||
|         } | ||||
| 
 | ||||
|         return $entries; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user