fix:전자서명 필드 위치 설정/복사 시 field_value 누락 수정
configureFields()와 copyFieldsFromContract()에서 기존 필드를 삭제 후 재생성할 때 field_value를 설정하지 않아 계약서 PDF에 서명자명, 날짜 등 기본값이 빠지는 문제 수정. buildVariableMap()으로 변수 맵을 구성하여 값을 채우도록 개선. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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 = [];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user