diff --git a/app/Helpers/Collector/GroupCollector.php b/app/Helpers/Collector/GroupCollector.php index f96a25f33a..ee35686a91 100644 --- a/app/Helpers/Collector/GroupCollector.php +++ b/app/Helpers/Collector/GroupCollector.php @@ -46,8 +46,6 @@ use Log; */ class GroupCollector implements GroupCollectorInterface { - /** @var array The accounts to filter on. Asset accounts or liabilities. */ - private $accountIds; /** @var array The standard fields to select. */ private $fields; /** @var bool Will be set to true if query result contains account information. (see function withAccountInformation). */ @@ -86,8 +84,6 @@ class GroupCollector implements GroupCollectorInterface $this->hasJoinedTagTables = false; $this->total = 0; - $this->limit = 50; - $this->page = 1; $this->fields = [ # group 'transaction_groups.id as transaction_group_id', @@ -157,10 +153,14 @@ class GroupCollector implements GroupCollectorInterface $collection = $this->parseArray($result); $this->total = $collection->count(); - // now filter the array according to the page and the + // now filter the array according to the page and the limit (if necessary) + if (null !== $this->limit && null !== $this->page) { $offset = ($this->page-1) * $this->limit; return $collection->slice($offset, $this->limit); + } + + return $collection; } @@ -182,7 +182,6 @@ class GroupCollector implements GroupCollectorInterface } ); app('log')->debug(sprintf('GroupCollector: setAccounts: %s', implode(', ', $accountIds))); - $this->accountIds = $accountIds; } return $this; @@ -202,7 +201,6 @@ class GroupCollector implements GroupCollectorInterface $this->query->whereIn('source.account_id', $accountIds); app('log')->debug(sprintf('GroupCollector: setSourceAccounts: %s', implode(', ', $accountIds))); - $this->accountIds = $accountIds; } return $this; @@ -222,7 +220,6 @@ class GroupCollector implements GroupCollectorInterface $this->query->whereIn('destination.account_id', $accountIds); app('log')->debug(sprintf('GroupCollector: setSourceAccounts: %s', implode(', ', $accountIds))); - $this->accountIds = $accountIds; } return $this; @@ -847,6 +844,7 @@ class GroupCollector implements GroupCollectorInterface /** @var TransactionGroup $augmentedGroup */ foreach ($collection as $augmentedGroup) { $groupId = $augmentedGroup->transaction_group_id; + if (!isset($groups[$groupId])) { // make new array $parsedGroup = $this->parseAugmentedGroup($augmentedGroup); @@ -877,7 +875,9 @@ class GroupCollector implements GroupCollectorInterface $groups[$groupId]['transactions'][$journalId] = $this->parseAugmentedGroup($augmentedGroup); } + } + $groups = $this->parseSums($groups); return new Collection($groups); @@ -1065,7 +1065,6 @@ class GroupCollector implements GroupCollectorInterface $this->query->whereNotIn('source.account_id', $accountIds); app('log')->debug(sprintf('GroupCollector: excludeSourceAccounts: %s', implode(', ', $accountIds))); - $this->accountIds = $accountIds; } return $this; @@ -1085,7 +1084,6 @@ class GroupCollector implements GroupCollectorInterface $this->query->whereNotIn('destination.account_id', $accountIds); app('log')->debug(sprintf('GroupCollector: excludeDestinationAccounts: %s', implode(', ', $accountIds))); - $this->accountIds = $accountIds; } return $this; diff --git a/app/Http/Controllers/Chart/ReportController.php b/app/Http/Controllers/Chart/ReportController.php index 280220fa50..1daa4ea023 100644 --- a/app/Http/Controllers/Chart/ReportController.php +++ b/app/Http/Controllers/Chart/ReportController.php @@ -224,7 +224,7 @@ class ReportController extends Controller 'count_spent' => 0, ]; foreach ($source['earned'] as $amount) { - $amount = bcmul($amount,'-1'); + $amount = bcmul($amount, '-1'); $numbers['sum_earned'] = bcadd($amount, $numbers['sum_earned']); ++$numbers['count_earned']; } diff --git a/app/Repositories/Account/AccountTasker.php b/app/Repositories/Account/AccountTasker.php index 99ef2f8adb..81664d9802 100644 --- a/app/Repositories/Account/AccountTasker.php +++ b/app/Repositories/Account/AccountTasker.php @@ -143,6 +143,7 @@ class AccountTasker implements AccountTaskerInterface $collector->excludeDestinationAccounts($accounts); $collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])->withAccountInformation(); $journals = $collector->getExtractedJournals(); + $report = $this->groupExpenseByDestination($journals); // TODO sorting @@ -220,9 +221,8 @@ class AccountTasker implements AccountTaskerInterface $sourceId = (int)$journal['destination_account_id']; $currencyId = (int)$journal['currency_id']; $key = sprintf('%s-%s', $sourceId, $currencyId); - if (!isset($report['accounts'][$key])) { - $currencies[$currencyId] = $currencies[$currencyId] ?? $currencyRepos->findNull($currencyId); - $report['accounts'][$key] = [ + $currencies[$currencyId] = $currencies[$currencyId] ?? $currencyRepos->findNull($currencyId); + $report['accounts'][$key] = $report['accounts'][$key] ?? [ 'id' => $sourceId, 'name' => $journal['destination_account_name'], 'sum' => '0', @@ -234,8 +234,10 @@ class AccountTasker implements AccountTaskerInterface 'currency_code' => $currencies[$currencyId]->code, 'currency_decimal_places' => $currencies[$currencyId]->decimal_places, ]; - } $report['accounts'][$key]['sum'] = bcadd($report['accounts'][$key]['sum'], $journal['amount']); + + Log::debug(sprintf('Sum for %s is now %s', $journal['destination_account_name'], $report['accounts'][$key]['sum'])); + ++$report['accounts'][$key]['count']; } diff --git a/app/Support/Http/Controllers/ChartGeneration.php b/app/Support/Http/Controllers/ChartGeneration.php index 5a22354a26..f6e66fee9c 100644 --- a/app/Support/Http/Controllers/ChartGeneration.php +++ b/app/Support/Http/Controllers/ChartGeneration.php @@ -113,8 +113,6 @@ trait ChartGeneration * @param Carbon $end * * @return array - * - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ protected function getChartData(Collection $accounts, Carbon $start, Carbon $end): array // chart helper function { @@ -138,25 +136,24 @@ trait ChartGeneration $currentEnd = app('navigation')->endOfPeriod($currentStart, '1M'); $earned = (string)array_sum( array_map( - function ($item) { + static function ($item) { return $item['sum']; }, - $tasker->getIncomeReport($currentStart, $currentEnd, $accounts) + $tasker->getIncomeReport($currentStart, $currentEnd, $accounts)['accounts'] ) ); - $spent = (string)array_sum( array_map( - function ($item) { + static function ($item) { return $item['sum']; }, - $tasker->getExpenseReport($currentStart, $currentEnd, $accounts) + $tasker->getExpenseReport($currentStart, $currentEnd, $accounts)['accounts'] ) ); $label = $currentStart->format('Y-m') . '-01'; $spentArray[$label] = bcmul($spent, '-1'); - $earnedArray[$label] = $earned; + $earnedArray[$label] = bcmul($earned, '-1'); $currentStart = app('navigation')->addPeriod($currentStart, '1M', 0); } $result = [ diff --git a/resources/views/v1/reports/default/year.twig b/resources/views/v1/reports/default/year.twig index 39bcede316..7801cdc3ed 100644 --- a/resources/views/v1/reports/default/year.twig +++ b/resources/views/v1/reports/default/year.twig @@ -220,7 +220,7 @@ var budgetPeriodReportUri = '{{ route('report-data.budget.period', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; var categoryExpenseUri = '{{ route('report-data.category.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; var categoryIncomeUri = '{{ route('report-data.category.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; - + var billReportUri = '';