Attempt to add external_url filtering support

This commit is contained in:
George Hahn
2022-01-24 20:20:03 -07:00
parent 59f0631685
commit 0a5908e4d8
6 changed files with 59 additions and 0 deletions

View File

@@ -212,6 +212,36 @@ trait MetaCollection
return $this;
}
/**
* @inheritDoc
*/
public function withoutExternalUrl(): 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_url');
$this->query->whereNull('journal_meta.data');
return $this;
}
/**
* @inheritDoc
*/
public function withExternalUrl(): 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_url');
$this->query->whereNotNull('journal_meta.data');
return $this;
}
/**
* @inheritDoc
*/

View File

@@ -305,6 +305,20 @@ interface GroupCollectorInterface
*/
public function setExternalId(string $externalId): GroupCollectorInterface;
/**
* Transactions without an external URL
*
* @return GroupCollectorInterface
*/
public function withoutExternalUrl(): GroupCollectorInterface;
/**
* Transactions with an external URL
*
* @return GroupCollectorInterface
*/
public function withExternalUrl(): GroupCollectorInterface;
/**
* Limit results to a specific foreign currency.
*

View File

@@ -627,6 +627,15 @@ class OperatorQuerySearch implements SearchInterface
$this->collector->setUpdatedAt($updatedAt);
break;
//
// external URL
//
case 'no_external_url':
$this->collector->withoutExternalUrl();
break;
case 'any_external_url':
$this->collector->withExternalUrl();
break;
//
// other fields
//
case 'external_id':

View File

@@ -518,6 +518,8 @@ return [
'notes_are' => ['alias' => false, 'needs_context' => true,],
'no_notes' => ['alias' => false, 'needs_context' => false,],
'any_notes' => ['alias' => false, 'needs_context' => false,],
'no_external_url' => ['alias' => false, 'needs_context' => false,],
'any_external_url' => ['alias' => false, 'needs_context' => false,],
// one exact (or array of) journals:
'id' => ['alias' => false, 'trigger_class' => null, 'needs_context' => true,],

View File

@@ -348,6 +348,8 @@ function updateTriggerInput(selectList) {
case 'source_is_cash':
case 'destination_is_cash':
case 'account_is_cash':
case 'no_external_url':
case 'any_external_url':
console.log('Select list value is ' + selectList.val() + ', so input needs to be disabled.');
inputResult.prop('disabled', true);
inputResult.typeahead('destroy');

View File

@@ -562,6 +562,8 @@ return [
'rule_trigger_internal_reference' => 'Internal reference is ":trigger_value"',
'rule_trigger_journal_id_choice' => 'Transaction journal ID is..',
'rule_trigger_journal_id' => 'Transaction journal ID is ":trigger_value"',
'rule_trigger_no_external_url' => 'Transaction has no external URL',
'rule_trigger_any_external_url' => 'Transaction has an external URL',
// actions
'rule_action_delete_transaction_choice' => 'DELETE transaction (!)',