From c96eb8753ebf1922b7979aa793c996225f89c45b Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 11 Jan 2016 20:41:43 +0100 Subject: [PATCH 01/11] New bread crumb for rules controller. --- app/Http/breadcrumbs.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/Http/breadcrumbs.php b/app/Http/breadcrumbs.php index cf3de22751..6ae979f176 100644 --- a/app/Http/breadcrumbs.php +++ b/app/Http/breadcrumbs.php @@ -361,6 +361,16 @@ Breadcrumbs::register( } ); +/** + * Rules + */ +Breadcrumbs::register( + 'rules.index', function (BreadCrumbGenerator $breadcrumbs) { + $breadcrumbs->parent('home'); + $breadcrumbs->push(trans('firefly.rules'), route('rules.index')); +} +); + // search Breadcrumbs::register( 'search', function (BreadCrumbGenerator $breadcrumbs, $query) { From d889094863a9c82a9fd35a59f0bc4d7246cd7a9e Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 11 Jan 2016 20:41:50 +0100 Subject: [PATCH 02/11] New route for rules index. --- app/Http/routes.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/Http/routes.php b/app/Http/routes.php index 01fb4e9160..8b164a8ec8 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -242,6 +242,11 @@ Route::group( Route::get('/reports', ['uses' => 'ReportController@index', 'as' => 'reports.index']); Route::get('/reports/report/{reportType}/{start_date}/{end_date}/{accountList}', ['uses' => 'ReportController@report', 'as' => 'reports.report']); + /** + * Rules Controller + */ + Route::get('/rules', ['uses' => 'RuleController@index', 'as' => 'rules.index']); + /** * Search Controller */ From 70ed4188b6f7e9d283998ad4239641cf26f04a67 Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 11 Jan 2016 20:41:57 +0100 Subject: [PATCH 03/11] New controller for rules. --- app/Http/Controllers/RuleController.php | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 app/Http/Controllers/RuleController.php diff --git a/app/Http/Controllers/RuleController.php b/app/Http/Controllers/RuleController.php new file mode 100644 index 0000000000..99dc3b75f3 --- /dev/null +++ b/app/Http/Controllers/RuleController.php @@ -0,0 +1,34 @@ + Date: Mon, 11 Jan 2016 20:42:08 +0100 Subject: [PATCH 04/11] New migration (empty) --- .../2016_01_11_193428_changes_for_v370.php | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 database/migrations/2016_01_11_193428_changes_for_v370.php diff --git a/database/migrations/2016_01_11_193428_changes_for_v370.php b/database/migrations/2016_01_11_193428_changes_for_v370.php new file mode 100644 index 0000000000..1ca5e7e66f --- /dev/null +++ b/database/migrations/2016_01_11_193428_changes_for_v370.php @@ -0,0 +1,36 @@ + Date: Mon, 11 Jan 2016 20:42:15 +0100 Subject: [PATCH 05/11] New translation --- resources/lang/en_US/firefly.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 6a4ad392f9..ecdbe1b167 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -38,6 +38,9 @@ return [ 'new_budget' => 'New budget', 'new_bill' => 'New bill', + // rules + 'rules' => 'Rules', + // tags 'store_new_tag' => 'Store new tag', 'update_tag' => 'Update tag', From bdec94ead63e06b7bfd028f75ba1bd45e52a40a9 Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 11 Jan 2016 20:42:20 +0100 Subject: [PATCH 06/11] Sidebar entry --- resources/views/partials/menu-sidebar.twig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/views/partials/menu-sidebar.twig b/resources/views/partials/menu-sidebar.twig index 3c900ab06d..1683986cbc 100644 --- a/resources/views/partials/menu-sidebar.twig +++ b/resources/views/partials/menu-sidebar.twig @@ -86,7 +86,7 @@ -
  • +
  • {{ 'moneyManagement'|_ }} @@ -101,6 +101,10 @@ {{ 'bills'|_ }}
  • +
  • + + {{ 'rules'|_ }} +
  • From c38a4a15ff6ad49bcd194052b2cece3abe4d4e1d Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 11 Jan 2016 20:42:24 +0100 Subject: [PATCH 07/11] View --- resources/views/rules/index.twig | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 resources/views/rules/index.twig diff --git a/resources/views/rules/index.twig b/resources/views/rules/index.twig new file mode 100644 index 0000000000..9a934d37b3 --- /dev/null +++ b/resources/views/rules/index.twig @@ -0,0 +1,20 @@ +{% extends "./layout/default.twig" %} +{% block breadcrumbs %} + {{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }} +{% endblock %} +{% block content %} + +
    +
    +
    +
    +

    {{ 'rules'|_ }}

    +
    +
    + Bla bla bla +
    +
    +
    +
    + +{% endblock %} From c1346d4c86f4df763983ec5e3f1184746ef7e00c Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 11 Jan 2016 21:10:11 +0100 Subject: [PATCH 08/11] Migration for rules. --- .../2016_01_11_193428_changes_for_v370.php | 102 +++++++++++++++++- 1 file changed, 100 insertions(+), 2 deletions(-) diff --git a/database/migrations/2016_01_11_193428_changes_for_v370.php b/database/migrations/2016_01_11_193428_changes_for_v370.php index 1ca5e7e66f..1a10706457 100644 --- a/database/migrations/2016_01_11_193428_changes_for_v370.php +++ b/database/migrations/2016_01_11_193428_changes_for_v370.php @@ -8,6 +8,7 @@ */ use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; /** * Class ChangesForV370 @@ -21,7 +22,100 @@ class ChangesForV370 extends Migration */ public function up() { - // + // new table "rule_groups" + Schema::create( + 'rule_groups', function (Blueprint $table) { + $table->increments('id'); + $table->timestamps(); + $table->softDeletes(); + $table->integer('user_id')->unsigned(); + $table->unsignedSmallInteger('order'); + $table->string('title', 2048); + $table->mediumText('description'); + $table->unsignedTinyInteger('active')->default(1); + + // connect rule groups to users + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + + // order must be unique for rule group: + $table->unique(['user_id', 'order']); + } + ); + + + // new table "rules": + Schema::create( + 'rules', function (Blueprint $table) { + $table->increments('id'); + $table->timestamps(); + $table->softDeletes(); + $table->integer('user_id')->unsigned(); + $table->integer('rule_group_id')->unsigned(); + $table->unsignedSmallInteger('order'); + $table->string('title', 2048); + $table->mediumText('description'); + $table->unsignedTinyInteger('active')->default(1); + $table->unsignedTinyInteger('stop_processing')->default(0); + + // connect rules to users + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + + // connect rules to rule groups + $table->foreign('rule_group_id')->references('id')->on('rule_groups')->onDelete('cascade'); + + // order must be unique for rules: + $table->unique(['user_id', 'order']); + } + ); + + + // new table "rule_triggers" + Schema::create( + 'rule_triggers', function (Blueprint $table) { + $table->increments('id'); + $table->timestamps(); + $table->integer('rule_id')->unsigned(); + $table->unsignedSmallInteger('order'); + $table->string('title', 2048); + + $table->string('trigger_field', 2048); + $table->string('trigger_type', 1024); + $table->string('trigger_value', 2048); + + $table->unsignedTinyInteger('active')->default(1); + $table->unsignedTinyInteger('stop_processing')->default(0); + + // order must be unique for rule triggers: + $table->unique(['rule_id', 'order']); + + // connect rule tiggers to rules + $table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade'); + } + ); + + // new table "rule_actions" + Schema::create( + 'rule_actions', function (Blueprint $table) { + $table->increments('id'); + $table->timestamps(); + $table->integer('rule_id')->unsigned(); + $table->unsignedSmallInteger('order'); + + $table->unsignedTinyInteger('active')->default(1); + $table->unsignedTinyInteger('stop_processing')->default(0); + + $table->string('action_field', 2048); + $table->string('action', 1024); + $table->string('action_value', 2048); + + // connect rule actions to rules + $table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade'); + + // order must be unique for rule triggers: + $table->unique(['rule_id', 'order']); + } + ); + } /** @@ -31,6 +125,10 @@ class ChangesForV370 extends Migration */ public function down() { - // + Schema::drop('rule_actions'); + Schema::drop('rule_triggers'); + Schema::drop('rules'); + Schema::drop('rule_groups'); + } } From 5da5024ad3f1f13e499c4f211c5d6b6d3af5e63a Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 11 Jan 2016 21:28:29 +0100 Subject: [PATCH 09/11] New models. --- app/Models/Rule.php | 54 ++++++++++++++++++++++++++++++++++++++ app/Models/RuleAction.php | 28 ++++++++++++++++++++ app/Models/RuleGroup.php | 37 ++++++++++++++++++++++++++ app/Models/RuleTrigger.php | 28 ++++++++++++++++++++ 4 files changed, 147 insertions(+) create mode 100644 app/Models/Rule.php create mode 100644 app/Models/RuleAction.php create mode 100644 app/Models/RuleGroup.php create mode 100644 app/Models/RuleTrigger.php diff --git a/app/Models/Rule.php b/app/Models/Rule.php new file mode 100644 index 0000000000..ffa7957e40 --- /dev/null +++ b/app/Models/Rule.php @@ -0,0 +1,54 @@ +belongsTo('FireflyIII\User'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function ruleGroup() + { + return $this->belongsTo('FireflyIII\Models\RuleGroup'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function ruleActions() + { + return $this->hasMany('FireflyIII\Models\RuleAction'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function ruleTriggers() + { + return $this->hasMany('FireflyIII\Models\RuleTrigger'); + } + + +} diff --git a/app/Models/RuleAction.php b/app/Models/RuleAction.php new file mode 100644 index 0000000000..fcd728bf94 --- /dev/null +++ b/app/Models/RuleAction.php @@ -0,0 +1,28 @@ +belongsTo('FireflyIII\Models\Rule'); + } +} diff --git a/app/Models/RuleGroup.php b/app/Models/RuleGroup.php new file mode 100644 index 0000000000..b82807e741 --- /dev/null +++ b/app/Models/RuleGroup.php @@ -0,0 +1,37 @@ +belongsTo('FireflyIII\User'); + } + + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function rules() + { + return $this->hasMany('FireflyIII\Models\Rule'); + } +} diff --git a/app/Models/RuleTrigger.php b/app/Models/RuleTrigger.php new file mode 100644 index 0000000000..9bef919950 --- /dev/null +++ b/app/Models/RuleTrigger.php @@ -0,0 +1,28 @@ +belongsTo('FireflyIII\Models\Rule'); + } +} From da7eb615dbce78465c36e847a93f0cf9438b36ec Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 11 Jan 2016 21:42:51 +0100 Subject: [PATCH 10/11] Added php doc. --- app/Models/Account.php | 1 - app/Models/PiggyBank.php | 1 + app/Models/Rule.php | 15 +++++++++++++++ app/Models/RuleAction.php | 11 +++++++++++ app/Models/RuleGroup.php | 11 +++++++++++ app/Models/RuleTrigger.php | 12 ++++++++++++ app/User.php | 18 ++++++++++++++++++ 7 files changed, 68 insertions(+), 1 deletion(-) diff --git a/app/Models/Account.php b/app/Models/Account.php index ff22ff5fdb..d381f6b4c1 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -34,7 +34,6 @@ use Watson\Validating\ValidatingTrait; * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Account hasMetaValue($name, $value) * @property string $startBalance * @property string $endBalance - * */ class Account extends Model { diff --git a/app/Models/PiggyBank.php b/app/Models/PiggyBank.php index b4bcab8036..c1c7513934 100644 --- a/app/Models/PiggyBank.php +++ b/app/Models/PiggyBank.php @@ -27,6 +27,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property-read Account $account * @property-read Collection|PiggyBankRepetition[] $piggyBankRepetitions * @property-read Collection|PiggyBankEvent[] $piggyBankEvents + * @property string $reminder */ class PiggyBank extends Model { diff --git a/app/Models/Rule.php b/app/Models/Rule.php index ffa7957e40..dc08fd18fd 100644 --- a/app/Models/Rule.php +++ b/app/Models/Rule.php @@ -15,6 +15,21 @@ use Illuminate\Database\Eloquent\Model; * Class Rule * * @package FireflyIII\Models + * @property integer $id + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * @property string $deleted_at + * @property integer $user_id + * @property integer $rule_group_id + * @property integer $order + * @property string $title + * @property string $description + * @property boolean $active + * @property boolean $stop_processing + * @property-read \FireflyIII\User $user + * @property-read \FireflyIII\Models\RuleGroup $ruleGroup + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\RuleAction[] $ruleActions + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\RuleTrigger[] $ruleTriggers */ class Rule extends Model { diff --git a/app/Models/RuleAction.php b/app/Models/RuleAction.php index fcd728bf94..4ef20d4a1d 100644 --- a/app/Models/RuleAction.php +++ b/app/Models/RuleAction.php @@ -15,6 +15,17 @@ use Illuminate\Database\Eloquent\Model; * Class RuleAction * * @package FireflyIII\Models + * @property integer $id + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * @property integer $rule_id + * @property integer $order + * @property boolean $active + * @property boolean $stop_processing + * @property string $action_field + * @property string $action + * @property string $action_value + * @property-read \FireflyIII\Models\Rule $rule */ class RuleAction extends Model { diff --git a/app/Models/RuleGroup.php b/app/Models/RuleGroup.php index b82807e741..894a88e748 100644 --- a/app/Models/RuleGroup.php +++ b/app/Models/RuleGroup.php @@ -15,6 +15,17 @@ use Illuminate\Database\Eloquent\Model; * Class RuleGroup * * @package FireflyIII\Models + * @property integer $id + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * @property string $deleted_at + * @property integer $user_id + * @property integer $order + * @property string $title + * @property string $description + * @property boolean $active + * @property-read \FireflyIII\User $user + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Rule[] $rules */ class RuleGroup extends Model { diff --git a/app/Models/RuleTrigger.php b/app/Models/RuleTrigger.php index 9bef919950..ccf52f1243 100644 --- a/app/Models/RuleTrigger.php +++ b/app/Models/RuleTrigger.php @@ -15,6 +15,18 @@ use Illuminate\Database\Eloquent\Model; * Class RuleTrigger * * @package FireflyIII\Models + * @property integer $id + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * @property integer $rule_id + * @property integer $order + * @property string $title + * @property string $trigger_field + * @property string $trigger_type + * @property string $trigger_value + * @property boolean $active + * @property boolean $stop_processing + * @property-read \FireflyIII\Models\Rule $rule */ class RuleTrigger extends Model { diff --git a/app/User.php b/app/User.php index e8b52afc07..da3a79a52b 100755 --- a/app/User.php +++ b/app/User.php @@ -9,6 +9,24 @@ use Zizaco\Entrust\Traits\EntrustUserTrait; * Class User * * @package FireflyIII + * @property integer $id + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * @property string $email + * @property string $password + * @property string $remember_token + * @property string $reset + * @property boolean $blocked + * @property string $blocked_code + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Account[] $accounts + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Attachment[] $attachments + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Tag[] $tags + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Bill[] $bills + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Budget[] $budgets + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Category[] $categories + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Preference[] $preferences + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionjournals + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Role[] $roles */ class User extends Authenticatable { From 06d11c9133fc630487b5b393bca58823af504e83 Mon Sep 17 00:00:00 2001 From: James Cole Date: Tue, 12 Jan 2016 20:36:47 +0100 Subject: [PATCH 11/11] New stuff for the rule thing. --- app/Models/Rule.php | 30 ++++++----- app/Models/RuleTrigger.php | 4 +- config/firefly.php | 45 +++++++++++++++- .../2016_01_11_193428_changes_for_v370.php | 21 ++++---- database/seeds/TestDataSeeder.php | 53 ++++++++++++++++++- 5 files changed, 123 insertions(+), 30 deletions(-) diff --git a/app/Models/Rule.php b/app/Models/Rule.php index dc08fd18fd..c4c73aac1c 100644 --- a/app/Models/Rule.php +++ b/app/Models/Rule.php @@ -9,30 +9,32 @@ namespace FireflyIII\Models; +use Crypt; use Illuminate\Database\Eloquent\Model; /** * Class Rule * * @package FireflyIII\Models - * @property integer $id - * @property \Carbon\Carbon $created_at - * @property \Carbon\Carbon $updated_at - * @property string $deleted_at - * @property integer $user_id - * @property integer $rule_group_id - * @property integer $order - * @property string $title - * @property string $description - * @property boolean $active - * @property boolean $stop_processing - * @property-read \FireflyIII\User $user - * @property-read \FireflyIII\Models\RuleGroup $ruleGroup - * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\RuleAction[] $ruleActions + * @property integer $id + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * @property string $deleted_at + * @property integer $user_id + * @property integer $rule_group_id + * @property integer $order + * @property string $title + * @property string $description + * @property boolean $active + * @property boolean $stop_processing + * @property-read \FireflyIII\User $user + * @property-read \FireflyIII\Models\RuleGroup $ruleGroup + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\RuleAction[] $ruleActions * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\RuleTrigger[] $ruleTriggers */ class Rule extends Model { + /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ diff --git a/app/Models/RuleTrigger.php b/app/Models/RuleTrigger.php index ccf52f1243..daaeea0e98 100644 --- a/app/Models/RuleTrigger.php +++ b/app/Models/RuleTrigger.php @@ -12,16 +12,14 @@ namespace FireflyIII\Models; use Illuminate\Database\Eloquent\Model; /** - * Class RuleTrigger + * FireflyIII\Models\RuleTrigger * - * @package FireflyIII\Models * @property integer $id * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at * @property integer $rule_id * @property integer $order * @property string $title - * @property string $trigger_field * @property string $trigger_type * @property string $trigger_value * @property boolean $active diff --git a/config/firefly.php b/config/firefly.php index 3659db04e6..5439b21e70 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -98,7 +98,7 @@ return [ 'Revenue account' => 'revenue', 'Cash account' => 'cash', ], - 'languages' => [ + 'languages' => [ 'en_US' => ['name_locale' => 'English', 'name_english' => 'English', 'complete' => true], 'nl_NL' => ['name_locale' => 'Nederlands', 'name_english' => 'Dutch', 'complete' => true], 'pt_BR' => ['name_locale' => 'Português do Brasil', 'name_english' => 'Portugese (Brazil)', 'complete' => false], @@ -147,4 +147,47 @@ return [ 'pt_BR' => '%B %e, %Y', ], + 'bindables' => [ + // models + 'account' => 'FireflyIII\Models\Account', + 'attachment' => 'FireflyIII\Models\Attachment', + 'bill' => 'FireflyIII\Models\Bill', + 'budget' => 'FireflyIII\Models\Budget', + 'category' => 'FireflyIII\Models\Category', + 'currency' => 'FireflyIII\Models\TransactionCurrency', + 'limitrepetition' => 'FireflyIII\Models\LimitRepetition', + 'piggyBank' => 'FireflyIII\Models\PiggyBank', + 'tj' => 'FireflyIII\Models\TransactionJournal', + 'tag' => 'FireflyIII\Models\Tag', + // lists + 'accountList' => 'FireflyIII\Support\Binder\AccountList', + 'budgetList' => 'FireflyIII\Support\Binder\BudgetList', + 'categoryList' => 'FireflyIII\Support\Binder\CategoryList', + + // others + 'start_date' => 'FireflyIII\Support\Binder\Date', + 'end_date' => 'FireflyIII\Support\Binder\Date' + ], + 'rule-triggers' => [ + 'from_account_starts' => 'FireflyIII\Rules\Triggers', + 'from_account_ends' => 'FireflyIII\Rules\Triggers', + 'from_account_is' => 'FireflyIII\Rules\Triggers', + 'from_account_contains' => 'FireflyIII\Rules\Triggers', + 'to_account_starts' => 'FireflyIII\Rules\Triggers', + 'to_account_ends' => 'FireflyIII\Rules\Triggers', + 'to_account_is' => 'FireflyIII\Rules\Triggers', + 'to_account_contains' => 'FireflyIII\Rules\Triggers', + + + 'transaction_type' => 'FireflyIII\Rules\Triggers', + 'amount_less' => 'FireflyIII\Rules\Triggers', + 'amount_exactly' => 'FireflyIII\Rules\Triggers', + 'amount_exactly_not' => 'FireflyIII\Rules\Triggers', + 'amount_more' => 'FireflyIII\Rules\Triggers', + 'description_starts' => 'FireflyIII\Rules\Triggers', + 'description_ends' => 'FireflyIII\Rules\Triggers', + 'description_contains' => 'FireflyIII\Rules\Triggers', + 'description_is' => 'FireflyIII\Rules\Triggers', + ], + ]; diff --git a/database/migrations/2016_01_11_193428_changes_for_v370.php b/database/migrations/2016_01_11_193428_changes_for_v370.php index 1a10706457..542263f947 100644 --- a/database/migrations/2016_01_11_193428_changes_for_v370.php +++ b/database/migrations/2016_01_11_193428_changes_for_v370.php @@ -30,8 +30,8 @@ class ChangesForV370 extends Migration $table->softDeletes(); $table->integer('user_id')->unsigned(); $table->unsignedSmallInteger('order'); - $table->string('title', 2048); - $table->mediumText('description'); + $table->string('title', 255); + $table->text('description'); $table->unsignedTinyInteger('active')->default(1); // connect rule groups to users @@ -52,8 +52,8 @@ class ChangesForV370 extends Migration $table->integer('user_id')->unsigned(); $table->integer('rule_group_id')->unsigned(); $table->unsignedSmallInteger('order'); - $table->string('title', 2048); - $table->mediumText('description'); + $table->string('title', 255); + $table->text('description'); $table->unsignedTinyInteger('active')->default(1); $table->unsignedTinyInteger('stop_processing')->default(0); @@ -78,9 +78,8 @@ class ChangesForV370 extends Migration $table->unsignedSmallInteger('order'); $table->string('title', 2048); - $table->string('trigger_field', 2048); - $table->string('trigger_type', 1024); - $table->string('trigger_value', 2048); + $table->string('trigger_type', 50); + $table->string('trigger_value', 255); $table->unsignedTinyInteger('active')->default(1); $table->unsignedTinyInteger('stop_processing')->default(0); @@ -88,7 +87,7 @@ class ChangesForV370 extends Migration // order must be unique for rule triggers: $table->unique(['rule_id', 'order']); - // connect rule tiggers to rules + // connect rule triggers to rules $table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade'); } ); @@ -104,9 +103,9 @@ class ChangesForV370 extends Migration $table->unsignedTinyInteger('active')->default(1); $table->unsignedTinyInteger('stop_processing')->default(0); - $table->string('action_field', 2048); - $table->string('action', 1024); - $table->string('action_value', 2048); + $table->string('action_field', 50); + $table->string('action', 50); + $table->string('action_value', 255); // connect rule actions to rules $table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade'); diff --git a/database/seeds/TestDataSeeder.php b/database/seeds/TestDataSeeder.php index f4afe7afaf..26498f51a9 100644 --- a/database/seeds/TestDataSeeder.php +++ b/database/seeds/TestDataSeeder.php @@ -10,6 +10,9 @@ use FireflyIII\Models\PiggyBank; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Models\Preference; use FireflyIII\Models\Role; +use FireflyIII\Models\Rule; +use FireflyIII\Models\RuleGroup; +use FireflyIII\Models\RuleTrigger; use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; @@ -33,6 +36,52 @@ class TestDataSeeder extends Seeder public function __construct() { + } + + public function createRules() + { + // basic rules group. user should always have one + $ruleGroup = new RuleGroup; + $ruleGroup->user()->associate($this->user); + $ruleGroup->order = 1; + $ruleGroup->title = 'Default rules'; + $ruleGroup->description = 'All your rules not in a particular group.'; + $ruleGroup->active = 1; + $ruleGroup->save(); + + + // a normal rule: saves transactions where description contains "groceries" + // and from account is "MyBank Checking Account" + // send it to Groceries/Groceries + $rule = new Rule; + $rule->user()->associate($this->user); + $rule->ruleGroup()->associate($ruleGroup); + $rule->order = 1; + $rule->title = 'A strange rule for testing.'; + $rule->description = 'This rule triggers on transactions with the description "David Bowie" and puts them in the category "Blackstar".'; + $rule->active = 1; + $rule->stop_processing = 0; + $rule->save(); + + // trigger for this rule: + $ruleTrigger = new RuleTrigger; + $ruleTrigger->rule()->associate($rule); + $ruleTrigger->order = 1; + $ruleTrigger->title = 'Groceries'; + $ruleTrigger->trigger_type = 'description_contains'; + $ruleTrigger->trigger_value = 'groceries'; + $ruleTrigger->active = 1; + $ruleTrigger->stop_processing = 0; + + // actions for this rule. + + // TODO a rule that triggers on something, just like the previous one, but it has "stop_processing" set to 1. + // TODO a rule that triggers on that same thing, but it will not file, because the previous rule made FF skip it. + + // TODO rule with specific actions. + // TODO rule with actions and one action has stop_processing and other actions are not processed. Somewhere in test? + + } /** @@ -49,6 +98,8 @@ class TestDataSeeder extends Seeder $this->createBills(); $this->createPiggybanks(); + $this->createRules(); + // preference to only see account #1 on frontpage. $this->createPreferences(); @@ -649,7 +700,7 @@ class TestDataSeeder extends Seeder $fromAccount = $this->findAccount('MyBank Checking Account'); $stores = ['Albert Heijn', 'PLUS', 'Bakker']; - $descriptions = ['Groceries', 'Bought some food', 'Got groceries']; + $descriptions = ['Groceries', 'Bought some groceries', 'Got groceries']; $category = Category::firstOrCreateEncrypted(['name' => 'Daily groceries', 'user_id' => $this->user->id]); $budget = Budget::firstOrCreateEncrypted(['name' => 'Groceries', 'user_id' => $this->user->id]);