summaryrefslogtreecommitdiff
path: root/lib/b-rfq/service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/b-rfq/service.ts')
-rw-r--r--lib/b-rfq/service.ts37
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) {