2026-01-27 15:17:30 +09:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Database\Seeders;
|
|
|
|
|
|
|
|
|
|
use Illuminate\Database\Seeder;
|
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 견적 품목 카테고리 시더
|
|
|
|
|
*
|
|
|
|
|
* 상위 카테고리 추가 및 기존 세부 항목 연결
|
|
|
|
|
* - 본체, 절곡품(>가이드레일,케이스,하단마감재), 모터&제어기, 부자재
|
|
|
|
|
*/
|
|
|
|
|
class QuoteItemCategorySeeder extends Seeder
|
|
|
|
|
{
|
|
|
|
|
public function run(): void
|
|
|
|
|
{
|
|
|
|
|
$tenantId = 1;
|
|
|
|
|
$codeGroup = 'item_category';
|
|
|
|
|
$now = now();
|
|
|
|
|
|
|
|
|
|
// 1. 상위 카테고리 추가
|
|
|
|
|
$parentCategories = [
|
|
|
|
|
['code' => 'BODY', 'name' => '본체', 'sort_order' => 1],
|
|
|
|
|
['code' => 'BENDING', 'name' => '절곡품', 'sort_order' => 2],
|
|
|
|
|
['code' => 'MOTOR_CTRL', 'name' => '모터 & 제어기', 'sort_order' => 3],
|
|
|
|
|
['code' => 'ACCESSORY', 'name' => '부자재', 'sort_order' => 4],
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$parentIds = [];
|
|
|
|
|
foreach ($parentCategories as $cat) {
|
2026-01-27 15:23:02 +09:00
|
|
|
// 이미 존재하면 업데이트, 없으면 생성
|
|
|
|
|
DB::table('categories')->updateOrInsert(
|
|
|
|
|
[
|
|
|
|
|
'tenant_id' => $tenantId,
|
|
|
|
|
'code_group' => $codeGroup,
|
|
|
|
|
'code' => $cat['code'],
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
'parent_id' => null,
|
|
|
|
|
'name' => $cat['name'],
|
|
|
|
|
'sort_order' => $cat['sort_order'],
|
|
|
|
|
'is_active' => true,
|
|
|
|
|
'updated_at' => $now,
|
|
|
|
|
'created_at' => $now,
|
|
|
|
|
]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// ID 조회
|
|
|
|
|
$parentIds[$cat['code']] = DB::table('categories')
|
|
|
|
|
->where('tenant_id', $tenantId)
|
|
|
|
|
->where('code_group', $codeGroup)
|
|
|
|
|
->where('code', $cat['code'])
|
|
|
|
|
->value('id');
|
2026-01-27 15:17:30 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 2. 절곡품 하위 3개 중간 카테고리 추가
|
|
|
|
|
$bendingSubCategories = [
|
|
|
|
|
['code' => 'BENDING_GUIDE', 'name' => '가이드레일', 'sort_order' => 1],
|
|
|
|
|
['code' => 'BENDING_CASE', 'name' => '케이스', 'sort_order' => 2],
|
|
|
|
|
['code' => 'BENDING_BOTTOM', 'name' => '하단마감재', 'sort_order' => 3],
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$bendingSubIds = [];
|
|
|
|
|
foreach ($bendingSubCategories as $cat) {
|
2026-01-27 15:23:02 +09:00
|
|
|
// 이미 존재하면 업데이트, 없으면 생성
|
|
|
|
|
DB::table('categories')->updateOrInsert(
|
|
|
|
|
[
|
|
|
|
|
'tenant_id' => $tenantId,
|
|
|
|
|
'code_group' => $codeGroup,
|
|
|
|
|
'code' => $cat['code'],
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
'parent_id' => $parentIds['BENDING'],
|
|
|
|
|
'name' => $cat['name'],
|
|
|
|
|
'sort_order' => $cat['sort_order'],
|
|
|
|
|
'is_active' => true,
|
|
|
|
|
'updated_at' => $now,
|
|
|
|
|
'created_at' => $now,
|
|
|
|
|
]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// ID 조회
|
|
|
|
|
$bendingSubIds[$cat['code']] = DB::table('categories')
|
|
|
|
|
->where('tenant_id', $tenantId)
|
|
|
|
|
->where('code_group', $codeGroup)
|
|
|
|
|
->where('code', $cat['code'])
|
|
|
|
|
->value('id');
|
2026-01-27 15:17:30 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 3. 기존 세부 항목들의 parent_id 업데이트
|
|
|
|
|
$mappings = [
|
|
|
|
|
// 본체
|
|
|
|
|
'BODY' => ['SILICA_BODY', 'WIRE_BODY', 'FIBER_BODY', 'COLUMNLESS_BODY', 'SLAT_BODY'],
|
|
|
|
|
|
|
|
|
|
// 절곡품 > 가이드레일
|
|
|
|
|
'BENDING_GUIDE' => ['GUIDE_RAIL', 'SMOKE_SEAL'],
|
|
|
|
|
|
|
|
|
|
// 절곡품 > 케이스
|
|
|
|
|
'BENDING_CASE' => ['SHUTTER_BOX', 'TOP_COVER', 'END_PLATE'],
|
|
|
|
|
|
|
|
|
|
// 절곡품 > 하단마감재
|
|
|
|
|
'BENDING_BOTTOM' => ['BOTTOM_TRIM', 'HAJANG_BAR', 'SPECIAL_TRIM', 'FLOOR_CUT_PLATE'],
|
|
|
|
|
|
|
|
|
|
// 모터 & 제어기
|
|
|
|
|
'MOTOR_CTRL' => ['MOTOR_SET', 'INTERLOCK_CTRL', 'EMBED_BACK_BOX'],
|
|
|
|
|
|
|
|
|
|
// 부자재
|
|
|
|
|
'ACCESSORY' => ['JOINT_BAR', 'SQUARE_PIPE', 'WINDING_SHAFT', 'ANGLE', 'ROUND_BAR', 'L_BAR', 'REINF_FLAT_BAR', 'WEIGHT_FLAT_BAR'],
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
foreach ($mappings as $parentCode => $childCodes) {
|
|
|
|
|
// 상위 카테고리 ID 찾기
|
|
|
|
|
$parentId = $parentIds[$parentCode] ?? $bendingSubIds[$parentCode] ?? null;
|
|
|
|
|
|
|
|
|
|
if ($parentId) {
|
|
|
|
|
DB::table('categories')
|
|
|
|
|
->where('tenant_id', $tenantId)
|
|
|
|
|
->where('code_group', $codeGroup)
|
|
|
|
|
->whereIn('code', $childCodes)
|
|
|
|
|
->whereNull('deleted_at')
|
|
|
|
|
->update(['parent_id' => $parentId, 'updated_at' => $now]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->command->info('견적 품목 카테고리 시딩 완료!');
|
|
|
|
|
$this->command->info('- 상위 카테고리 4개 추가');
|
|
|
|
|
$this->command->info('- 절곡품 하위 카테고리 3개 추가');
|
|
|
|
|
$this->command->info('- 기존 세부 항목 parent_id 연결 완료');
|
|
|
|
|
}
|
|
|
|
|
}
|