From d0844356cb14c6f55a3c95d80c70d6d8e7d9e2dc Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 7 Feb 2024 06:14:40 +0100 Subject: [PATCH] Fix https://github.com/firefly-iii/firefly-iii/issues/8521 --- .../Events/Model/BudgetLimitHandler.php | 1 + app/Helpers/Collector/GroupCollector.php | 80 +++++++++---------- .../Budget/AvailableBudgetRepository.php | 4 +- app/Support/Navigation.php | 1 - 4 files changed, 42 insertions(+), 44 deletions(-) diff --git a/app/Handlers/Events/Model/BudgetLimitHandler.php b/app/Handlers/Events/Model/BudgetLimitHandler.php index 5129e7bd85..373584cbea 100644 --- a/app/Handlers/Events/Model/BudgetLimitHandler.php +++ b/app/Handlers/Events/Model/BudgetLimitHandler.php @@ -154,6 +154,7 @@ class BudgetLimitHandler ] ); $availableBudget->save(); + app('log')->debug(sprintf('ID of new AB is #%d', $availableBudget->id)); } } diff --git a/app/Helpers/Collector/GroupCollector.php b/app/Helpers/Collector/GroupCollector.php index ddc5972853..eac4658d81 100644 --- a/app/Helpers/Collector/GroupCollector.php +++ b/app/Helpers/Collector/GroupCollector.php @@ -61,12 +61,12 @@ class GroupCollector implements GroupCollectorInterface */ public function __construct() { - $this->postFilters = []; - $this->tags = []; - $this->user = null; - $this->userGroup = null; - $this->limit = null; - $this->page = null; + $this->postFilters = []; + $this->tags = []; + $this->user = null; + $this->userGroup = null; + $this->limit = null; + $this->page = null; $this->hasAccountInfo = false; $this->hasCatInformation = false; @@ -288,7 +288,7 @@ class GroupCollector implements GroupCollectorInterface if (is_int($param)) { $replace = (string)$param; } - $pos = strpos($query, '?'); + $pos = strpos($query, '?'); if (false !== $pos) { $query = substr_replace($query, $replace, $pos, 1); } @@ -456,13 +456,13 @@ class GroupCollector implements GroupCollectorInterface // add to query: $this->query->orWhereIn('transaction_journals.transaction_group_id', $groupIds); } - $result = $this->query->get($this->fields); + $result = $this->query->get($this->fields); // now to parse this into an array. - $collection = $this->parseArray($result); + $collection = $this->parseArray($result); // filter the array using all available post filters: - $collection = $this->postFilterCollection($collection); + $collection = $this->postFilterCollection($collection); // count it and continue: $this->total = $collection->count(); @@ -668,12 +668,11 @@ class GroupCollector implements GroupCollectorInterface // include source + destination account name and type. $this->withAccountInformation() // include category ID + name (if any) - ->withCategoryInformation() + ->withCategoryInformation() // include budget ID + name (if any) - ->withBudgetInformation() + ->withBudgetInformation() // include bill ID + name (if any) - ->withBillInformation() - ; + ->withBillInformation(); return $this; } @@ -692,12 +691,12 @@ class GroupCollector implements GroupCollectorInterface /** @var TransactionJournal $augumentedJournal */ foreach ($collection as $augumentedJournal) { - $groupId = (int)$augumentedJournal->transaction_group_id; + $groupId = (int)$augumentedJournal->transaction_group_id; if (!array_key_exists($groupId, $groups)) { // make new array - $parsedGroup = $this->parseAugmentedJournal($augumentedJournal); - $groupArray = [ + $parsedGroup = $this->parseAugmentedJournal($augumentedJournal); + $groupArray = [ 'id' => (int)$augumentedJournal->transaction_group_id, 'user_id' => $augumentedJournal->user_id, 'user_group_id' => $augumentedJournal->user_group_id, @@ -769,7 +768,7 @@ class GroupCollector implements GroupCollectorInterface } // try to process meta date value (if present) - $dates = ['interest_date', 'payment_date', 'invoice_date', 'book_date', 'due_date', 'process_date']; + $dates = ['interest_date', 'payment_date', 'invoice_date', 'book_date', 'due_date', 'process_date']; if (array_key_exists('meta_name', $result) && in_array($result['meta_name'], $dates, true)) { $name = $result['meta_name']; if (array_key_exists('meta_data', $result) && '' !== (string)$result['meta_data']) { @@ -778,15 +777,15 @@ class GroupCollector implements GroupCollectorInterface } // convert values to integers: - $result = $this->convertToInteger($result); + $result = $this->convertToInteger($result); // convert back to strings because SQLite is dumb like that. - $result = $this->convertToStrings($result); + $result = $this->convertToStrings($result); - $result['reconciled'] = 1 === (int)$result['reconciled']; + $result['reconciled'] = 1 === (int)$result['reconciled']; if (array_key_exists('tag_id', $result) && null !== $result['tag_id']) { // assume the other fields are present as well. - $tagId = (int)$augumentedJournal['tag_id']; - $tagDate = null; + $tagId = (int)$augumentedJournal['tag_id']; + $tagDate = null; try { $tagDate = Carbon::parse($augumentedJournal['tag_date']); @@ -850,9 +849,9 @@ class GroupCollector implements GroupCollectorInterface { $newArray = $newJournal->toArray(); if (array_key_exists('tag_id', $newArray)) { // assume the other fields are present as well. - $tagId = (int)$newJournal['tag_id']; + $tagId = (int)$newJournal['tag_id']; - $tagDate = null; + $tagDate = null; try { $tagDate = Carbon::parse($newArray['tag_date']); @@ -875,7 +874,7 @@ class GroupCollector implements GroupCollectorInterface { $newArray = $newJournal->toArray(); if (array_key_exists('attachment_id', $newArray)) { - $attachmentId = (int)$newJournal['attachment_id']; + $attachmentId = (int)$newJournal['attachment_id']; $existingJournal['attachments'][$attachmentId] = [ 'id' => $attachmentId, @@ -894,7 +893,7 @@ class GroupCollector implements GroupCollectorInterface foreach ($groups as $groudId => $group) { /** @var array $transaction */ foreach ($group['transactions'] as $transaction) { - $currencyId = (int)$transaction['currency_id']; + $currencyId = (int)$transaction['currency_id']; if (null === $transaction['amount']) { throw new FireflyException(sprintf('Amount is NULL for a transaction in group #%d, please investigate.', $groudId)); } @@ -910,7 +909,7 @@ class GroupCollector implements GroupCollectorInterface $groups[$groudId]['sums'][$currencyId]['amount'] = bcadd($groups[$groudId]['sums'][$currencyId]['amount'], $transaction['amount']); if (null !== $transaction['foreign_amount'] && null !== $transaction['foreign_currency_id']) { - $currencyId = (int)$transaction['foreign_currency_id']; + $currencyId = (int)$transaction['foreign_currency_id']; // set default: if (!array_key_exists($currencyId, $groups[$groudId]['sums'])) { @@ -931,6 +930,11 @@ class GroupCollector implements GroupCollectorInterface private function postFilterCollection(Collection $collection): Collection { $currentCollection = $collection; + $countFilters = count($this->postFilters); + $countCollection = count($currentCollection); + if (0 === $countFilters && 0 === $countCollection) { + return $currentCollection; + } app('log')->debug(sprintf('GroupCollector: postFilterCollection has %d filter(s) and %d transaction(s).', count($this->postFilters), count($currentCollection))); /** @@ -938,7 +942,7 @@ class GroupCollector implements GroupCollectorInterface */ foreach ($this->postFilters as $function) { app('log')->debug('Applying filter...'); - $nextCollection = new Collection(); + $nextCollection = new Collection(); // loop everything in the current collection // and save it (or not) in the new collection. @@ -985,8 +989,7 @@ class GroupCollector implements GroupCollectorInterface 'transactions as source', static function (JoinClause $join): void { $join->on('source.transaction_journal_id', '=', 'transaction_journals.id') - ->where('source.amount', '<', 0) - ; + ->where('source.amount', '<', 0); } ) // join destination transaction @@ -994,8 +997,7 @@ class GroupCollector implements GroupCollectorInterface 'transactions as destination', static function (JoinClause $join): void { $join->on('destination.transaction_journal_id', '=', 'transaction_journals.id') - ->where('destination.amount', '>', 0) - ; + ->where('destination.amount', '>', 0); } ) // left join transaction type. @@ -1010,8 +1012,7 @@ class GroupCollector implements GroupCollectorInterface ->orderBy('transaction_journals.order', 'ASC') ->orderBy('transaction_journals.id', 'DESC') ->orderBy('transaction_journals.description', 'DESC') - ->orderBy('source.amount', 'DESC') - ; + ->orderBy('source.amount', 'DESC'); } /** @@ -1029,8 +1030,7 @@ class GroupCollector implements GroupCollectorInterface 'transactions as source', static function (JoinClause $join): void { $join->on('source.transaction_journal_id', '=', 'transaction_journals.id') - ->where('source.amount', '<', 0) - ; + ->where('source.amount', '<', 0); } ) // join destination transaction @@ -1038,8 +1038,7 @@ class GroupCollector implements GroupCollectorInterface 'transactions as destination', static function (JoinClause $join): void { $join->on('destination.transaction_journal_id', '=', 'transaction_journals.id') - ->where('destination.amount', '>', 0) - ; + ->where('destination.amount', '>', 0); } ) // left join transaction type. @@ -1054,7 +1053,6 @@ class GroupCollector implements GroupCollectorInterface ->orderBy('transaction_journals.order', 'ASC') ->orderBy('transaction_journals.id', 'DESC') ->orderBy('transaction_journals.description', 'DESC') - ->orderBy('source.amount', 'DESC') - ; + ->orderBy('source.amount', 'DESC'); } } diff --git a/app/Repositories/Budget/AvailableBudgetRepository.php b/app/Repositories/Budget/AvailableBudgetRepository.php index d5e09c4798..cbae17a9d1 100644 --- a/app/Repositories/Budget/AvailableBudgetRepository.php +++ b/app/Repositories/Budget/AvailableBudgetRepository.php @@ -66,8 +66,8 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface if (null !== $start && null !== $end) { $query->where( static function (Builder $q1) use ($start, $end): void { // @phpstan-ignore-line - $q1->where('start_date', '=', $start->format('Y-m-d')); - $q1->where('end_date', '=', $end->format('Y-m-d')); + $q1->where('start_date', '=', $start); + $q1->where('end_date', '=', $end); } ); } diff --git a/app/Support/Navigation.php b/app/Support/Navigation.php index df2601eb3c..9eac3bebe9 100644 --- a/app/Support/Navigation.php +++ b/app/Support/Navigation.php @@ -216,7 +216,6 @@ class Navigation public function endOfPeriod(Carbon $end, string $repeatFreq): Carbon { $currentEnd = clone $end; - Log::debug(sprintf('endOfPeriod("%s", "%s")', $currentEnd->format('Y-m-d'), $repeatFreq)); $functionMap = [ '1D' => 'endOfDay',