Move search operators to dedicated file and add lots of new ones.

This commit is contained in:
James Cole 2022-03-20 07:42:39 +01:00
parent c000e090fe
commit ba10aa5ca5
No known key found for this signature in database
GPG Key ID: B49A324B7EAD6D80
12 changed files with 355 additions and 218 deletions

View File

@ -70,7 +70,7 @@ class RuleController extends Controller
public function trigger(Request $request): JsonResponse
{
$count = (int)$request->get('count') > 0 ? (int)$request->get('count') : 1;
$operators = config('firefly.search.operators');
$operators = config('search.operators');
$triggers = [];
foreach ($operators as $key => $operator) {
if ('user_action' !== $key && false === $operator['alias']) {

View File

@ -144,7 +144,7 @@ class EditController extends Controller
private function parseFromOperators(array $submittedOperators): array
{
// See reference nr. 65
$operators = config('firefly.search.operators');
$operators = config('search.operators');
$renderedEntries = [];
$triggers = [];
foreach ($operators as $key => $operator) {

View File

@ -50,6 +50,6 @@ class Domain
*/
public static function getRuleTriggers(): array
{
return array_keys(config('firefly.search.operators'));
return array_keys(config('search.operators'));
}
}

View File

@ -116,7 +116,7 @@ trait ModelInformation
protected function getTriggersForBill(Bill $bill): array // get info and augument
{
// See reference nr. 39
$operators = config('firefly.search.operators');
$operators = config('search.operators');
$triggers = [];
foreach ($operators as $key => $operator) {
if ('user_action' !== $key && false === $operator['alias']) {
@ -168,7 +168,7 @@ trait ModelInformation
private function getTriggersForJournal(TransactionJournal $journal): array
{
// See reference nr. 40
$operators = config('firefly.search.operators');
$operators = config('search.operators');
$triggers = [];
foreach ($operators as $key => $operator) {
if ('user_action' !== $key && false === $operator['alias']) {

View File

@ -299,7 +299,7 @@ trait RenderPartialViews
protected function getCurrentTriggers(Rule $rule): array // get info from object and present.
{
// See reference nr. 38
$operators = config('firefly.search.operators');
$operators = config('search.operators');
$triggers = [];
foreach ($operators as $key => $operator) {
if ('user_action' !== $key && false === $operator['alias']) {

View File

@ -79,7 +79,7 @@ trait RuleManagement
protected function getPreviousTriggers(Request $request): array
{
// See reference nr. 34
$operators = config('firefly.search.operators');
$operators = config('search.operators');
$triggers = [];
foreach ($operators as $key => $operator) {
if ('user_action' !== $key && false === $operator['alias']) {
@ -124,7 +124,7 @@ trait RuleManagement
protected function parseFromOperators(array $submittedOperators): array
{
// See reference nr. 35
$operators = config('firefly.search.operators');
$operators = config('search.operators');
$renderedEntries = [];
$triggers = [];
foreach ($operators as $key => $operator) {

View File

@ -34,7 +34,7 @@ trait GetRuleConfiguration
*/
protected function getTriggers(): array
{
return array_keys(config('firefly.search.operators'));
return array_keys(config('search.operators'));
}
/**
@ -42,7 +42,7 @@ trait GetRuleConfiguration
*/
protected function getTriggersWithContext(): array
{
$list = config('firefly.search.operators');
$list = config('search.operators');
$return = [];
foreach ($list as $key => $info) {
if (true === $info['needs_context']) {

View File

@ -92,7 +92,7 @@ class OperatorQuerySearch implements SearchInterface
$this->invalidOperators = [];
$this->limit = 25;
$this->date = today(config('app.timezone'));
$this->validOperators = array_keys(config('firefly.search.operators'));
$this->validOperators = array_keys(config('search.operators'));
$this->startTime = microtime(true);
$this->accountRepository = app(AccountRepositoryInterface::class);
$this->categoryRepository = app(CategoryRepositoryInterface::class);

View File

@ -67,7 +67,7 @@ class Rule extends AbstractExtension
return new TwigFunction(
'allRuleTriggers',
static function () {
$ruleTriggers = array_keys(config('firefly.search.operators'));
$ruleTriggers = array_keys(config('search.operators'));
$possibleTriggers = [];
foreach ($ruleTriggers as $key) {
if ('user_action' !== $key) {

View File

@ -205,9 +205,9 @@ return [
'language' => 'en_US',
'locale' => 'equal',
],
'default_currency' => 'EUR',
'default_language' => envNonEmpty('DEFAULT_LANGUAGE', 'en_US'),
'default_locale' => envNonEmpty('DEFAULT_LOCALE', 'equal'),
'default_currency' => 'EUR',
'default_language' => envNonEmpty('DEFAULT_LANGUAGE', 'en_US'),
'default_locale' => envNonEmpty('DEFAULT_LOCALE', 'equal'),
// "value must be in this list" values
'valid_attachment_models' => [
@ -221,7 +221,7 @@ return [
TransactionJournal::class,
Recurrence::class,
],
'valid_view_ranges' => ['1D', '1W', '1M', '3M', '6M', '1Y',],
'valid_view_ranges' => ['1D', '1W', '1M', '3M', '6M', '1Y',],
'allowedMimes' => [
/* plain files */
'text/plain',
@ -390,7 +390,7 @@ return [
'transfers' => 'fa-exchange',
],
'bindables' => [
'bindables' => [
// models
'account' => Account::class,
'attachment' => Attachment::class,
@ -442,7 +442,7 @@ return [
'eitherConfigKey' => EitherConfigKey::class,
],
'rule-actions' => [
'rule-actions' => [
'set_category' => SetCategory::class,
'clear_category' => ClearCategory::class,
'set_budget' => SetBudget::class,
@ -466,7 +466,7 @@ return [
'update_piggy' => UpdatePiggybank::class,
'delete_transaction' => DeleteTransaction::class,
],
'context-rule-actions' => [
'context-rule-actions' => [
'set_category',
'set_budget',
'add_tag',
@ -485,181 +485,12 @@ return [
'convert_transfer',
],
'test-triggers' => [
'test-triggers' => [
'limit' => 10,
'range' => 200,
],
'search' => [
'operators' => [
'user_action' => ['alias' => false, 'needs_context' => true,],
'description_starts' => ['alias' => false, 'needs_context' => true,],
'description_ends' => ['alias' => false, 'needs_context' => true,],
'description_contains' => ['alias' => false, 'needs_context' => true,],
'description_is' => ['alias' => false, 'needs_context' => true,],
'description' => ['alias' => true, 'alias_for' => 'description_contains', 'needs_context' => true,],
'currency_is' => ['alias' => false, 'needs_context' => true,],
'foreign_currency_is' => ['alias' => false, 'needs_context' => true,],
'has_attachments' => ['alias' => false, 'needs_context' => false,],
'has_no_category' => ['alias' => false, 'needs_context' => false,],
'has_any_category' => ['alias' => false, 'needs_context' => false,],
'has_no_budget' => ['alias' => false, 'needs_context' => false,],
'has_any_budget' => ['alias' => false, 'needs_context' => false,],
'has_no_bill' => ['alias' => false, 'needs_context' => false,],
'has_any_bill' => ['alias' => false, 'needs_context' => false,],
'has_no_tag' => ['alias' => false, 'needs_context' => false,],
'has_any_tag' => ['alias' => false, 'needs_context' => false,],
'notes_contain' => ['alias' => false, 'needs_context' => true,],
'notes_start' => ['alias' => false, 'needs_context' => true,],
'notes_end' => ['alias' => false, 'needs_context' => true,],
'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,],
'journal_id' => ['alias' => false, 'trigger_class' => null, 'needs_context' => true,],
// exact amount
'amount_exactly' => ['alias' => false, 'needs_context' => true,],
'amount_is' => ['alias' => true, 'alias_for' => 'amount_exactly', 'needs_context' => true,],
'amount' => ['alias' => true, 'alias_for' => 'amount_exactly', 'needs_context' => true,],
// is less than
'amount_less' => ['alias' => false, 'needs_context' => true,],
'amount_max' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true,],
// is more than
'amount_more' => ['alias' => false, 'needs_context' => true,],
'amount_min' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true,],
// source account name is + alias:
'source_account_is' => ['alias' => false, 'needs_context' => true,],
'from_account_is' => ['alias' => true, 'alias_for' => 'source_account_is', 'needs_context' => true,],
// source or dest is cash account?
'source_is_cash' => ['alias' => false, 'needs_context' => false],
'destination_is_cash' => ['alias' => false, 'needs_context' => false],
'account_is_cash' => ['alias' => false, 'needs_context' => false],
// source account name contains + alias
'source_account_contains' => ['alias' => false, 'needs_context' => true,],
'from_account_contains' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,],
'source' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,],
'from' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,],
// source account name starts with + alias
'source_account_starts' => ['alias' => false, 'needs_context' => true,],
'from_account_starts' => ['alias' => true, 'alias_for' => 'source_account_starts', 'needs_context' => true,],
// source account name ends with + alias
'source_account_ends' => ['alias' => false, 'needs_context' => true,],
'from_account_ends' => ['alias' => true, 'alias_for' => 'source_account_ends', 'needs_context' => true,],
// source account ID + alias
'source_account_id' => ['alias' => false, 'needs_context' => true,],
'from_account_id' => ['alias' => true, 'alias_for' => 'source_account_id', 'needs_context' => true,],
// source account number is
'source_account_nr_is' => ['alias' => false, 'needs_context' => true,],
'from_account_nr_is' => ['alias' => true, 'alias_for' => 'source_account_nr_is', 'needs_context' => true,],
// source account number contains
'source_account_nr_contains' => ['alias' => false, 'needs_context' => true,],
'from_account_nr_contains' => ['alias' => true, 'alias_for' => 'source_account_nr_contains', 'needs_context' => true,],
// source account number starts with
'source_account_nr_starts' => ['alias' => false, 'needs_context' => true,],
'from_account_nr_starts' => ['alias' => true, 'alias_for' => 'source_account_nr_starts', 'needs_context' => true,],
// source account number ends with
'source_account_nr_ends' => ['alias' => false, 'needs_context' => true,],
'from_account_nr_ends' => ['alias' => true, 'alias_for' => 'source_account_nr_ends', 'needs_context' => true,],
// destination account name is + alias
'destination_account_is' => ['alias' => false, 'needs_context' => true,],
'to_account_is' => ['alias' => true, 'alias_for' => 'destination_account_is', 'needs_context' => true,],
// destination account name contains + alias
'destination_account_contains' => ['alias' => false, 'needs_context' => true,],
'to_account_contains' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true,],
'destination' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true,],
'to' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true,],
// destination account name starts with + alias
'destination_account_starts' => ['alias' => false, 'needs_context' => true,],
'to_account_starts' => ['alias' => true, 'alias_for' => 'destination_account_starts', 'needs_context' => true,],
// destination account name ends with + alias
'destination_account_ends' => ['alias' => false, 'needs_context' => true,],
'to_account_ends' => ['alias' => true, 'alias_for' => 'destination_account_ends', 'needs_context' => true,],
// destination account ID + alias
'destination_account_id' => ['alias' => false, 'needs_context' => true,],
'to_account_id' => ['alias' => true, 'alias_for' => 'destination_account_id', 'needs_context' => true,],
// destination account number is
'destination_account_nr_is' => ['alias' => false, 'needs_context' => true,],
'to_account_nr_is' => ['alias' => true, 'alias_for' => 'destination_account_nr_is', 'needs_context' => true,],
// destination account number contains
'destination_account_nr_contains' => ['alias' => false, 'needs_context' => true,],
'to_account_nr_contains' => ['alias' => true, 'alias_for' => 'destination_account_nr_contains', 'needs_context' => true,],
// destination account number starts with
'destination_account_nr_starts' => ['alias' => false, 'needs_context' => true,],
'to_account_nr_starts' => ['alias' => true, 'alias_for' => 'destination_account_nr_starts', 'needs_context' => true,],
// destination account number ends with
'destination_account_nr_ends' => ['alias' => false, 'needs_context' => true,],
'to_account_nr_ends' => ['alias' => true, 'alias_for' => 'destination_account_nr_ends', 'needs_context' => true,],
// any account id is
'account_id' => ['alias' => false, 'needs_context' => true,],
// category
'category_is' => ['alias' => false, 'needs_context' => true,],
'category' => ['alias' => true, 'alias_for' => 'category_is', 'needs_context' => true,],
// budget
'budget_is' => ['alias' => false, 'needs_context' => true,],
'budget' => ['alias' => true, 'alias_for' => 'budget_is', 'needs_context' => true,],
// bill
'bill_is' => ['alias' => false, 'needs_context' => true,],
'bill' => ['alias' => true, 'alias_for' => 'bill_is', 'needs_context' => true,],
// type
'transaction_type' => ['alias' => false, 'needs_context' => true,],
'type' => ['alias' => true, 'alias_for' => 'transaction_type', 'needs_context' => true,],
// date:
'date_is' => ['alias' => false, 'needs_context' => true,],
'date' => ['alias' => true, 'alias_for' => 'date_is', 'needs_context' => true,],
'on' => ['alias' => true, 'alias_for' => 'date_is', 'needs_context' => true,],
'date_before' => ['alias' => false, 'needs_context' => true,],
'before' => ['alias' => true, 'alias_for' => 'date_before', 'needs_context' => true,],
'date_after' => ['alias' => false, 'needs_context' => true,],
'after' => ['alias' => true, 'alias_for' => 'date_after', 'needs_context' => true,],
// other interesting fields
'tag_is' => ['alias' => false, 'needs_context' => true,],
'tag' => ['alias' => true, 'alias_for' => 'tag_is', 'needs_context' => true,],
'created_on' => ['alias' => false, 'needs_context' => true,],
'created_at' => ['alias' => true, 'alias_for' => 'created_on', 'needs_context' => true,],
'updated_on' => ['alias' => false, 'needs_context' => true,],
'updated_at' => ['alias' => true, 'alias_for' => 'updated_on', 'needs_context' => true,],
'external_id' => ['alias' => false, 'needs_context' => true,],
'internal_reference' => ['alias' => false, 'needs_context' => true,],
],
],
// expected source types for each transaction type, in order of preference.
'expected_source_types' => [
'source' => [
@ -877,7 +708,7 @@ return [
'import_hash', 'import_hash_v2', 'external_id', 'original_source',
// recurring transactions
'recurrence_total', 'recurrence_count',
'recurrence_total', 'recurrence_count'
],
'webhooks' => [
'max_attempts' => env('WEBHOOK_MAX_ATTEMPTS', 3),

190
config/search.php Normal file
View File

@ -0,0 +1,190 @@
<?php
return [
'operators' => [
'user_action' => ['alias' => false, 'needs_context' => true,],
'account_id' => ['alias' => false, 'needs_context' => true,],
'source_account_id' => ['alias' => false, 'needs_context' => true,],
'destination_account_id' => ['alias' => false, 'needs_context' => true,],
'transaction_type' => ['alias' => false, 'needs_context' => true,],
'type' => ['alias' => true, 'alias_for' => 'transaction_type', 'needs_context' => true,],
'tag_is' => ['alias' => false, 'needs_context' => true,],
'tag_is_not' => ['alias' => false, 'needs_context' => true,],
'tag' => ['alias' => true, 'alias_for' => 'tag_is', 'needs_context' => true,],
'description_is' => ['alias' => false, 'needs_context' => true,],
'description' => ['alias' => true, 'alias_for' => 'description_is', 'needs_context' => true,],
'description_contains' => ['alias' => false, 'needs_context' => true,],
'description_ends' => ['alias' => false, 'needs_context' => true,],
'description_starts' => ['alias' => false, 'needs_context' => true,],
'notes_is' => ['alias' => false, 'needs_context' => true,],
'notes_contains' => ['alias' => false, 'needs_context' => true,],
'notes' => ['alias' => true, 'alias_for' => 'notes_contains', 'needs_context' => true,],
'notes_ends' => ['alias' => false, 'needs_context' => true,],
'notes_starts' => ['alias' => false, 'needs_context' => true,],
'source_account_is' => ['alias' => false, 'needs_context' => true,],
'from_account_is' => ['alias' => true, 'alias_for' => 'source_account_is', 'needs_context' => true,],
'source_account_contains' => ['alias' => false, 'needs_context' => true,],
'source' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,],
'from' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,],
'from_account_contains' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,],
'source_account_ends' => ['alias' => false, 'needs_context' => true,],
'from_account_ends' => ['alias' => true, 'alias_for' => 'source_account_ends', 'needs_context' => true,],
'source_account_starts' => ['alias' => false, 'needs_context' => true,],
'from_account_starts' => ['alias' => true, 'alias_for' => 'source_account_starts', 'needs_context' => true,],
'source_account_nr_is' => ['alias' => false, 'needs_context' => true,],
'from_account_nr_is' => ['alias' => true, 'alias_for' => 'source_account_nr_is', 'needs_context' => true,],
'source_account_nr_contains' => ['alias' => false, 'needs_context' => true,],
'from_account_nr_contains' => ['alias' => true, 'alias_for' => 'source_account_nr_contains', 'needs_context' => true,],
'source_account_nr_ends' => ['alias' => false, 'needs_context' => true,],
'from_account_nr_ends' => ['alias' => true, 'alias_for' => 'source_account_nr_ends', 'needs_context' => true,],
'source_account_nr_starts' => ['alias' => false, 'needs_context' => true,],
'from_account_nr_starts' => ['alias' => true, 'alias_for' => 'source_account_nr_starts', 'needs_context' => true,],
'destination_account_is' => ['alias' => false, 'needs_context' => true,],
'to_account_is' => ['alias' => true, 'alias_for' => 'destination_account_is', 'needs_context' => true,],
'destination_account_contains' => ['alias' => false, 'needs_context' => true,],
'destination' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true,],
'to' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true,],
'to_account_contains' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true,],
'destination_account_ends' => ['alias' => false, 'needs_context' => true,],
'to_account_ends' => ['alias' => true, 'alias_for' => 'destination_account_ends', 'needs_context' => true,],
'destination_account_starts' => ['alias' => false, 'needs_context' => true,],
'to_account_starts' => ['alias' => true, 'alias_for' => 'destination_account_starts', 'needs_context' => true,],
'destination_account_nr_is' => ['alias' => false, 'needs_context' => true,],
'to_account_nr_is' => ['alias' => true, 'alias_for' => 'destination_account_nr_is', 'needs_context' => true,],
'destination_account_nr_contains' => ['alias' => false, 'needs_context' => true,],
'to_account_nr_contains' => ['alias' => true, 'alias_for' => 'destination_account_nr_contains', 'needs_context' => true,],
'destination_account_nr_ends' => ['alias' => false, 'needs_context' => true,],
'to_account_nr_ends' => ['alias' => true, 'alias_for' => 'destination_account_nr_ends', 'needs_context' => true,],
'destination_account_nr_starts' => ['alias' => false, 'needs_context' => true,],
'to_account_nr_starts' => ['alias' => true, 'alias_for' => 'destination_account_nr_starts', 'needs_context' => true,],
'account_is' => ['alias' => false, 'needs_context' => true,],
'account_contains' => ['alias' => false, 'needs_context' => true,],
'account_ends' => ['alias' => false, 'needs_context' => true,],
'account_starts' => ['alias' => false, 'needs_context' => true,],
'account_nr_is' => ['alias' => false, 'needs_context' => true,],
'account_nr_contains' => ['alias' => false, 'needs_context' => true,],
'account_nr_ends' => ['alias' => false, 'needs_context' => true,],
'account_nr_starts' => ['alias' => false, 'needs_context' => true,],
'category_is' => ['alias' => false, 'needs_context' => true,],
'category_contains' => ['alias' => false, 'needs_context' => true,],
'category' => ['alias' => true, 'alias_for' => 'category_contains', 'needs_context' => true,],
'category_ends' => ['alias' => false, 'needs_context' => true,],
'category_starts' => ['alias' => false, 'needs_context' => true,],
'budget_is' => ['alias' => false, 'needs_context' => true,],
'budget_contains' => ['alias' => false, 'needs_context' => true,],
'budget' => ['alias' => true, 'alias_for' => 'budget_contains', 'needs_context' => true,],
'budget_ends' => ['alias' => false, 'needs_context' => true,],
'budget_starts' => ['alias' => false, 'needs_context' => true,],
'bill_is' => ['alias' => false, 'needs_context' => true,],
'bill_contains' => ['alias' => false, 'needs_context' => true,],
'bill' => ['alias' => true, 'alias_for' => 'bill_contains', 'needs_context' => true,],
'bill_ends' => ['alias' => false, 'needs_context' => true,],
'bill_starts' => ['alias' => false, 'needs_context' => true,],
'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,],
'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,],
'internal_reference_ends' => ['alias' => false, 'needs_context' => true,],
'internal_reference_starts' => ['alias' => false, 'needs_context' => true,],
'external_url_is' => ['alias' => false, 'needs_context' => true,],
'external_url_contains' => ['alias' => false, 'needs_context' => true,],
'external_url' => ['alias' => true, 'alias_for' => 'external_url_contains', 'needs_context' => true,],
'external_url_ends' => ['alias' => false, 'needs_context' => true,],
'external_url_starts' => ['alias' => false, 'needs_context' => true,],
'has_attachments' => ['alias' => false, 'needs_context' => false,],
'has_any_category' => ['alias' => false, 'needs_context' => false,],
'has_any_budget' => ['alias' => false, 'needs_context' => false,],
'has_any_bill' => ['alias' => false, 'needs_context' => false,],
'has_any_tag' => ['alias' => false, 'needs_context' => false,],
'any_notes' => ['alias' => false, 'needs_context' => false,],
'any_external_url' => ['alias' => false, 'needs_context' => false,],
'has_no_attachments' => ['alias' => false, 'needs_context' => false,],
'has_no_category' => ['alias' => false, 'needs_context' => false,],
'has_no_budget' => ['alias' => false, 'needs_context' => false,],
'has_no_bill' => ['alias' => false, 'needs_context' => false,],
'has_no_tag' => ['alias' => false, 'needs_context' => false,],
'no_notes' => ['alias' => false, 'needs_context' => false,],
'no_external_url' => ['alias' => false, 'needs_context' => false,],
'source_is_cash' => ['alias' => false, 'needs_context' => false,],
'destination_is_cash' => ['alias' => false, 'needs_context' => false,],
'account_is_cash' => ['alias' => false, 'needs_context' => false,],
'currency_is' => ['alias' => false, 'needs_context' => true,],
'foreign_currency_is' => ['alias' => false, 'needs_context' => true,],
'id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true,],
'journal_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true,],
'recurrence_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true,],
'date_on' => ['alias' => false, 'needs_context' => true,],
'date' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true,],
'date_is' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true,],
'on' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true,],
'date_before' => ['alias' => false, 'needs_context' => true,],
'before' => ['alias' => true, 'alias_for' => 'date_before', 'needs_context' => true,],
'date_after' => ['alias' => false, 'needs_context' => true,],
'after' => ['alias' => true, 'alias_for' => 'date_after', 'needs_context' => true,],
'interest_date_on' => ['alias' => false, 'needs_context' => true,],
'interest_date' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true,],
'interest_date_is' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true,],
'interest_date_before' => ['alias' => false, 'needs_context' => true,],
'interest_date_after' => ['alias' => false, 'needs_context' => true,],
'book_date_on' => ['alias' => false, 'needs_context' => true,],
'book_date' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true,],
'book_date_is' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true,],
'book_date_before' => ['alias' => false, 'needs_context' => true,],
'book_date_after' => ['alias' => false, 'needs_context' => true,],
'process_date_on' => ['alias' => false, 'needs_context' => true,],
'process_date' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true,],
'process_date_is' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true,],
'process_date_before' => ['alias' => false, 'needs_context' => true,],
'process_date_after' => ['alias' => false, 'needs_context' => true,],
'due_date_on' => ['alias' => false, 'needs_context' => true,],
'due_date' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true,],
'due_date_is' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true,],
'due_date_before' => ['alias' => false, 'needs_context' => true,],
'due_date_after' => ['alias' => false, 'needs_context' => true,],
'payment_date_on' => ['alias' => false, 'needs_context' => true,],
'payment_date' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true,],
'payment_date_is' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true,],
'payment_date_before' => ['alias' => false, 'needs_context' => true,],
'payment_date_after' => ['alias' => false, 'needs_context' => true,],
'invoice_date_on' => ['alias' => false, 'needs_context' => true,],
'invoice_date' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true,],
'invoice_date_is' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true,],
'invoice_date_before' => ['alias' => false, 'needs_context' => true,],
'invoice_date_after' => ['alias' => false, 'needs_context' => true,],
'created_at_on' => ['alias' => false, 'needs_context' => true,],
'created_at' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true,],
'created_at_is' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true,],
'created_at_before' => ['alias' => false, 'needs_context' => true,],
'created_at_after' => ['alias' => false, 'needs_context' => true,],
'updated_at_on' => ['alias' => false, 'needs_context' => true,],
'updated_at' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true,],
'updated_at_is' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true,],
'updated_at_before' => ['alias' => false, 'needs_context' => true,],
'updated_at_after' => ['alias' => false, 'needs_context' => true,],
'created_on_on' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true,],
'created_on' => ['alias' => true, 'alias_for' => 'created_at', 'needs_context' => true,],
'created_on_before' => ['alias' => true, 'alias_for' => 'created_at_before', 'needs_context' => true,],
'created_on_after' => ['alias' => true, 'alias_for' => 'created_at_after', 'needs_context' => true,],
'updated_on_on' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true,],
'updated_on' => ['alias' => true, 'alias_for' => 'updated_at', 'needs_context' => true,],
'updated_on_before' => ['alias' => true, 'alias_for' => 'updated_at_before', 'needs_context' => true,],
'updated_on_after' => ['alias' => true, 'alias_for' => 'updated_at_after', 'needs_context' => true,],
'amount_is' => ['alias' => false, 'needs_context' => true,],
'amount' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true,],
'amount_exactly' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true,],
'amount_less' => ['alias' => false, 'needs_context' => true,],
'amount_max' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true,],
'amount_more' => ['alias' => false, 'needs_context' => true,],
'amount_min' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true,],
'foreign_amount_is' => ['alias' => false, 'needs_context' => true,],
'foreign_amount' => ['alias' => true, 'alias_for' => 'foreign_amount_is', 'needs_context' => true,],
'foreign_amount_less' => ['alias' => false, 'needs_context' => true,],
'foreign_amount_max' => ['alias' => true, 'alias_for' => 'foreign_amount_less', 'needs_context' => true,],
'foreign_amount_more' => ['alias' => false, 'needs_context' => true,],
'foreign_amount_min' => ['alias' => true, 'alias_for' => 'foreign_amount_more', 'needs_context' => true,],
],
];

View File

@ -443,7 +443,12 @@ return [
'applied_rule_group_selection' => 'Rule group ":title" has been applied to your selection.',
// actions and triggers
'rule_trigger_store_journal' => 'When a transaction is created',
'rule_trigger_update_journal' => 'When a transaction is updated',
'rule_trigger_user_action' => 'User action is ":trigger_value"',
// OLD values (remove non-doubles later):
'rule_trigger_source_account_starts_choice' => 'Source account name starts with..',
'rule_trigger_source_account_starts' => 'Source account name starts with ":trigger_value"',
'rule_trigger_source_account_ends_choice' => 'Source account name ends with..',
@ -452,14 +457,14 @@ return [
'rule_trigger_source_account_is' => 'Source account name is ":trigger_value"',
'rule_trigger_source_account_contains_choice' => 'Source account name contains..',
'rule_trigger_source_account_contains' => 'Source account name contains ":trigger_value"',
'rule_trigger_account_id_choice' => 'Account ID (source/destination) is exactly..',
'rule_trigger_account_id' => 'Account ID (source/destination) is exactly :trigger_value',
'rule_trigger_account_id_choice' => 'Either account ID is exactly..',
'rule_trigger_account_id' => 'Either account ID is exactly :trigger_value',
'rule_trigger_source_account_id_choice' => 'Source account ID is exactly..',
'rule_trigger_source_account_id' => 'Source account ID is exactly :trigger_value',
'rule_trigger_destination_account_id_choice' => 'Destination account ID is exactly..',
'rule_trigger_destination_account_id' => 'Destination account ID is exactly :trigger_value',
'rule_trigger_account_is_cash_choice' => 'Account (source/destination) is (cash) account',
'rule_trigger_account_is_cash' => 'Account (source/destination) is (cash) account',
'rule_trigger_account_is_cash_choice' => 'Either account is cash',
'rule_trigger_account_is_cash' => 'Either account is cash',
'rule_trigger_source_is_cash_choice' => 'Source account is (cash) account',
'rule_trigger_source_is_cash' => 'Source account is (cash) account',
'rule_trigger_destination_is_cash_choice' => 'Destination account is (cash) account',
@ -494,8 +499,8 @@ return [
'rule_trigger_category_is' => 'Category is ":trigger_value"',
'rule_trigger_amount_less_choice' => 'Amount is less than..',
'rule_trigger_amount_less' => 'Amount is less than :trigger_value',
'rule_trigger_amount_exactly_choice' => 'Amount is..',
'rule_trigger_amount_exactly' => 'Amount is :trigger_value',
'rule_trigger_amount_is_choice' => 'Amount is..',
'rule_trigger_amount_is' => 'Amount is :trigger_value',
'rule_trigger_amount_more_choice' => 'Amount is more than..',
'rule_trigger_amount_more' => 'Amount is more than :trigger_value',
'rule_trigger_description_starts_choice' => 'Description starts with..',
@ -506,28 +511,26 @@ return [
'rule_trigger_description_contains' => 'Description contains ":trigger_value"',
'rule_trigger_description_is_choice' => 'Description is..',
'rule_trigger_description_is' => 'Description is ":trigger_value"',
'rule_trigger_date_is_choice' => 'Transaction date is..',
'rule_trigger_date_is' => 'Transaction date is ":trigger_value"',
'rule_trigger_date_on_choice' => 'Transaction date is..',
'rule_trigger_date_on' => 'Transaction date is ":trigger_value"',
'rule_trigger_date_before_choice' => 'Transaction date is before..',
'rule_trigger_date_before' => 'Transaction date is before ":trigger_value"',
'rule_trigger_date_after_choice' => 'Transaction date is after..',
'rule_trigger_date_after' => 'Transaction date is after ":trigger_value"',
'rule_trigger_created_on_choice' => 'Transaction was made on..',
'rule_trigger_created_on' => 'Transaction was made on ":trigger_value"',
'rule_trigger_updated_on_choice' => 'Transaction was last edited on..',
'rule_trigger_updated_on' => 'Transaction was last edited on ":trigger_value"',
'rule_trigger_created_at_on_choice' => 'Transaction was made on..',
'rule_trigger_created_at_on' => 'Transaction was made on ":trigger_value"',
'rule_trigger_updated_at_on_choice' => 'Transaction was last edited on..',
'rule_trigger_updated_at_on' => 'Transaction was last edited on ":trigger_value"',
'rule_trigger_budget_is_choice' => 'Budget is..',
'rule_trigger_budget_is' => 'Budget is ":trigger_value"',
'rule_trigger_tag_is_choice' => '(A) tag is..',
'rule_trigger_tag_is' => 'A tag is ":trigger_value"',
'rule_trigger_tag_is_choice' => 'Any tag is..',
'rule_trigger_tag_is' => 'Any tag is ":trigger_value"',
'rule_trigger_currency_is_choice' => 'Transaction currency is..',
'rule_trigger_currency_is' => 'Transaction currency is ":trigger_value"',
'rule_trigger_foreign_currency_is_choice' => 'Transaction foreign currency is..',
'rule_trigger_foreign_currency_is' => 'Transaction foreign currency is ":trigger_value"',
'rule_trigger_has_attachments_choice' => 'Has at least this many attachments',
'rule_trigger_has_attachments' => 'Has at least :trigger_value attachment(s)',
'rule_trigger_store_journal' => 'When a transaction is created',
'rule_trigger_update_journal' => 'When a transaction is updated',
'rule_trigger_has_no_category_choice' => 'Has no category',
'rule_trigger_has_no_category' => 'Transaction has no category',
'rule_trigger_has_any_category_choice' => 'Has a (any) category',
@ -548,20 +551,20 @@ return [
'rule_trigger_any_notes' => 'Transaction has (any) notes',
'rule_trigger_no_notes_choice' => 'Has no notes',
'rule_trigger_no_notes' => 'Transaction has no notes',
'rule_trigger_notes_are_choice' => 'Notes are..',
'rule_trigger_notes_are' => 'Notes are ":trigger_value"',
'rule_trigger_notes_contain_choice' => 'Notes contain..',
'rule_trigger_notes_contain' => 'Notes contain ":trigger_value"',
'rule_trigger_notes_start_choice' => 'Notes start with..',
'rule_trigger_notes_start' => 'Notes start with ":trigger_value"',
'rule_trigger_notes_end_choice' => 'Notes end with..',
'rule_trigger_notes_end' => 'Notes end with ":trigger_value"',
'rule_trigger_notes_is_choice' => 'Notes are..',
'rule_trigger_notes_is' => 'Notes are ":trigger_value"',
'rule_trigger_notes_contains_choice' => 'Notes contain..',
'rule_trigger_notes_contains' => 'Notes contain ":trigger_value"',
'rule_trigger_notes_starts_choice' => 'Notes start with..',
'rule_trigger_notes_starts' => 'Notes start with ":trigger_value"',
'rule_trigger_notes_ends_choice' => 'Notes end with..',
'rule_trigger_notes_ends' => 'Notes end with ":trigger_value"',
'rule_trigger_bill_is_choice' => 'Bill is..',
'rule_trigger_bill_is' => 'Bill is ":trigger_value"',
'rule_trigger_external_id_choice' => 'External ID is..',
'rule_trigger_external_id' => 'External ID is ":trigger_value"',
'rule_trigger_internal_reference_choice' => 'Internal reference is..',
'rule_trigger_internal_reference' => 'Internal reference is ":trigger_value"',
'rule_trigger_external_id_is_choice' => 'External ID is..',
'rule_trigger_external_id_is' => 'External ID is ":trigger_value"',
'rule_trigger_internal_reference_is_choice' => 'Internal reference is..',
'rule_trigger_internal_reference_is' => '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',
@ -571,6 +574,119 @@ return [
'rule_trigger_id_choice' => 'Transaction ID is..',
'rule_trigger_id' => 'Transaction ID is ":trigger_value"',
// new values:
'rule_trigger_user_action_choice' => 'User action is ":trigger_value"',
'rule_trigger_tag_is_not_choice' => 'No tag is ":trigger_value"',
'rule_trigger_tag_is_not' => 'No tag is..',
'rule_trigger_account_is_choice' => 'Either account is exactly..',
'rule_trigger_account_is' => 'Either account is exactly ":trigger_value"',
'rule_trigger_account_contains_choice' => 'Either account contains..',
'rule_trigger_account_contains' => 'Either account contains ":trigger_value"',
'rule_trigger_account_ends_choice' => 'Either account ends with..',
'rule_trigger_account_ends' => 'Either account ends with ":trigger_value"',
'rule_trigger_account_starts_choice' => 'Either account starts with..',
'rule_trigger_account_starts' => 'Either account starts with ":trigger_value"',
'rule_trigger_account_nr_is_choice' => 'Either account number / IBAN is..',
'rule_trigger_account_nr_is' => 'Either account number / IBAN is ":trigger_value"',
'rule_trigger_account_nr_contains_choice' => 'Either account number / IBAN contains..',
'rule_trigger_account_nr_contains' => 'Either account number / IBAN contains ":trigger_value"',
'rule_trigger_account_nr_ends_choice' => 'Either account number / IBAN ends with..',
'rule_trigger_account_nr_ends' => 'Either account number / IBAN ends with ":trigger_value"',
'rule_trigger_account_nr_starts_choice' => 'Either account number / IBAN starts with..',
'rule_trigger_account_nr_starts' => 'Either account number / IBAN starts with ":trigger_value"',
'rule_trigger_category_contains_choice' => 'Category contains..',
'rule_trigger_category_contains' => 'Category contains ":trigger_value"',
'rule_trigger_category_ends_choice' => 'Category ends with..',
'rule_trigger_category_ends' => 'Category ends with ":trigger_value"',
'rule_trigger_category_starts_choice' => 'Category starts with..',
'rule_trigger_category_starts' => 'Category starts with ":trigger_value"',
'rule_trigger_budget_contains_choice' => 'Budget contains..',
'rule_trigger_budget_contains' => 'Budget contains ":trigger_value"',
'rule_trigger_budget_ends_choice' => 'Budget ends with..',
'rule_trigger_budget_ends' => 'Budget ends with ":trigger_value"',
'rule_trigger_budget_starts_choice' => 'Budget starts with..',
'rule_trigger_budget_starts' => 'Budget starts with ":trigger_value"',
'rule_trigger_bill_contains_choice' => 'Bill contains..',
'rule_trigger_bill_contains' => 'Bill contains ":trigger_value"',
'rule_trigger_bill_ends_choice' => 'Bill ends with..',
'rule_trigger_bill_ends' => 'Bill ends with ":trigger_value"',
'rule_trigger_bill_starts_choice' => 'Bill starts with..',
'rule_trigger_bill_starts' => 'Bill starts with ":trigger_value"',
'rule_trigger_external_id_contains_choice' => 'External ID contains..',
'rule_trigger_external_id_contains' => 'External ID contains ":trigger_value"',
'rule_trigger_external_id_ends_choice' => 'External ID ends with..',
'rule_trigger_external_id_ends' => 'External ID ends with ":trigger_value"',
'rule_trigger_external_id_starts_choice' => 'External ID starts with..',
'rule_trigger_external_id_starts' => 'External ID starts with ":trigger_value"',
'rule_trigger_internal_reference_contains_choice' => 'Internal reference contains..',
'rule_trigger_internal_reference_contains' => 'Internal reference contains ":trigger_value"',
'rule_trigger_internal_reference_ends_choice' => 'Internal reference ends with..',
'rule_trigger_internal_reference_ends' => 'Internal reference ends with ":trigger_value"',
'rule_trigger_internal_reference_starts_choice' => 'Internal reference starts with..',
'rule_trigger_internal_reference_starts' => 'Internal reference starts with ":trigger_value"',
'rule_trigger_external_url_is_choice' => 'External URL is..',
'rule_trigger_external_url_is' => 'External URL is ":trigger_value"',
'rule_trigger_external_url_contains_choice' => 'External URL contains..',
'rule_trigger_external_url_contains' => 'External URL contains ":trigger_value"',
'rule_trigger_external_url_ends_choice' => 'External URL ends with..',
'rule_trigger_external_url_ends' => 'External URL ends with ":trigger_value"',
'rule_trigger_external_url_starts_choice' => 'External URL starts with..',
'rule_trigger_external_url_starts' => 'External URL starts with ":trigger_value"',
'rule_trigger_has_no_attachments_choice' => 'Has no attachments',
'rule_trigger_has_no_attachments' => 'Transaction has no attachments',
'rule_trigger_recurrence_id_choice' => 'Recurring transaction ID is..',
'rule_trigger_recurrence_id' => 'Recurring transaction ID is ":trigger_value"',
'rule_trigger_interest_date_on_choice' => 'Interest date is on..',
'rule_trigger_interest_date_on' => 'Interest date is on ":trigger_value"',
'rule_trigger_interest_date_before_choice' => 'Interest date is before..',
'rule_trigger_interest_date_before' => 'Interest date is on ":trigger_value"',
'rule_trigger_interest_date_after_choice' => 'Interest date is after..',
'rule_trigger_interest_date_after' => 'Interest date is on ":trigger_value"',
'rule_trigger_book_date_on_choice' => 'Book date is on..',
'rule_trigger_book_date_on' => 'Book date is on ":trigger_value"',
'rule_trigger_book_date_before_choice' => 'Book date is before..',
'rule_trigger_book_date_before' => 'Book date is before ":trigger_value"',
'rule_trigger_book_date_after_choice' => 'Book date is after..',
'rule_trigger_book_date_after' => 'Book date is after ":trigger_value"',
'rule_trigger_process_date_on_choice' => 'Process date is on..',
'rule_trigger_process_date_on' => 'Process date is ":trigger_value"',
'rule_trigger_process_date_before_choice' => 'Process date is before..',
'rule_trigger_process_date_before' => 'Process date is before ":trigger_value"',
'rule_trigger_process_date_after_choice' => 'Process date is after..',
'rule_trigger_process_date_after' => 'Process date is after ":trigger_value"',
'rule_trigger_due_date_on_choice' => 'Due date is on..',
'rule_trigger_due_date_on' => 'Due date is on ":trigger_value"',
'rule_trigger_due_date_before_choice' => 'Due date is before..',
'rule_trigger_due_date_before' => 'Due date is before ":trigger_value"',
'rule_trigger_due_date_after_choice' => 'Due date is after..',
'rule_trigger_due_date_after' => 'Due date is after ":trigger_value"',
'rule_trigger_payment_date_on_choice' => 'Payment date is on..',
'rule_trigger_payment_date_on' => 'Payment date is on ":trigger_value"',
'rule_trigger_payment_date_before_choice' => 'Payment date is before..',
'rule_trigger_payment_date_before' => 'Payment date is before ":trigger_value"',
'rule_trigger_payment_date_after_choice' => 'Payment date is after..',
'rule_trigger_payment_date_after' => 'Payment date is after ":trigger_value"',
'rule_trigger_invoice_date_on_choice' => 'Invoice date is on..',
'rule_trigger_invoice_date_on' => 'Invoice date is on ":trigger_value"',
'rule_trigger_invoice_date_before_choice' => 'Invoice date is before..',
'rule_trigger_invoice_date_before' => 'Invoice date is before ":trigger_value"',
'rule_trigger_invoice_date_after_choice' => 'Invoice date is after..',
'rule_trigger_invoice_date_after' => 'Invoice date is after ":trigger_value"',
'rule_trigger_created_at_before_choice' => 'Transaction was created before..',
'rule_trigger_created_at_before' => 'Transaction was created before ":trigger_value"',
'rule_trigger_created_at_after_choice' => 'Transaction was created after..',
'rule_trigger_created_at_after' => 'Transaction was created after ":trigger_value"',
'rule_trigger_updated_at_before_choice' => 'Transaction was last updated before..',
'rule_trigger_updated_at_before' => 'Transaction was last updated before ":trigger_value"',
'rule_trigger_updated_at_after_choice' => 'Transaction was last updated after..',
'rule_trigger_updated_at_after' => 'Transaction was last updated after ":trigger_value"',
'rule_trigger_foreign_amount_is_choice' => 'Foreign amount is exactly..',
'rule_trigger_foreign_amount_is' => 'Foreign amount is exactly ":trigger_value"',
'rule_trigger_foreign_amount_less_choice' => 'Foreign amount is less than..',
'rule_trigger_foreign_amount_less' => 'Foreign amount is less than ":trigger_value"',
'rule_trigger_foreign_amount_more_choice' => 'Foreign amount is more than..',
'rule_trigger_foreign_amount_more' => 'Foreign amount is more than ":trigger_value"',
// actions
'rule_action_delete_transaction_choice' => 'DELETE transaction (!)',