|
|
@@ -46,15 +46,20 @@ class Controller extends BaseController
|
|
|
protected function createRangeFilters(Model $model, string ...$columnNames): void
|
|
|
{
|
|
|
foreach ($columnNames as $columnName) {
|
|
|
+ $rangeKey = $columnName;
|
|
|
+ if (!isset($this->data['header'][$columnName]) && isset($this->data['header'][$columnName . '_txt'])) {
|
|
|
+ $rangeKey = $columnName . '_txt';
|
|
|
+ }
|
|
|
+ $title = $this->data['header'][$rangeKey] ?? $columnName;
|
|
|
if(str_ends_with($columnName, '_price')) {
|
|
|
- $this->data['ranges'][$columnName] = [
|
|
|
- 'title' => $this->data['header'][$columnName],
|
|
|
+ $this->data['ranges'][$rangeKey] = [
|
|
|
+ 'title' => $title,
|
|
|
'min' => $model::query()->min($columnName) / 100,
|
|
|
'max' => $model::query()->max($columnName) / 100,
|
|
|
];
|
|
|
} else {
|
|
|
- $this->data['ranges'][$columnName] = [
|
|
|
- 'title' => $this->data['header'][$columnName ],
|
|
|
+ $this->data['ranges'][$rangeKey] = [
|
|
|
+ 'title' => $title,
|
|
|
'min' => $model::query()->min($columnName),
|
|
|
'max' => $model::query()->max($columnName),
|
|
|
];
|
|
|
@@ -180,13 +185,14 @@ class Controller extends BaseController
|
|
|
$toValue = $request->filters[$columnName . '_to'] ?? null;
|
|
|
|
|
|
// Для price-полей значения в форме в рублях, в БД в копейках
|
|
|
- $multiplier = str_ends_with($columnName, '_price') ? 100 : 1;
|
|
|
+ $dbColumn = str_ends_with($columnName, '_txt') ? substr($columnName, 0, -4) : $columnName;
|
|
|
+ $multiplier = str_ends_with($dbColumn, '_price') ? 100 : 1;
|
|
|
|
|
|
if($fromValue !== null && $fromValue !== '') {
|
|
|
- $query->where($columnName, '>=', $fromValue * $multiplier);
|
|
|
+ $query->where($dbColumn, '>=', $fromValue * $multiplier);
|
|
|
}
|
|
|
if($toValue !== null && $toValue !== '') {
|
|
|
- $query->where($columnName, '<=', $toValue * $multiplier);
|
|
|
+ $query->where($dbColumn, '<=', $toValue * $multiplier);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -220,6 +226,22 @@ class Controller extends BaseController
|
|
|
$filterValue = implode('||', $mapped);
|
|
|
}
|
|
|
|
|
|
+ // Для цен: значения в рублях, в БД в копейках
|
|
|
+ if (str_ends_with($dbColumn, '_price')) {
|
|
|
+ $parts = explode('||', $filterValue);
|
|
|
+ $mapped = array_map(function ($v) {
|
|
|
+ if ($v === '-пусто-') {
|
|
|
+ return $v;
|
|
|
+ }
|
|
|
+ $normalized = str_replace(',', '.', (string)$v);
|
|
|
+ if (!is_numeric($normalized)) {
|
|
|
+ return $v;
|
|
|
+ }
|
|
|
+ return (string) round(((float)$normalized) * 100);
|
|
|
+ }, $parts);
|
|
|
+ $filterValue = implode('||', $mapped);
|
|
|
+ }
|
|
|
+
|
|
|
return [$dbColumn, $filterValue];
|
|
|
}
|
|
|
|