mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-14 08:11:20 +00:00
Implemented controller method and helper object to find matching transactions
This commit is contained in:
@@ -25,6 +25,7 @@ use Response;
|
||||
use Session;
|
||||
use URL;
|
||||
use View;
|
||||
use FireflyIII\Rules\TransactionMatcher;
|
||||
|
||||
/**
|
||||
* Class RuleController
|
||||
@@ -333,6 +334,74 @@ class RuleController extends Controller
|
||||
return redirect(session('rules.rule.edit.url'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function testTriggers() {
|
||||
// Create a list of triggers
|
||||
$triggers = $this->getTriggerList();
|
||||
|
||||
// We start searching for transactions. For performance reasons, there are limits
|
||||
// to the search: a maximum number of results and a maximum number of transactions
|
||||
// to search in
|
||||
// TODO: Make these values configurable
|
||||
$maxResults = 50;
|
||||
$maxTransactionsToSearchIn = 1000;
|
||||
|
||||
// Dispatch the actual work to a matched object
|
||||
$matchingTransactions =
|
||||
(new TransactionMatcher($triggers))
|
||||
->setTransactionLimit($maxTransactionsToSearchIn)
|
||||
->findMatchingTransactions($maxResults);
|
||||
|
||||
// Warn the user if only a subset of transactions is returned
|
||||
if(count( $matchingTransactions ) == $maxResults) {
|
||||
$warning = trans('firefly.warning_transaction_subset', [ 'max_num_transactions' => $maxResults ] );
|
||||
} else if(count($matchingTransactions) == 0){
|
||||
$warning = trans('firefly.warning_no_matching_transactions', [ 'num_transactions' => $maxTransactionsToSearchIn ] );
|
||||
} else {
|
||||
$warning = "";
|
||||
}
|
||||
|
||||
// Return json response
|
||||
$view = view('list.journals-tiny', [ 'transactions' => $matchingTransactions ])->render();
|
||||
|
||||
return Response::json(['html' => $view, 'warning' => $warning ]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of triggers as provided in the URL
|
||||
* @return array
|
||||
*/
|
||||
protected function getTriggerList() {
|
||||
$triggers = [];
|
||||
$order = 1;
|
||||
$data = [
|
||||
'rule-triggers' => Input::get('rule-trigger'),
|
||||
'rule-trigger-values' => Input::get('rule-trigger-value'),
|
||||
'rule-trigger-stop' => Input::get('rule-trigger-stop'),
|
||||
];
|
||||
|
||||
foreach ($data['rule-triggers'] as $index => $trigger) {
|
||||
$value = $data['rule-trigger-values'][$index];
|
||||
$stopProcessing = isset($data['rule-trigger-stop'][$index]) ? true : false;
|
||||
|
||||
// Create a new trigger object
|
||||
$ruleTrigger = new RuleTrigger;
|
||||
$ruleTrigger->order = $order;
|
||||
$ruleTrigger->active = 1;
|
||||
$ruleTrigger->stop_processing = $stopProcessing;
|
||||
$ruleTrigger->trigger_type = $trigger;
|
||||
$ruleTrigger->trigger_value = $value;
|
||||
|
||||
// Store in list
|
||||
$triggers[] = $ruleTrigger;
|
||||
$order++;
|
||||
}
|
||||
|
||||
return $triggers;
|
||||
}
|
||||
|
||||
private function createDefaultRule()
|
||||
{
|
||||
/** @var RuleRepositoryInterface $repository */
|
||||
|
@@ -272,7 +272,8 @@ Route::group(
|
||||
Route::get('/rules/rules/down/{rule}', ['uses' => 'RuleController@down', 'as' => 'rules.rule.down']);
|
||||
Route::get('/rules/rules/edit/{rule}', ['uses' => 'RuleController@edit', 'as' => 'rules.rule.edit']);
|
||||
Route::get('/rules/rules/delete/{rule}', ['uses' => 'RuleController@delete', 'as' => 'rules.rule.delete']);
|
||||
|
||||
Route::get('/rules/rules/test_triggers', ['uses' => 'RuleController@testTriggers', 'as' => 'rules.rule.test_triggers']);
|
||||
|
||||
// rules POST:
|
||||
Route::post('/rules/rules/trigger/reorder/{rule}', ['uses' => 'RuleController@reorderRuleTriggers']);
|
||||
Route::post('/rules/rules/action/reorder/{rule}', ['uses' => 'RuleController@reorderRuleActions']);
|
||||
|
Reference in New Issue
Block a user