diff options
Diffstat (limited to 'lib/b-rfq/service.ts')
| -rw-r--r-- | lib/b-rfq/service.ts | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/lib/b-rfq/service.ts b/lib/b-rfq/service.ts index 4def634b..2ef57b34 100644 --- a/lib/b-rfq/service.ts +++ b/lib/b-rfq/service.ts @@ -498,7 +498,7 @@ export async function getVendorResponsesForAttachment( rfqType: 'INITIAL' | 'FINAL' = 'INITIAL' ) { try { - // 1. 기본 벤더 응답 정보 가져오기 + // 1. 기본 벤더 응답 정보 가져오기 (첨부파일 정보와 조인) const responses = await db .select({ id: vendorAttachmentResponses.id, @@ -510,10 +510,16 @@ export async function getVendorResponsesForAttachment( rfqType: vendorAttachmentResponses.rfqType, rfqRecordId: vendorAttachmentResponses.rfqRecordId, responseStatus: vendorAttachmentResponses.responseStatus, - currentRevision: vendorAttachmentResponses.currentRevision, + + // 첨부파일의 현재 리비전 (가장 중요!) + currentRevision: bRfqsAttachments.currentRevision, + + // 벤더가 응답한 리비전 respondedRevision: vendorAttachmentResponses.respondedRevision, + responseComment: vendorAttachmentResponses.responseComment, vendorComment: vendorAttachmentResponses.vendorComment, + // 새로 추가된 필드들 revisionRequestComment: vendorAttachmentResponses.revisionRequestComment, revisionRequestedAt: vendorAttachmentResponses.revisionRequestedAt, @@ -523,6 +529,7 @@ export async function getVendorResponsesForAttachment( }) .from(vendorAttachmentResponses) .leftJoin(vendors, eq(vendorAttachmentResponses.vendorId, vendors.id)) + .leftJoin(bRfqsAttachments, eq(vendorAttachmentResponses.attachmentId, bRfqsAttachments.id)) .where( and( eq(vendorAttachmentResponses.attachmentId, attachmentId), @@ -553,15 +560,23 @@ export async function getVendorResponsesForAttachment( .orderBy(desc(vendorResponseAttachmentsB.uploadedAt)); } - // 3. 응답에 파일 정보 병합 - const enhancedResponses = responses.map(response => ({ - ...response, - files: responseFiles.filter(file => file.vendorResponseId === response.id), - totalFiles: responseFiles.filter(file => file.vendorResponseId === response.id).length, - latestFile: responseFiles - .filter(file => file.vendorResponseId === response.id) - .sort((a, b) => new Date(b.uploadedAt).getTime() - new Date(a.uploadedAt).getTime())[0] || null, - })); + // 3. 응답에 파일 정보 병합 및 리비전 상태 체크 + const enhancedResponses = responses.map(response => { + const files = responseFiles.filter(file => file.vendorResponseId === response.id); + const latestFile = files + .sort((a, b) => new Date(b.uploadedAt).getTime() - new Date(a.uploadedAt).getTime())[0] || null; + + // 벤더가 최신 리비전에 응답했는지 체크 + const isUpToDate = response.respondedRevision === response.currentRevision; + + return { + ...response, + files, + totalFiles: files.length, + latestFile, + isUpToDate, // 최신 리비전 응답 여부 + }; + }); return enhancedResponses; } catch (err) { |
