feat:영업수수료 정산 기능 구현
[모델] - SalesCommission: 영업수수료 정산 모델 - SalesCommissionDetail: 상품별 수당 내역 모델 - SalesTenantManagement: 입금 정보 필드 추가 [서비스/컨트롤러] - SalesCommissionService: 수당 생성, 승인, 지급 처리 로직 - SalesCommissionController: 정산 관리 CRUD [뷰] - 본사 정산 관리 화면 (필터, 통계, 테이블) - 입금 등록 모달 - 상세 보기 모달 - 영업파트너 대시보드 수당 카드 [라우트] - /finance/sales-commissions/* 라우트 추가 - 기존 sales-commission 리다이렉트 호환 [메뉴] - SalesCommissionMenuSeeder: 정산관리 > 영업수수료정산 메뉴 추가 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
101
database/seeders/SalesCommissionMenuSeeder.php
Normal file
101
database/seeders/SalesCommissionMenuSeeder.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Commons\Menu;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
/**
|
||||
* 영업수수료정산 메뉴 시더
|
||||
*
|
||||
* 실행 방법:
|
||||
* docker exec sam-mng-1 php artisan db:seed --class=SalesCommissionMenuSeeder
|
||||
*/
|
||||
class SalesCommissionMenuSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
// 재무관리 메뉴 찾기 (tenant_id = 1인 HQ 테넌트용)
|
||||
$financeMenu = Menu::withoutGlobalScopes()
|
||||
->where('tenant_id', 1)
|
||||
->where('name', '재무관리')
|
||||
->first();
|
||||
|
||||
if (!$financeMenu) {
|
||||
$this->command->warn('재무관리 메뉴를 찾을 수 없습니다. 먼저 재무관리 메뉴를 생성해주세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
// 정산관리 서브메뉴 찾기 또는 생성
|
||||
$settlementMenu = Menu::withoutGlobalScopes()
|
||||
->where('tenant_id', 1)
|
||||
->where('parent_id', $financeMenu->id)
|
||||
->where('name', '정산관리')
|
||||
->first();
|
||||
|
||||
if (!$settlementMenu) {
|
||||
// 정산관리 메뉴가 없으면 생성
|
||||
$maxOrder = Menu::withoutGlobalScopes()
|
||||
->where('tenant_id', 1)
|
||||
->where('parent_id', $financeMenu->id)
|
||||
->max('sort_order') ?? 0;
|
||||
|
||||
$settlementMenu = Menu::create([
|
||||
'tenant_id' => 1,
|
||||
'parent_id' => $financeMenu->id,
|
||||
'name' => '정산관리',
|
||||
'url' => '#',
|
||||
'icon' => 'calculator',
|
||||
'is_active' => true,
|
||||
'hidden' => false,
|
||||
'sort_order' => $maxOrder + 1,
|
||||
]);
|
||||
|
||||
$this->command->info('정산관리 메뉴를 생성했습니다.');
|
||||
}
|
||||
|
||||
// 영업수수료정산 메뉴 추가/업데이트
|
||||
$existingMenu = Menu::withoutGlobalScopes()
|
||||
->where('tenant_id', 1)
|
||||
->where('parent_id', $settlementMenu->id)
|
||||
->where('url', '/finance/sales-commissions')
|
||||
->first();
|
||||
|
||||
if ($existingMenu) {
|
||||
$existingMenu->update([
|
||||
'name' => '영업수수료정산',
|
||||
'is_active' => true,
|
||||
'hidden' => false,
|
||||
'options' => [
|
||||
'route_name' => 'finance.sales-commissions.index',
|
||||
'description' => '영업파트너 및 매니저 수당 정산 관리',
|
||||
],
|
||||
]);
|
||||
$this->command->info('영업수수료정산 메뉴를 업데이트했습니다.');
|
||||
} else {
|
||||
$maxOrder = Menu::withoutGlobalScopes()
|
||||
->where('tenant_id', 1)
|
||||
->where('parent_id', $settlementMenu->id)
|
||||
->max('sort_order') ?? 0;
|
||||
|
||||
Menu::create([
|
||||
'tenant_id' => 1,
|
||||
'parent_id' => $settlementMenu->id,
|
||||
'name' => '영업수수료정산',
|
||||
'url' => '/finance/sales-commissions',
|
||||
'icon' => 'currency-dollar',
|
||||
'is_active' => true,
|
||||
'hidden' => false,
|
||||
'sort_order' => $maxOrder + 1,
|
||||
'options' => [
|
||||
'route_name' => 'finance.sales-commissions.index',
|
||||
'description' => '영업파트너 및 매니저 수당 정산 관리',
|
||||
],
|
||||
]);
|
||||
$this->command->info('영업수수료정산 메뉴를 생성했습니다.');
|
||||
}
|
||||
|
||||
$this->command->info('메뉴 시더 완료!');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user