/**
  * Execute the given rulegroup on a set of existing transactions
  *
  * @param SelectTransactionsRequest  $request
  * @param AccountRepositoryInterface $repository
  * @param RuleGroup                  $ruleGroup
  *
  * @return \Illuminate\Http\RedirectResponse
  */
 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', strval(trans('firefly.executed_group_on_existing_transactions', ['title' => $ruleGroup->title])));
     return redirect()->route('rules.index');
 }
 /**
  * @param ExportFormRequest $request
  * @param ARI               $repository
  *
  * @param EJRI              $jobs
  *
  * @return string
  * @throws \FireflyIII\Exceptions\FireflyException
  */
 public function postIndex(ExportFormRequest $request, ARI $repository, EJRI $jobs)
 {
     set_time_limit(0);
     $job = $jobs->findByKey($request->get('job'));
     $settings = ['accounts' => $repository->get($request->get('accounts')), 'startDate' => new Carbon($request->get('export_start_range')), 'endDate' => new Carbon($request->get('export_end_range')), 'exportFormat' => $request->get('exportFormat'), 'includeAttachments' => intval($request->get('include_attachments')) === 1, 'includeConfig' => intval($request->get('include_config')) === 1, 'includeOldUploads' => intval($request->get('include_old_uploads')) === 1, 'job' => $job];
     $job->change('export_status_make_exporter');
     $processor = new Processor($settings);
     /*
      * Collect journals:
      */
     $job->change('export_status_collecting_journals');
     $processor->collectJournals();
     $job->change('export_status_collected_journals');
     /*
      * Transform to exportable entries:
      */
     $job->change('export_status_converting_to_export_format');
     $processor->convertJournals();
     $job->change('export_status_converted_to_export_format');
     /*
      * Transform to (temporary) file:
      */
     $job->change('export_status_creating_journal_file');
     $processor->exportJournals();
     $job->change('export_status_created_journal_file');
     /*
      *  Collect attachments, if applicable.
      */
     if ($settings['includeAttachments']) {
         $job->change('export_status_collecting_attachments');
         $processor->collectAttachments();
         $job->change('export_status_collected_attachments');
     }
     /*
      * Collect old uploads
      */
     if ($settings['includeOldUploads']) {
         $job->change('export_status_collecting_old_uploads');
         $processor->collectOldUploads();
         $job->change('export_status_collected_old_uploads');
     }
     /*
      * Generate / collect config file.
      */
     if ($settings['includeConfig']) {
         $job->change('export_status_creating_config_file');
         $processor->createConfigFile();
         $job->change('export_status_created_config_file');
     }
     /*
      * Create ZIP file:
      */
     $job->change('export_status_creating_zip_file');
     $processor->createZipFile();
     $job->change('export_status_created_zip_file');
     $job->change('export_status_finished');
     return Response::json('ok');
 }