summaryrefslogtreecommitdiff
path: root/lib/vendors/service.ts
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-08-13 11:05:09 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-08-13 11:05:09 +0000
commit33be47506f0aa62b969d82521580a29e95080268 (patch)
tree6b7e232f2d78ef8775944ea085a36b3ccbce7d95 /lib/vendors/service.ts
parent2ac95090157c355ea1bd0b8eb1e1e5e2bd56faf4 (diff)
(대표님) 입찰, 법무검토, EDP 변경사항 대응, dolce 개선, form-data 개선, 정규업체 등록관리 추가
(최겸) pq 미사용 컴포넌트 및 페이지 제거, 파일 라우트에 pq 적용
Diffstat (limited to 'lib/vendors/service.ts')
-rw-r--r--lib/vendors/service.ts29
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) {