diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-08-13 11:05:09 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-08-13 11:05:09 +0000 |
| commit | 33be47506f0aa62b969d82521580a29e95080268 (patch) | |
| tree | 6b7e232f2d78ef8775944ea085a36b3ccbce7d95 /lib/vendors/service.ts | |
| parent | 2ac95090157c355ea1bd0b8eb1e1e5e2bd56faf4 (diff) | |
(대표님) 입찰, 법무검토, EDP 변경사항 대응, dolce 개선, form-data 개선, 정규업체 등록관리 추가
(최겸) pq 미사용 컴포넌트 및 페이지 제거, 파일 라우트에 pq 적용
Diffstat (limited to 'lib/vendors/service.ts')
| -rw-r--r-- | lib/vendors/service.ts | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/lib/vendors/service.ts b/lib/vendors/service.ts index d91fbd03..2a927069 100644 --- a/lib/vendors/service.ts +++ b/lib/vendors/service.ts @@ -1,6 +1,6 @@ "use server"; // Next.js 서버 액션에서 직접 import하려면 (선택) -import { revalidateTag, unstable_noStore } from "next/cache"; +import { revalidatePath, revalidateTag, unstable_noStore } from "next/cache"; import db from "@/db/db"; import { vendorAttachments, VendorContact, vendorContacts, vendorDetailView, vendorItemsView, vendorMaterialsView, vendorPossibleItems, vendorPossibleMateirals, vendors, vendorsWithTypesView, vendorTypes, type Vendor } from "@/db/schema"; import logger from '@/lib/logger'; @@ -2615,7 +2615,7 @@ export async function requestPQVendors(input: ApproveVendorsInput & { dueDate?: string | null, type?: "GENERAL" | "PROJECT" | "NON_INSPECTION", extraNote?: string, - pqItems?: string, + pqItems?: string | Array<{itemCode: string, itemName: string}>, templateId?: number | null }) { unstable_noStore(); @@ -2759,8 +2759,21 @@ export async function requestPQVendors(input: ApproveVendorsInput & { .map(([name, _]) => name) : []; - // PQ 대상 품목 - const pqItems = input.pqItems || " - "; + // PQ 대상 품목 파싱 + let pqItemsForEmail = " - "; + if (input.pqItems) { + try { + const items = typeof input.pqItems === 'string' ? JSON.parse(input.pqItems) : input.pqItems; + if (Array.isArray(items) && items.length > 0) { + pqItemsForEmail = items.map(item => `${item.itemCode} - ${item.itemName}`).join(', '); + } else if (typeof input.pqItems === 'string') { + pqItemsForEmail = input.pqItems; + } + } catch (error) { + // JSON 파싱 실패 시 문자열 그대로 사용 + pqItemsForEmail = typeof input.pqItems === 'string' ? input.pqItems : " - "; + } + } await sendEmail({ to: vendor.email, @@ -2773,7 +2786,7 @@ export async function requestPQVendors(input: ApproveVendorsInput & { senderName: session?.user?.name || "eVCP", senderEmail: session?.user?.email || "noreply@evcp.com", dueDate: input.dueDate ? new Date(input.dueDate).toLocaleDateString('ko-KR') : "", - pqItems, + pqItems: pqItemsForEmail, contracts, extraNote: input.extraNote || "", currentYear: new Date().getFullYear().toString(), @@ -2798,6 +2811,8 @@ export async function requestPQVendors(input: ApproveVendorsInput & { revalidateTag("vendor-status-counts"); revalidateTag("vendor-pq-submissions"); revalidateTag("pq-submissions"); + revalidatePath("/evcp/pq_new"); + revalidatePath("/partners/pq"); if (input.projectId) { revalidateTag(`project-${input.projectId}`); @@ -2959,6 +2974,10 @@ export async function requestBasicContractInfo({ // 5. 캐시 무효화 revalidateTag("basic-contract-requests"); + revalidatePath("/evcp/basic-contract"); + revalidatePath("/partners/basic-contract"); + revalidatePath("/ko/partners/basic-contract"); + revalidatePath("/en/partners/basic-contract"); return { success: true }; } catch (error) { |
