From 69fd0851bb1bc1d767d50eecef044e20f325a8fa Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 18 Sep 2025 01:44:39 +0000 Subject: (최겸) 구매 PQ 요청 시 기본계약 통합 단일 이메일 발송 건 수정 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/vendors/table/request-pq-dialog.tsx | 46 ++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'lib/vendors/table') diff --git a/lib/vendors/table/request-pq-dialog.tsx b/lib/vendors/table/request-pq-dialog.tsx index 767b979f..aeb0c717 100644 --- a/lib/vendors/table/request-pq-dialog.tsx +++ b/lib/vendors/table/request-pq-dialog.tsx @@ -39,7 +39,7 @@ import { Input } from "@/components/ui/input" import { Badge } from "@/components/ui/badge" import { Progress } from "@/components/ui/progress" import { Vendor } from "@/db/schema/vendors" -import { requestBasicContractInfo, requestPQVendors } from "../service" +import { requestBasicContractInfo, requestPQVendors, sendBasicContractEmail } from "../service" import { getProjectsWithPQList } from "@/lib/pq/service" import type { Project } from "@/lib/pq/service" import { useSession } from "next-auth/react" @@ -364,6 +364,14 @@ export function RequestPQDialog({ vendors, showTrigger = true, onSuccess, ...pro setProgressValue((completedSteps / totalSteps) * 100) } } + //5단계: 각 협력업체들에게 기본계약서 이메일 발송 + if (selectedTemplateIds.length > 0) { + setCurrentStep(`기본계약서 이메일 발송 중... (${selectedTemplateIds.length}개 템플릿)`) + console.log("📋 기본계약서 이메일 발송 시작", selectedTemplateIds.length, "개 템플릿") + await processBasicContractsEmail(selectedTemplateIds, vendors) + completedSteps++ + setProgressValue((completedSteps / totalSteps) * 100) + } setCurrentStep("완료!") setProgressValue(100) @@ -506,6 +514,7 @@ export function RequestPQDialog({ vendors, showTrigger = true, onSuccess, ...pro } console.log(`✅ 기본계약 생성 완료: ${template.templateName}`) + } finally { // 임시 WebViewer 정리 @@ -601,6 +610,41 @@ export function RequestPQDialog({ vendors, showTrigger = true, onSuccess, ...pro } } + const processBasicContractsEmail = async (templateIds: number[], vendors: any[]) => { + if (!session?.user?.id) { + toast.error("인증 정보가 없습니다") + return + } + try { + const vendorIds = vendors.map(v => v.id) + const userId = Number(session.user.id) + + // 2. 성공한 템플릿이 있으면 이메일 발송 + if (templateIds.length > 0) { + const emailResult = await sendBasicContractEmail({ + vendorIds, + templateIds, + requestedBy: userId + }) + + if (emailResult.success) { + toast.success(`${templateIds.length}개 템플릿에 대한 기본계약서가 생성되었고, ${vendorIds.length}개 협력업체에 이메일이 발송되었습니다`) + } else { + toast.warning(`계약서는 생성되었으나 일부 이메일 발송 실패: ${emailResult.error}`) + } + } else { + toast.error("기본계약서 생성에 실패했습니다") + } + + } catch (error) { + console.error('기본계약서 이메일 발송 중 오류:', error) + toast.error(`기본계약서 이메일 발송 중 오류가 발생했습니다: ${error instanceof Error ? error.message : '알 수 없는 오류'}`) + } +} + + + + const dialogContent = (
{/* 선택된 협력업체 정보 */} -- cgit v1.2.3