From 8077419e40368dc703f94d558fc746b73fbc6702 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 19 Aug 2025 09:23:47 +0000 Subject: (최겸) 구매 PQ 비밀유지계약서 별첨 첨부파일 추가, 정규업체등록관리 개발 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/vendor-regular-registrations/service.ts | 62 ++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 5 deletions(-) (limited to 'lib/vendor-regular-registrations/service.ts') diff --git a/lib/vendor-regular-registrations/service.ts b/lib/vendor-regular-registrations/service.ts index 51f4e82b..d64c7b8b 100644 --- a/lib/vendor-regular-registrations/service.ts +++ b/lib/vendor-regular-registrations/service.ts @@ -25,7 +25,46 @@ import { basicContractTemplates } from "@/db/schema"; import db from "@/db/db"; -import { inArray, eq, desc } from "drizzle-orm"; +import { inArray, eq, desc, and, lt } from "drizzle-orm"; + +// 3개월 이상 정규등록검토 상태인 등록을 장기미등록으로 변경 +async function updatePendingApprovals() { + try { + const threeMonthsAgo = new Date(); + threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3); + + // 3개월 이상 정규등록검토 상태인 등록들을 조회 + const outdatedRegistrations = await db + .select() + .from(vendorRegularRegistrations) + .where( + and( + eq(vendorRegularRegistrations.status, "in_review"), + lt(vendorRegularRegistrations.updatedAt, threeMonthsAgo) + ) + ); + + // 장기미등록으로 상태 변경 + if (outdatedRegistrations.length > 0) { + await db + .update(vendorRegularRegistrations) + .set({ + status: "pending_approval", + updatedAt: new Date(), + }) + .where( + and( + eq(vendorRegularRegistrations.status, "in_review"), + lt(vendorRegularRegistrations.updatedAt, threeMonthsAgo) + ) + ); + + console.log(`${outdatedRegistrations.length}개의 등록이 장기미등록으로 변경되었습니다.`); + } + } catch (error) { + console.error("장기미등록 상태 업데이트 오류:", error); + } +} // 캐싱과 에러 핸들링이 포함된 조회 함수 export async function fetchVendorRegularRegistrations(input?: { @@ -37,6 +76,9 @@ export async function fetchVendorRegularRegistrations(input?: { return unstable_cache( async () => { try { + // 장기미등록 상태 업데이트 실행 + await updatePendingApprovals(); + const registrations = await getVendorRegularRegistrations(); let filteredData = registrations; @@ -113,6 +155,7 @@ export async function createVendorRegistration(data: { const registration = await createVendorRegularRegistration({ ...data, + status: data.status || "under_review", // 기본 상태를 '검토중'으로 설정 majorItems: majorItemsJson, }); @@ -438,7 +481,7 @@ export async function skipLegalReview(vendorIds: number[], skipReason: string) { // 새로 생성 const newRegistration = await createVendorRegularRegistration({ vendorId: vendorId, - status: "cp_finished", // CP완료로 변경 + status: "under_review", // 검토중으로 변경 remarks: `GTC Skip: ${skipReason}`, }); registrationId = newRegistration.id; @@ -451,7 +494,6 @@ export async function skipLegalReview(vendorIds: number[], skipReason: string) { : `GTC Skip: ${skipReason}`; await updateVendorRegularRegistration(registrationId, { - status: "cp_finished", // CP완료로 변경 gtcSkipped: true, // GTC Skip 여부 설정 remarks: newRemarks, }); @@ -630,7 +672,7 @@ export async function fetchVendorRegistrationStatus(vendorId: number) { } } - // 정규업체 등록 정보 + // 정규업체 등록 정보 (없을 수도 있음 - 기존 정규업체이거나 아직 등록 진행 안함) const registration = await db .select({ id: vendorRegularRegistrations.id, @@ -653,6 +695,15 @@ export async function fetchVendorRegistrationStatus(vendorId: number) { .where(eq(vendorRegularRegistrations.vendorId, vendorId)) .limit(1) + // 정규업체 등록 정보가 없는 경우 (정상적인 상황) + if (!registration[0]) { + return { + success: false, + error: "정규업체 등록 진행 정보가 없습니다.", // 에러가 아닌 정보성 메시지 + noRegistration: true // 등록 정보가 없음을 명시적으로 표시 + } + } + // 벤더 첨부파일 조회 const vendorFiles = await db .select() @@ -783,7 +834,8 @@ export async function fetchVendorRegistrationStatus(vendorId: number) { missingDocuments, businessContacts, missingContactTypes, - additionalInfo: additionalInfoCompleted, // boolean 값으로 변경 + additionalInfo: additionalInfo[0] || null, // 실제 추가정보 데이터 반환 + additionalInfoCompleted, // 완료 여부는 별도 필드로 추가 pqSubmission: pqSubmission[0] || null, auditPassed: investigationFiles.length > 0, basicContracts: vendorContracts, // 기본계약 정보 추가 -- cgit v1.2.3