Add option to select date, fix #11042

This commit is contained in:
James Cole
2025-10-10 16:41:46 +02:00
parent c91c87d646
commit 4f4576e458
4 changed files with 54 additions and 29 deletions

View File

@@ -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);
@@ -73,11 +74,20 @@ class SelectController extends Controller
/** @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]);
@@ -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'));
} }
@@ -127,7 +137,7 @@ class SelectController extends Controller
// 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) {
@@ -160,7 +170,7 @@ class SelectController extends Controller
// 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
@@ -190,7 +200,7 @@ class SelectController extends Controller
$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);
@@ -202,7 +212,7 @@ class SelectController extends Controller
$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 File

@@ -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]);

View File

@@ -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>

View File

@@ -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>