fix:추천인 자동 설정 (등록자가 parent로 자동 지정)

This commit is contained in:
pro
2026-01-27 21:28:59 +09:00
parent 5aaffe13a2
commit 9411871655
4 changed files with 19 additions and 36 deletions

View File

@@ -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',

View File

@@ -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,
];
// 비밀번호 변경 시에만 업데이트

View File

@@ -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>

View File

@@ -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>