'catalog', 'title' => 'Каталог', 'id' => 'products', 'header' => [ 'id' => 'ID', 'year' => 'Год', 'nomenclature_number' => 'Номер номенклатуры', 'article' => 'Артикул', 'manufacturer' => 'Производитель', 'name_tz' => 'Наименование ТЗ', 'type_tz' => 'Тип по ТЗ', 'type' => 'Тип', 'manufacturer_name' => 'Наименование производителя', 'sizes' => 'Размеры', 'price_status' => 'Статус цены', 'product_price_txt' => 'Цена товара', 'installation_price_txt' => 'Цена установки', 'service_price_txt' => 'Цена обслуживания', 'total_price_txt' => 'Итоговая цена', 'note' => 'Примечания', 'created_at' => 'Дата создания', ], 'searchFields' => [ 'nomenclature_number', 'article', 'name_tz', 'manufacturer_name', 'note', ], ]; public function index(Request $request) { $model = new Product; // fill filters $this->createFilters($model, 'type_tz', 'type'); $this->createRangeFilters($model, 'nomenclature_number', 'product_price', 'installation_price', 'service_price', 'total_price'); $this->createDateFilters($model, 'created_at'); // create request $q = $model::query(); $this->acceptFilters($q, $request); $this->acceptSearch($q, $request); $this->setSortAndOrderBy($model, $request); $q->orderBy($this->data['sortBy'], $this->data['orderBy']); $this->data['products'] = $q->paginate()->withQueryString(); return view('catalog.index', $this->data); } public function show() { } /** * @param Request $request * @return RedirectResponse */ public function import(Request $request) { // validate data $request->validate([ 'year' => 'required|integer|min:2000|max:' . (int)date('Y', strtotime('next year')), 'import_file' => 'file', ]); // load and save file $path = Str::random(2) . '/' . Str::uuid() . '.' .$request->file('import_file')->getClientOriginalExtension(); Storage::disk('upload')->put($path, $request->file('import_file')->getContent()); // dispatch job ImportCatalog::dispatch($path, $request->year, $request->user()->id); Log::info('ImportCatalog job created!'); return redirect()->route('catalog.index')->with(['success' => 'Задача импорта успешно создана!']); } public function export(Request $request) { $request->validate([ 'withFilter' => 'nullable', 'filters' => 'nullable|array', ]); // load and save file $filters = ($request->withFilter) ? $request->filters ?? [] : []; // dispatch job ExportCatalog::dispatch($filters , $request->user()->id); Log::info('ExportCatalog job created!'); return redirect()->route('catalog.index')->with(['success' => 'Задача экспорта успешно создана!']); } /** * @param Request $request * @return array */ public function search(Request $request): array { $s = $request->get('s'); $searchFields = $this->data['searchFields']; $ret = []; if($s) { $result = Product::query()->where(function ($query) use ($searchFields, $s) { foreach ($searchFields as $searchField) { $query->orWhere($searchField, 'LIKE', '%' . $s . '%'); } }); foreach ($result->get() as $p) { $ret[$p->id] = $p->common_name; // $ret[$p->id] = $p->name_tz . ' (арт.' . $p->article . ', №' . $p->nomenclature_number . ', ' . $p->year . 'г., ' . $p->product_price_txt . ')'; } } return $ret; } }