'ID', 'name' => 'Название', 'district_name' => 'Округ', ]; protected array $searchFields = ['name']; public function index(Request $request): View { $query = Area::with('district')->orderBy('name'); // Фильтр по округу if ($request->has('district_id') && $request->district_id) { $query->where('district_id', $request->district_id); } $areas = $query->get()->map(function ($area) { return [ 'id' => $area->id, 'name' => $area->name, 'district_name' => $area->district?->shortname ?? '-', ]; }); $districts = District::orderBy('shortname')->pluck('shortname', 'id')->toArray(); return view('admin.areas.index', [ 'active' => 'admin_areas', 'id' => $this->id, 'header' => $this->header, 'areas' => $areas, 'districts' => $districts, 'selectedDistrict' => $request->district_id, ]); } public function show(int $areaId): View { $area = Area::withTrashed()->findOrFail($areaId); $districts = District::orderBy('shortname')->pluck('name', 'id')->toArray(); return view('admin.areas.edit', [ 'active' => 'admin_areas', 'area' => $area, 'districts' => $districts, ]); } public function store(Request $request): RedirectResponse { $validated = $request->validate([ 'id' => ['nullable', 'integer'], 'name' => ['required', 'string', 'max:255'], 'district_id' => ['required', 'integer', 'exists:districts,id'], ]); if (!empty($validated['id'])) { $area = Area::withTrashed()->findOrFail($validated['id']); $area->update([ 'name' => $validated['name'], 'district_id' => $validated['district_id'], ]); } else { Area::create([ 'name' => $validated['name'], 'district_id' => $validated['district_id'], ]); } return redirect()->route('admin.area.index')->with('success', 'Район сохранён'); } public function destroy(Area $area): RedirectResponse { $area->delete(); return redirect()->route('admin.area.index')->with('success', 'Район удалён'); } public function undelete(int $areaId): RedirectResponse { $area = Area::withTrashed()->findOrFail($areaId); $area->restore(); return redirect()->route('admin.area.index')->with('success', 'Район восстановлен'); } public function export(Request $request): RedirectResponse { $service = new ExportAreasService(); $link = $service->handle($request->user()->id); return redirect()->away($link); } public function import(Request $request): RedirectResponse { $request->validate([ 'import_file' => ['required', 'file', 'mimes:xlsx,xls'], ]); $file = $request->file('import_file'); $path = $file->store('import/areas', 'upload'); $fullPath = Storage::disk('upload')->path($path); $service = new ImportAreasService($fullPath, $request->user()->id); $result = $service->handle(); if ($result['success']) { return redirect()->route('admin.area.index') ->with('success', 'Импорт завершён успешно'); } return redirect()->route('admin.area.index') ->with('error', 'Ошибка импорта: ' . ($result['error'] ?? 'неизвестная ошибка')); } }