$this->getCategories(), ]); } /** * 문서양식 생성 페이지 */ public function create(): View { return view('document-templates.edit', [ 'template' => null, 'templateData' => null, 'isCreate' => true, 'categories' => $this->getCategories(), 'tenant' => $this->getCurrentTenant(), ]); } /** * 문서양식 수정 페이지 */ public function edit(int $id): View { $template = DocumentTemplate::with([ 'approvalLines', 'basicFields', 'sections.items', 'columns', ])->findOrFail($id); // JavaScript용 데이터 변환 $templateData = $this->prepareTemplateData($template); return view('document-templates.edit', [ 'template' => $template, 'templateData' => $templateData, 'isCreate' => false, 'categories' => $this->getCategories(), 'tenant' => $this->getCurrentTenant(), ]); } /** * 현재 선택된 테넌트 조회 */ private function getCurrentTenant(): ?Tenant { $tenantId = session('selected_tenant_id'); return $tenantId ? Tenant::find($tenantId) : null; } /** * 문서분류 목록 조회 (글로벌 + 테넌트, 기존 데이터에서 group by) */ private function getCategories(): array { $tenantId = session('selected_tenant_id'); return DocumentTemplate::query() ->where(function ($query) use ($tenantId) { $query->whereNull('tenant_id'); if ($tenantId) { $query->orWhere('tenant_id', $tenantId); } }) ->whereNotNull('category') ->where('category', '!=', '') ->distinct() ->orderBy('category') ->pluck('category') ->toArray(); } /** * JavaScript용 템플릿 데이터 준비 */ private function prepareTemplateData(DocumentTemplate $template): array { return [ 'name' => $template->name, 'category' => $template->category, 'title' => $template->title, 'company_name' => $template->company_name, 'footer_remark_label' => $template->footer_remark_label, 'footer_judgement_label' => $template->footer_judgement_label, 'footer_judgement_options' => $template->footer_judgement_options, 'is_active' => $template->is_active, 'linked_item_ids' => $template->linked_item_ids, 'linked_process_id' => $template->linked_process_id, 'approval_lines' => $template->approvalLines->map(function ($l) { $userName = null; if ($l->user_id) { $userName = User::where('id', $l->user_id)->value('name'); } return [ 'id' => $l->id, 'name' => $l->name, 'dept' => $l->dept, 'role' => $l->role, 'user_id' => $l->user_id, 'user_name' => $userName, ]; })->toArray(), 'basic_fields' => $template->basicFields->map(function ($f) { return [ 'id' => $f->id, 'label' => $f->label, 'field_type' => $f->field_type, 'default_value' => $f->default_value, ]; })->toArray(), 'sections' => $template->sections->map(function ($s) { return [ 'id' => $s->id, 'title' => $s->title, 'image_path' => $s->image_path, 'items' => $s->items->map(function ($i) { return [ 'id' => $i->id, 'category' => $i->category, 'item' => $i->item, 'standard' => $i->standard, 'tolerance' => $i->tolerance, 'standard_criteria' => $i->standard_criteria, 'method' => $i->method, 'measurement_type' => $i->measurement_type, 'frequency_n' => $i->frequency_n, 'frequency_c' => $i->frequency_c, 'frequency' => $i->frequency, 'regulation' => $i->regulation, ]; })->toArray(), ]; })->toArray(), 'columns' => $template->columns->map(function ($c) { return [ 'id' => $c->id, 'label' => $c->label, 'width' => $c->width, 'column_type' => $c->column_type, 'group_name' => $c->group_name, 'sub_labels' => $c->sub_labels, ]; })->toArray(), ]; } }