fix:추천인 자동 설정 (등록자가 parent로 자동 지정)
This commit is contained in:
@@ -48,13 +48,10 @@ public function create(): View
|
||||
// 영업 역할 목록
|
||||
$roles = $this->service->getSalesRoles();
|
||||
|
||||
// 추천인(유치자) 후보
|
||||
$recommenders = $this->service->getRecommenderCandidates();
|
||||
|
||||
// 문서 타입 목록
|
||||
$documentTypes = SalesManagerDocument::DOCUMENT_TYPES;
|
||||
|
||||
return view('sales.managers.create', compact('roles', 'recommenders', 'documentTypes'));
|
||||
return view('sales.managers.create', compact('roles', 'documentTypes'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -68,7 +65,6 @@ public function store(Request $request)
|
||||
'email' => 'required|email|max:255|unique:users,email',
|
||||
'phone' => 'nullable|string|max:20',
|
||||
'password' => 'required|string|min:4|confirmed',
|
||||
'parent_id' => 'nullable|exists:users,id',
|
||||
'role_ids' => 'required|array|min:1',
|
||||
'role_ids.*' => 'exists:roles,id',
|
||||
'documents' => 'nullable|array',
|
||||
@@ -77,6 +73,15 @@ public function store(Request $request)
|
||||
'documents.*.description' => 'nullable|string|max:500',
|
||||
]);
|
||||
|
||||
// 등록자가 영업파트너인 경우 자동으로 추천인(parent)으로 설정
|
||||
// 본사 관리자가 등록하는 경우 parent_id는 null (최상위 파트너)
|
||||
$currentUser = auth()->user();
|
||||
$isSalesPartner = $currentUser->userRoles()
|
||||
->whereHas('role', fn($q) => $q->whereIn('name', ['sales', 'manager', 'recruiter']))
|
||||
->exists();
|
||||
|
||||
$validated['parent_id'] = $isSalesPartner ? $currentUser->id : null;
|
||||
|
||||
// 문서 배열 구성
|
||||
$documents = [];
|
||||
if ($request->hasFile('documents')) {
|
||||
@@ -122,14 +127,11 @@ public function show(int $id): View
|
||||
*/
|
||||
public function edit(int $id): View
|
||||
{
|
||||
$partner = User::with(['userRoles.role', 'salesDocuments'])->findOrFail($id);
|
||||
$partner = User::with(['userRoles.role', 'salesDocuments', 'parent'])->findOrFail($id);
|
||||
|
||||
// 영업 역할 목록
|
||||
$roles = $this->service->getSalesRoles();
|
||||
|
||||
// 추천인(유치자) 후보
|
||||
$recommenders = $this->service->getRecommenderCandidates($id);
|
||||
|
||||
// 현재 역할 ID 목록
|
||||
$currentRoleIds = $partner->userRoles->pluck('role_id')->toArray();
|
||||
|
||||
@@ -137,7 +139,7 @@ public function edit(int $id): View
|
||||
$documentTypes = SalesManagerDocument::DOCUMENT_TYPES;
|
||||
|
||||
return view('sales.managers.edit', compact(
|
||||
'partner', 'roles', 'recommenders', 'currentRoleIds', 'documentTypes'
|
||||
'partner', 'roles', 'currentRoleIds', 'documentTypes'
|
||||
));
|
||||
}
|
||||
|
||||
@@ -153,7 +155,6 @@ public function update(Request $request, int $id)
|
||||
'email' => 'required|email|max:255|unique:users,email,' . $id,
|
||||
'phone' => 'nullable|string|max:20',
|
||||
'password' => 'nullable|string|min:4|confirmed',
|
||||
'parent_id' => 'nullable|exists:users,id',
|
||||
'role_ids' => 'required|array|min:1',
|
||||
'role_ids.*' => 'exists:roles,id',
|
||||
'documents' => 'nullable|array',
|
||||
|
||||
@@ -70,12 +70,11 @@ public function updateSalesPartner(User $user, array $data, array $documents = [
|
||||
return DB::transaction(function () use ($user, $data, $documents) {
|
||||
$tenantId = session('selected_tenant_id', 1);
|
||||
|
||||
// 1. 기본 정보 업데이트
|
||||
// 1. 기본 정보 업데이트 (parent_id는 변경 불가)
|
||||
$updateData = [
|
||||
'name' => $data['name'],
|
||||
'email' => $data['email'],
|
||||
'phone' => $data['phone'] ?? null,
|
||||
'parent_id' => $data['parent_id'] ?? null,
|
||||
];
|
||||
|
||||
// 비밀번호 변경 시에만 업데이트
|
||||
|
||||
@@ -101,19 +101,6 @@ class="w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500">
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">추천인(유치자)</label>
|
||||
<select name="parent_id"
|
||||
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
|
||||
<option value="">선택 안함 (최상위 파트너)</option>
|
||||
@foreach($recommenders as $recommender)
|
||||
<option value="{{ $recommender->id }}" {{ old('parent_id') == $recommender->id ? 'selected' : '' }}>
|
||||
{{ $recommender->name }} ({{ $recommender->email }})
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<p class="mt-1 text-xs text-gray-500">이 파트너를 유치한 상위 영업파트너를 선택합니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -98,19 +98,15 @@ class="w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500">
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
@if($partner->parent)
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">추천인(유치자)</label>
|
||||
<select name="parent_id"
|
||||
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
|
||||
<option value="">선택 안함 (최상위 파트너)</option>
|
||||
@foreach($recommenders as $recommender)
|
||||
<option value="{{ $recommender->id }}" {{ old('parent_id', $partner->parent_id) == $recommender->id ? 'selected' : '' }}>
|
||||
{{ $recommender->name }} ({{ $recommender->email }})
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<p class="mt-1 text-xs text-gray-500">이 파트너를 유치한 상위 영업파트너를 선택합니다.</p>
|
||||
<div class="px-4 py-2 bg-gray-50 border border-gray-200 rounded-lg text-gray-700">
|
||||
{{ $partner->parent->name }} ({{ $partner->parent->email }})
|
||||
</div>
|
||||
<p class="mt-1 text-xs text-gray-500">추천인은 변경할 수 없습니다.</p>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user