84 lines
3.1 KiB
PHP
84 lines
3.1 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
namespace Database\Seeders;
|
|||
|
|
|
|||
|
|
use App\Models\CategoryGroup;
|
|||
|
|
use Illuminate\Database\Seeder;
|
|||
|
|
use Illuminate\Support\Facades\DB;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 카테고리 그룹 시더
|
|||
|
|
*
|
|||
|
|
* 면적/중량/수량 기반 단가 계산 그룹을 생성합니다.
|
|||
|
|
* Design 시뮬레이터와 동일한 계산 방식을 위한 기초 데이터입니다.
|
|||
|
|
*
|
|||
|
|
* 사용법:
|
|||
|
|
* php artisan db:seed --class=CategoryGroupSeeder
|
|||
|
|
*/
|
|||
|
|
class CategoryGroupSeeder extends Seeder
|
|||
|
|
{
|
|||
|
|
protected int $tenantId = 1;
|
|||
|
|
|
|||
|
|
public function run(): void
|
|||
|
|
{
|
|||
|
|
$this->command->info('카테고리 그룹 시딩 시작...');
|
|||
|
|
|
|||
|
|
DB::transaction(function () {
|
|||
|
|
// 기존 데이터 삭제
|
|||
|
|
CategoryGroup::withoutGlobalScopes()
|
|||
|
|
->where('tenant_id', $this->tenantId)
|
|||
|
|
->delete();
|
|||
|
|
|
|||
|
|
$this->seedCategoryGroups();
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
$count = CategoryGroup::withoutGlobalScopes()
|
|||
|
|
->where('tenant_id', $this->tenantId)
|
|||
|
|
->count();
|
|||
|
|
$this->command->info("카테고리 그룹 시딩 완료! (총 {$count}개)");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected function seedCategoryGroups(): void
|
|||
|
|
{
|
|||
|
|
$groups = [
|
|||
|
|
[
|
|||
|
|
'code' => CategoryGroup::CODE_AREA_BASED,
|
|||
|
|
'name' => '면적기반',
|
|||
|
|
'multiplier_variable' => CategoryGroup::MULTIPLIER_AREA,
|
|||
|
|
'categories' => ['원단', '패널', '도장', '표면처리', '스크린원단'],
|
|||
|
|
'description' => '면적(㎡)을 기준으로 단가를 계산합니다. 최종단가 = 기본단가 × M(면적)',
|
|||
|
|
'sort_order' => 1,
|
|||
|
|
],
|
|||
|
|
[
|
|||
|
|
'code' => CategoryGroup::CODE_WEIGHT_BASED,
|
|||
|
|
'name' => '중량기반',
|
|||
|
|
'multiplier_variable' => CategoryGroup::MULTIPLIER_WEIGHT,
|
|||
|
|
'categories' => ['강판', '알루미늄', '스테인리스', '철재'],
|
|||
|
|
'description' => '중량(kg)을 기준으로 단가를 계산합니다. 최종단가 = 기본단가 × K(중량)',
|
|||
|
|
'sort_order' => 2,
|
|||
|
|
],
|
|||
|
|
[
|
|||
|
|
'code' => CategoryGroup::CODE_QUANTITY_BASED,
|
|||
|
|
'name' => '수량기반',
|
|||
|
|
'multiplier_variable' => null,
|
|||
|
|
'categories' => ['볼트', '너트', '와셔', '앵커', '모터', '제어반', '리모컨', '스위치', '전선', '가이드레일', '케이스', '커버', '브라켓', '실링재', '패킹'],
|
|||
|
|
'description' => '수량을 기준으로 단가를 계산합니다. 최종단가 = 기본단가 (곱셈 없음)',
|
|||
|
|
'sort_order' => 3,
|
|||
|
|
],
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
foreach ($groups as $group) {
|
|||
|
|
CategoryGroup::create([
|
|||
|
|
'tenant_id' => $this->tenantId,
|
|||
|
|
'code' => $group['code'],
|
|||
|
|
'name' => $group['name'],
|
|||
|
|
'multiplier_variable' => $group['multiplier_variable'],
|
|||
|
|
'categories' => $group['categories'],
|
|||
|
|
'description' => $group['description'],
|
|||
|
|
'sort_order' => $group['sort_order'],
|
|||
|
|
'is_active' => true,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|