feat:영업파트너 승인 페이지 추가 (본사 관리자 전용)

- 승인 대기 목록 페이지 (/sales/managers/approvals)
- isAdmin() 권한 체크: admin 또는 super_admin만 접근 가능
- 승인/반려 기능 (AJAX 지원)
- 상세 보기 모달
- 승인 대기 통계 (오늘 승인/반려 수)
- DB 메뉴 추가: 영업관리 > 영업파트너 승인

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
pro
2026-01-31 11:27:06 +09:00
parent 5da0ab5ccb
commit d2ab0d6659
4 changed files with 445 additions and 0 deletions

View File

@@ -332,4 +332,81 @@ public function deleteDocument(int $id, int $documentId)
return redirect()->back()
->with('success', '서류가 삭제되었습니다.');
}
/**
* 영업파트너 승인 목록 (본사 관리자 전용)
*/
public function approvals(Request $request): View|Response
{
// 권한 체크: admin 역할만 접근 가능
if (!auth()->user()->isAdmin()) {
abort(403, '접근 권한이 없습니다.');
}
if ($request->header('HX-Request')) {
return response('', 200)->header('HX-Redirect', route('sales.managers.approvals'));
}
$filters = [
'search' => $request->get('search'),
'approval_status' => 'pending', // 승인 대기만
];
$partners = $this->service->getSalesPartners($filters)->paginate(20);
$stats = $this->service->getApprovalStats();
return view('sales.managers.approvals', compact('partners', 'stats'));
}
/**
* 승인 목록에서 승인 처리
*/
public function approveFromList(Request $request, int $id)
{
// 권한 체크
if (!auth()->user()->isAdmin()) {
abort(403, '접근 권한이 없습니다.');
}
$partner = User::findOrFail($id);
$this->service->approve($partner, auth()->id());
if ($request->header('HX-Request')) {
return response()->json([
'success' => true,
'message' => "{$partner->name}님이 승인되었습니다.",
]);
}
return redirect()->route('sales.managers.approvals')
->with('success', "{$partner->name}님이 승인되었습니다.");
}
/**
* 승인 목록에서 반려 처리
*/
public function rejectFromList(Request $request, int $id)
{
// 권한 체크
if (!auth()->user()->isAdmin()) {
abort(403, '접근 권한이 없습니다.');
}
$validated = $request->validate([
'rejection_reason' => 'required|string|max:1000',
]);
$partner = User::findOrFail($id);
$this->service->reject($partner, auth()->id(), $validated['rejection_reason']);
if ($request->header('HX-Request')) {
return response()->json([
'success' => true,
'message' => "{$partner->name}님이 반려되었습니다.",
]);
}
return redirect()->route('sales.managers.approvals')
->with('success', "{$partner->name}님이 반려되었습니다.");
}
}