From 1a6774d195b5fb9e3547f3268bf3527a8718c9bf Mon Sep 17 00:00:00 2001 From: dujinkim Date: Mon, 17 Nov 2025 08:43:00 +0000 Subject: (임수민) GTC 기본계약 코멘트 수정 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/basic-contract/service.ts | 122 +++++++++++++++++++++++++++--------------- 1 file changed, 79 insertions(+), 43 deletions(-) (limited to 'lib/basic-contract/service.ts') diff --git a/lib/basic-contract/service.ts b/lib/basic-contract/service.ts index 700c6f8f..d7b3edc8 100644 --- a/lib/basic-contract/service.ts +++ b/lib/basic-contract/service.ts @@ -2175,7 +2175,7 @@ export async function getVendorGtcData(contractId?: number): Promise 0 ? vendorDocResult[0] : { id: null, // 벤더 문서가 아직 생성되지 않음 name: `GTC 검토 (벤더 ID: ${vendorId})`, - description: "기본 GTC 조항 검토", + description: "기본 GTC 협의", version: "1.0", reviewStatus: "pending", vendorId: vendorId, @@ -3280,7 +3280,8 @@ function extractProjectCodeFromTemplateName(templateName: string): string | null // 단일 contract에 대한 GTC 정보 확인 async function checkGTCCommentsForContract( templateName: string, - vendorId: number + vendorId: number, + basicContractId?: number ): Promise<{ gtcDocumentId: number | null; hasComments: boolean }> { try { const projectCode = extractProjectCodeFromTemplateName(templateName); @@ -3316,6 +3317,7 @@ async function checkGTCCommentsForContract( } } else { // Standard GTC인 경우 (general 포함하거나 project code가 없는 경우) + console.log(`🔍 [checkGTCCommentsForContract] Standard GTC 조회 중...`); const standardGtcDoc = await db .select({ id: gtcDocuments.id }) .from(gtcDocuments) @@ -3329,15 +3331,49 @@ async function checkGTCCommentsForContract( .orderBy(desc(gtcDocuments.revision)) .limit(1) + console.log(`📊 [checkGTCCommentsForContract] Standard GTC 조회 결과: ${standardGtcDoc.length}개`); + if (standardGtcDoc.length > 0) { gtcDocumentId = standardGtcDoc[0].id + console.log(`✅ [checkGTCCommentsForContract] Standard GTC 찾음: ${gtcDocumentId}`); + } else { + console.log(`❌ [checkGTCCommentsForContract] Standard GTC 없음 - gtc_documents 테이블에 standard 타입의 활성 문서가 없습니다`); } } - console.log(gtcDocumentId,"gtcDocumentId") + console.log(`🎯 [checkGTCCommentsForContract] 최종 gtcDocumentId: ${gtcDocumentId}`) // GTC Document를 찾지 못한 경우 + if (basicContractId) { + console.log(`🔍 [checkGTCCommentsForContract] basicContractId: ${basicContractId} 로 코멘트 조회`); + const { agreementComments } = await import("@/db/schema"); + const newComments = await db + .select({ id: agreementComments.id }) + .from(agreementComments) + .where( + and( + eq(agreementComments.basicContractId, basicContractId), + eq(agreementComments.isDeleted, false) + ) + ) + .limit(1); + + console.log(`📊 [checkGTCCommentsForContract] basicContractId ${basicContractId}: 코멘트 ${newComments.length}개 발견`); + + if (newComments.length > 0) { + console.log(`✅ [checkGTCCommentsForContract] basicContractId ${basicContractId}: hasComments = true 반환`); + return { + gtcDocumentId, // null일 수 있음 + hasComments: true + }; + } + + console.log(`⚠️ [checkGTCCommentsForContract] basicContractId ${basicContractId}: agreementComments 없음`); + } + + // GTC Document를 찾지 못한 경우 (기존 방식도 체크할 수 없음) if (!gtcDocumentId) { + console.log(`⚠️ [checkGTCCommentsForContract] gtcDocumentId null - 기존 방식 체크 불가`); return { gtcDocumentId: null, hasComments: false }; } @@ -3388,53 +3424,53 @@ async function checkGTCCommentsForContract( } } -// 전체 contract 리스트에 대해 GTC document ID와 comment 정보 수집 -export async function checkGTCCommentsForContracts( - contracts: BasicContractView[] -): Promise> { - const gtcData: Record = {}; +// // 전체 contract 리스트에 대해 GTC document ID와 comment 정보 수집 +// export async function checkGTCCommentsForContracts( +// contracts: BasicContractView[] +// ): Promise> { +// const gtcData: Record = {}; - // GTC가 포함된 contract만 필터링 - const gtcContracts = contracts.filter(contract => - contract.templateName?.includes('GTC') - ); +// // GTC가 포함된 contract만 필터링 +// const gtcContracts = contracts.filter(contract => +// contract.templateName?.includes('GTC') +// ); - if (gtcContracts.length === 0) { - return gtcData; - } +// if (gtcContracts.length === 0) { +// return gtcData; +// } - // Promise.all을 사용해서 병렬 처리 - const checkPromises = gtcContracts.map(async (contract) => { - try { - const result = await checkGTCCommentsForContract( - contract.templateName!, - contract.vendorId! - ); +// // Promise.all을 사용해서 병렬 처리 +// const checkPromises = gtcContracts.map(async (contract) => { +// try { +// const result = await checkGTCCommentsForContract( +// contract.templateName!, +// contract.vendorId! +// ); - return { - contractId: contract.id, - gtcDocumentId: result.gtcDocumentId, - hasComments: result.hasComments - }; - } catch (error) { - console.error(`Error checking GTC for contract ${contract.id}:`, error); - return { - contractId: contract.id, - gtcDocumentId: null, - hasComments: false - }; - } - }); +// return { +// contractId: contract.id, +// gtcDocumentId: result.gtcDocumentId, +// hasComments: result.hasComments +// }; +// } catch (error) { +// console.error(`Error checking GTC for contract ${contract.id}:`, error); +// return { +// contractId: contract.id, +// gtcDocumentId: null, +// hasComments: false +// }; +// } +// }); - const results = await Promise.all(checkPromises); +// const results = await Promise.all(checkPromises); - // 결과를 Record 형태로 변환 - results.forEach(({ contractId, gtcDocumentId, hasComments }) => { - gtcData[contractId] = { gtcDocumentId, hasComments }; - }); +// // 결과를 Record 형태로 변환 +// results.forEach(({ contractId, gtcDocumentId, hasComments }) => { +// gtcData[contractId] = { gtcDocumentId, hasComments }; +// }); - return gtcData; -} +// return gtcData; +// } -- cgit v1.2.3