diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-07 12:01:16 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-07 12:01:16 +0900 |
| commit | 18ca4ad784aeeab9ab7a13bbc8b3c13b42ca5e49 (patch) | |
| tree | 6faf1a05d1ae296202ece5f4ca95b4d9c7a0488b /lib/vendor-regular-registrations/handlers.ts | |
| parent | 4b6ebdef8281a413fa2bfbdf8f5565eb8b106c62 (diff) | |
(김준회) 결재 미리보기 공통컴포넌트 중복 제거, 기존 코드의 미리보기 호출부 수정, 템플릿 작성 가이드 간략히 추가, 결재 미리보기시 첨부파일 편집 처리
Diffstat (limited to 'lib/vendor-regular-registrations/handlers.ts')
| -rw-r--r-- | lib/vendor-regular-registrations/handlers.ts | 151 |
1 files changed, 90 insertions, 61 deletions
diff --git a/lib/vendor-regular-registrations/handlers.ts b/lib/vendor-regular-registrations/handlers.ts index 95acde23..7490d81a 100644 --- a/lib/vendor-regular-registrations/handlers.ts +++ b/lib/vendor-regular-registrations/handlers.ts @@ -107,7 +107,12 @@ export async function mapRegistrationToTemplateVariables(payload: { const { requestData, requestedAt, vendorId } = payload; // vendors 테이블에서 추가 정보 가져오기 - let vendorInfo: any = {}; + let vendorInfo: { + postalCode?: string | null; + businessSize?: string | null; + addressDetail?: string | null; + } = {}; + if (vendorId) { try { const vendorResult = await db @@ -115,7 +120,6 @@ export async function mapRegistrationToTemplateVariables(payload: { postalCode: vendors.postalCode, businessSize: vendors.businessSize, addressDetail: vendors.addressDetail, - // FAX, 사업유형, 산업유형은 vendors 테이블에 없으므로 빈 값으로 처리 }) .from(vendors) .where(eq(vendors.id, vendorId)) @@ -126,6 +130,7 @@ export async function mapRegistrationToTemplateVariables(payload: { console.warn('[Template Variables] Failed to fetch vendor info:', error); } } + // 추가정보 조회 let additionalInfo = { businessType: '', @@ -137,77 +142,101 @@ export async function mapRegistrationToTemplateVariables(payload: { }; if (vendorId) { - const additionalInfoResult = await db - .select({ - businessType: vendorAdditionalInfo.businessType, - industryType: vendorAdditionalInfo.industryType, - companySize: vendorAdditionalInfo.companySize, - revenue: vendorAdditionalInfo.revenue, - factoryEstablishedDate: vendorAdditionalInfo.factoryEstablishedDate, - preferredContractTerms: vendorAdditionalInfo.preferredContractTerms, - }) - .from(vendorAdditionalInfo) - .where(eq(vendorAdditionalInfo.vendorId, vendorId)) - .limit(1); + try { + const additionalInfoResult = await db + .select({ + businessType: vendorAdditionalInfo.businessType, + industryType: vendorAdditionalInfo.industryType, + companySize: vendorAdditionalInfo.companySize, + revenue: vendorAdditionalInfo.revenue, + factoryEstablishedDate: vendorAdditionalInfo.factoryEstablishedDate, + preferredContractTerms: vendorAdditionalInfo.preferredContractTerms, + }) + .from(vendorAdditionalInfo) + .where(eq(vendorAdditionalInfo.vendorId, vendorId)) + .limit(1); - additionalInfo = additionalInfoResult[0] || additionalInfo; + const info = additionalInfoResult[0]; + if (info) { + additionalInfo = { + businessType: info.businessType ?? '', + industryType: info.industryType ?? '', + companySize: info.companySize ?? '', + revenue: info.revenue ?? '', + factoryEstablishedDate: info.factoryEstablishedDate ?? '', + preferredContractTerms: info.preferredContractTerms ?? '', + }; + } + } catch (error) { + console.warn('[Template Variables] Failed to fetch additional info:', error); + } } console.log('[Template Variables] Additional info:', additionalInfo); + + // 변수명은 공백 없이 깔끔하게 정의 (template-utils.ts에서 자동으로 trim 처리됨) const variables = { - // 협력업체 기본정보 (템플릿의 정확한 변수명 사용) - ' 협력업체 기본정보-사업자번호 ': requestData.businessNumber || '', - ' 협력업체 기본정보-업체명 ': requestData.companyNameKor || '', - ' 협력업체 기본정보-대표자명 ': requestData.representativeNameKor || '', - ' 협력업체 기본정보 대표전화 ': requestData.headOfficePhone || '', - ' 협력업체 기본정보 -FAX ': '', // FAX 정보는 vendors 테이블에 없으므로 빈 문자열 - ' 협력업체 기본정보 -E-mail ': requestData.representativeEmail || '', - ' 협력업체 기본정보-우편번호 ': vendorInfo.postalCode || '', // vendors 테이블에서 우편번호 가져오기 - ' 협력업체 기본정보-회사주소': requestData.headOfficeAddress || '', - ' 협력업체 기본정보-상세주소': vendorInfo.addressDetail || '', // 상세주소는 벤더 상세주소로 - ' 협력업체 기본정보-사업유형': additionalInfo.businessType || '', // 주요품목을 사업유형으로 사용 - ' 협력업체 기본정보-산업유형': additionalInfo.industryType || '', // 주요품목을 산업유형으로도 사용 - ' 협력업체 기본정보-회사규모': additionalInfo.companySize || '', // 기업규모 + // 협력업체 기본정보 + '협력업체기본정보-사업자번호': requestData.businessNumber || '', + '협력업체기본정보-업체명': requestData.companyNameKor || '', + '협력업체기본정보-대표자명': requestData.representativeNameKor || '', + '협력업체기본정보-대표전화': requestData.headOfficePhone || '', + '협력업체기본정보-FAX': '', // FAX 정보는 vendors 테이블에 없으므로 빈 문자열 + '협력업체기본정보-Email': requestData.representativeEmail || '', + '협력업체기본정보-우편번호': vendorInfo.postalCode || '', + '협력업체기본정보-회사주소': requestData.headOfficeAddress || '', + '협력업체기본정보-상세주소': vendorInfo.addressDetail || '', + '협력업체기본정보-사업유형': additionalInfo.businessType || '', + '협력업체기본정보-산업유형': additionalInfo.industryType || '', + '협력업체기본정보-회사규모': additionalInfo.companySize || '', - // 담당자 연락처 (각 담당자별로 동일한 정보 반복 - 템플릿에서 여러 번 사용됨) - ' 협력업체 관리-상세보기-영업담당자-담당자명 ': requestData.businessContacts.sales.name || '', - ' 협력업체 관리-상세보기-영업담당자-직급 ': requestData.businessContacts.sales.position || '', - ' 협력업체 관리-상세보기-영업담당자-부서 ': requestData.businessContacts.sales.department || '', - ' 협력업체 관리-상세보기-영업담당자-담당업무 ': requestData.businessContacts.sales.responsibility || '', - ' 협력업체 관리-상세보기-영업담당자-이메일 ': requestData.businessContacts.sales.email || '', - ' 협력업체 관리-상세보기-설계담당자-담당자명 ': requestData.businessContacts.design.name || '', - ' 협력업체 관리-상세보기-설계담당자-직급 ': requestData.businessContacts.design.position || '', - ' 협력업체 관리-상세보기-설계담당자-부서 ': requestData.businessContacts.design.department || '', - ' 협력업체 관리-상세보기-설계담당자-담당업무 ': requestData.businessContacts.design.responsibility || '', - ' 협력업체 관리-상세보기-설계담당자-이메일 ': requestData.businessContacts.design.email || '', - ' 협력업체 관리-상세보기-납기담당자-담당자명 ': requestData.businessContacts.delivery.name || '', - ' 협력업체 관리-상세보기-납기담당자-직급 ': requestData.businessContacts.delivery.position || '', - ' 협력업체 관리-상세보기-납기담당자-부서 ': requestData.businessContacts.delivery.department || '', - ' 협력업체 관리-상세보기-납기담당자-담당업무 ': requestData.businessContacts.delivery.responsibility || '', - ' 협력업체 관리-상세보기-납기담당자-이메일 ': requestData.businessContacts.delivery.email || '', - ' 협력업체 관리-상세보기-품질담당자-담당자명 ': requestData.businessContacts.quality.name || '', - ' 협력업체 관리-상세보기-품질담당자-직급 ': requestData.businessContacts.quality.position || '', - ' 협력업체 관리-상세보기-품질담당자-부서 ': requestData.businessContacts.quality.department || '', - ' 협력업체 관리-상세보기-품질담당자-담당업무 ': requestData.businessContacts.quality.responsibility || '', - ' 협력업체 관리-상세보기-품질담당자-이메일 ': requestData.businessContacts.quality.email || '', - ' 협력업체 관리-상세보기-세금계산서담당자-담당자명 ': requestData.businessContacts.taxInvoice.name || '', - ' 협력업체 관리-상세보기-세금계산서담당자-직급 ': requestData.businessContacts.taxInvoice.position || '', - ' 협력업체 관리-상세보기-세금계산서담당자-부서 ': requestData.businessContacts.taxInvoice.department || '', - ' 협력업체 관리-상세보기-세금계산서담당자-담당업무 ': requestData.businessContacts.taxInvoice.responsibility || '', - ' 협력업체 관리-상세보기-세금계산서담당자-이메일 ': requestData.businessContacts.taxInvoice.email || '', + // 담당자 연락처 - 영업담당자 + '영업담당자-담당자명': requestData.businessContacts.sales.name || '', + '영업담당자-직급': requestData.businessContacts.sales.position || '', + '영업담당자-부서': requestData.businessContacts.sales.department || '', + '영업담당자-담당업무': requestData.businessContacts.sales.responsibility || '', + '영업담당자-이메일': requestData.businessContacts.sales.email || '', + + // 담당자 연락처 - 설계담당자 + '설계담당자-담당자명': requestData.businessContacts.design.name || '', + '설계담당자-직급': requestData.businessContacts.design.position || '', + '설계담당자-부서': requestData.businessContacts.design.department || '', + '설계담당자-담당업무': requestData.businessContacts.design.responsibility || '', + '설계담당자-이메일': requestData.businessContacts.design.email || '', + + // 담당자 연락처 - 납기담당자 + '납기담당자-담당자명': requestData.businessContacts.delivery.name || '', + '납기담당자-직급': requestData.businessContacts.delivery.position || '', + '납기담당자-부서': requestData.businessContacts.delivery.department || '', + '납기담당자-담당업무': requestData.businessContacts.delivery.responsibility || '', + '납기담당자-이메일': requestData.businessContacts.delivery.email || '', + + // 담당자 연락처 - 품질담당자 + '품질담당자-담당자명': requestData.businessContacts.quality.name || '', + '품질담당자-직급': requestData.businessContacts.quality.position || '', + '품질담당자-부서': requestData.businessContacts.quality.department || '', + '품질담당자-담당업무': requestData.businessContacts.quality.responsibility || '', + '품질담당자-이메일': requestData.businessContacts.quality.email || '', + + // 담당자 연락처 - 세금계산서담당자 + '세금계산서담당자-담당자명': requestData.businessContacts.taxInvoice.name || '', + '세금계산서담당자-직급': requestData.businessContacts.taxInvoice.position || '', + '세금계산서담당자-부서': requestData.businessContacts.taxInvoice.department || '', + '세금계산서담당자-담당업무': requestData.businessContacts.taxInvoice.responsibility || '', + '세금계산서담당자-이메일': requestData.businessContacts.taxInvoice.email || '', - // 기본계약서 현황 (정규업체 등록 시점에는 아직 계약서가 없으므로 빈 값) - '정규업체등록관리-문서현황-계약동의현황-계약유형 ': '정규업체 등록 요청', - '정규업체등록관리-문서현황-계약동의현황-상태 ': '등록 대기', - '정규업체등록관리-문서현황-계약동의현황-서약일자 ': new Date(requestedAt).toLocaleDateString('ko-KR'), + // 기본계약서 현황 + '계약유형': '정규업체 등록 요청', + '계약상태': '등록 대기', + '서약일자': new Date(requestedAt).toLocaleDateString('ko-KR'), }; // 디버깅을 위한 로그 출력 console.log('[Template Variables] Generated variables:', Object.keys(variables)); console.log('[Template Variables] Sample values:', { - companyName: variables[' 협력업체 기본정보-업체명 '], - businessNumber: variables[' 협력업체 기본정보-사업자번호 '], - representative: variables[' 협력업체 기본정보-대표자명 '], + companyName: variables['협력업체기본정보-업체명'], + businessNumber: variables['협력업체기본정보-사업자번호'], + representative: variables['협력업체기본정보-대표자명'], }); return variables; |
