diff --git a/app/Helpers/Collector/Extensions/MetaCollection.php b/app/Helpers/Collector/Extensions/MetaCollection.php index 4f9c173732..0d8666f9fd 100644 --- a/app/Helpers/Collector/Extensions/MetaCollection.php +++ b/app/Helpers/Collector/Extensions/MetaCollection.php @@ -214,6 +214,51 @@ trait MetaCollection return $this; } + /** + * @inheritDoc + */ + public function externalIdContains(string $externalId): GroupCollectorInterface + { + if (false === $this->hasJoinedMetaTables) { + $this->hasJoinedMetaTables = true; + $this->query->leftJoin('journal_meta', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id'); + } + $this->query->where('journal_meta.name', '=', 'external_id'); + $this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s%%', $externalId)); + + return $this; + } + + /** + * @inheritDoc + */ + public function externalIdEnds(string $externalId): GroupCollectorInterface + { + if (false === $this->hasJoinedMetaTables) { + $this->hasJoinedMetaTables = true; + $this->query->leftJoin('journal_meta', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id'); + } + $this->query->where('journal_meta.name', '=', 'external_id'); + $this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s"', $externalId)); + + return $this; + } + + /** + * @inheritDoc + */ + public function externalIdStarts(string $externalId): GroupCollectorInterface + { + if (false === $this->hasJoinedMetaTables) { + $this->hasJoinedMetaTables = true; + $this->query->leftJoin('journal_meta', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id'); + } + $this->query->where('journal_meta.name', '=', 'external_id'); + $this->query->where('journal_meta.data', 'LIKE', sprintf('"%s%%', $externalId)); + + return $this; + } + /** * @inheritDoc */ diff --git a/app/Helpers/Collector/GroupCollectorInterface.php b/app/Helpers/Collector/GroupCollectorInterface.php index 4f3479f88b..f8ea25d59b 100644 --- a/app/Helpers/Collector/GroupCollectorInterface.php +++ b/app/Helpers/Collector/GroupCollectorInterface.php @@ -305,6 +305,24 @@ interface GroupCollectorInterface */ public function setExternalId(string $externalId): GroupCollectorInterface; + /** + * @param string $externalId + * @return GroupCollectorInterface + */ + public function externalIdContains(string $externalId): GroupCollectorInterface; + + /** + * @param string $externalId + * @return GroupCollectorInterface + */ + public function externalIdStarts(string $externalId): GroupCollectorInterface; + + /** + * @param string $externalId + * @return GroupCollectorInterface + */ + public function externalIdEnds(string $externalId): GroupCollectorInterface; + /** * Transactions without an external URL * diff --git a/app/Support/Search/OperatorQuerySearch.php b/app/Support/Search/OperatorQuerySearch.php index 0e39c06ce9..fcd52121df 100644 --- a/app/Support/Search/OperatorQuerySearch.php +++ b/app/Support/Search/OperatorQuerySearch.php @@ -745,9 +745,18 @@ class OperatorQuerySearch implements SearchInterface // // other fields // - case 'external_id': + case 'external_id_is': $this->collector->setExternalId($value); break; + case 'external_id_contains': + $this->collector->externalIdContains($value); + break; + case 'external_id_starts': + $this->collector->externalIdStarts($value); + break; + case 'external_id_ends': + $this->collector->externalIdEnds($value); + break; case 'internal_reference': $this->collector->setInternalReference($value); break; diff --git a/config/search.php b/config/search.php index c3531afc88..3b296746c2 100644 --- a/config/search.php +++ b/config/search.php @@ -86,12 +86,14 @@ return [ 'bill' => ['alias' => true, 'alias_for' => 'bill_contains', 'needs_context' => true,], 'bill_ends' => ['alias' => false, 'needs_context' => true,], 'bill_starts' => ['alias' => false, 'needs_context' => true,], - // TODO here we are + 'external_id_is' => ['alias' => false, 'needs_context' => true,], 'external_id_contains' => ['alias' => false, 'needs_context' => true,], 'external_id' => ['alias' => true, 'alias_for' => 'external_id_contains', 'needs_context' => true,], 'external_id_ends' => ['alias' => false, 'needs_context' => true,], 'external_id_starts' => ['alias' => false, 'needs_context' => true,], + + // TODO here we are! 'internal_reference_is' => ['alias' => false, 'needs_context' => true,], 'internal_reference_contains' => ['alias' => false, 'needs_context' => true,], 'internal_reference' => ['alias' => true, 'alias_for' => 'internal_reference_contains', 'needs_context' => true,],