diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-17 08:43:00 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-17 08:43:00 +0000 |
| commit | 1a6774d195b5fb9e3547f3268bf3527a8718c9bf (patch) | |
| tree | 541a4367ec3ffa9abfb8a9256c24f6286628b71c /lib/basic-contract/service.ts | |
| parent | d19cca70ad1689807192a8784efc3091bf677816 (diff) | |
(임수민) GTC 기본계약 코멘트 수정
Diffstat (limited to 'lib/basic-contract/service.ts')
| -rw-r--r-- | lib/basic-contract/service.ts | 122 |
1 files changed, 79 insertions, 43 deletions
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<GtcVendorDa const vendorDocument = vendorDocResult.length > 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<Record<number, { gtcDocumentId: number | null; hasComments: boolean }>> {
- const gtcData: Record<number, { gtcDocumentId: number | null; hasComments: boolean }> = {};
+// // 전체 contract 리스트에 대해 GTC document ID와 comment 정보 수집
+// export async function checkGTCCommentsForContracts(
+// contracts: BasicContractView[]
+// ): Promise<Record<number, { gtcDocumentId: number | null; hasComments: boolean }>> {
+// const gtcData: Record<number, { gtcDocumentId: number | null; hasComments: boolean }> = {};
- // 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;
+// }
|
