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()