From 70bfccf5fb641f539c18895beef24afb60f08900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sat, 14 Feb 2026 13:27:38 +0900 Subject: [PATCH] =?UTF-8?q?fix:=EC=A0=84=EC=9E=90=EC=84=9C=EB=AA=85=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=9C=84=EC=B9=98=20=EC=84=A4=EC=A0=95/?= =?UTF-8?q?=EB=B3=B5=EC=82=AC=20=EC=8B=9C=20field=5Fvalue=20=EB=88=84?= =?UTF-8?q?=EB=9D=BD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit configureFields()와 copyFieldsFromContract()에서 기존 필드를 삭제 후 재생성할 때 field_value를 설정하지 않아 계약서 PDF에 서명자명, 날짜 등 기본값이 빠지는 문제 수정. buildVariableMap()으로 변수 맵을 구성하여 값을 채우도록 개선. Co-Authored-By: Claude Opus 4.6 --- .../Controllers/ESign/EsignApiController.php | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/ESign/EsignApiController.php b/app/Http/Controllers/ESign/EsignApiController.php index 8cd9bdd6..ebb57816 100644 --- a/app/Http/Controllers/ESign/EsignApiController.php +++ b/app/Http/Controllers/ESign/EsignApiController.php @@ -641,12 +641,22 @@ public function configureFields(Request $request, int $id): JsonResponse ]); $tenantId = session('selected_tenant_id', 1); - $contract = EsignContract::forTenant($tenantId)->findOrFail($id); + $contract = EsignContract::forTenant($tenantId)->with('signers')->findOrFail($id); + + // 변수 맵 구성 (field_variable → 실제 값 매핑) + $variableValues = $this->buildVariableMap($contract); // 기존 필드 삭제 후 새로 생성 EsignSignField::where('contract_id', $contract->id)->delete(); foreach ($request->input('fields') as $i => $field) { + // field_variable이 있으면 변수 맵에서 값 조회 + $fieldValue = null; + $fieldVariable = $field['field_variable'] ?? null; + if ($fieldVariable && isset($variableValues[$fieldVariable])) { + $fieldValue = $variableValues[$fieldVariable]; + } + EsignSignField::create([ 'tenant_id' => $tenantId, 'contract_id' => $contract->id, @@ -658,9 +668,10 @@ public function configureFields(Request $request, int $id): JsonResponse 'height' => $field['height'], 'field_type' => $field['field_type'], 'field_label' => $field['field_label'] ?? null, - 'field_variable' => $field['field_variable'] ?? null, + 'field_variable' => $fieldVariable, 'font_size' => $field['font_size'] ?? null, 'text_align' => $field['text_align'] ?? 'L', + 'field_value' => $fieldValue, 'is_required' => $field['is_required'] ?? true, 'sort_order' => $i, ]); @@ -1347,7 +1358,10 @@ public function copyFieldsFromContract(Request $request, int $id, int $sourceId) $targetSignerMap[$signer->sign_order] = $signer->id; } - DB::transaction(function () use ($targetContract, $sourceContract, $tenantId, $sourceSignerOrderMap, $targetSignerMap) { + // 대상 계약 기준 변수 맵 구성 + $variableValues = $this->buildVariableMap($targetContract); + + DB::transaction(function () use ($targetContract, $sourceContract, $tenantId, $sourceSignerOrderMap, $targetSignerMap, $variableValues) { // 기존 필드 삭제 EsignSignField::where('contract_id', $targetContract->id)->delete(); @@ -1357,6 +1371,12 @@ public function copyFieldsFromContract(Request $request, int $id, int $sourceId) $targetSignerId = $signOrder ? ($targetSignerMap[$signOrder] ?? null) : null; if (!$targetSignerId) continue; + // field_variable이 있으면 대상 계약의 변수 맵에서 값 조회 + $fieldValue = null; + if ($field->field_variable && isset($variableValues[$field->field_variable])) { + $fieldValue = $variableValues[$field->field_variable]; + } + EsignSignField::create([ 'tenant_id' => $tenantId, 'contract_id' => $targetContract->id, @@ -1370,6 +1390,7 @@ public function copyFieldsFromContract(Request $request, int $id, int $sourceId) 'field_label' => $field->field_label, 'field_variable' => $field->field_variable, 'font_size' => $field->font_size, + 'field_value' => $fieldValue, 'is_required' => $field->is_required, 'sort_order' => $field->sort_order, ]); @@ -1388,7 +1409,7 @@ public function copyFieldsFromContract(Request $request, int $id, int $sourceId) /** * 변수 해석 맵 구성 (시스템 변수 + 커스텀 변수) */ - private function buildVariableMap(EsignContract $contract, EsignFieldTemplate $template): array + private function buildVariableMap(EsignContract $contract, ?EsignFieldTemplate $template = null): array { $map = [];