header('HX-Request')) { return response('', 200)->header('HX-Redirect', route('sales.managers.index')); } $query = SalesManager::query()->active(); // 검색 if ($search = $request->get('search')) { $query->where(function ($q) use ($search) { $q->where('name', 'like', "%{$search}%") ->orWhere('member_id', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%") ->orWhere('phone', 'like', "%{$search}%"); }); } // 역할 필터 if ($role = $request->get('role')) { $query->where('role', $role); } $managers = $query->orderBy('name')->paginate(20); // 통계 $stats = [ 'total' => SalesManager::active()->count(), 'operators' => SalesManager::active()->where('role', 'operator')->count(), 'sales_admins' => SalesManager::active()->where('role', 'sales_admin')->count(), 'managers' => SalesManager::active()->where('role', 'manager')->count(), ]; return view('sales.managers.index', compact('managers', 'stats')); } /** * 등록 폼 */ public function create(): View { $parents = SalesManager::active() ->whereIn('role', ['operator', 'sales_admin']) ->orderBy('name') ->get(); return view('sales.managers.create', compact('parents')); } /** * 등록 처리 */ public function store(Request $request) { $validated = $request->validate([ 'member_id' => 'required|string|max:50|unique:sales_managers,member_id', 'password' => 'required|string|min:4', 'name' => 'required|string|max:100', 'phone' => 'nullable|string|max:20', 'email' => 'nullable|email|max:100', 'parent_id' => 'nullable|exists:sales_managers,id', 'role' => 'required|in:operator,sales_admin,manager', 'remarks' => 'nullable|string', ]); SalesManager::create($validated); return redirect()->route('sales.managers.index') ->with('success', '담당자가 등록되었습니다.'); } /** * 상세 페이지 */ public function show(int $id): View { $manager = SalesManager::with(['parent', 'children', 'registeredProspects', 'records']) ->findOrFail($id); return view('sales.managers.show', compact('manager')); } /** * 수정 폼 */ public function edit(int $id): View { $manager = SalesManager::findOrFail($id); $parents = SalesManager::active() ->whereIn('role', ['operator', 'sales_admin']) ->where('id', '!=', $id) ->orderBy('name') ->get(); return view('sales.managers.edit', compact('manager', 'parents')); } /** * 수정 처리 */ public function update(Request $request, int $id) { $manager = SalesManager::findOrFail($id); $validated = $request->validate([ 'name' => 'required|string|max:100', 'phone' => 'nullable|string|max:20', 'email' => 'nullable|email|max:100', 'parent_id' => 'nullable|exists:sales_managers,id', 'role' => 'required|in:operator,sales_admin,manager', 'remarks' => 'nullable|string', 'password' => 'nullable|string|min:4', ]); // 비밀번호가 비어있으면 제외 if (empty($validated['password'])) { unset($validated['password']); } $manager->update($validated); return redirect()->route('sales.managers.index') ->with('success', '담당자 정보가 수정되었습니다.'); } /** * 삭제 처리 (비활성화) */ public function destroy(int $id) { $manager = SalesManager::findOrFail($id); $manager->update(['is_active' => false]); return redirect()->route('sales.managers.index') ->with('success', '담당자가 비활성화되었습니다.'); } }