mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-14 08:11:20 +00:00
Add option to select date, fix #11042
This commit is contained in:
@@ -24,6 +24,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Http\Controllers\Rule;
|
namespace FireflyIII\Http\Controllers\Rule;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Http\Requests\SelectTransactionsRequest;
|
use FireflyIII\Http\Requests\SelectTransactionsRequest;
|
||||||
@@ -56,7 +57,7 @@ class SelectController extends Controller
|
|||||||
|
|
||||||
$this->middleware(
|
$this->middleware(
|
||||||
static function ($request, $next) {
|
static function ($request, $next) {
|
||||||
app('view')->share('title', (string) trans('firefly.rules'));
|
app('view')->share('title', (string)trans('firefly.rules'));
|
||||||
app('view')->share('mainTitleIcon', 'fa-random');
|
app('view')->share('mainTitleIcon', 'fa-random');
|
||||||
|
|
||||||
return $next($request);
|
return $next($request);
|
||||||
@@ -71,20 +72,29 @@ class SelectController extends Controller
|
|||||||
{
|
{
|
||||||
// Get parameters specified by the user
|
// Get parameters specified by the user
|
||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
$accounts = implode(',', $request->get('accounts'));
|
$accounts = implode(',', $request->get('accounts'));
|
||||||
|
|
||||||
// create new rule engine:
|
// create new rule engine:
|
||||||
$newRuleEngine = app(RuleEngineInterface::class);
|
$newRuleEngine = app(RuleEngineInterface::class);
|
||||||
$newRuleEngine->setUser($user);
|
$newRuleEngine->setUser($user);
|
||||||
|
|
||||||
|
// add date operators.
|
||||||
|
if (null !== $request->get('start')) {
|
||||||
|
$startDate = new Carbon($request->get('start'));
|
||||||
|
$newRuleEngine->addOperator(['type' => 'date_after', 'value' => $startDate->format('Y-m-d')]);
|
||||||
|
}
|
||||||
|
if (null !== $request->get('end')) {
|
||||||
|
$endDate = new Carbon($request->get('end'));
|
||||||
|
$newRuleEngine->addOperator(['type' => 'date_before', 'value' => $endDate->format('Y-m-d')]);
|
||||||
|
}
|
||||||
|
|
||||||
// add extra operators:
|
// add extra operators:
|
||||||
$newRuleEngine->addOperator(['type' => 'account_id', 'value' => $accounts]);
|
$newRuleEngine->addOperator(['type' => 'account_id', 'value' => $accounts]);
|
||||||
|
|
||||||
// set rules:
|
// set rules:
|
||||||
$newRuleEngine->setRules(new Collection()->push($rule));
|
$newRuleEngine->setRules(new Collection()->push($rule));
|
||||||
$newRuleEngine->fire();
|
$newRuleEngine->fire();
|
||||||
$resultCount = $newRuleEngine->getResults();
|
$resultCount = $newRuleEngine->getResults();
|
||||||
|
|
||||||
session()->flash('success', trans_choice('firefly.applied_rule_selection', $resultCount, ['title' => $rule->title]));
|
session()->flash('success', trans_choice('firefly.applied_rule_selection', $resultCount, ['title' => $rule->title]));
|
||||||
|
|
||||||
@@ -94,7 +104,7 @@ class SelectController extends Controller
|
|||||||
/**
|
/**
|
||||||
* View to select transactions by a rule.
|
* View to select transactions by a rule.
|
||||||
*/
|
*/
|
||||||
public function selectTransactions(Rule $rule): Factory|RedirectResponse|View
|
public function selectTransactions(Rule $rule): Factory | RedirectResponse | View
|
||||||
{
|
{
|
||||||
if (false === $rule->active) {
|
if (false === $rule->active) {
|
||||||
session()->flash('warning', trans('firefly.cannot_fire_inactive_rules'));
|
session()->flash('warning', trans('firefly.cannot_fire_inactive_rules'));
|
||||||
@@ -102,7 +112,7 @@ class SelectController extends Controller
|
|||||||
return redirect(route('rules.index'));
|
return redirect(route('rules.index'));
|
||||||
}
|
}
|
||||||
// does the user have shared accounts?
|
// does the user have shared accounts?
|
||||||
$subTitle = (string) trans('firefly.apply_rule_selection', ['title' => $rule->title]);
|
$subTitle = (string)trans('firefly.apply_rule_selection', ['title' => $rule->title]);
|
||||||
|
|
||||||
return view('rules.rule.select-transactions', compact('rule', 'subTitle'));
|
return view('rules.rule.select-transactions', compact('rule', 'subTitle'));
|
||||||
}
|
}
|
||||||
@@ -116,25 +126,25 @@ class SelectController extends Controller
|
|||||||
public function testTriggers(TestRuleFormRequest $request): JsonResponse
|
public function testTriggers(TestRuleFormRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
// build fake rule
|
// build fake rule
|
||||||
$rule = new Rule();
|
$rule = new Rule();
|
||||||
|
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<int, RuleTrigger> $triggers */
|
/** @var \Illuminate\Database\Eloquent\Collection<int, RuleTrigger> $triggers */
|
||||||
$triggers = new Collection();
|
$triggers = new Collection();
|
||||||
$rule->strict = '1' === $request->get('strict');
|
$rule->strict = '1' === $request->get('strict');
|
||||||
|
|
||||||
// build trigger array from response
|
// build trigger array from response
|
||||||
$textTriggers = $this->getValidTriggerList($request);
|
$textTriggers = $this->getValidTriggerList($request);
|
||||||
|
|
||||||
// warn if nothing.
|
// warn if nothing.
|
||||||
if (0 === count($textTriggers)) {
|
if (0 === count($textTriggers)) {
|
||||||
return response()->json(['html' => '', 'warning' => (string) trans('firefly.warning_no_valid_triggers')]);
|
return response()->json(['html' => '', 'warning' => (string)trans('firefly.warning_no_valid_triggers')]);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($textTriggers as $textTrigger) {
|
foreach ($textTriggers as $textTrigger) {
|
||||||
$needsContext = config(sprintf('search.operators.%s.needs_context', $textTrigger['type'])) ?? true;
|
$needsContext = config(sprintf('search.operators.%s.needs_context', $textTrigger['type'])) ?? true;
|
||||||
$trigger = new RuleTrigger();
|
$trigger = new RuleTrigger();
|
||||||
$trigger->trigger_type = $textTrigger['type'];
|
$trigger->trigger_type = $textTrigger['type'];
|
||||||
$trigger->trigger_value = $textTrigger['value'];
|
$trigger->trigger_value = $textTrigger['value'];
|
||||||
if (false === $needsContext) {
|
if (false === $needsContext) {
|
||||||
$trigger->trigger_value = 'true';
|
$trigger->trigger_value = 'true';
|
||||||
}
|
}
|
||||||
@@ -149,22 +159,22 @@ class SelectController extends Controller
|
|||||||
|
|
||||||
// create new rule engine:
|
// create new rule engine:
|
||||||
/** @var RuleEngineInterface $newRuleEngine */
|
/** @var RuleEngineInterface $newRuleEngine */
|
||||||
$newRuleEngine = app(RuleEngineInterface::class);
|
$newRuleEngine = app(RuleEngineInterface::class);
|
||||||
|
|
||||||
// set rules:
|
// set rules:
|
||||||
$newRuleEngine->setRules(new Collection()->push($rule));
|
$newRuleEngine->setRules(new Collection()->push($rule));
|
||||||
$newRuleEngine->setRefreshTriggers(false);
|
$newRuleEngine->setRefreshTriggers(false);
|
||||||
$collection = $newRuleEngine->find();
|
$collection = $newRuleEngine->find();
|
||||||
$collection = $collection->slice(0, 20);
|
$collection = $collection->slice(0, 20);
|
||||||
|
|
||||||
// Warn the user if only a subset of transactions is returned
|
// Warn the user if only a subset of transactions is returned
|
||||||
$warning = '';
|
$warning = '';
|
||||||
if (0 === count($collection)) {
|
if (0 === count($collection)) {
|
||||||
$warning = (string) trans('firefly.warning_no_matching_transactions');
|
$warning = (string)trans('firefly.warning_no_matching_transactions');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return json response
|
// Return json response
|
||||||
$view = 'ERROR, see logs.';
|
$view = 'ERROR, see logs.';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$view = view('list.journals-array-tiny', ['groups' => $collection])->render();
|
$view = view('list.journals-array-tiny', ['groups' => $collection])->render();
|
||||||
@@ -187,26 +197,26 @@ class SelectController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function testTriggersByRule(Rule $rule): JsonResponse
|
public function testTriggersByRule(Rule $rule): JsonResponse
|
||||||
{
|
{
|
||||||
$triggers = $rule->ruleTriggers;
|
$triggers = $rule->ruleTriggers;
|
||||||
|
|
||||||
if (0 === count($triggers)) {
|
if (0 === count($triggers)) {
|
||||||
return response()->json(['html' => '', 'warning' => (string) trans('firefly.warning_no_valid_triggers')]);
|
return response()->json(['html' => '', 'warning' => (string)trans('firefly.warning_no_valid_triggers')]);
|
||||||
}
|
}
|
||||||
// create new rule engine:
|
// create new rule engine:
|
||||||
$newRuleEngine = app(RuleEngineInterface::class);
|
$newRuleEngine = app(RuleEngineInterface::class);
|
||||||
|
|
||||||
// set rules:
|
// set rules:
|
||||||
$newRuleEngine->setRules(new Collection()->push($rule));
|
$newRuleEngine->setRules(new Collection()->push($rule));
|
||||||
$collection = $newRuleEngine->find();
|
$collection = $newRuleEngine->find();
|
||||||
$collection = $collection->slice(0, 20);
|
$collection = $collection->slice(0, 20);
|
||||||
|
|
||||||
$warning = '';
|
$warning = '';
|
||||||
if (0 === count($collection)) {
|
if (0 === count($collection)) {
|
||||||
$warning = (string) trans('firefly.warning_no_matching_transactions');
|
$warning = (string)trans('firefly.warning_no_matching_transactions');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return json response
|
// Return json response
|
||||||
$view = 'ERROR, see logs.';
|
$view = 'ERROR, see logs.';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$view = view('list.journals-array-tiny', ['groups' => $collection])->render();
|
$view = view('list.journals-array-tiny', ['groups' => $collection])->render();
|
||||||
|
@@ -24,6 +24,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Http\Controllers\RuleGroup;
|
namespace FireflyIII\Http\Controllers\RuleGroup;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use Exception;
|
use Exception;
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Http\Requests\SelectTransactionsRequest;
|
use FireflyIII\Http\Requests\SelectTransactionsRequest;
|
||||||
@@ -73,6 +74,16 @@ class ExecutionController extends Controller
|
|||||||
$newRuleEngine = app(RuleEngineInterface::class);
|
$newRuleEngine = app(RuleEngineInterface::class);
|
||||||
$newRuleEngine->setUser($user);
|
$newRuleEngine->setUser($user);
|
||||||
|
|
||||||
|
// add date operators.
|
||||||
|
if (null !== $request->get('start')) {
|
||||||
|
$startDate = new Carbon($request->get('start'));
|
||||||
|
$newRuleEngine->addOperator(['type' => 'date_after', 'value' => $startDate->format('Y-m-d')]);
|
||||||
|
}
|
||||||
|
if (null !== $request->get('end')) {
|
||||||
|
$endDate = new Carbon($request->get('end'));
|
||||||
|
$newRuleEngine->addOperator(['type' => 'date_before', 'value' => $endDate->format('Y-m-d')]);
|
||||||
|
}
|
||||||
|
|
||||||
// add extra operators:
|
// add extra operators:
|
||||||
$newRuleEngine->addOperator(['type' => 'account_id', 'value' => $accounts]);
|
$newRuleEngine->addOperator(['type' => 'account_id', 'value' => $accounts]);
|
||||||
|
|
||||||
|
@@ -24,6 +24,8 @@
|
|||||||
</p>
|
</p>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6 col-md-8 col-sm-12 col-xs-12">
|
<div class="col-lg-6 col-md-8 col-sm-12 col-xs-12">
|
||||||
|
{{ ExpandedForm.date('start') }}
|
||||||
|
{{ ExpandedForm.date('end') }}
|
||||||
{{ AccountForm.assetAccountCheckList('accounts', {'select_all': true,'class': 'account-checkbox', 'label': trans('firefly.include_transactions_from_accounts') }) }}
|
{{ AccountForm.assetAccountCheckList('accounts', {'select_all': true,'class': 'account-checkbox', 'label': trans('firefly.include_transactions_from_accounts') }) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -23,6 +23,8 @@
|
|||||||
</p>
|
</p>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6 col-md-8 col-sm-12 col-xs-12">
|
<div class="col-lg-6 col-md-8 col-sm-12 col-xs-12">
|
||||||
|
{{ ExpandedForm.date('start') }}
|
||||||
|
{{ ExpandedForm.date('end') }}
|
||||||
{{ AccountForm.assetAccountCheckList('accounts', {'select_all': true, 'class': 'account-checkbox', 'label': trans('firefly.include_transactions_from_accounts') }) }}
|
{{ AccountForm.assetAccountCheckList('accounts', {'select_all': true, 'class': 'account-checkbox', 'label': trans('firefly.include_transactions_from_accounts') }) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user