Skip to content

Commit bdaf5f4

Browse files
committed
PredefinedFilter fix
1 parent e948836 commit bdaf5f4

File tree

2 files changed

+26
-42
lines changed

2 files changed

+26
-42
lines changed

app/Models/PredefinedFilter.php

Lines changed: 22 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -124,48 +124,32 @@ protected function applyLikeFilter(Builder $assets, array $filter, string $key,
124124
}
125125
}
126126

127-
public function applyDateRangeFilter($query, array $filters, string $qualifiedField)
127+
protected function applyDateRangeFilter(Builder $assets, array $filter, string $field): void
128128
{
129-
$start = null;
130-
$end = null;
129+
$startKey = $field . '_start';
130+
$endKey = $field . '_end';
131131

132-
$fieldNameOnly = Str::afterLast($qualifiedField, '.');
132+
$start = $filter[$startKey] ?? null;
133+
$end = $filter[$endKey] ?? null;
133134

134-
foreach ($filters as $filter) {
135-
if (!isset($filter['field'], $filter['value']) || !is_array($filter['value'])) {
136-
continue;
137-
}
138-
139-
if ($filter['field'] !== $fieldNameOnly) {
140-
continue;
141-
}
142-
143-
if (isset($filter['value']['startDate'])) {
144-
$start = $filter['value']['startDate'] ?: null;
145-
}
146135

147-
if (isset($filter['value']['endDate'])) {
148-
$end = $filter['value']['endDate'] ?: null;
149-
}
136+
if (!$start && !$end) {
137+
return;
150138
}
151139

152-
if ($start || $end) {
153-
$query->whereNotNull($qualifiedField);
154-
}
140+
$table = $assets->getModel()->getTable();
141+
$column = $table . '.' . $field;
155142

156-
if (!empty($start)) {
157-
$query->whereDate($qualifiedField, '>=', $start);
143+
if ($start) {
144+
$assets->whereDate($column, '>=', $start);
158145
}
159146

160-
if (!empty($end)) {
161-
$query->whereDate($qualifiedField, '<=', $end);
147+
if ($end) {
148+
$assets->whereDate($column, '<=', $end);
162149
}
163-
164-
return $query;
165150
}
166151

167152

168-
169153
public function filterAssets(Builder $assets)
170154
{
171155
$filter = $this->filter_data ?? [];
@@ -183,15 +167,15 @@ public function filterAssets(Builder $assets)
183167
$this->applyArrayOrScalarFilter($assets, $filter, 'manufacturer_id', 'models.manufacturer_id');
184168
}
185169

186-
$this->applyDateRangeFilter($assets, $filter, 'assets.created_at');
187-
$this->applyDateRangeFilter($assets, $filter, 'assets.purchase_date');
188-
$this->applyDateRangeFilter($assets, $filter, 'assets.last_checkout');
189-
$this->applyDateRangeFilter($assets, $filter, 'assets.last_checkin');
190-
$this->applyDateRangeFilter($assets, $filter, 'assets.expected_checkin');
191-
$this->applyDateRangeFilter($assets, $filter, 'assets.asset_eol_date');
192-
$this->applyDateRangeFilter($assets, $filter, 'assets.last_audit_date');
193-
$this->applyDateRangeFilter($assets, $filter, 'assets.next_audit_date');
194-
$this->applyDateRangeFilter($assets, $filter, 'assets.updated_at');
170+
$this->applyDateRangeFilter($assets, $filter, 'created_at');
171+
$this->applyDateRangeFilter($assets, $filter, 'purchase_date');
172+
$this->applyDateRangeFilter($assets, $filter, 'last_checkout');
173+
$this->applyDateRangeFilter($assets, $filter, 'last_checkin');
174+
$this->applyDateRangeFilter($assets, $filter, 'expected_checkin');
175+
$this->applyDateRangeFilter($assets, $filter, 'asset_eol_date');
176+
$this->applyDateRangeFilter($assets, $filter, 'last_audit_date');
177+
$this->applyDateRangeFilter($assets, $filter, 'next_audit_date');
178+
$this->applyDateRangeFilter($assets, $filter, 'updated_at');
195179

196180
$this->applyLikeFilter($assets, $filter, 'name', 'assets.name');
197181
$this->applyLikeFilter($assets, $filter, 'asset_tag', 'assets.asset_tag');

tests/Unit/Models/PredefinedFilter/PredefinedFilterFilterAssetsTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -356,16 +356,16 @@ public function it_filters_by_created_at_date_range_insclusive()
356356
{
357357
$user = User::factory()->create();
358358

359-
$in = Asset::factory()->create(['created_at' => '2025-01-15']);
359+
$in = Asset::factory()->create(['created_at' => '2025-01-15']);
360360
$out1 = Asset::factory()->create(['created_at' => '2024-12-31']);
361361
$out2 = Asset::factory()->create(['created_at' => '2025-02-01']);
362362

363363
$filter = PredefinedFilter::create([
364-
'name' => 'filter_by_date',
364+
'name' => 'filter_by_date',
365365
'created_by' => $user->id,
366-
'filter_data' => [
366+
'filter_data'=> [
367367
'created_at_start' => '2025-01-01',
368-
'created_at_end' => '2025-01-31',
368+
'created_at_end' => '2025-01-31',
369369
],
370370
]);
371371

0 commit comments

Comments
 (0)