mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-18 18:44:16 +00:00
Rule engine and search engine now use the same operators; making them interchangeable.
This commit is contained in:
@@ -25,6 +25,7 @@ namespace FireflyIII\Api\V1\Requests;
|
|||||||
|
|
||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
use FireflyIII\Support\Request\ConvertsDataTypes;
|
use FireflyIII\Support\Request\ConvertsDataTypes;
|
||||||
|
use FireflyIII\Support\Request\GetRuleConfiguration;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\Validator;
|
use Illuminate\Validation\Validator;
|
||||||
use function is_array;
|
use function is_array;
|
||||||
@@ -35,7 +36,8 @@ use function is_array;
|
|||||||
*/
|
*/
|
||||||
class RuleStoreRequest extends FormRequest
|
class RuleStoreRequest extends FormRequest
|
||||||
{
|
{
|
||||||
use ConvertsDataTypes;
|
use ConvertsDataTypes, GetRuleConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authorize logged in users.
|
* Authorize logged in users.
|
||||||
*
|
*
|
||||||
@@ -88,11 +90,11 @@ class RuleStoreRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$validTriggers = array_keys(config('firefly.rule-triggers'));
|
$validTriggers = $this->getTriggers();
|
||||||
$validActions = array_keys(config('firefly.rule-actions'));
|
$validActions = array_keys(config('firefly.rule-actions'));
|
||||||
|
|
||||||
// some triggers and actions require text:
|
// some triggers and actions require text:
|
||||||
$contextTriggers = implode(',', config('firefly.context-rule-triggers'));
|
$contextTriggers = implode(',', $this->getTriggersWithContext());
|
||||||
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@@ -25,6 +25,7 @@ namespace FireflyIII\Api\V1\Requests;
|
|||||||
|
|
||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
use FireflyIII\Support\Request\ConvertsDataTypes;
|
use FireflyIII\Support\Request\ConvertsDataTypes;
|
||||||
|
use FireflyIII\Support\Request\GetRuleConfiguration;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\Validator;
|
use Illuminate\Validation\Validator;
|
||||||
use function is_array;
|
use function is_array;
|
||||||
@@ -35,7 +36,7 @@ use function is_array;
|
|||||||
*/
|
*/
|
||||||
class RuleUpdateRequest extends FormRequest
|
class RuleUpdateRequest extends FormRequest
|
||||||
{
|
{
|
||||||
use ConvertsDataTypes;
|
use ConvertsDataTypes, GetRuleConfiguration;
|
||||||
/**
|
/**
|
||||||
* Authorize logged in users.
|
* Authorize logged in users.
|
||||||
*
|
*
|
||||||
@@ -88,12 +89,12 @@ class RuleUpdateRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$validTriggers = array_keys(config('firefly.rule-triggers'));
|
$validTriggers = $this->getTriggers();
|
||||||
$validActions = array_keys(config('firefly.rule-actions'));
|
$validActions = array_keys(config('firefly.rule-actions'));
|
||||||
$rule = $this->route()->parameter('rule');
|
$rule = $this->route()->parameter('rule');
|
||||||
|
|
||||||
// some triggers and actions require text:
|
// some triggers and actions require text:
|
||||||
$contextTriggers = implode(',', config('firefly.context-rule-triggers'));
|
$contextTriggers = implode(',', $this->getTriggersWithContext());
|
||||||
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@@ -73,7 +73,7 @@ class RuleController extends Controller
|
|||||||
public function trigger(Request $request): JsonResponse
|
public function trigger(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$count = (int) $request->get('count') > 0 ? (int) $request->get('count') : 1;
|
$count = (int) $request->get('count') > 0 ? (int) $request->get('count') : 1;
|
||||||
$keys = array_keys(config('firefly.rule-triggers'));
|
$keys = array_keys(config('firefly.search.operators'));
|
||||||
$triggers = [];
|
$triggers = [];
|
||||||
foreach ($keys as $key) {
|
foreach ($keys as $key) {
|
||||||
if ('user_action' !== $key) {
|
if ('user_action' !== $key) {
|
||||||
|
@@ -24,6 +24,7 @@ namespace FireflyIII\Http\Requests;
|
|||||||
|
|
||||||
use FireflyIII\Models\Rule;
|
use FireflyIII\Models\Rule;
|
||||||
use FireflyIII\Support\Request\ConvertsDataTypes;
|
use FireflyIII\Support\Request\ConvertsDataTypes;
|
||||||
|
use FireflyIII\Support\Request\GetRuleConfiguration;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -31,7 +32,7 @@ use Illuminate\Foundation\Http\FormRequest;
|
|||||||
*/
|
*/
|
||||||
class RuleFormRequest extends FormRequest
|
class RuleFormRequest extends FormRequest
|
||||||
{
|
{
|
||||||
use ConvertsDataTypes;
|
use ConvertsDataTypes, GetRuleConfiguration;
|
||||||
/**
|
/**
|
||||||
* Verify the request.
|
* Verify the request.
|
||||||
*
|
*
|
||||||
@@ -73,14 +74,14 @@ class RuleFormRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$validTriggers = array_keys(config('firefly.rule-triggers'));
|
$validTriggers = $this->getTriggers();
|
||||||
$validActions = array_keys(config('firefly.rule-actions'));
|
$validActions = array_keys(config('firefly.rule-actions'));
|
||||||
|
|
||||||
// some actions require text (aka context):
|
// some actions require text (aka context):
|
||||||
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
||||||
|
|
||||||
// some triggers require text (aka context):
|
// some triggers require text (aka context):
|
||||||
$contextTriggers = implode(',', config('firefly.context-rule-triggers'));
|
$contextTriggers = implode(',', $this->getTriggersWithContext());
|
||||||
|
|
||||||
// initial set of rules:
|
// initial set of rules:
|
||||||
$rules = [
|
$rules = [
|
||||||
|
@@ -22,6 +22,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
|
use FireflyIII\Support\Request\GetRuleConfiguration;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -31,6 +32,7 @@ use Illuminate\Foundation\Http\FormRequest;
|
|||||||
*/
|
*/
|
||||||
class TestRuleFormRequest extends FormRequest
|
class TestRuleFormRequest extends FormRequest
|
||||||
{
|
{
|
||||||
|
use GetRuleConfiguration;
|
||||||
/**
|
/**
|
||||||
* Verify the request.
|
* Verify the request.
|
||||||
*
|
*
|
||||||
@@ -51,7 +53,7 @@ class TestRuleFormRequest extends FormRequest
|
|||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
// fixed
|
// fixed
|
||||||
$validTriggers = array_keys(config('firefly.rule-triggers'));
|
$validTriggers = $this->getTriggers();
|
||||||
$rules = [
|
$rules = [
|
||||||
'rule-trigger.*' => 'required|min:1|in:' . implode(',', $validTriggers),
|
'rule-trigger.*' => 'required|min:1|in:' . implode(',', $validTriggers),
|
||||||
'rule-trigger-value.*' => 'required|min:1|ruleTriggerValue',
|
'rule-trigger-value.*' => 'required|min:1|ruleTriggerValue',
|
||||||
|
@@ -49,6 +49,6 @@ class Domain
|
|||||||
*/
|
*/
|
||||||
public static function getRuleTriggers(): array
|
public static function getRuleTriggers(): array
|
||||||
{
|
{
|
||||||
return config('firefly.rule-triggers');
|
return array_keys(config('firefly.search.operators'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
52
app/Support/Request/GetRuleConfiguration.php
Normal file
52
app/Support/Request/GetRuleConfiguration.php
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* GetRuleConfiguration.php
|
||||||
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
|
*
|
||||||
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FireflyIII\Support\Request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trait GetRuleConfiguration
|
||||||
|
*/
|
||||||
|
trait GetRuleConfiguration
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getTriggers(): array
|
||||||
|
{
|
||||||
|
return array_keys(config('firefly.search.operators'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getTriggersWithContext(): array
|
||||||
|
{
|
||||||
|
$list = config('firefly.search.operators');
|
||||||
|
$return = [];
|
||||||
|
foreach ($list as $key => $info) {
|
||||||
|
if (true === $info['needs_context']) {
|
||||||
|
$return[] = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
@@ -77,7 +77,7 @@ class Rule extends AbstractExtension
|
|||||||
return new TwigFunction(
|
return new TwigFunction(
|
||||||
'allRuleTriggers',
|
'allRuleTriggers',
|
||||||
static function () {
|
static function () {
|
||||||
$ruleTriggers = array_keys(Config::get('firefly.rule-triggers'));
|
$ruleTriggers = array_keys(config('firefly.search.operators'));;
|
||||||
$possibleTriggers = [];
|
$possibleTriggers = [];
|
||||||
foreach ($ruleTriggers as $key) {
|
foreach ($ruleTriggers as $key) {
|
||||||
if ('user_action' !== $key) {
|
if ('user_action' !== $key) {
|
||||||
|
@@ -37,7 +37,7 @@ use Log;
|
|||||||
class TriggerFactory
|
class TriggerFactory
|
||||||
{
|
{
|
||||||
/** @var array array with trigger types */
|
/** @var array array with trigger types */
|
||||||
protected static $triggerTypes = [];
|
protected static array $triggerTypes = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the trigger for the given type and journal. This method returns the actual implementation
|
* Returns the trigger for the given type and journal. This method returns the actual implementation
|
||||||
|
@@ -351,7 +351,7 @@ class FireflyValidator extends Validator
|
|||||||
}
|
}
|
||||||
|
|
||||||
// and finally a "will match everything check":
|
// and finally a "will match everything check":
|
||||||
$classes = app('config')->get('firefly.rule-triggers');
|
$classes = array_keys(config('firefly.search.operators'));;
|
||||||
/** @var TriggerInterface $class */
|
/** @var TriggerInterface $class */
|
||||||
$class = $classes[$triggerType] ?? false;
|
$class = $classes[$triggerType] ?? false;
|
||||||
if (false === $class) {
|
if (false === $class) {
|
||||||
|
@@ -445,59 +445,6 @@ return [
|
|||||||
'configName' => ConfigurationName::class,
|
'configName' => ConfigurationName::class,
|
||||||
|
|
||||||
],
|
],
|
||||||
'rule-triggers' => [
|
|
||||||
'user_action' => UserAction::class,
|
|
||||||
'from_account_starts' => FromAccountStarts::class,
|
|
||||||
'from_account_ends' => FromAccountEnds::class,
|
|
||||||
'from_account_is' => FromAccountIs::class,
|
|
||||||
'from_account_contains' => FromAccountContains::class,
|
|
||||||
'from_account_nr_starts' => FromAccountNumberStarts::class,
|
|
||||||
'from_account_nr_ends' => FromAccountNumberEnds::class,
|
|
||||||
'from_account_nr_is' => FromAccountNumberIs::class,
|
|
||||||
'from_account_nr_contains' => FromAccountNumberContains::class,
|
|
||||||
'to_account_starts' => ToAccountStarts::class,
|
|
||||||
'to_account_ends' => ToAccountEnds::class,
|
|
||||||
'to_account_is' => ToAccountIs::class,
|
|
||||||
'to_account_contains' => ToAccountContains::class,
|
|
||||||
'to_account_nr_starts' => ToAccountNumberStarts::class,
|
|
||||||
'to_account_nr_ends' => ToAccountNumberEnds::class,
|
|
||||||
'to_account_nr_is' => ToAccountNumberIs::class,
|
|
||||||
'to_account_nr_contains' => ToAccountNumberContains::class,
|
|
||||||
'amount_less' => AmountLess::class,
|
|
||||||
'amount_exactly' => AmountExactly::class,
|
|
||||||
'amount_more' => AmountMore::class,
|
|
||||||
'description_starts' => DescriptionStarts::class,
|
|
||||||
'description_ends' => DescriptionEnds::class,
|
|
||||||
'description_contains' => DescriptionContains::class,
|
|
||||||
'description_is' => DescriptionIs::class,
|
|
||||||
'date_is' => DateIs::class,
|
|
||||||
'date_before' => DateBefore::class,
|
|
||||||
'date_after' => DateAfter::class,
|
|
||||||
'transaction_type' => TransactionType::class,
|
|
||||||
'category_is' => CategoryIs::class,
|
|
||||||
'budget_is' => BudgetIs::class,
|
|
||||||
'tag_is' => TagIs::class,
|
|
||||||
'currency_is' => CurrencyIs::class,
|
|
||||||
'foreign_currency_is' => ForeignCurrencyIs::class,
|
|
||||||
'has_attachments' => HasAttachment::class,
|
|
||||||
'has_no_category' => HasNoCategory::class,
|
|
||||||
'has_any_category' => HasAnyCategory::class,
|
|
||||||
'has_no_budget' => HasNoBudget::class,
|
|
||||||
'has_any_budget' => HasAnyBudget::class,
|
|
||||||
'has_no_tag' => HasNoTag::class,
|
|
||||||
'has_any_tag' => HasAnyTag::class,
|
|
||||||
'notes_contain' => NotesContain::class,
|
|
||||||
'notes_start' => NotesStart::class,
|
|
||||||
'notes_end' => NotesEnd::class,
|
|
||||||
'notes_are' => NotesAre::class,
|
|
||||||
'no_notes' => NotesEmpty::class,
|
|
||||||
'any_notes' => NotesAny::class,
|
|
||||||
'bill_is' => BillIs::class, // TODO
|
|
||||||
'created_on' => CreatedOn::class, // TODO
|
|
||||||
'updated_on' => UpdatedOn::class,// TODO
|
|
||||||
'external_id' => ExternalId::class,// TODO
|
|
||||||
'internal_reference' => InternalReference::class, // TODO
|
|
||||||
],
|
|
||||||
'rule-actions' => [
|
'rule-actions' => [
|
||||||
'set_category' => SetCategory::class,
|
'set_category' => SetCategory::class,
|
||||||
'clear_category' => ClearCategory::class,
|
'clear_category' => ClearCategory::class,
|
||||||
@@ -540,35 +487,6 @@ return [
|
|||||||
//'convert_deposit',
|
//'convert_deposit',
|
||||||
'convert_transfer',
|
'convert_transfer',
|
||||||
],
|
],
|
||||||
'context-rule-triggers' => [
|
|
||||||
'from_account_starts',
|
|
||||||
'from_account_ends',
|
|
||||||
'from_account_is',
|
|
||||||
'from_account_contains',
|
|
||||||
'to_account_starts',
|
|
||||||
'to_account_ends',
|
|
||||||
'to_account_is',
|
|
||||||
'to_account_contains',
|
|
||||||
'amount_less',
|
|
||||||
'amount_exactly',
|
|
||||||
'amount_more',
|
|
||||||
'description_starts',
|
|
||||||
'description_ends',
|
|
||||||
'description_contains',
|
|
||||||
'description_is',
|
|
||||||
'transaction_type',
|
|
||||||
'category_is',
|
|
||||||
'budget_is',
|
|
||||||
'tag_is',
|
|
||||||
'currency_is',
|
|
||||||
'notes_contain',
|
|
||||||
'notes_start',
|
|
||||||
'notes_end',
|
|
||||||
'notes_are',
|
|
||||||
'date_is',
|
|
||||||
'date_before',
|
|
||||||
'date_after',
|
|
||||||
],
|
|
||||||
|
|
||||||
'test-triggers' => [
|
'test-triggers' => [
|
||||||
'limit' => 10,
|
'limit' => 10,
|
||||||
@@ -580,95 +498,95 @@ return [
|
|||||||
|
|
||||||
'search' => [
|
'search' => [
|
||||||
'operators' => [
|
'operators' => [
|
||||||
'user_action' => ['alias' => false, 'trigger_class' => UserAction::class],
|
'user_action' => ['alias' => false, 'trigger_class' => UserAction::class, 'needs_context' => true,],
|
||||||
'from_account_starts' => ['alias' => false, 'trigger_class' => FromAccountStarts::class],
|
'from_account_starts' => ['alias' => false, 'trigger_class' => FromAccountStarts::class, 'needs_context' => true,],
|
||||||
'from_account_ends' => ['alias' => false, 'trigger_class' => FromAccountEnds::class],
|
'from_account_ends' => ['alias' => false, 'trigger_class' => FromAccountEnds::class, 'needs_context' => true,],
|
||||||
'from_account_contains' => ['alias' => false, 'trigger_class' => FromAccountContains::class],
|
'from_account_contains' => ['alias' => false, 'trigger_class' => FromAccountContains::class, 'needs_context' => true,],
|
||||||
'from_account_nr_starts' => ['alias' => false, 'trigger_class' => FromAccountNumberStarts::class],
|
'from_account_nr_starts' => ['alias' => false, 'trigger_class' => FromAccountNumberStarts::class, 'needs_context' => true,],
|
||||||
'from_account_nr_ends' => ['alias' => false, 'trigger_class' => FromAccountNumberEnds::class],
|
'from_account_nr_ends' => ['alias' => false, 'trigger_class' => FromAccountNumberEnds::class, 'needs_context' => true,],
|
||||||
'from_account_nr_is' => ['alias' => false, 'trigger_class' => FromAccountNumberIs::class],
|
'from_account_nr_is' => ['alias' => false, 'trigger_class' => FromAccountNumberIs::class, 'needs_context' => true,],
|
||||||
'from_account_nr_contains' => ['alias' => false, 'trigger_class' => FromAccountNumberContains::class],
|
'from_account_nr_contains' => ['alias' => false, 'trigger_class' => FromAccountNumberContains::class, 'needs_context' => true,],
|
||||||
'to_account_starts' => ['alias' => false, 'trigger_class' => ToAccountStarts::class],
|
'to_account_starts' => ['alias' => false, 'trigger_class' => ToAccountStarts::class, 'needs_context' => true,],
|
||||||
'to_account_ends' => ['alias' => false, 'trigger_class' => ToAccountEnds::class],
|
'to_account_ends' => ['alias' => false, 'trigger_class' => ToAccountEnds::class, 'needs_context' => true,],
|
||||||
'to_account_contains' => ['alias' => false, 'trigger_class' => ToAccountContains::class],
|
'to_account_contains' => ['alias' => false, 'trigger_class' => ToAccountContains::class, 'needs_context' => true,],
|
||||||
'to_account_nr_starts' => ['alias' => false, 'trigger_class' => ToAccountNumberStarts::class],
|
'to_account_nr_starts' => ['alias' => false, 'trigger_class' => ToAccountNumberStarts::class, 'needs_context' => true,],
|
||||||
'to_account_nr_ends' => ['alias' => false, 'trigger_class' => ToAccountNumberEnds::class],
|
'to_account_nr_ends' => ['alias' => false, 'trigger_class' => ToAccountNumberEnds::class, 'needs_context' => true,],
|
||||||
'to_account_nr_is' => ['alias' => false, 'trigger_class' => ToAccountNumberIs::class],
|
'to_account_nr_is' => ['alias' => false, 'trigger_class' => ToAccountNumberIs::class, 'needs_context' => true,],
|
||||||
'to_account_nr_contains' => ['alias' => false, 'trigger_class' => ToAccountNumberContains::class],
|
'to_account_nr_contains' => ['alias' => false, 'trigger_class' => ToAccountNumberContains::class, 'needs_context' => true,],
|
||||||
'description_starts' => ['alias' => false, 'trigger_class' => DescriptionStarts::class],
|
'description_starts' => ['alias' => false, 'trigger_class' => DescriptionStarts::class, 'needs_context' => true,],
|
||||||
'description_ends' => ['alias' => false, 'trigger_class' => DescriptionEnds::class],
|
'description_ends' => ['alias' => false, 'trigger_class' => DescriptionEnds::class, 'needs_context' => true,],
|
||||||
'description_contains' => ['alias' => false, 'trigger_class' => DescriptionContains::class],
|
'description_contains' => ['alias' => false, 'trigger_class' => DescriptionContains::class, 'needs_context' => true,],
|
||||||
'description_is' => ['alias' => false, 'trigger_class' => DescriptionIs::class],
|
'description_is' => ['alias' => false, 'trigger_class' => DescriptionIs::class, 'needs_context' => true,],
|
||||||
'currency_is' => ['alias' => false, 'trigger_class' => CurrencyIs::class],
|
'currency_is' => ['alias' => false, 'trigger_class' => CurrencyIs::class, 'needs_context' => true,],
|
||||||
'foreign_currency_is' => ['alias' => false, 'trigger_class' => ForeignCurrencyIs::class],
|
'foreign_currency_is' => ['alias' => false, 'trigger_class' => ForeignCurrencyIs::class, 'needs_context' => true,],
|
||||||
'has_attachments' => ['alias' => false, 'trigger_class' => HasAttachment::class],
|
'has_attachments' => ['alias' => false, 'trigger_class' => HasAttachment::class, 'needs_context' => false,],
|
||||||
'has_no_category' => ['alias' => false, 'trigger_class' => HasNoCategory::class],
|
'has_no_category' => ['alias' => false, 'trigger_class' => HasNoCategory::class, 'needs_context' => false,],
|
||||||
'has_any_category' => ['alias' => false, 'trigger_class' => HasAnyCategory::class],
|
'has_any_category' => ['alias' => false, 'trigger_class' => HasAnyCategory::class, 'needs_context' => false,],
|
||||||
'has_no_budget' => ['alias' => false, 'trigger_class' => HasNoBudget::class],
|
'has_no_budget' => ['alias' => false, 'trigger_class' => HasNoBudget::class, 'needs_context' => false,],
|
||||||
'has_any_budget' => ['alias' => false, 'trigger_class' => HasAnyBudget::class],
|
'has_any_budget' => ['alias' => false, 'trigger_class' => HasAnyBudget::class, 'needs_context' => false,],
|
||||||
'has_no_tag' => ['alias' => false, 'trigger_class' => HasNoTag::class],
|
'has_no_tag' => ['alias' => false, 'trigger_class' => HasNoTag::class, 'needs_context' => false,],
|
||||||
'has_any_tag' => ['alias' => false, 'trigger_class' => HasAnyTag::class],
|
'has_any_tag' => ['alias' => false, 'trigger_class' => HasAnyTag::class, 'needs_context' => false,],
|
||||||
'notes_contain' => ['alias' => false, 'trigger_class' => NotesContain::class],
|
'notes_contain' => ['alias' => false, 'trigger_class' => NotesContain::class, 'needs_context' => true,],
|
||||||
'notes_start' => ['alias' => false, 'trigger_class' => NotesStart::class],
|
'notes_start' => ['alias' => false, 'trigger_class' => NotesStart::class, 'needs_context' => true,],
|
||||||
'notes_end' => ['alias' => false, 'trigger_class' => NotesEnd::class],
|
'notes_end' => ['alias' => false, 'trigger_class' => NotesEnd::class, 'needs_context' => true,],
|
||||||
'notes_are' => ['alias' => false, 'trigger_class' => NotesAre::class],
|
'notes_are' => ['alias' => false, 'trigger_class' => NotesAre::class, 'needs_context' => true,],
|
||||||
'no_notes' => ['alias' => false, 'trigger_class' => NotesEmpty::class],
|
'no_notes' => ['alias' => false, 'trigger_class' => NotesEmpty::class, 'needs_context' => false,],
|
||||||
'any_notes' => ['alias' => false, 'trigger_class' => NotesAny::class],
|
'any_notes' => ['alias' => false, 'trigger_class' => NotesAny::class, 'needs_context' => false,],
|
||||||
|
|
||||||
// exact amount
|
// exact amount
|
||||||
'amount_exactly' => ['alias' => false, 'trigger_class' => AmountExactly::class],
|
'amount_exactly' => ['alias' => false, 'trigger_class' => AmountExactly::class, 'needs_context' => true,],
|
||||||
'amount_is' => ['alias' => true, 'alias_for' => 'amount_exactly'],
|
'amount_is' => ['alias' => true, 'alias_for' => 'amount_exactly', 'needs_context' => true,],
|
||||||
'amount' => ['alias' => true, 'alias_for' => 'amount_exactly'],
|
'amount' => ['alias' => true, 'alias_for' => 'amount_exactly', 'needs_context' => true,],
|
||||||
|
|
||||||
// is less than
|
// is less than
|
||||||
'amount_less' => ['alias' => false, 'trigger_class' => AmountLess::class],
|
'amount_less' => ['alias' => false, 'trigger_class' => AmountLess::class, 'needs_context' => true,],
|
||||||
'amount_max' => ['alias' => true, 'alias_for' => 'amount_less'],
|
'amount_max' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true,],
|
||||||
|
|
||||||
// is more than
|
// is more than
|
||||||
'amount_more' => ['alias' => false, 'trigger_class' => AmountMore::class],
|
'amount_more' => ['alias' => false, 'trigger_class' => AmountMore::class, 'needs_context' => true,],
|
||||||
'amount_min' => ['alias' => true, 'alias_for' => 'amount_more'],
|
'amount_min' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true,],
|
||||||
|
|
||||||
// source account
|
// source account
|
||||||
'from_account_is' => ['alias' => false, 'trigger_class' => FromAccountIs::class],
|
'from_account_is' => ['alias' => false, 'trigger_class' => FromAccountIs::class, 'needs_context' => true,],
|
||||||
'source' => ['alias' => true, 'alias_for' => 'from_account_is'],
|
'source' => ['alias' => true, 'alias_for' => 'from_account_is', 'needs_context' => true,],
|
||||||
'from' => ['alias' => true, 'alias_for' => 'from_account_is'],
|
'from' => ['alias' => true, 'alias_for' => 'from_account_is', 'needs_context' => true,],
|
||||||
|
|
||||||
// destination account
|
// destination account
|
||||||
'to_account_is' => ['alias' => false, 'trigger_class' => ToAccountIs::class],
|
'to_account_is' => ['alias' => false, 'trigger_class' => ToAccountIs::class, 'needs_context' => true,],
|
||||||
'destination' => ['alias' => true, 'alias_for' => 'to_account_is'],
|
'destination' => ['alias' => true, 'alias_for' => 'to_account_is', 'needs_context' => true,],
|
||||||
'to' => ['alias' => true, 'alias_for' => 'to_account_is'],
|
'to' => ['alias' => true, 'alias_for' => 'to_account_is', 'needs_context' => true,],
|
||||||
|
|
||||||
// category
|
// category
|
||||||
'category_is' => ['alias' => false, 'trigger_class' => CategoryIs::class],
|
'category_is' => ['alias' => false, 'trigger_class' => CategoryIs::class, 'needs_context' => true,],
|
||||||
'category' => ['alias' => true, 'alias_for' => 'category_is'],
|
'category' => ['alias' => true, 'alias_for' => 'category_is', 'needs_context' => true,],
|
||||||
|
|
||||||
// budget
|
// budget
|
||||||
'budget_is' => ['alias' => false, 'trigger_class' => BudgetIs::class],
|
'budget_is' => ['alias' => false, 'trigger_class' => BudgetIs::class, 'needs_context' => true,],
|
||||||
'budget' => ['alias' => true, 'alias_for' => 'budget_is'],
|
'budget' => ['alias' => true, 'alias_for' => 'budget_is', 'needs_context' => true,],
|
||||||
|
|
||||||
// bill
|
// bill
|
||||||
'bill_is' => ['alias' => false, 'trigger_class' => BillIs::class], // TODO
|
'bill_is' => ['alias' => false, 'trigger_class' => BillIs::class, 'needs_context' => true,], // TODO
|
||||||
'bill' => ['alias' => true, 'alias_for' => 'bill_is'],
|
'bill' => ['alias' => true, 'alias_for' => 'bill_is', 'needs_context' => true,],
|
||||||
|
|
||||||
// type
|
// type
|
||||||
'transaction_type' => ['alias' => false, 'trigger_class' => TransactionType::class],
|
'transaction_type' => ['alias' => false, 'trigger_class' => TransactionType::class, 'needs_context' => true,],
|
||||||
'type' => ['alias' => true, 'alias_for' => 'transaction_type'],
|
'type' => ['alias' => true, 'alias_for' => 'transaction_type', 'needs_context' => true,],
|
||||||
|
|
||||||
// date:
|
// date:
|
||||||
'date_is' => ['alias' => false, 'trigger_class' => DateIs::class],
|
'date_is' => ['alias' => false, 'trigger_class' => DateIs::class, 'needs_context' => true,],
|
||||||
'date' => ['alias' => true, 'alias_for' => 'date_is'],
|
'date' => ['alias' => true, 'alias_for' => 'date_is', 'needs_context' => true,],
|
||||||
'on' => ['alias' => true, 'alias_for' => 'date_is'],
|
'on' => ['alias' => true, 'alias_for' => 'date_is', 'needs_context' => true,],
|
||||||
'date_before' => ['alias' => false, 'trigger_class' => DateBefore::class],
|
'date_before' => ['alias' => false, 'trigger_class' => DateBefore::class, 'needs_context' => true,],
|
||||||
'before' => ['alias' => true, 'alias_for' => 'date_before'],
|
'before' => ['alias' => true, 'alias_for' => 'date_before', 'needs_context' => true,],
|
||||||
'date_after' => ['alias' => false, 'trigger_class' => DateAfter::class],
|
'date_after' => ['alias' => false, 'trigger_class' => DateAfter::class, 'needs_context' => true,],
|
||||||
'after' => ['alias' => true, 'alias_for' => 'date_after'],
|
'after' => ['alias' => true, 'alias_for' => 'date_after', 'needs_context' => true,],
|
||||||
// other interesting fields
|
// other interesting fields
|
||||||
'tag_is' => ['alias' => false, 'trigger_class' => TagIs::class],
|
'tag_is' => ['alias' => false, 'trigger_class' => TagIs::class, 'needs_context' => true,],
|
||||||
'tag' => ['alias' => true, 'alias_for' => 'tag'],
|
'tag' => ['alias' => true, 'alias_for' => 'tag', 'needs_context' => true,],
|
||||||
'created_on' => ['alias' => false, 'trigger_class' => CreatedOn::class], // TODO
|
'created_on' => ['alias' => false, 'trigger_class' => CreatedOn::class, 'needs_context' => true,], // TODO
|
||||||
'updated_on' => ['alias' => false, 'trigger_class' => UpdatedOn::class], // TODO
|
'updated_on' => ['alias' => false, 'trigger_class' => UpdatedOn::class, 'needs_context' => true,], // TODO
|
||||||
'external_id' => ['alias' => false, 'trigger_class' => ExternalId::class], // TODO
|
'external_id' => ['alias' => false, 'trigger_class' => ExternalId::class, 'needs_context' => true,], // TODO
|
||||||
'internal_reference' => ['alias' => false, 'trigger_class' => InternalReference::class], // TODO
|
'internal_reference' => ['alias' => false, 'trigger_class' => InternalReference::class, 'needs_context' => true,], // TODO
|
||||||
|
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
Reference in New Issue
Block a user