fix:전자서명 done 페이지 계약/서명자 정보 표시 수정
getContract API가 항상 데이터를 반환하되 is_signable 플래그로 서명 가능 여부를 전달하도록 변경. done 페이지에서 signed/completed 상태의 계약도 정상적으로 정보를 표시할 수 있도록 수정. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -64,32 +64,35 @@ public function getContract(string $token): JsonResponse
|
||||
return response()->json(['success' => false, 'message' => '계약을 찾을 수 없습니다.'], 404);
|
||||
}
|
||||
|
||||
// 계약 상태 체크: 서명 불가한 상태면 에러 반환
|
||||
$statusMessages = [
|
||||
// 서명 가능 여부 판별
|
||||
$isSignable = in_array($contract->status, ['pending', 'partially_signed'])
|
||||
&& in_array($signer->status, ['notified', 'viewing', 'authenticated']);
|
||||
|
||||
$statusMessage = null;
|
||||
$unsignableStatuses = [
|
||||
'draft' => '아직 발송되지 않은 계약입니다.',
|
||||
'cancelled' => '취소된 계약입니다.',
|
||||
'rejected' => '거절된 계약입니다.',
|
||||
'completed' => '이미 완료된 계약입니다.',
|
||||
];
|
||||
if (isset($statusMessages[$contract->status])) {
|
||||
return response()->json(['success' => false, 'message' => $statusMessages[$contract->status]], 400);
|
||||
if (isset($unsignableStatuses[$contract->status])) {
|
||||
$statusMessage = $unsignableStatuses[$contract->status];
|
||||
} elseif ($signer->status === 'signed') {
|
||||
$statusMessage = '이미 서명을 완료하였습니다.';
|
||||
}
|
||||
|
||||
// 서명자가 이미 서명 완료한 경우
|
||||
if ($signer->status === 'signed') {
|
||||
return response()->json(['success' => false, 'message' => '이미 서명을 완료하였습니다.'], 400);
|
||||
// 서명 가능한 상태에서만 감사 로그 기록
|
||||
if ($isSignable) {
|
||||
EsignAuditLog::create([
|
||||
'tenant_id' => $contract->tenant_id,
|
||||
'contract_id' => $contract->id,
|
||||
'signer_id' => $signer->id,
|
||||
'action' => 'viewed',
|
||||
'ip_address' => request()->ip(),
|
||||
'user_agent' => request()->userAgent(),
|
||||
'created_at' => now(),
|
||||
]);
|
||||
}
|
||||
|
||||
EsignAuditLog::create([
|
||||
'tenant_id' => $contract->tenant_id,
|
||||
'contract_id' => $contract->id,
|
||||
'signer_id' => $signer->id,
|
||||
'action' => 'viewed',
|
||||
'ip_address' => request()->ip(),
|
||||
'user_agent' => request()->userAgent(),
|
||||
'created_at' => now(),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'data' => [
|
||||
@@ -101,7 +104,10 @@ public function getContract(string $token): JsonResponse
|
||||
'role' => $signer->role,
|
||||
'status' => $signer->status,
|
||||
'has_stamp' => (bool) $signer->signature_image_path,
|
||||
'signed_at' => $signer->signed_at,
|
||||
],
|
||||
'is_signable' => $isSignable,
|
||||
'status_message' => $statusMessage,
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user