diff options
Diffstat (limited to 'lib/basic-contract/service.ts')
| -rw-r--r-- | lib/basic-contract/service.ts | 89 |
1 files changed, 79 insertions, 10 deletions
diff --git a/lib/basic-contract/service.ts b/lib/basic-contract/service.ts index 8999a109..123d2367 100644 --- a/lib/basic-contract/service.ts +++ b/lib/basic-contract/service.ts @@ -543,16 +543,62 @@ export async function requestBasicContractInfo({ if (!vendor.email) return; // 이메일이 없으면 스킵
try {
+ const isComplianceTemplate = template.templateName?.includes('준법');
+ let selectedTemplateId = template.id;
+ let selectedTemplate = template;
+
+ if (isComplianceTemplate) {
+ const vendorUser = await db.query.users.findFirst({
+ where: and(
+ eq(users.email, vendor.email),
+ eq(users.domain, 'partners')
+ )
+ });
+
+ const userLanguage = vendorUser?.language || 'en'; // 기본값은 영어
+
+ if (userLanguage === 'ko') {
+ // 한글 준법서약 템플릿 찾기
+ const koreanTemplate = await db.query.basicContractTemplates.findFirst({
+ where: and(
+ sql`${basicContractTemplates.templateName} LIKE '%준법%'`,
+ sql`${basicContractTemplates.templateName} NOT LIKE '%영문%'`,
+ eq(basicContractTemplates.status, 'ACTIVE')
+ )
+ });
+
+ if (koreanTemplate) {
+ selectedTemplateId = koreanTemplate.id;
+ selectedTemplate = koreanTemplate;
+ }
+ } else {
+ // 영문 준법서약 템플릿 찾기
+ const englishTemplate = await db.query.basicContractTemplates.findFirst({
+ where: and(
+ sql`${basicContractTemplates.templateName} LIKE '%준법%'`,
+ sql`${basicContractTemplates.templateName} LIKE '%영문%'`,
+ eq(basicContractTemplates.status, 'ACTIVE')
+ )
+ });
+
+ if (englishTemplate) {
+ selectedTemplateId = englishTemplate.id;
+ selectedTemplate = englishTemplate;
+ console.log(`✅ 영어 사용자 ${vendor.vendorName}에게 영문 준법서약 템플릿 전송`);
+ }
+ }
+ }
+
// 3-1. basic_contract 테이블에 레코드 추가
const [newContract] = await db
.insert(basicContract)
.values({
- templateId: template.id,
+ templateId: selectedTemplateId, // 언어별로 선택된 템플릿 ID 사용
vendorId: vendor.id,
requestedBy: requestedBy,
status: "PENDING",
- fileName: template.fileName, // 템플릿 파일 이름 사용
- filePath: template.filePath, // 템플릿 파일 경로 사용
+ fileName: selectedTemplate.fileName, // 선택된 템플릿 파일 이름 사용
+ filePath: selectedTemplate.filePath, // 선택된 템플릿 파일 경로 사용
})
.returning();
@@ -1322,22 +1368,45 @@ export interface SurveyQuestionOption { /**
* 활성화된 첫 번째 설문조사 템플릿과 관련 데이터를 모두 가져오기
*/
-export async function getActiveSurveyTemplate(): Promise<SurveyTemplateWithQuestions | null> {
+export async function getActiveSurveyTemplate(language: string = 'ko'): Promise<SurveyTemplateWithQuestions | null> {
try {
- // 1. 활성화된 첫 번째 템플릿 가져오기
- const template = await db
+ // 1. 활성화된 템플릿 가져오기 (언어에 따라 필터링)
+ const templates = await db
.select()
.from(complianceSurveyTemplates)
.where(eq(complianceSurveyTemplates.isActive, true))
- .orderBy(complianceSurveyTemplates.id)
- .limit(1);
+ .orderBy(complianceSurveyTemplates.id);
- if (!template || template.length === 0) {
+ if (!templates || templates.length === 0) {
console.log('활성화된 설문조사 템플릿이 없습니다.');
return null;
}
- const templateData = template[0];
+ // 언어에 따라 적절한 템플릿 선택
+ let templateData;
+ if (language === 'en') {
+ // 영문 템플릿 찾기 (이름에 '영문' 또는 'English' 포함)
+ templateData = templates.find(t =>
+ t.name.includes('영문') ||
+ t.name.toLowerCase().includes('english') ||
+ t.name.toLowerCase().includes('en')
+ );
+ } else {
+ // 한글 템플릿 찾기 (영문이 아닌 것)
+ templateData = templates.find(t =>
+ !t.name.includes('영문') &&
+ !t.name.toLowerCase().includes('english') &&
+ !t.name.toLowerCase().includes('en')
+ );
+ }
+
+ // 적절한 템플릿을 찾지 못하면 첫 번째 템플릿 사용
+ if (!templateData) {
+ console.log(`언어 '${language}'에 맞는 템플릿을 찾지 못해 기본 템플릿을 사용합니다.`);
+ templateData = templates[0];
+ }
+
+ console.log(`✅ 선택된 설문조사 템플릿: ${templateData.name} (언어: ${language})`);
// 2. 해당 템플릿의 모든 질문 가져오기 (displayOrder 순)
const questions = await db
|
