diff --git a/database/seeders/ProductInspectionRequestTemplateSeeder.php b/database/seeders/ProductInspectionRequestTemplateSeeder.php new file mode 100644 index 00000000..3a6eff7b --- /dev/null +++ b/database/seeders/ProductInspectionRequestTemplateSeeder.php @@ -0,0 +1,188 @@ +getTemplateDefinition(); + + $template = DocumentTemplate::updateOrCreate( + ['id' => $this->templateId, 'tenant_id' => $this->tenantId], + [ + 'name' => $def['name'], + 'category' => '품질/제품검사', + 'title' => $def['title'], + 'company_name' => '케이디산업', + 'is_active' => true, + ] + ); + + $this->cleanupRelations($template->id); + + $this->createApprovalLines($template->id); + $this->createBasicFields($template->id); + + foreach ($def['sections'] as $i => $sectionDef) { + $this->createSection($template->id, $sectionDef, $i + 1); + } + + $this->createColumns($template->id, $def['columns']); + + $this->command->info("제품검사 요청서 (ID: {$template->id})"); + } + + private function getTemplateDefinition(): array + { + return [ + 'name' => '제품검사 요청서', + 'title' => '제 품 검 사 요 청 서', + 'sections' => [ + [ + 'title' => '건축공사장 정보', + 'items' => [ + ['item' => '현장명', 'measurement_type' => 'text_input'], + ['item' => '대지위치', 'measurement_type' => 'text_input'], + ['item' => '지번', 'measurement_type' => 'text_input'], + ], + ], + [ + 'title' => '자재유통업자 정보', + 'items' => [ + ['item' => '회사명', 'measurement_type' => 'text_input'], + ['item' => '주소', 'measurement_type' => 'text_input'], + ['item' => '대표자', 'measurement_type' => 'text_input'], + ['item' => '전화번호', 'measurement_type' => 'text_input'], + ], + ], + [ + 'title' => '공사시공자 정보', + 'items' => [ + ['item' => '회사명', 'measurement_type' => 'text_input'], + ['item' => '주소', 'measurement_type' => 'text_input'], + ['item' => '성명', 'measurement_type' => 'text_input'], + ['item' => '전화번호', 'measurement_type' => 'text_input'], + ], + ], + [ + 'title' => '공사감리자 정보', + 'items' => [ + ['item' => '사무소명', 'measurement_type' => 'text_input'], + ['item' => '주소', 'measurement_type' => 'text_input'], + ['item' => '성명', 'measurement_type' => 'text_input'], + ['item' => '전화번호', 'measurement_type' => 'text_input'], + ], + ], + [ + 'title' => '검사대상 사전 고지 정보', + 'description' => '발주 사이즈와 시공 완료된 사이즈가 다를 시, 일정 범위를 벗어날 경우 인정마크를 부착할 수 없습니다. 제품검사를 위한 방문 전 미리 변경사항을 고지해주셔야 인정마크를 부착할 수 있습니다. (사전고지를 하지 않음으로 발생하는 문제의 귀책은 신청업체에 있습니다.)', + 'items' => [], + ], + ], + // 사전 고지 정보 테이블 컬럼 + 'columns' => [ + ['label' => 'No.', 'column_type' => 'text', 'width' => '40px', 'sort_order' => 1], + ['label' => '층수', 'column_type' => 'text', 'width' => '60px', 'sort_order' => 2], + ['label' => '부호', 'column_type' => 'text', 'width' => '60px', 'sort_order' => 3], + ['label' => '발주 가로', 'column_type' => 'text', 'width' => '70px', 'sort_order' => 4, 'group_name' => '오픈사이즈(발주규격)'], + ['label' => '발주 세로', 'column_type' => 'text', 'width' => '70px', 'sort_order' => 5, 'group_name' => '오픈사이즈(발주규격)'], + ['label' => '시공 가로', 'column_type' => 'text', 'width' => '70px', 'sort_order' => 6, 'group_name' => '오픈사이즈(시공후규격)'], + ['label' => '시공 세로', 'column_type' => 'text', 'width' => '70px', 'sort_order' => 7, 'group_name' => '오픈사이즈(시공후규격)'], + ['label' => '변경사유', 'column_type' => 'text', 'width' => '1fr', 'sort_order' => 8], + ], + ]; + } + + private function createApprovalLines(int $templateId): void + { + $lines = [ + ['name' => '작성', 'dept' => '품질', 'role' => '담당자', 'sort_order' => 1], + ['name' => '승인', 'dept' => '경영', 'role' => '대표', 'sort_order' => 2], + ]; + + foreach ($lines as $line) { + DocumentTemplateApprovalLine::create(array_merge( + ['template_id' => $templateId], + $line, + )); + } + } + + private function createBasicFields(int $templateId): void + { + $fields = [ + ['label' => '수주처', 'field_key' => 'client', 'field_type' => 'text', 'sort_order' => 1], + ['label' => '업체명', 'field_key' => 'company_name', 'field_type' => 'text', 'sort_order' => 2], + ['label' => '담당자', 'field_key' => 'manager', 'field_type' => 'text', 'sort_order' => 3], + ['label' => '수주번호', 'field_key' => 'order_number', 'field_type' => 'text', 'sort_order' => 4], + ['label' => '담당자 연락처', 'field_key' => 'manager_contact', 'field_type' => 'text', 'sort_order' => 5], + ['label' => '현장명', 'field_key' => 'site_name', 'field_type' => 'text', 'sort_order' => 6], + ['label' => '납품일', 'field_key' => 'delivery_date', 'field_type' => 'date', 'sort_order' => 7], + ['label' => '현장 주소', 'field_key' => 'site_address', 'field_type' => 'text', 'sort_order' => 8], + ['label' => '총 개소', 'field_key' => 'total_locations', 'field_type' => 'number', 'sort_order' => 9], + ['label' => '접수일', 'field_key' => 'receipt_date', 'field_type' => 'date', 'sort_order' => 10], + ['label' => '검사방문요청일', 'field_key' => 'inspection_request_date', 'field_type' => 'date', 'sort_order' => 11], + ]; + + foreach ($fields as $field) { + DocumentTemplateBasicField::create(array_merge( + ['template_id' => $templateId], + $field, + )); + } + } + + private function createSection(int $templateId, array $sectionDef, int $sortOrder): void + { + $section = DocumentTemplateSection::create([ + 'template_id' => $templateId, + 'title' => $sectionDef['title'], + 'description' => $sectionDef['description'] ?? null, + 'sort_order' => $sortOrder, + ]); + + foreach ($sectionDef['items'] as $i => $item) { + DocumentTemplateSectionItem::create(array_merge( + ['section_id' => $section->id, 'sort_order' => $i + 1], + $item, + )); + } + } + + private function createColumns(int $templateId, array $columns): void + { + foreach ($columns as $col) { + DocumentTemplateColumn::create(array_merge( + ['template_id' => $templateId], + $col, + )); + } + } + + private function cleanupRelations(int $templateId): void + { + DocumentTemplateColumn::where('template_id', $templateId)->delete(); + + $sections = DocumentTemplateSection::where('template_id', $templateId)->get(); + foreach ($sections as $section) { + DocumentTemplateSectionItem::where('section_id', $section->id)->delete(); + } + DocumentTemplateSection::where('template_id', $templateId)->delete(); + + DocumentTemplateBasicField::where('template_id', $templateId)->delete(); + DocumentTemplateApprovalLine::where('template_id', $templateId)->delete(); + } +} diff --git a/storage/fonts/Pretendard-Regular.ttf b/storage/fonts/Pretendard-Regular.ttf old mode 100644 new mode 100755 diff --git a/storage/fonts/tcpdf/helvetica.php b/storage/fonts/tcpdf/helvetica.php old mode 100644 new mode 100755 diff --git a/storage/fonts/tcpdf/pretendard.ctg.z b/storage/fonts/tcpdf/pretendard.ctg.z old mode 100644 new mode 100755 diff --git a/storage/fonts/tcpdf/pretendard.php b/storage/fonts/tcpdf/pretendard.php old mode 100644 new mode 100755 diff --git a/storage/fonts/tcpdf/pretendard.z b/storage/fonts/tcpdf/pretendard.z old mode 100644 new mode 100755