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 = [];