summaryrefslogtreecommitdiff
path: root/lib/vendor-regular-registrations/handlers.ts
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-07 12:01:16 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-07 12:01:16 +0900
commit18ca4ad784aeeab9ab7a13bbc8b3c13b42ca5e49 (patch)
tree6faf1a05d1ae296202ece5f4ca95b4d9c7a0488b /lib/vendor-regular-registrations/handlers.ts
parent4b6ebdef8281a413fa2bfbdf8f5565eb8b106c62 (diff)
(김준회) 결재 미리보기 공통컴포넌트 중복 제거, 기존 코드의 미리보기 호출부 수정, 템플릿 작성 가이드 간략히 추가, 결재 미리보기시 첨부파일 편집 처리
Diffstat (limited to 'lib/vendor-regular-registrations/handlers.ts')
-rw-r--r--lib/vendor-regular-registrations/handlers.ts151
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;