From e5a68d8450c34bc5183b38e5a4c272a4cd060e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Thu, 21 Jul 2022 10:09:57 +0300 Subject: [PATCH] refs #2543 Fixed: not equal year filter issue. --- app/Abstracts/Listeners/Report.php | 3 +++ app/Traits/DateTime.php | 28 +++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/Abstracts/Listeners/Report.php b/app/Abstracts/Listeners/Report.php index eee1f4715..020e437db 100644 --- a/app/Abstracts/Listeners/Report.php +++ b/app/Abstracts/Listeners/Report.php @@ -132,6 +132,9 @@ abstract class Report $input = request('search'); // Remove year as it's handled based on financial start + $search_not_year = 'not year:' . $this->getSearchStringValue('year', '', $input); + $input = str_replace($search_not_year, '', $input); + $search_year = 'year:' . $this->getSearchStringValue('year', '', $input); $input = str_replace($search_year, '', $input); diff --git a/app/Traits/DateTime.php b/app/Traits/DateTime.php index 2929413c4..700244e69 100644 --- a/app/Traits/DateTime.php +++ b/app/Traits/DateTime.php @@ -5,6 +5,7 @@ namespace App\Traits; use App\Traits\SearchString; use Carbon\CarbonPeriod; use Date; +use Lorisleiva\LaravelSearchString\SearchStringManager; trait DateTime { @@ -41,6 +42,7 @@ trait DateTime public function scopeMonthsOfYear($query, $field) { $now = Date::now(); + $year = $this->getSearchStringValue('year', $now->year); $financial_start = $this->getFinancialStart($year); @@ -54,7 +56,31 @@ trait DateTime $end = $financial_start->addYear(1)->subDays(1)->endOfDay()->format('Y-m-d H:i:s'); } - return $query->whereBetween($field, [$start, $end]); + // Looking year or not year + $query_type = 'whereBetween'; + + if (request('search')) { + $search_string_manager = new SearchStringManager($query->getModel()); + $parse = $search_string_manager->parse(request('search')); + + if (! empty($parse->expressions)) { + foreach ($parse->expressions as $filter) { + if (! $filter instanceof \Lorisleiva\LaravelSearchString\AST\NotSymbol) { + continue; + } + + if ($filter->expression->key != 'year') { + continue; + } + + $query_type = 'whereNotBetween'; + + break; + } + } + } + + return $query->{$query_type}($field, [$start, $end]); } public function getTimezones()