diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php index 6426e9ce3a..9bb76ab7b4 100644 --- a/app/Repositories/Category/CategoryRepository.php +++ b/app/Repositories/Category/CategoryRepository.php @@ -564,9 +564,17 @@ class CategoryRepository implements CategoryRepositoryInterface $return = []; /** @var Transaction $transaction */ foreach ($set as $transaction) { - $currencyId = $transaction->transaction_currency_id; - $return[$currencyId] = $return[$currencyId] ?? '0'; - $return[$currencyId] = bcadd($return[$currencyId], $transaction->transaction_amount); + $currencyId = $transaction->transaction_currency_id; + if (!isset($return[$currencyId])) { + $return[$currencyId] = [ + 'spent' => '0', + 'currency_id' => $currencyId, + 'currency_symbol' => $transaction->transaction_currency_symbol, + 'currency_code' => $transaction->transaction_currency_code, + 'currency_decimal_places' => $transaction->transaction_currency_dp, + ]; + } + $return[$currencyId]['spent'] = bcadd($return[$currencyId]['spent'], $transaction->transaction_amount); } return $return; @@ -783,4 +791,59 @@ class CategoryRepository implements CategoryRepositoryInterface return null; } + + /** + * A very cryptic method name that means: + * + * Get me the amount earned in this period, grouped per currency, where no category was set. + * + * @param Collection $accounts + * @param Carbon $start + * @param Carbon $end + * + * @return array + */ + public function earnedInPeriodPcWoCategory(Collection $accounts, Carbon $start, Carbon $end): array + { + /** @var TransactionCollectorInterface $collector */ + $collector = app(TransactionCollectorInterface::class); + $collector->setUser($this->user); + $collector->setRange($start, $end)->setTypes([TransactionType::DEPOSIT])->withoutCategory(); + + if ($accounts->count() > 0) { + $collector->setAccounts($accounts); + } + if (0 === $accounts->count()) { + $collector->setAllAssetAccounts(); + } + + $set = $collector->getTransactions(); + $set = $set->filter( + function (Transaction $transaction) { + if (bccomp($transaction->transaction_amount, '0') === 1) { + return $transaction; + } + + return null; + } + ); + + $return = []; + /** @var Transaction $transaction */ + foreach ($set as $transaction) { + $currencyId = $transaction->transaction_currency_id; + if (!isset($return[$currencyId])) { + $return[$currencyId] = [ + 'spent' => '0', + 'currency_id' => $currencyId, + 'currency_symbol' => $transaction->transaction_currency_symbol, + 'currency_code' => $transaction->transaction_currency_code, + 'currency_decimal_places' => $transaction->transaction_currency_dp, + ]; + } + $return[$currencyId]['spent'] = bcadd($return[$currencyId]['spent'], $transaction->transaction_amount); + } + + return $return; + } } diff --git a/app/Repositories/Category/CategoryRepositoryInterface.php b/app/Repositories/Category/CategoryRepositoryInterface.php index d1b1ef42ee..2afe953766 100644 --- a/app/Repositories/Category/CategoryRepositoryInterface.php +++ b/app/Repositories/Category/CategoryRepositoryInterface.php @@ -191,10 +191,23 @@ interface CategoryRepositoryInterface * @param Carbon $start * @param Carbon $end * - * @return string + * @return array */ public function spentInPeriodPcWoCategory(Collection $accounts, Carbon $start, Carbon $end): array; + /** + * A very cryptic method name that means: + * + * Get me the amount earned in this period, grouped per currency, where no category was set. + * + * @param Collection $accounts + * @param Carbon $start + * @param Carbon $end + * + * @return array + */ + public function earnedInPeriodPcWoCategory(Collection $accounts, Carbon $start, Carbon $end): array; + /** * @param Collection $categories * @param Collection $accounts