fix:수당 정산 레코드 생성 시 파트너 타입별 요율 반영

- updateCommissionDate, updateReferrerCommission의 firstOrCreate에서
  partner_rate를 0 고정 → 파트너 타입(개인 20% / 단체 30%)에 따라 설정
- referrer_rate도 파트너 타입에 따라 설정 (개인 5% / 단체 3%)
- SalesCommissionService 상수 재사용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-20 15:15:35 +09:00
parent 50b1e61d55
commit 0ac621bd49

View File

@@ -9,6 +9,7 @@
use App\Models\Sales\SalesTenantManagement;
use App\Models\Sales\TenantProspect;
use App\Models\User;
use App\Services\SalesCommissionService;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\View\View;
@@ -407,6 +408,18 @@ public function updateCommissionDate(int $id, Request $request)
// 1차 필드 → deposit 레코드, 2차 필드 → balance 레코드
$paymentType = $this->getPaymentTypeForField($field);
// 파트너 resolve → 요율 결정
$partner = $management->salesPartner;
if (!$partner && $prospect->registered_by) {
$partner = SalesPartner::where('user_id', $prospect->registered_by)->first();
}
$isGroup = $partner?->isGroup() ?? false;
$partnerRate = $partner?->commission_rate
?? ($isGroup ? SalesCommissionService::DEFAULT_GROUP_RATE : SalesCommissionService::DEFAULT_PARTNER_RATE);
$referrerRate = $isGroup
? SalesCommissionService::DEFAULT_GROUP_REFERRER_RATE
: SalesCommissionService::DEFAULT_INDIVIDUAL_REFERRER_RATE;
// Commission 레코드 조회 또는 생성 (payment_type별 분리)
$commission = SalesCommission::firstOrCreate(
['management_id' => $management->id, 'payment_type' => $paymentType],
@@ -415,15 +428,15 @@ public function updateCommissionDate(int $id, Request $request)
'payment_amount' => 0,
'payment_date' => now(),
'base_amount' => 0,
'partner_rate' => 0,
'partner_rate' => $partnerRate,
'manager_rate' => 0,
'partner_commission' => 0,
'manager_commission' => 0,
'referrer_rate' => 3,
'referrer_rate' => $referrerRate,
'referrer_commission' => 0,
'scheduled_payment_date' => now()->addMonth()->day(10),
'status' => SalesCommission::STATUS_PENDING,
'partner_id' => $management->sales_partner_id ?? 0,
'partner_id' => $partner?->id ?? $management->sales_partner_id ?? 0,
'manager_user_id' => $management->manager_user_id,
]
);
@@ -544,6 +557,9 @@ public function updateReferrerCommission(int $id, Request $request)
// 단체 파트너는 수동 수정 불가
$partner = $management->salesPartner;
if (!$partner && $prospect->registered_by) {
$partner = SalesPartner::where('user_id', $prospect->registered_by)->first();
}
if ($partner && $partner->isGroup()) {
return response()->json([
'success' => false,
@@ -551,6 +567,10 @@ public function updateReferrerCommission(int $id, Request $request)
], 422);
}
$isGroup = $partner?->isGroup() ?? false;
$partnerRate = $partner?->commission_rate
?? ($isGroup ? SalesCommissionService::DEFAULT_GROUP_RATE : SalesCommissionService::DEFAULT_PARTNER_RATE);
// Commission 레코드 조회 또는 생성
$commission = SalesCommission::firstOrCreate(
['management_id' => $management->id],
@@ -560,15 +580,17 @@ public function updateReferrerCommission(int $id, Request $request)
'payment_amount' => 0,
'payment_date' => now(),
'base_amount' => 0,
'partner_rate' => 0,
'partner_rate' => $partnerRate,
'manager_rate' => 0,
'partner_commission' => 0,
'manager_commission' => 0,
'referrer_rate' => 3,
'referrer_rate' => $isGroup
? SalesCommissionService::DEFAULT_GROUP_REFERRER_RATE
: SalesCommissionService::DEFAULT_INDIVIDUAL_REFERRER_RATE,
'referrer_commission' => 0,
'scheduled_payment_date' => now()->addMonth()->day(10),
'status' => SalesCommission::STATUS_PENDING,
'partner_id' => $management->sales_partner_id ?? 0,
'partner_id' => $partner?->id ?? $management->sales_partner_id ?? 0,
'manager_user_id' => $management->manager_user_id,
]
);