. */ declare(strict_types=1); namespace FireflyIII\Http\Controllers\RuleGroup; use Exception; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\SelectTransactionsRequest; use FireflyIII\Models\RuleGroup; use FireflyIII\TransactionRules\Engine\RuleEngineInterface; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Collection; use Illuminate\View\View; /** * Class ExecutionController */ class ExecutionController extends Controller { /** * ExecutionController constructor. */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { app('view')->share('title', (string) trans('firefly.rules')); app('view')->share('mainTitleIcon', 'fa-random'); return $next($request); } ); } /** * Execute the given rulegroup on a set of existing transactions. * * @throws Exception */ public function execute(SelectTransactionsRequest $request, RuleGroup $ruleGroup): RedirectResponse { // Get parameters specified by the user /** @var User $user */ $user = auth()->user(); $accounts = implode(',', $request->get('accounts')); // create new rule engine: $newRuleEngine = app(RuleEngineInterface::class); $newRuleEngine->setUser($user); // add extra operators: $newRuleEngine->addOperator(['type' => 'account_id', 'value' => $accounts]); // set rules: // #10427, file rule group and not the set of rules. $collection = new Collection()->push($ruleGroup); $newRuleEngine->setRuleGroups($collection); $newRuleEngine->fire(); // Tell the user that the job is queued session()->flash('success', (string) trans('firefly.applied_rule_group_selection', ['title' => $ruleGroup->title])); return redirect()->route('rules.index'); } /** * Select transactions to apply the group on. * * @return Factory|View */ public function selectTransactions(RuleGroup $ruleGroup) { $subTitle = (string) trans('firefly.apply_rule_group_selection', ['title' => $ruleGroup->title]); return view('rules.rule-group.select-transactions', compact('ruleGroup', 'subTitle')); } }