authorizeMaintenanceAccess('maintenance.categories.view'); $business_id = $this->maintenanceUtil->getBusinessId(); if ($request->ajax()) { $categories = EquipmentCategory::where('business_id', $business_id) ->with('parent') ->withCount('equipment') ->orderBy('name'); return DataTables::of($categories) ->addColumn('parent_name', fn ($row) => $row->parent?->name ?? '—') ->addColumn('action', function ($row) { $html = '
'; if (auth()->user()->can('maintenance.categories.update')) { $html .= ''; } if (auth()->user()->can('maintenance.categories.delete')) { $html .= ' '; } $html .= '
'; return $html; }) ->editColumn('is_active', fn ($row) => $row->is_active ? 'فعال' : 'غیرفعال') ->rawColumns(['action']) ->make(true); } return view('maintenance::equipment_categories.index', [ 'parents' => $this->maintenanceUtil->getCategoriesDropdown($business_id), ]); } public function create() { $this->authorizeMaintenanceAccess('maintenance.categories.create'); $business_id = $this->maintenanceUtil->getBusinessId(); return view('maintenance::equipment_categories.create', [ 'parents' => $this->maintenanceUtil->getCategoriesDropdown($business_id), ]); } public function store(Request $request) { $this->authorizeMaintenanceAccess('maintenance.categories.create'); $business_id = $this->maintenanceUtil->getBusinessId(); $data = $request->validate([ 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'parent_id' => 'nullable|exists:maintenance_equipment_categories,id', 'is_active' => 'sometimes|boolean', ]); EquipmentCategory::create([ 'business_id' => $business_id, 'name' => $data['name'], 'description' => $data['description'] ?? null, 'parent_id' => $data['parent_id'] ?? null, 'is_active' => $data['is_active'] ?? true, ]); return $this->maintenanceUtil->jsonOrRedirect($request, true, 'دسته‌بندی ایجاد شد.'); } public function edit($id) { $this->authorizeMaintenanceAccess('maintenance.categories.update'); $business_id = $this->maintenanceUtil->getBusinessId(); $category = EquipmentCategory::where('business_id', $business_id)->findOrFail($id); return view('maintenance::equipment_categories.edit', [ 'category' => $category, 'parents' => $this->maintenanceUtil->getCategoriesDropdown($business_id, $category->id), ]); } public function update(Request $request, $id) { $this->authorizeMaintenanceAccess('maintenance.categories.update'); $business_id = $this->maintenanceUtil->getBusinessId(); $category = EquipmentCategory::where('business_id', $business_id)->findOrFail($id); $data = $request->validate([ 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'parent_id' => 'nullable|exists:maintenance_equipment_categories,id', 'is_active' => 'sometimes|boolean', ]); if (! empty($data['parent_id']) && (int) $data['parent_id'] === (int) $category->id) { return $this->maintenanceUtil->jsonOrRedirect($request, false, 'دسته والد نامعتبر است.'); } $category->update([ 'name' => $data['name'], 'description' => $data['description'] ?? null, 'parent_id' => $data['parent_id'] ?? null, 'is_active' => $data['is_active'] ?? $category->is_active, ]); return $this->maintenanceUtil->jsonOrRedirect($request, true, 'دسته‌بندی به‌روزرسانی شد.'); } public function destroy(Request $request, $id) { $this->authorizeMaintenanceAccess('maintenance.categories.delete'); $business_id = $this->maintenanceUtil->getBusinessId(); $category = EquipmentCategory::where('business_id', $business_id)->withCount(['children', 'equipment'])->findOrFail($id); if ($category->children_count > 0 || $category->equipment_count > 0) { return $this->maintenanceUtil->jsonOrRedirect($request, false, 'این دسته‌بندی قابل حذف نیست.'); } $category->delete(); return $this->maintenanceUtil->jsonOrRedirect($request, true, 'دسته‌بندی حذف شد.'); } }