'ID', 'shortname' => 'Сокращение', 'name' => 'Название', 'areas_count' => 'Районов', ]; protected array $searchFields = ['shortname', 'name']; public function index(Request $request): View { $districts = District::withCount('areas') ->orderBy('id') ->get() ->map(function ($district) { return [ 'id' => $district->id, 'shortname' => $district->shortname, 'name' => $district->name, 'areas_count' => $district->areas_count, ]; }); return view('admin.districts.index', [ 'active' => 'admin_districts', 'id' => $this->id, 'header' => $this->header, 'districts' => $districts, ]); } public function show(int $districtId): View { $district = District::withTrashed()->findOrFail($districtId); return view('admin.districts.edit', [ 'active' => 'admin_districts', 'district' => $district, ]); } public function store(Request $request): RedirectResponse { $validated = $request->validate([ 'id' => ['nullable', 'integer'], 'shortname' => ['required', 'string', 'max:50'], 'name' => ['required', 'string', 'max:255'], ]); if (!empty($validated['id'])) { $district = District::withTrashed()->findOrFail($validated['id']); $district->update([ 'shortname' => $validated['shortname'], 'name' => $validated['name'], ]); } else { District::create([ 'shortname' => $validated['shortname'], 'name' => $validated['name'], ]); } return redirect()->route('admin.district.index')->with('success', 'Округ сохранён'); } public function destroy(District $district): RedirectResponse { if ($district->areas()->count() > 0) { return redirect()->route('admin.district.index') ->with('error', 'Невозможно удалить округ с привязанными районами'); } $district->delete(); return redirect()->route('admin.district.index')->with('success', 'Округ удалён'); } public function undelete(int $districtId): RedirectResponse { $district = District::withTrashed()->findOrFail($districtId); $district->restore(); return redirect()->route('admin.district.index')->with('success', 'Округ восстановлен'); } public function export(Request $request): RedirectResponse { $service = new ExportDistrictsService(); $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/districts', 'upload'); $fullPath = Storage::disk('upload')->path($path); $service = new ImportDistrictsService($fullPath, $request->user()->id); $result = $service->handle(); if ($result['success']) { return redirect()->route('admin.district.index') ->with('success', 'Импорт завершён успешно'); } return redirect()->route('admin.district.index') ->with('error', 'Ошибка импорта: ' . ($result['error'] ?? 'неизвестная ошибка')); } }