From 59127e40292fdfc6dd6b11cb8bcdf8387ec14fdf Mon Sep 17 00:00:00 2001 From: Robert Horlings Date: Tue, 23 Feb 2016 14:18:09 +0100 Subject: [PATCH] Added button to specify parameters and execute the job --- app/Http/Controllers/RuleGroupController.php | 47 +++++++++++++++++ .../Requests/SelectTransactionsRequest.php | 50 +++++++++++++++++++ app/Http/routes.php | 6 ++- resources/lang/en_US/firefly.php | 7 +++ resources/lang/nl_NL/firefly.php | 7 +++ resources/views/rules/index.twig | 2 + .../rules/rule-group/select-transactions.twig | 42 ++++++++++++++++ 7 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 app/Http/Requests/SelectTransactionsRequest.php create mode 100644 resources/views/rules/rule-group/select-transactions.twig diff --git a/app/Http/Controllers/RuleGroupController.php b/app/Http/Controllers/RuleGroupController.php index df1484df2e..6a29094a5b 100644 --- a/app/Http/Controllers/RuleGroupController.php +++ b/app/Http/Controllers/RuleGroupController.php @@ -4,10 +4,14 @@ declare(strict_types = 1); namespace FireflyIII\Http\Controllers; use Auth; +use Carbon\Carbon; use ExpandedForm; use FireflyIII\Http\Requests\RuleGroupFormRequest; +use FireflyIII\Http\Requests\SelectTransactionsRequest; +use FireflyIII\Jobs\ExecuteRuleGroupOnExistingTransactions; use FireflyIII\Models\RuleGroup; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; use Input; use Preferences; use Session; @@ -205,4 +209,47 @@ class RuleGroupController extends Controller } + /** + * Shows a form for the user to select a range of transactions to execute this rulegroup for + * @param RuleGroup $ruleGroup + */ + public function selectTransactions(AccountRepositoryInterface $repository, RuleGroup $ruleGroup) + { + // does the user have shared accounts? + $accounts = $repository->getAccounts(['Default account', 'Asset account']); + $accountList = ExpandedForm::makeSelectList($accounts); + $checkedAccounts = array_keys($accountList); + $first = session('first')->format('Y-m-d'); + $today = Carbon::create()->format('Y-m-d'); + + return view('rules.rule-group.select-transactions', compact('checkedAccounts', 'accountList', 'first', 'today', 'ruleGroup')); + } + + /** + * Execute the given rulegroup on a set of existing transactions + * @param RuleGroup $ruleGroup + */ + public function execute(SelectTransactionsRequest $request, AccountRepositoryInterface $repository, RuleGroup $ruleGroup) + { + // Get parameters specified by the user + $accounts = $repository->get($request->get('accounts')); + $startDate = new Carbon($request->get('start_date')); + $endDate = new Carbon($request->get('end_date')); + + // Create a job to do the work asynchronously + $job = new ExecuteRuleGroupOnExistingTransactions($ruleGroup); + + // Apply parameters to the job + $job->setUser(Auth::user()); + $job->setAccounts($accounts); + $job->setStartDate($startDate); + $job->setEndDate($endDate); + + // Dispatch a new job to execute it in a queue + $this->dispatch($job); + + // Tell the user that the job is queued + Session::flash('success', trans('firefly.executed_group_on_existing_transactions', ['title' => $ruleGroup->title])); + return redirect()->route('rules.index'); + } } diff --git a/app/Http/Requests/SelectTransactionsRequest.php b/app/Http/Requests/SelectTransactionsRequest.php new file mode 100644 index 0000000000..e62b53a578 --- /dev/null +++ b/app/Http/Requests/SelectTransactionsRequest.php @@ -0,0 +1,50 @@ +subDay()->format('Y-m-d'); + $today = Carbon::create()->addDay()->format('Y-m-d'); + + return [ + 'start_date' => 'required|date|after:' . $first, + 'end_date' => 'required|date|before:' . $today, + 'accounts' => 'required', + 'accounts.*' => 'required|exists:accounts,id|belongsToUser:accounts', + ]; + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php index 7e66a5a452..658bca4b0e 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -289,12 +289,14 @@ Route::group( Route::get('/rules/groups/delete/{ruleGroup}', ['uses' => 'RuleGroupController@delete', 'as' => 'rules.rule-group.delete']); Route::get('/rules/groups/up/{ruleGroup}', ['uses' => 'RuleGroupController@up', 'as' => 'rules.rule-group.up']); Route::get('/rules/groups/down/{ruleGroup}', ['uses' => 'RuleGroupController@down', 'as' => 'rules.rule-group.down']); - + Route::get('/rules/groups/select_transactions/{ruleGroup}', ['uses' => 'RuleGroupController@selectTransactions', 'as' => 'rules.rule-group.select_transactions']); + // rule groups POST Route::post('/rules/groups/store', ['uses' => 'RuleGroupController@store', 'as' => 'rules.rule-group.store']); Route::post('/rules/groups/update/{ruleGroup}', ['uses' => 'RuleGroupController@update', 'as' => 'rules.rule-group.update']); Route::post('/rules/groups/destroy/{ruleGroup}', ['uses' => 'RuleGroupController@destroy', 'as' => 'rules.rule-group.destroy']); - + Route::post('/rules/groups/execute/{ruleGroup}', ['uses' => 'RuleGroupController@execute', 'as' => 'rules.rule-group.execute']); + /** * Search Controller */ diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index b6b8f96d18..86f7b04691 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -133,6 +133,13 @@ return [ 'warning_no_matching_transactions' => 'No matching transactions found. Please note that for performance reasons, only the last :num_transactions transactions have been checked.', 'warning_no_valid_triggers' => 'No valid triggers provided.', + 'execute_on_existing_transactions' => 'Execute for existing transactions', + 'execute_on_existing_transactions_intro' => 'When a rule or group has been changed or added, you can execute it for existing transactions', + 'execute_on_existing_transactions_short' => 'Existing transactions', + 'executed_group_on_existing_transactions' => 'Executed group ":title" for existing transactions', + 'include_transactions_from_accounts' => 'Include transactions from these accounts', + 'execute' => 'Execute', + // actions and triggers 'rule_trigger_user_action' => 'User action is ":trigger_value"', 'rule_trigger_from_account_starts' => 'Source account starts with ":trigger_value"', diff --git a/resources/lang/nl_NL/firefly.php b/resources/lang/nl_NL/firefly.php index 825880e100..253317581d 100755 --- a/resources/lang/nl_NL/firefly.php +++ b/resources/lang/nl_NL/firefly.php @@ -131,6 +131,13 @@ return [ 'warning_transaction_subset' => 'Je ziet hier maximaal :max_num_transactions transacties omdat je anders veel te lang moet wachten', 'warning_no_matching_transactions' => 'Niks gevonden in je laatste :num_transactions transacties.', 'warning_no_valid_triggers' => 'Geen geldige triggers gevonden.', + + 'execute_on_existing_transactions' => 'Uitvoeren op bestaande transacties', + 'execute_on_existing_transactions_intro' => 'Wanneer een regel of groep is veranderd of toegevoegd, kun je hem hier uitvoeren voor bestaande transacties.', + 'execute_on_existing_transactions_short' => 'Bestaande transacties', + 'executed_group_on_existing_transactions' => 'Groep :title is uitgevoerd op bestaande transacties', + 'include_transactions_from_accounts' => 'Gebruik transacties van deze rekeningen', + 'execute' => 'Uitvoeren', // actions and triggers 'rule_trigger_user_action' => 'Gebruikersactie is ":trigger_value"', diff --git a/resources/views/rules/index.twig b/resources/views/rules/index.twig index 447cf3d4eb..df5e4a631d 100644 --- a/resources/views/rules/index.twig +++ b/resources/views/rules/index.twig @@ -47,6 +47,8 @@ class="fa fa-fw fa-pencil"> {{ 'edit'|_ }}
  • {{ 'delete'|_ }}
  • +
  • {{ 'execute_on_existing_transactions_short'|_ }}
  • {% if ruleGroup.order > 1 %}
  • {{ 'move_rule_group_up'|_ }}
  • diff --git a/resources/views/rules/rule-group/select-transactions.twig b/resources/views/rules/rule-group/select-transactions.twig new file mode 100644 index 0000000000..00dad36190 --- /dev/null +++ b/resources/views/rules/rule-group/select-transactions.twig @@ -0,0 +1,42 @@ +{% extends "./layout/default.twig" %} + +{% block breadcrumbs %} + {{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }} +{% endblock %} + +{% block content %} + +
    + + +
    +
    + +
    +
    +

    {{ 'execute_on_existing_transactions'|_ }}

    +
    +
    +
    +

    + {{ 'execute_on_existing_transactions_intro'|_ }} +

    +
    +
    + {{ ExpandedForm.date('start_date', first) }} + {{ ExpandedForm.date('end_date', today) }} + + + {{ ExpandedForm.multiCheckbox('accounts',accountList, checkedAccounts, {' class': 'account-checkbox', 'label': trans('firefly.include_transactions_from_accounts') }) }} +
    +
    +
    +
    + +
    +
    +
    +
    +{% endblock %}