diff --git a/app/Http/Controllers/Json/ReconcileController.php b/app/Http/Controllers/Json/ReconcileController.php index 1d3614366b..70a0bb9136 100644 --- a/app/Http/Controllers/Json/ReconcileController.php +++ b/app/Http/Controllers/Json/ReconcileController.php @@ -34,6 +34,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; /** * Class ReconcileController @@ -73,7 +74,6 @@ class ReconcileController extends Controller $accountCurrency = $this->accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); $amount = '0'; $clearedAmount = '0'; - $route = ''; if (null === $start && null === $end) { throw new FireflyException('Invalid dates submitted.'); @@ -103,14 +103,11 @@ class ReconcileController extends Controller $clearedJournals = $collector->getExtractedJournals(); } - app('log')->debug('Start transaction loop'); - /** @var array $journal */ foreach ($journals as $journal) { $amount = $this->processJournal($account, $accountCurrency, $journal, $amount); } app('log')->debug(sprintf('Final amount is %s', $amount)); - app('log')->debug('End transaction loop'); /** @var array $journal */ foreach ($clearedJournals as $journal) { @@ -118,35 +115,17 @@ class ReconcileController extends Controller $clearedAmount = $this->processJournal($account, $accountCurrency, $journal, $clearedAmount); } } - \Log::debug(sprintf('Start balance: "%s"', $startBalance)); - \Log::debug(sprintf('End balance: "%s"', $endBalance)); - \Log::debug(sprintf('Cleared amount: "%s"', $clearedAmount)); - \Log::debug(sprintf('Amount: "%s"', $amount)); + Log::debug(sprintf('Start balance: "%s"', $startBalance)); + Log::debug(sprintf('End balance: "%s"', $endBalance)); + Log::debug(sprintf('Cleared amount: "%s"', $clearedAmount)); + Log::debug(sprintf('Amount: "%s"', $amount)); $difference = bcadd(bcadd(bcsub($startBalance, $endBalance), $clearedAmount), $amount); $diffCompare = bccomp($difference, '0'); $countCleared = count($clearedJournals); - $reconSum = bcadd(bcadd($startBalance, $amount), $clearedAmount); try { - $view = view( - 'accounts.reconcile.overview', - compact( - 'account', - 'start', - 'diffCompare', - 'difference', - 'end', - 'clearedAmount', - 'startBalance', - 'endBalance', - 'amount', - 'route', - 'countCleared', - 'reconSum', - 'selectedIds' - ) - )->render(); + $view = view('accounts.reconcile.overview', compact('account', 'start', 'diffCompare', 'difference', 'end', 'clearedAmount', 'startBalance', 'endBalance', 'amount', 'route', 'countCleared', 'reconSum', 'selectedIds'))->render(); } catch (\Throwable $e) { app('log')->debug(sprintf('View error: %s', $e->getMessage())); app('log')->error($e->getTraceAsString()); @@ -155,10 +134,7 @@ class ReconcileController extends Controller throw new FireflyException($view, 0, $e); } - $return = [ - 'post_url' => $route, - 'html' => $view, - ]; + $return = ['post_url' => $route, 'html' => $view]; return response()->json($return); } diff --git a/app/Support/Search/OperatorQuerySearch.php b/app/Support/Search/OperatorQuerySearch.php index dcac60ceda..da850a4019 100644 --- a/app/Support/Search/OperatorQuerySearch.php +++ b/app/Support/Search/OperatorQuerySearch.php @@ -73,15 +73,17 @@ class OperatorQuerySearch implements SearchInterface private CurrencyRepositoryInterface $currencyRepository; private array $excludeTags; private array $includeTags; - private array $invalidOperators; - private int $limit; - private Collection $operators; - private int $page; - private array $prohibitedWords; - private float $startTime; - private TagRepositoryInterface $tagRepository; - private array $validOperators; - private array $words; + // added to fix #8632 + private array $includeAnyTags; + private array $invalidOperators; + private int $limit; + private Collection $operators; + private int $page; + private array $prohibitedWords; + private float $startTime; + private TagRepositoryInterface $tagRepository; + private array $validOperators; + private array $words; /** * OperatorQuerySearch constructor. @@ -93,6 +95,7 @@ class OperatorQuerySearch implements SearchInterface $this->page = 1; $this->words = []; $this->excludeTags = []; + $this->includeAnyTags = []; $this->includeTags = []; $this->prohibitedWords = []; $this->invalidOperators = []; @@ -1112,8 +1115,9 @@ class OperatorQuerySearch implements SearchInterface $this->collector->findNothing(); } if ($tags->count() > 0) { - $ids = array_values($tags->pluck('id')->toArray()); - $this->includeTags = array_unique(array_merge($this->includeTags, $ids)); + // changed from includeTags to includeAnyTags for #8632 + $ids = array_values($tags->pluck('id')->toArray()); + $this->includeAnyTags = array_unique(array_merge($this->includeAnyTags, $ids)); } break; @@ -1125,8 +1129,9 @@ class OperatorQuerySearch implements SearchInterface $this->collector->findNothing(); } if ($tags->count() > 0) { - $ids = array_values($tags->pluck('id')->toArray()); - $this->includeTags = array_unique(array_merge($this->includeTags, $ids)); + // changed from includeTags to includeAnyTags for #8632 + $ids = array_values($tags->pluck('id')->toArray()); + $this->includeAnyTags = array_unique(array_merge($this->includeAnyTags, $ids)); } break; @@ -2725,6 +2730,19 @@ class OperatorQuerySearch implements SearchInterface } $this->collector->setAllTags($collection); } + // if include ANY tags, include them: (see #8632) + if (count($this->includeAnyTags) > 0) { + app('log')->debug(sprintf('%d include ANY tag(s)', count($this->includeAnyTags))); + $collection = new Collection(); + foreach ($this->includeAnyTags as $tagId) { + $tag = $this->tagRepository->find($tagId); + if (null !== $tag) { + app('log')->debug(sprintf('Include ANY tag "%s"', $tag->tag)); + $collection->push($tag); + } + } + $this->collector->setTags($collection); + } } public function getWords(): array