diff options
Diffstat (limited to 'lib')
31 files changed, 3457 insertions, 1781 deletions
diff --git a/lib/mail/mailer.ts b/lib/mail/mailer.ts index 3474a373..329e2e52 100644 --- a/lib/mail/mailer.ts +++ b/lib/mail/mailer.ts @@ -15,48 +15,18 @@ const transporter = nodemailer.createTransport({ }, }); -// // Handlebars 템플릿 로더 함수 -// function loadTemplate(templateName: string, data: Record<string, any>) { -// const templatePath = path.join(process.cwd(), 'lib', 'mail', 'templates', `${templateName}.hbs`); -// const source = fs.readFileSync(templatePath, 'utf8'); -// const template = handlebars.compile(source); -// return template(data); -// } -function applyLayout(layoutName: string, content: string, context: Record<string, any>) { - const layoutPath = path.join(process.cwd(), 'lib', 'mail', 'layouts', `${layoutName}.hbs`); - const layoutSource = fs.readFileSync(layoutPath, 'utf8'); - const layoutTemplate = handlebars.compile(layoutSource); - return layoutTemplate({ ...context, body: content }); -} - -// Partials 자동 등록 -function registerPartials() { - const partialsDir = path.join(process.cwd(), 'lib', 'mail', 'partials'); - const filenames = fs.readdirSync(partialsDir); - - filenames.forEach((filename) => { - const name = path.parse(filename).name; - const filepath = path.join(partialsDir, filename); - const source = fs.readFileSync(filepath, 'utf8'); - handlebars.registerPartial(name, source); // {{> header }}, {{> footer }} - }); -} - - -// 템플릿 불러오기 + layout/partials 적용 -function loadTemplate(templateName: string, context: Record<string, any>, layout = 'base') { - registerPartials(); - +// 템플릿 로더 함수 - 단순화된 버전 +function loadTemplate(templateName: string, data: Record<string, unknown>) { const templatePath = path.join(process.cwd(), 'lib', 'mail', 'templates', `${templateName}.hbs`); const source = fs.readFileSync(templatePath, 'utf8'); const template = handlebars.compile(source); - - const content = template(context); // 본문 먼저 처리 - return applyLayout(layout, content, context); // base.hbs로 감싸기 + return template(data); } -handlebars.registerHelper('t', function(key: string, options: any) { - // options.hash에는 Handlebars에서 넘긴 named parameter들(location=location 등)이 들어있음 - return i18next.t(key, options.hash || {}); - }); + +// i18next 헬퍼 등록 +handlebars.registerHelper('t', function(key: string, options: { hash?: Record<string, unknown> }) { + // options.hash에는 Handlebars에서 넘긴 named parameter들이 들어있음 + return i18next.t(key, options.hash || {}); +}); export { transporter, loadTemplate };
\ No newline at end of file diff --git a/lib/mail/service.ts b/lib/mail/service.ts new file mode 100644 index 00000000..cbd02953 --- /dev/null +++ b/lib/mail/service.ts @@ -0,0 +1,380 @@ +'use server';
+
+import fs from 'fs';
+import path from 'path';
+import handlebars from 'handlebars';
+import i18next from 'i18next';
+import resourcesToBackend from 'i18next-resources-to-backend';
+import { getOptions } from '@/i18n/settings';
+
+// Types
+export interface TemplateFile {
+ name: string;
+ content: string;
+ lastModified: string;
+ path: string;
+}
+
+interface UpdateTemplateRequest {
+ name: string;
+ content: string;
+}
+
+interface TemplateValidationResult {
+ isValid: boolean;
+ errors: string[];
+ warnings: string[];
+}
+
+// Configuration
+const baseDir = path.join(process.cwd(), 'lib', 'mail');
+const templatesDir = path.join(baseDir, 'templates');
+
+let initialized = false;
+
+function getFilePath(name: string): string {
+ const fileName = name.endsWith('.hbs') ? name : `${name}.hbs`;
+ return path.join(templatesDir, fileName);
+}
+
+// Initialization
+async function initializeAsync(): Promise<void> {
+ if (initialized) return;
+
+ try {
+ // i18next 초기화 (서버 사이드)
+ if (!i18next.isInitialized) {
+ await i18next
+ .use(resourcesToBackend((language: string, namespace: string) =>
+ import(`@/i18n/locales/${language}/${namespace}.json`)
+ ))
+ .init(getOptions());
+ }
+
+ // Handlebars 헬퍼 등록
+ registerHandlebarsHelpers();
+ initialized = true;
+ } catch (error) {
+ console.error('Failed to initialize TemplateService:', error);
+ // 초기화 실패해도 헬퍼는 등록
+ registerHandlebarsHelpers();
+ initialized = true;
+ }
+}
+
+async function ensureInitialized(): Promise<void> {
+ if (initialized) return;
+ await initializeAsync();
+}
+
+function registerHandlebarsHelpers(): void {
+ // i18n 번역 헬퍼
+ handlebars.registerHelper('t', function(key: string, options: { hash?: Record<string, unknown> }) {
+ return i18next.t(key, options.hash || {});
+ });
+
+ // 날짜 포맷 헬퍼
+ handlebars.registerHelper('formatDate', function(date: Date | string, format?: string) {
+ if (!date) return '';
+ const d = new Date(date);
+ if (isNaN(d.getTime())) return '';
+
+ if (!format || format === 'date') {
+ return d.toISOString().split('T')[0];
+ }
+
+ if (format === 'datetime') {
+ return d.toLocaleString('ko-KR', {
+ year: 'numeric',
+ month: '2-digit',
+ day: '2-digit',
+ hour: '2-digit',
+ minute: '2-digit'
+ });
+ }
+
+ return d.toLocaleDateString('ko-KR');
+ });
+
+ // 숫자 포맷 헬퍼
+ handlebars.registerHelper('formatNumber', function(number: number | string) {
+ if (typeof number === 'string') {
+ number = parseFloat(number);
+ }
+ if (isNaN(number)) return '';
+ return number.toLocaleString('ko-KR');
+ });
+
+ // 조건부 렌더링 헬퍼
+ handlebars.registerHelper('ifEquals', function(this: unknown, arg1: unknown, arg2: unknown, options: { fn: (context: unknown) => string; inverse: (context: unknown) => string }) {
+ return (arg1 === arg2) ? options.fn(this) : options.inverse(this);
+ });
+
+ // 배열 길이 확인 헬퍼
+ handlebars.registerHelper('ifArrayLength', function(this: unknown, array: unknown[], length: number, options: { fn: (context: unknown) => string; inverse: (context: unknown) => string }) {
+ return (Array.isArray(array) && array.length === length) ? options.fn(this) : options.inverse(this);
+ });
+}
+
+// Validation
+function validateTemplate(content: string): TemplateValidationResult {
+ const errors: string[] = [];
+ const warnings: string[] = [];
+
+ try {
+ // Handlebars 문법 검사
+ handlebars.compile(content);
+ } catch (error) {
+ if (error instanceof Error) {
+ errors.push(`Handlebars 문법 오류: ${error.message}`);
+ }
+ }
+
+ // 일반적인 문제 확인
+ if (content.trim().length === 0) {
+ errors.push('템플릿 내용이 비어있습니다.');
+ }
+
+ // 위험한 패턴 확인
+ if (content.includes('<script>')) {
+ warnings.push('스크립트 태그가 포함되어 있습니다. 보안에 주의하세요.');
+ }
+
+ return {
+ isValid: errors.length === 0,
+ errors,
+ warnings
+ };
+}
+
+// Core Functions
+async function getTemplateList(): Promise<TemplateFile[]> {
+ try {
+ if (!fs.existsSync(templatesDir)) {
+ return [];
+ }
+
+ const files = fs.readdirSync(templatesDir).filter(file => file.endsWith('.hbs'));
+ const allTemplates: TemplateFile[] = [];
+
+ for (const file of files) {
+ const filePath = path.join(templatesDir, file);
+
+ try {
+ const stats = fs.statSync(filePath);
+ const content = fs.readFileSync(filePath, 'utf8');
+
+ allTemplates.push({
+ name: file.replace('.hbs', ''),
+ content,
+ lastModified: stats.mtime.toISOString(),
+ path: filePath
+ });
+ } catch (fileError) {
+ console.error(`❌ 파일 읽기 실패: ${filePath}`, fileError);
+ }
+ }
+
+ return allTemplates.sort((a, b) => a.name.localeCompare(b.name));
+ } catch (error) {
+ console.error('Error getting template list:', error);
+ throw new Error('템플릿 목록을 가져오는데 실패했습니다.');
+ }
+}
+
+async function getTemplate(name: string): Promise<TemplateFile | null> {
+ try {
+ const filePath = getFilePath(name);
+
+ if (!fs.existsSync(filePath)) {
+ return null;
+ }
+
+ const stats = fs.statSync(filePath);
+ const content = fs.readFileSync(filePath, 'utf8');
+
+ return {
+ name: name.replace('.hbs', ''),
+ content,
+ lastModified: stats.mtime.toISOString(),
+ path: filePath
+ };
+ } catch (error) {
+ console.error(`❌ 템플릿 조회 실패 ${name}:`, error);
+ throw new Error(`템플릿 ${name}을 가져오는데 실패했습니다.`);
+ }
+}
+
+async function updateTemplate(request: UpdateTemplateRequest): Promise<TemplateFile> {
+ try {
+ const { name, content } = request;
+
+ // 템플릿 유효성 검사
+ const validation = validateTemplate(content);
+ if (!validation.isValid) {
+ throw new Error(`템플릿 유효성 검사 실패: ${validation.errors.join(', ')}`);
+ }
+
+ const filePath = getFilePath(name);
+
+ if (!fs.existsSync(filePath)) {
+ throw new Error(`템플릿 ${name}이 존재하지 않습니다.`);
+ }
+
+ fs.writeFileSync(filePath, content, 'utf8');
+
+ const stats = fs.statSync(filePath);
+
+ return {
+ name: name.replace('.hbs', ''),
+ content,
+ lastModified: stats.mtime.toISOString(),
+ path: filePath
+ };
+ } catch (error) {
+ console.error('Error updating template:', error);
+ if (error instanceof Error) {
+ throw error;
+ }
+ throw new Error('템플릿 수정에 실패했습니다.');
+ }
+}
+
+async function searchTemplates(query: string): Promise<TemplateFile[]> {
+ try {
+ const allTemplates = await getTemplateList();
+ const lowerQuery = query.toLowerCase();
+
+ return allTemplates.filter(template =>
+ template.name.toLowerCase().includes(lowerQuery) ||
+ template.content.toLowerCase().includes(lowerQuery)
+ );
+ } catch (error) {
+ console.error('Error searching templates:', error);
+ throw new Error('템플릿 검색에 실패했습니다.');
+ }
+}
+
+async function previewTemplate(
+ name: string,
+ data?: Record<string, unknown>
+): Promise<string> {
+ try {
+ // 초기화 대기
+ await ensureInitialized();
+
+ const template = await getTemplate(name);
+ if (!template) {
+ throw new Error(`템플릿 ${name}이 존재하지 않습니다.`);
+ }
+
+ // 템플릿 컴파일
+ const compiledTemplate = handlebars.compile(template.content);
+ const content = compiledTemplate(data || {});
+
+ return content;
+ } catch (error) {
+ console.error('Error previewing template:', error);
+ throw new Error('템플릿 미리보기 생성에 실패했습니다.');
+ }
+}
+
+// Server Actions
+export async function getTemplatesAction(search?: string) {
+ try {
+ let templates;
+
+ if (search) {
+ templates = await searchTemplates(search);
+ } else {
+ templates = await getTemplateList();
+ }
+
+ return {
+ success: true,
+ data: templates
+ };
+ } catch (error) {
+ return {
+ success: false,
+ error: error instanceof Error ? error.message : '템플릿 목록을 가져오는데 실패했습니다.'
+ };
+ }
+}
+
+export async function getTemplateAction(name: string) {
+ try {
+ const template = await getTemplate(name);
+
+ if (!template) {
+ return {
+ success: false,
+ error: '템플릿을 찾을 수 없습니다.'
+ };
+ }
+
+ return {
+ success: true,
+ data: template
+ };
+ } catch (error) {
+ return {
+ success: false,
+ error: error instanceof Error ? error.message : '템플릿을 가져오는데 실패했습니다.'
+ };
+ }
+}
+
+export async function updateTemplateAction(name: string, content: string) {
+ try {
+ if (!content) {
+ return {
+ success: false,
+ error: '템플릿 내용이 필요합니다.'
+ };
+ }
+
+ const template = await updateTemplate({
+ name,
+ content
+ });
+
+ return {
+ success: true,
+ data: template
+ };
+ } catch (error) {
+ return {
+ success: false,
+ error: error instanceof Error ? error.message : '템플릿 수정에 실패했습니다.'
+ };
+ }
+}
+
+export async function previewTemplateAction(
+ name: string,
+ data?: Record<string, unknown>
+) {
+ try {
+ if (!name) {
+ return {
+ success: false,
+ error: '템플릿 이름이 필요합니다.'
+ };
+ }
+
+ const result = await previewTemplate(name, data);
+
+ return {
+ success: true,
+ data: {
+ html: result
+ }
+ };
+ } catch (error) {
+ return {
+ success: false,
+ error: error instanceof Error ? error.message : '미리보기 생성에 실패했습니다.'
+ };
+ }
+}
\ No newline at end of file diff --git a/lib/mail/templates/admin-created.hbs b/lib/mail/templates/admin-created.hbs index 3db6c433..fbbd1393 100644 --- a/lib/mail/templates/admin-created.hbs +++ b/lib/mail/templates/admin-created.hbs @@ -1,25 +1,66 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; margin-bottom:16px;"> - {{t "adminCreated.title" lng=language}} -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - {{t "adminCreated.greeting" lng=language}}, <strong>{{name}}</strong>. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - {{t "adminCreated.body1" lng=language}} -</p> - -<p> - <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;"> - {{t "adminCreated.loginCTA" lng=language}} - </a> -</p> - -<p style="font-size:16px; line-height:24px; margin-top:16px;"> - {{t "adminCreated.supportMsg" lng=language}} -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; margin-bottom:16px;">
+ {{t "adminCreated.title" lng=language}}
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{t "adminCreated.greeting" lng=language}}, <strong>{{name}}</strong>.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{t "adminCreated.body1" lng=language}}
+</p>
+
+<p>
+ <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;">
+ {{t "adminCreated.loginCTA" lng=language}}
+ </a>
+</p>
+
+<p style="font-size:16px; line-height:24px; margin-top:16px;">
+ {{t "adminCreated.supportMsg" lng=language}}
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/admin-email-changed.hbs b/lib/mail/templates/admin-email-changed.hbs index fb88feab..6f62786e 100644 --- a/lib/mail/templates/admin-email-changed.hbs +++ b/lib/mail/templates/admin-email-changed.hbs @@ -1,30 +1,71 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; margin-bottom:16px;"> - {{t "adminEmailChanged.title" lng=language}} -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - {{t "adminEmailChanged.greeting" lng=language}}, <strong>{{name}}</strong>. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:8px;"> - {{t "adminEmailChanged.body.intro" lng=language}} -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - <strong>{{t "adminEmailChanged.body.oldEmail" lng=language}}:</strong> {{oldEmail}}<br /> - <strong>{{t "adminEmailChanged.body.newEmail" lng=language}}:</strong> {{newEmail}} -</p> - -<p> - <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;"> - {{t "adminEmailChanged.loginCTA" lng=language}} - </a> -</p> - -<p style="font-size:16px; line-height:24px; margin-top:16px;"> - {{t "adminEmailChanged.supportMsg" lng=language}} -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; margin-bottom:16px;">
+ {{t "adminEmailChanged.title" lng=language}}
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{t "adminEmailChanged.greeting" lng=language}}, <strong>{{name}}</strong>.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:8px;">
+ {{t "adminEmailChanged.body.intro" lng=language}}
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ <strong>{{t "adminEmailChanged.body.oldEmail" lng=language}}:</strong> {{oldEmail}}<br />
+ <strong>{{t "adminEmailChanged.body.newEmail" lng=language}}:</strong> {{newEmail}}
+</p>
+
+<p>
+ <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;">
+ {{t "adminEmailChanged.loginCTA" lng=language}}
+ </a>
+</p>
+
+<p style="font-size:16px; line-height:24px; margin-top:16px;">
+ {{t "adminEmailChanged.supportMsg" lng=language}}
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/cbe-invitation.hbs b/lib/mail/templates/cbe-invitation.hbs index db3260ea..64875983 100644 --- a/lib/mail/templates/cbe-invitation.hbs +++ b/lib/mail/templates/cbe-invitation.hbs @@ -1,55 +1,104 @@ -{{#> layout title="상업 입찰 평가 (CBE) 알림"}} - <p style="font-size:16px;">안녕하세요, <strong>{{contactName}}</strong>님</p> - - <p style="font-size:16px;"><strong>[RFQ {{rfqCode}}]</strong>에 대한 상업 입찰 평가(CBE)가 생성되어 알려드립니다. - 아래 세부 정보를 확인하시고 필요한 조치를 취해주시기 바랍니다.</p> - - <div class="info-box" style="background-color:#F1F5F9; border-radius:6px; padding:16px; margin-bottom:20px;"> - <h3 style="font-size:20px; color:#163CC4; margin-top:0; margin-bottom:12px;">RFQ 정보</h3> - <div class="info-item" style="margin-bottom:8px;"><span class="label" style="font-weight:bold; color:#4B5563;">RFQ 코드:</span> {{rfqCode}}</div> - <div class="info-item" style="margin-bottom:8px;"><span class="label" style="font-weight:bold; color:#4B5563;">프로젝트 코드:</span> {{projectCode}}</div> - <div class="info-item" style="margin-bottom:8px;"><span class="label" style="font-weight:bold; color:#4B5563;">프로젝트명:</span> {{projectName}}</div> - {{#if dueDate}} - <div class="info-item" style="margin-bottom:8px;"><span class="label" style="font-weight:bold; color:#4B5563;">마감일:</span> {{dueDate}}</div> - {{/if}} - </div> - - <div class="info-box" style="background-color:#F1F5F9; border-radius:6px; padding:16px; margin-bottom:20px;"> - <h3 style="font-size:20px; color:#163CC4; margin-top:0; margin-bottom:12px;">CBE 평가 세부사항</h3> - <div class="info-item" style="margin-bottom:8px;"><span class="label" style="font-weight:bold; color:#4B5563;">협력업체:</span> {{vendorName}} ({{vendorCode}})</div> - {{#if paymentTerms}} - <div class="info-item" style="margin-bottom:8px;"><span class="label" style="font-weight:bold; color:#4B5563;">결제 조건:</span> {{paymentTerms}}</div> - {{/if}} - {{#if incoterms}} - <div class="info-item" style="margin-bottom:8px;"><span class="label" style="font-weight:bold; color:#4B5563;">Incoterms:</span> {{incoterms}}</div> - {{/if}} - {{#if deliverySchedule}} - <div class="info-item" style="margin-bottom:8px;"><span class="label" style="font-weight:bold; color:#4B5563;">배송 일정:</span> {{deliverySchedule}}</div> - {{/if}} - </div> - - {{#if description}} - <div class="info-box" style="background-color:#F1F5F9; border-radius:6px; padding:16px; margin-bottom:20px;"> - <h3 style="font-size:20px; color:#163CC4; margin-top:0; margin-bottom:12px;">RFQ 설명</h3> - <p style="font-size:16px; margin:0;">{{description}}</p> - </div> - {{/if}} - - {{#if notes}} - <div class="info-box" style="background-color:#F1F5F9; border-radius:6px; padding:16px; margin-bottom:20px;"> - <h3 style="font-size:20px; color:#163CC4; margin-top:0; margin-bottom:12px;">비고</h3> - <p style="font-size:16px; margin:0;">{{notes}}</p> - </div> - {{/if}} - - <p style="text-align: center; margin: 25px 0;"> - <a href="{{loginUrl}}/rfq/{{rfqId}}/cbe/{{cbeId}}" class="button" style="display:inline-block; background-color:#163CC4; color:#ffffff; padding:10px 20px; text-decoration:none; border-radius:4px; font-weight:bold;"> - CBE 평가 확인하기 - </a> - </p> - - <p style="font-size:16px;">이 이메일에 첨부된 파일을 확인하시거나, 시스템에 로그인하여 자세한 정보를 확인해 주세요. - 추가 문의사항이 있으시면 구매담당자에게 연락해 주시기 바랍니다.</p> - - <p style="font-size:16px;">감사합니다.<br />eVCP 팀</p> -{{/layout}}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>상업 입찰 평가 (CBE) 알림</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f5f5f5;
+ font-family: Arial, sans-serif;
+ color: #111827;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ border: 1px solid #e5e7eb;
+ border-radius: 6px;
+ padding: 24px;
+ }
+ .info-box {
+ background-color: #F1F5F9;
+ border-radius: 6px;
+ padding: 16px;
+ margin-bottom: 20px;
+ }
+ .info-item {
+ margin-bottom: 8px;
+ }
+ .label {
+ font-weight: bold;
+ color: #4B5563;
+ }
+ .button {
+ display: inline-block;
+ background-color: #163CC4;
+ color: #ffffff;
+ padding: 10px 20px;
+ text-decoration: none;
+ border-radius: 4px;
+ font-weight: bold;
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+ <p style="font-size:16px;">안녕하세요, <strong>{{contactName}}</strong>님</p>
+
+ <p style="font-size:16px;"><strong>[RFQ {{rfqCode}}]</strong>에 대한 상업 입찰 평가(CBE)가 생성되어 알려드립니다.
+ 아래 세부 정보를 확인하시고 필요한 조치를 취해주시기 바랍니다.</p>
+
+ <div class="info-box">
+ <h3 style="font-size:20px; color:#163CC4; margin-top:0; margin-bottom:12px;">RFQ 정보</h3>
+ <div class="info-item"><span class="label">RFQ 코드:</span> {{rfqCode}}</div>
+ <div class="info-item"><span class="label">프로젝트 코드:</span> {{projectCode}}</div>
+ <div class="info-item"><span class="label">프로젝트명:</span> {{projectName}}</div>
+ {{#if dueDate}}
+ <div class="info-item"><span class="label">마감일:</span> {{dueDate}}</div>
+ {{/if}}
+ </div>
+
+ <div class="info-box">
+ <h3 style="font-size:20px; color:#163CC4; margin-top:0; margin-bottom:12px;">CBE 평가 세부사항</h3>
+ <div class="info-item"><span class="label">협력업체:</span> {{vendorName}} ({{vendorCode}})</div>
+ {{#if paymentTerms}}
+ <div class="info-item"><span class="label">결제 조건:</span> {{paymentTerms}}</div>
+ {{/if}}
+ {{#if incoterms}}
+ <div class="info-item"><span class="label">Incoterms:</span> {{incoterms}}</div>
+ {{/if}}
+ {{#if deliverySchedule}}
+ <div class="info-item"><span class="label">배송 일정:</span> {{deliverySchedule}}</div>
+ {{/if}}
+ </div>
+
+ {{#if description}}
+ <div class="info-box">
+ <h3 style="font-size:20px; color:#163CC4; margin-top:0; margin-bottom:12px;">RFQ 설명</h3>
+ <p style="font-size:16px; margin:0;">{{description}}</p>
+ </div>
+ {{/if}}
+
+ {{#if notes}}
+ <div class="info-box">
+ <h3 style="font-size:20px; color:#163CC4; margin-top:0; margin-bottom:12px;">비고</h3>
+ <p style="font-size:16px; margin:0;">{{notes}}</p>
+ </div>
+ {{/if}}
+
+ <p style="text-align: center; margin: 25px 0;">
+ <a href="{{loginUrl}}/rfq/{{rfqId}}/cbe/{{cbeId}}" class="button">
+ CBE 평가 확인하기
+ </a>
+ </p>
+
+ <p style="font-size:16px;">이 이메일에 첨부된 파일을 확인하시거나, 시스템에 로그인하여 자세한 정보를 확인해 주세요.
+ 추가 문의사항이 있으시면 구매담당자에게 연락해 주시기 바랍니다.</p>
+
+ <p style="font-size:16px;">감사합니다.<br />eVCP 팀</p>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/contract-sign-request.hbs b/lib/mail/templates/contract-sign-request.hbs index b70e2755..5fa00e12 100644 --- a/lib/mail/templates/contract-sign-request.hbs +++ b/lib/mail/templates/contract-sign-request.hbs @@ -1,51 +1,92 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; margin-bottom:16px;"> - 기본계약서 서명 요청 -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 안녕하세요, <strong>{{vendorName}}</strong>님. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 귀사에 기본계약서 서명을 요청드립니다. -</p> - -<div style="background-color: #f3f4f6; border-radius: 4px; padding: 15px; margin: 20px 0;"> - <p style="font-size:16px; margin:4px 0;"><strong>계약서 정보:</strong></p> - <p style="font-size:16px; margin:4px 0;">계약서 종류: {{templateName}}</p> - <p style="font-size:16px; margin:4px 0;">계약 번호: {{contractId}}</p> -</div> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 아래 버튼을 클릭하여 계약서를 확인하고 서명해 주시기 바랍니다. -</p> - -<p> - <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;"> - 계약서 서명하기 - </a> -</p> - -<p style="font-size:16px; line-height:24px; margin-top:16px;"> - 본 링크는 30일간 유효하며, 이후에는 새로운 서명 요청이 필요합니다. -</p> - -<p style="font-size:16px; line-height:24px; margin-top:16px;"> - 서명 과정에서 문의사항이 있으시면 담당자에게 연락해 주시기 바랍니다. -</p> - -<p style="font-size:16px; line-height:24px; margin-top:16px;"> - 감사합니다. -</p> - -<div style="margin-top: 30px;"> - <p style="font-size:16px; line-height:24px;"> - <strong>담당자 연락처:</strong><br> - 이메일: contact@company.com<br> - 전화: 02-123-4567 - </p> -</div> - -{{> footer logoUrl=logoUrl companyName=companyName year=currentYear }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; margin-bottom:16px;">
+ 기본계약서 서명 요청
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 안녕하세요, <strong>{{vendorName}}</strong>님.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 귀사에 기본계약서 서명을 요청드립니다.
+</p>
+
+<div style="background-color: #f3f4f6; border-radius: 4px; padding: 15px; margin: 20px 0;">
+ <p style="font-size:16px; margin:4px 0;"><strong>계약서 정보:</strong></p>
+ <p style="font-size:16px; margin:4px 0;">계약서 종류: {{templateName}}</p>
+ <p style="font-size:16px; margin:4px 0;">계약 번호: {{contractId}}</p>
+</div>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 아래 버튼을 클릭하여 계약서를 확인하고 서명해 주시기 바랍니다.
+</p>
+
+<p>
+ <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;">
+ 계약서 서명하기
+ </a>
+</p>
+
+<p style="font-size:16px; line-height:24px; margin-top:16px;">
+ 본 링크는 30일간 유효하며, 이후에는 새로운 서명 요청이 필요합니다.
+</p>
+
+<p style="font-size:16px; line-height:24px; margin-top:16px;">
+ 서명 과정에서 문의사항이 있으시면 담당자에게 연락해 주시기 바랍니다.
+</p>
+
+<p style="font-size:16px; line-height:24px; margin-top:16px;">
+ 감사합니다.
+</p>
+
+<div style="margin-top: 30px;">
+ <p style="font-size:16px; line-height:24px;">
+ <strong>담당자 연락처:</strong><br>
+ 이메일: contact@company.com<br>
+ 전화: 02-123-4567
+ </p>
+</div>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/evaluation-review-request.hbs b/lib/mail/templates/evaluation-review-request.hbs index 022f438b..cb7cb067 100644 --- a/lib/mail/templates/evaluation-review-request.hbs +++ b/lib/mail/templates/evaluation-review-request.hbs @@ -1,162 +1,162 @@ -<!-- evaluation-review-request.hbs --> -<!DOCTYPE html> -<html lang="ko"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>벤더 평가 의견 요청</title> - <style> - body { - font-family: 'Malgun Gothic', '맑은 고딕', Arial, sans-serif; - line-height: 1.6; - color: #333; - max-width: 600px; - margin: 0 auto; - padding: 20px; - background-color: #f5f5f5; - } - .container { - background-color: #ffffff; - border-radius: 8px; - padding: 30px; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); - } - .header { - text-align: center; - border-bottom: 2px solid #e9ecef; - padding-bottom: 20px; - margin-bottom: 30px; - } - .header h1 { - color: #2563eb; - font-size: 24px; - margin: 0; - } - .content { - margin-bottom: 30px; - } - .info-box { - background-color: #f8f9fa; - border-left: 4px solid #2563eb; - padding: 15px; - margin: 20px 0; - border-radius: 4px; - } - .target-list { - background-color: #f8f9fa; - border-radius: 6px; - padding: 15px; - margin: 15px 0; - } - .target-item { - display: flex; - justify-content: space-between; - align-items: center; - padding: 8px 0; - border-bottom: 1px solid #e9ecef; - } - .target-item:last-child { - border-bottom: none; - } - .vendor-code { - background-color: #e9ecef; - padding: 2px 8px; - border-radius: 4px; - font-size: 12px; - font-weight: bold; - } - .button { - display: inline-block; - background-color: #2563eb; - color: white; - padding: 12px 24px; - text-decoration: none; - border-radius: 6px; - font-weight: bold; - text-align: center; - margin: 20px auto; - } - .button:hover { - background-color: #1d4ed8; - } - .message-box { - background-color: #fef3c7; - border: 1px solid #f59e0b; - border-radius: 6px; - padding: 15px; - margin: 20px 0; - } - .footer { - border-top: 1px solid #e9ecef; - padding-top: 20px; - margin-top: 30px; - text-align: center; - color: #6b7280; - font-size: 14px; - } - </style> -</head> -<body> - <div class="container"> - <div class="header"> - <h1>🔍 벤더 평가 의견 요청</h1> - </div> - - <div class="content"> - <p>안녕하세요{{#if reviewerName}}, <strong>{{reviewerName}}</strong>님{{/if}}</p> - - <p><strong>{{requesterName}}</strong>님이 벤더 평가에 대한 의견을 요청하셨습니다.</p> - - <div class="info-box"> - <p><strong>📋 요청 정보</strong></p> - <ul style="margin: 10px 0;"> - <li>요청 일시: {{requestDate}}</li> - <li>평가 대상: {{targetCount}}개 벤더</li> - </ul> - </div> - - {{#if message}} - <div class="message-box"> - <p><strong>💬 요청자 메시지:</strong></p> - <p style="margin: 8px 0; white-space: pre-line;">{{message}}</p> - </div> - {{/if}} - - <div class="target-list"> - <p><strong>📄 평가 대상 목록:</strong></p> - {{#each targets}} - <div class="target-item"> - <div> - <span class="vendor-code">{{this.vendorCode}}</span> - <span style="margin-left: 8px;">{{this.vendorName}}</span> - </div> - <div style="font-size: 12px; color: #6b7280;"> - {{this.materialType}} ({{this.evaluationYear}}년) - </div> - </div> - {{/each}} - </div> - - <div style="text-align: center;"> - <a href="{{reviewUrl}}" class="button"> - 📝 평가 의견 작성하기 - </a> - </div> - - <div class="info-box"> - <p><strong>💡 참고사항:</strong></p> - <ul style="margin: 10px 0;"> - <li>평가 시스템에 로그인하여 각 벤더에 대한 의견을 입력해주세요.</li> - <li>평가 여부(여/부)와 함께 종합 의견도 작성 가능합니다.</li> - <li>궁금한 사항이 있으시면 요청자에게 직접 문의해주세요.</li> - </ul> - </div> - </div> - - <div class="footer"> - <p>이 메일은 벤더 평가 시스템에서 자동으로 발송되었습니다.</p> - <p>문의사항이 있으시면 시스템 관리자에게 연락해주세요.</p> - </div> - </div> -</body> +<!-- evaluation-review-request.hbs -->
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>벤더 평가 의견 요청</title>
+ <style>
+ body {
+ font-family: 'Malgun Gothic', '맑은 고딕', Arial, sans-serif;
+ line-height: 1.6;
+ color: #333;
+ max-width: 600px;
+ margin: 0 auto;
+ padding: 20px;
+ background-color: #f5f5f5;
+ }
+ .container {
+ background-color: #ffffff;
+ border-radius: 8px;
+ padding: 30px;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+ }
+ .header {
+ text-align: center;
+ border-bottom: 2px solid #e9ecef;
+ padding-bottom: 20px;
+ margin-bottom: 30px;
+ }
+ .header h1 {
+ color: #2563eb;
+ font-size: 24px;
+ margin: 0;
+ }
+ .content {
+ margin-bottom: 30px;
+ }
+ .info-box {
+ background-color: #f8f9fa;
+ border-left: 4px solid #2563eb;
+ padding: 15px;
+ margin: 20px 0;
+ border-radius: 4px;
+ }
+ .target-list {
+ background-color: #f8f9fa;
+ border-radius: 6px;
+ padding: 15px;
+ margin: 15px 0;
+ }
+ .target-item {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 8px 0;
+ border-bottom: 1px solid #e9ecef;
+ }
+ .target-item:last-child {
+ border-bottom: none;
+ }
+ .vendor-code {
+ background-color: #e9ecef;
+ padding: 2px 8px;
+ border-radius: 4px;
+ font-size: 12px;
+ font-weight: bold;
+ }
+ .button {
+ display: inline-block;
+ background-color: #2563eb;
+ color: white;
+ padding: 12px 24px;
+ text-decoration: none;
+ border-radius: 6px;
+ font-weight: bold;
+ text-align: center;
+ margin: 20px auto;
+ }
+ .button:hover {
+ background-color: #1d4ed8;
+ }
+ .message-box {
+ background-color: #fef3c7;
+ border: 1px solid #f59e0b;
+ border-radius: 6px;
+ padding: 15px;
+ margin: 20px 0;
+ }
+ .footer {
+ border-top: 1px solid #e9ecef;
+ padding-top: 20px;
+ margin-top: 30px;
+ text-align: center;
+ color: #6b7280;
+ font-size: 14px;
+ }
+ </style>
+</head>
+<body>
+ <div class="container">
+ <div class="header">
+ <h1>🔍 벤더 평가 의견 요청</h1>
+ </div>
+
+ <div class="content">
+ <p>안녕하세요{{#if reviewerName}}, <strong>{{reviewerName}}</strong>님{{/if}}</p>
+
+ <p><strong>{{requesterName}}</strong>님이 벤더 평가에 대한 의견을 요청하셨습니다.</p>
+
+ <div class="info-box">
+ <p><strong>📋 요청 정보</strong></p>
+ <ul style="margin: 10px 0;">
+ <li>요청 일시: {{requestDate}}</li>
+ <li>평가 대상: {{targetCount}}개 벤더</li>
+ </ul>
+ </div>
+
+ {{#if message}}
+ <div class="message-box">
+ <p><strong>💬 요청자 메시지:</strong></p>
+ <p style="margin: 8px 0; white-space: pre-line;">{{message}}</p>
+ </div>
+ {{/if}}
+
+ <div class="target-list">
+ <p><strong>📄 평가 대상 목록:</strong></p>
+ {{#each targets}}
+ <div class="target-item">
+ <div>
+ <span class="vendor-code">{{this.vendorCode}}</span>
+ <span style="margin-left: 8px;">{{this.vendorName}}</span>
+ </div>
+ <div style="font-size: 12px; color: #6b7280;">
+ {{this.materialType}} ({{this.evaluationYear}}년)
+ </div>
+ </div>
+ {{/each}}
+ </div>
+
+ <div style="text-align: center;">
+ <a href="{{reviewUrl}}" class="button">
+ 📝 평가 의견 작성하기
+ </a>
+ </div>
+
+ <div class="info-box">
+ <p><strong>💡 참고사항:</strong></p>
+ <ul style="margin: 10px 0;">
+ <li>평가 시스템에 로그인하여 각 벤더에 대한 의견을 입력해주세요.</li>
+ <li>평가 여부(여/부)와 함께 종합 의견도 작성 가능합니다.</li>
+ <li>궁금한 사항이 있으시면 요청자에게 직접 문의해주세요.</li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="footer">
+ <p>이 메일은 벤더 평가 시스템에서 자동으로 발송되었습니다.</p>
+ <p>문의사항이 있으시면 시스템 관리자에게 연락해주세요.</p>
+ </div>
+ </div>
+</body>
</html>
\ No newline at end of file diff --git a/lib/mail/templates/initial-rfq-invitation.hbs b/lib/mail/templates/initial-rfq-invitation.hbs index c732e584..c160a6a1 100644 --- a/lib/mail/templates/initial-rfq-invitation.hbs +++ b/lib/mail/templates/initial-rfq-invitation.hbs @@ -1,165 +1,165 @@ -<!DOCTYPE html> -<html lang="{{language}}"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>{{t "email.rfq_invitation.title"}}</title> - <style> - body { - font-family: Arial, sans-serif; - line-height: 1.6; - color: #333; - max-width: 800px; - margin: 0 auto; - padding: 20px; - } - .header { - text-align: center; - border-bottom: 2px solid #0066cc; - padding-bottom: 20px; - margin-bottom: 30px; - } - .logo { - font-size: 24px; - font-weight: bold; - color: #0066cc; - margin-bottom: 10px; - } - .content { - margin-bottom: 30px; - } - .terms-section { - background-color: #f8f9fa; - padding: 20px; - border-left: 4px solid #0066cc; - margin: 20px 0; - } - .terms-title { - font-weight: bold; - font-size: 16px; - margin-bottom: 15px; - color: #0066cc; - } - .terms-list { - list-style: none; - padding: 0; - } - .terms-list li { - margin-bottom: 8px; - padding-left: 0; - } - .terms-label { - font-weight: bold; - display: inline-block; - width: 180px; - } - .highlight { - background-color: #fff3cd; - padding: 2px 4px; - border-radius: 3px; - } - .important { - background-color: #d1ecf1; - padding: 15px; - border-radius: 5px; - margin: 20px 0; - border-left: 4px solid #0086b3; - } - .footer { - border-top: 2px solid #0066cc; - padding-top: 20px; - margin-top: 30px; - } - .contact-info { - background-color: #f8f9fa; - padding: 15px; - border-radius: 5px; - margin-top: 15px; - } - .date { - font-weight: bold; - color: #d63384; - } - </style> -</head> -<body> - <div class="header"> - <div class="logo">SAMSUNG HEAVY INDUSTRIES CO., LTD.</div> - <div>{{t "email.rfq_invitation.subtitle"}}</div> - </div> - - <div class="content"> - <p><strong>{{t "email.greeting"}}</strong></p> - - <p>{{t "email.rfq_invitation.opening_message"}}</p> - - <p>{{t "email.rfq_invitation.invitation_message"}} - <span class="date">{{dueDate}}</span> - {{t "email.rfq_invitation.korean_time"}}</p> - - <p><em>{{t "email.rfq_invitation.evcp_note"}}</em></p> - </div> - - <div class="terms-section"> - <div class="terms-title">A. {{t "email.rfq_invitation.commercial_terms"}}</div> - <div style="text-align: center; margin-bottom: 15px;">- {{t "email.rfq_invitation.details_below"}} -</div> - - <ul class="terms-list"> - <li> - <span class="terms-label">A-1 {{t "email.rfq_invitation.project_name"}} :</span> - {{projectName}} ({{rfqCode}}) - </li> - <li> - <span class="terms-label">A-2 {{t "email.rfq_invitation.company_flag"}} :</span> - {{projectCompany}} / {{projectFlag}} - </li> - <li> - <span class="terms-label">A-3 {{t "email.rfq_invitation.site"}} :</span> - {{projectSite}} - </li> - <li> - <span class="terms-label">A-4 {{t "email.rfq_invitation.classification"}} :</span> - {{classification}} - </li> - <li> - <span class="terms-label">A-5 {{t "email.rfq_invitation.delivery_condition"}} :</span> - {{incotermsDescription}} - </li> - <li> - <span class="terms-label">A-6 {{t "email.rfq_invitation.warranty_period"}} :</span> - {{warrantyPeriod}} - </li> - <li> - <span class="terms-label">A-7 {{t "email.rfq_invitation.quotation_validity"}} :</span> - {{validDate}} - </li> - <li> - <span class="terms-label">A-8 {{t "email.rfq_invitation.spare_part"}} :</span> - {{sparepart}} {{t "email.rfq_invitation.spare_part_detail"}} - </li> - <li> - <span class="terms-label">A-9 {{t "email.rfq_invitation.bid_closing_date"}} :</span> - <span class="date">{{dueDate}}</span> - </li> - </ul> - </div> - - <div class="terms-section"> - <div class="terms-title">B. {{t "email.rfq_invitation.evcp_address"}} : www.evcp.com/partners/Irfq-answer</div> - </div> - - <div class="important"> - <p><strong>{{t "email.rfq_invitation.acknowledgement_request"}}</strong></p> - </div> - - <div class="footer"> - <p>{{t "email.closing"}}</p> - - <div class="contact-info"> - <p><strong>{{picName}} / {{t "email.rfq_invitation.procurement_manager"}} / {{picEmail}}</strong></p> - <p><strong>SAMSUNG HEAVY INDUSTRIES CO., LTD.</strong></p> - <p>80, Jangpyeong 3-ro, Geoje-si, Gyeongsangnam-do, Republic of Korea, 53261</p> - </div> - </div> -</body> +<!DOCTYPE html>
+<html lang="{{language}}">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>{{t "email.rfq_invitation.title"}}</title>
+ <style>
+ body {
+ font-family: Arial, sans-serif;
+ line-height: 1.6;
+ color: #333;
+ max-width: 800px;
+ margin: 0 auto;
+ padding: 20px;
+ }
+ .header {
+ text-align: center;
+ border-bottom: 2px solid #0066cc;
+ padding-bottom: 20px;
+ margin-bottom: 30px;
+ }
+ .logo {
+ font-size: 24px;
+ font-weight: bold;
+ color: #0066cc;
+ margin-bottom: 10px;
+ }
+ .content {
+ margin-bottom: 30px;
+ }
+ .terms-section {
+ background-color: #f8f9fa;
+ padding: 20px;
+ border-left: 4px solid #0066cc;
+ margin: 20px 0;
+ }
+ .terms-title {
+ font-weight: bold;
+ font-size: 16px;
+ margin-bottom: 15px;
+ color: #0066cc;
+ }
+ .terms-list {
+ list-style: none;
+ padding: 0;
+ }
+ .terms-list li {
+ margin-bottom: 8px;
+ padding-left: 0;
+ }
+ .terms-label {
+ font-weight: bold;
+ display: inline-block;
+ width: 180px;
+ }
+ .highlight {
+ background-color: #fff3cd;
+ padding: 2px 4px;
+ border-radius: 3px;
+ }
+ .important {
+ background-color: #d1ecf1;
+ padding: 15px;
+ border-radius: 5px;
+ margin: 20px 0;
+ border-left: 4px solid #0086b3;
+ }
+ .footer {
+ border-top: 2px solid #0066cc;
+ padding-top: 20px;
+ margin-top: 30px;
+ }
+ .contact-info {
+ background-color: #f8f9fa;
+ padding: 15px;
+ border-radius: 5px;
+ margin-top: 15px;
+ }
+ .date {
+ font-weight: bold;
+ color: #d63384;
+ }
+ </style>
+</head>
+<body>
+ <div class="header">
+ <div class="logo">SAMSUNG HEAVY INDUSTRIES CO., LTD.</div>
+ <div>{{t "email.rfq_invitation.subtitle"}}</div>
+ </div>
+
+ <div class="content">
+ <p><strong>{{t "email.greeting"}}</strong></p>
+
+ <p>{{t "email.rfq_invitation.opening_message"}}</p>
+
+ <p>{{t "email.rfq_invitation.invitation_message"}}
+ <span class="date">{{dueDate}}</span>
+ {{t "email.rfq_invitation.korean_time"}}</p>
+
+ <p><em>{{t "email.rfq_invitation.evcp_note"}}</em></p>
+ </div>
+
+ <div class="terms-section">
+ <div class="terms-title">A. {{t "email.rfq_invitation.commercial_terms"}}</div>
+ <div style="text-align: center; margin-bottom: 15px;">- {{t "email.rfq_invitation.details_below"}} -</div>
+
+ <ul class="terms-list">
+ <li>
+ <span class="terms-label">A-1 {{t "email.rfq_invitation.project_name"}} :</span>
+ {{projectName}} ({{rfqCode}})
+ </li>
+ <li>
+ <span class="terms-label">A-2 {{t "email.rfq_invitation.company_flag"}} :</span>
+ {{projectCompany}} / {{projectFlag}}
+ </li>
+ <li>
+ <span class="terms-label">A-3 {{t "email.rfq_invitation.site"}} :</span>
+ {{projectSite}}
+ </li>
+ <li>
+ <span class="terms-label">A-4 {{t "email.rfq_invitation.classification"}} :</span>
+ {{classification}}
+ </li>
+ <li>
+ <span class="terms-label">A-5 {{t "email.rfq_invitation.delivery_condition"}} :</span>
+ {{incotermsDescription}}
+ </li>
+ <li>
+ <span class="terms-label">A-6 {{t "email.rfq_invitation.warranty_period"}} :</span>
+ {{warrantyPeriod}}
+ </li>
+ <li>
+ <span class="terms-label">A-7 {{t "email.rfq_invitation.quotation_validity"}} :</span>
+ {{validDate}}
+ </li>
+ <li>
+ <span class="terms-label">A-8 {{t "email.rfq_invitation.spare_part"}} :</span>
+ {{sparepart}} {{t "email.rfq_invitation.spare_part_detail"}}
+ </li>
+ <li>
+ <span class="terms-label">A-9 {{t "email.rfq_invitation.bid_closing_date"}} :</span>
+ <span class="date">{{dueDate}}</span>
+ </li>
+ </ul>
+ </div>
+
+ <div class="terms-section">
+ <div class="terms-title">B. {{t "email.rfq_invitation.evcp_address"}} : www.evcp.com/partners/Irfq-answer</div>
+ </div>
+
+ <div class="important">
+ <p><strong>{{t "email.rfq_invitation.acknowledgement_request"}}</strong></p>
+ </div>
+
+ <div class="footer">
+ <p>{{t "email.closing"}}</p>
+
+ <div class="contact-info">
+ <p><strong>{{picName}} / {{t "email.rfq_invitation.procurement_manager"}} / {{picEmail}}</strong></p>
+ <p><strong>SAMSUNG HEAVY INDUSTRIES CO., LTD.</strong></p>
+ <p>80, Jangpyeong 3-ro, Geoje-si, Gyeongsangnam-do, Republic of Korea, 53261</p>
+ </div>
+ </div>
+</body>
</html>
\ No newline at end of file diff --git a/lib/mail/templates/investigation-request.hbs b/lib/mail/templates/investigation-request.hbs index a69091a5..fb8949b6 100644 --- a/lib/mail/templates/investigation-request.hbs +++ b/lib/mail/templates/investigation-request.hbs @@ -1,31 +1,72 @@ -{{> header logoUrl=logoUrl }} - -<h2 style="font-size:28px; margin-bottom:16px;"> 협력업체 실사 요청</h2> - -<p style="font-size:16px;">안녕하세요,</p> - -<p style="font-size:16px;">협력업체 실사 요청이 접수되었습니다.</p> - -<div style="background-color:#F1F5F9; padding:16px; border-radius:4px; margin:16px 0;"> - <p style="font-size:16px; margin:0 0 8px 0;"><strong>협력업체 ID:</strong></p> - <ul style="margin:0; padding-left:20px;"> - {{#each vendorIds}} - <li style="font-size:16px; margin-bottom:4px;">{{this}}</li> - {{/each}} - </ul> - - {{#if notes}} - <p style="font-size:16px; margin:16px 0 0 0;"><strong>메모:</strong></p> - <p style="font-size:16px; margin:8px 0 0 0;">{{notes}}</p> - {{/if}} -</div> - -<p style="text-align: center; margin: 25px 0;"> - <a href="{{portalUrl}}" target="_blank" style="display:inline-block; background-color:#163CC4; color:#ffffff; padding:10px 20px; text-decoration:none; border-radius:4px;">벤더 포털 바로가기</a> -</p> - -<p style="font-size:16px;">문의사항이 있으시면 시스템 관리자에게 연락해 주세요.</p> - -<p style="font-size:16px;">감사합니다.<br />eVCP 팀</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h2 style="font-size:28px; margin-bottom:16px;"> 협력업체 실사 요청</h2>
+
+<p style="font-size:16px;">안녕하세요,</p>
+
+<p style="font-size:16px;">협력업체 실사 요청이 접수되었습니다.</p>
+
+<div style="background-color:#F1F5F9; padding:16px; border-radius:4px; margin:16px 0;">
+ <p style="font-size:16px; margin:0 0 8px 0;"><strong>협력업체 ID:</strong></p>
+ <ul style="margin:0; padding-left:20px;">
+ {{#each vendorIds}}
+ <li style="font-size:16px; margin-bottom:4px;">{{this}}</li>
+ {{/each}}
+ </ul>
+
+ {{#if notes}}
+ <p style="font-size:16px; margin:16px 0 0 0;"><strong>메모:</strong></p>
+ <p style="font-size:16px; margin:8px 0 0 0;">{{notes}}</p>
+ {{/if}}
+</div>
+
+<p style="text-align: center; margin: 25px 0;">
+ <a href="{{portalUrl}}" target="_blank" style="display:inline-block; background-color:#163CC4; color:#ffffff; padding:10px 20px; text-decoration:none; border-radius:4px;">벤더 포털 바로가기</a>
+</p>
+
+<p style="font-size:16px;">문의사항이 있으시면 시스템 관리자에게 연락해 주세요.</p>
+
+<p style="font-size:16px;">감사합니다.<br />eVCP 팀</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/otp.hbs b/lib/mail/templates/otp.hbs index 48df33f9..c6bb6416 100644 --- a/lib/mail/templates/otp.hbs +++ b/lib/mail/templates/otp.hbs @@ -1,4 +1,35 @@ -{{> header logoUrl=logoUrl }} +<!DOCTYPE html> +<html> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>eVCP 메일</title> + <style> + body { + margin: 0 !important; + padding: 20px !important; + background-color: #f4f4f4; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + } + .email-container { + max-width: 600px; + margin: 0 auto; + background-color: #ffffff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 10px rgba(0,0,0,0.1); + } + </style> +</head> +<body> + <div class="email-container"> +<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;"> + <tr> + <td align="center"> + <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span> + </td> + </tr> +</table> <h1 style="font-size:28px; margin-bottom:20px; color:#111827;">{{t "verifyYourEmailTitle"}}</h1> @@ -24,4 +55,14 @@ {{t "securityWarning"}} </p> -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;"> + <tr> + <td align="center"> + <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p> + <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p> + </td> + </tr> +</table> + </div> +</body> +</html>
\ No newline at end of file diff --git a/lib/mail/templates/password-reset.hbs b/lib/mail/templates/password-reset.hbs new file mode 100644 index 00000000..7a9029cc --- /dev/null +++ b/lib/mail/templates/password-reset.hbs @@ -0,0 +1,269 @@ +<!-- templates/password-reset.hbs -->
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>비밀번호 재설정 | Password Reset</title>
+ <style>
+ /* Reset styles */
+ body, table, td, p, a, li, blockquote {
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+ }
+ table, td {
+ mso-table-lspace: 0pt;
+ mso-table-rspace: 0pt;
+ }
+ img {
+ -ms-interpolation-mode: bicubic;
+ border: 0;
+ height: auto;
+ line-height: 100%;
+ outline: none;
+ text-decoration: none;
+ }
+
+ /* Main styles */
+ body {
+ margin: 0 !important;
+ padding: 0 !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ }
+
+ .header {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ padding: 40px 20px;
+ text-align: center;
+ }
+
+ .header h1 {
+ color: #ffffff;
+ margin: 0;
+ font-size: 28px;
+ font-weight: 600;
+ line-height: 1.4;
+ }
+
+ .logo {
+ color: #ffffff;
+ font-size: 24px;
+ font-weight: bold;
+ margin-bottom: 10px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ }
+
+ .content {
+ padding: 40px 30px;
+ }
+
+ .greeting {
+ font-size: 18px;
+ color: #333333;
+ margin-bottom: 20px;
+ font-weight: 500;
+ line-height: 1.6;
+ }
+
+ .message {
+ font-size: 16px;
+ color: #555555;
+ line-height: 1.6;
+ margin-bottom: 30px;
+ }
+
+ .reset-button {
+ text-align: center;
+ margin: 30px 0;
+ }
+
+ .reset-button a {
+ display: inline-block;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: #ffffff !important;
+ text-decoration: none;
+ padding: 15px 40px;
+ border-radius: 6px;
+ font-weight: 600;
+ font-size: 16px;
+ box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
+ transition: all 0.3s ease;
+ }
+
+ .reset-button a:hover {
+ background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%);
+ box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
+ transform: translateY(-2px);
+ }
+
+ .warning {
+ background-color: #fff3cd;
+ border: 1px solid #ffeaa7;
+ border-radius: 6px;
+ padding: 20px;
+ margin: 30px 0;
+ }
+
+ .warning-title {
+ color: #856404;
+ font-weight: 600;
+ margin-bottom: 8px;
+ font-size: 16px;
+ line-height: 1.5;
+ }
+
+ .warning-text {
+ color: #856404;
+ font-size: 14px;
+ line-height: 1.6;
+ }
+
+ .footer {
+ background-color: #f8f9fa;
+ padding: 30px;
+ text-align: center;
+ border-top: 1px solid #e9ecef;
+ }
+
+ .footer-text {
+ color: #6c757d;
+ font-size: 14px;
+ line-height: 1.5;
+ margin-bottom: 15px;
+ }
+
+ .support-info {
+ color: #6c757d;
+ font-size: 13px;
+ line-height: 1.5;
+ }
+
+ .support-info a {
+ color: #667eea;
+ text-decoration: none;
+ }
+
+ .divider {
+ height: 1px;
+ background-color: #e9ecef;
+ margin: 30px 0;
+ }
+
+ .lang-separator {
+ margin: 15px 0;
+ color: #999;
+ font-size: 14px;
+ }
+
+ /* Mobile responsiveness */
+ @media only screen and (max-width: 600px) {
+ .email-container {
+ width: 100% !important;
+ }
+
+ .content {
+ padding: 30px 20px !important;
+ }
+
+ .header {
+ padding: 30px 20px !important;
+ }
+
+ .header h1 {
+ font-size: 24px !important;
+ }
+
+ .reset-button a {
+ padding: 12px 30px !important;
+ font-size: 15px !important;
+ }
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+ <!-- Header -->
+ <div class="header">
+ <div class="logo">
+ 🚢 eVCP
+ </div>
+ <h1>
+ 비밀번호 재설정<br>
+ <div class="lang-separator">Password Reset</div>
+ </h1>
+ </div>
+
+ <!-- Content -->
+ <div class="content">
+ <div class="greeting">
+ 안녕하세요, {{userName}}님!<br>
+ <div class="lang-separator">Hello, {{userName}}!</div>
+ </div>
+
+ <div class="message">
+ eVCP 계정의 비밀번호 재설정을 요청하셨습니다. 아래 버튼을 클릭하여 새로운 비밀번호를 설정해주세요.<br><br>
+ You have requested to reset your eVCP account password. Please click the button below to set a new password.
+ </div>
+
+ <div class="reset-button">
+ <a href="{{resetLink}}" target="_blank">
+ 비밀번호 재설정하기 | Reset Password
+ </a>
+ </div>
+
+ <div class="warning">
+ <div class="warning-title">
+ ⚠️ 중요한 보안 안내 | Important Security Notice
+ </div>
+ <div class="warning-text">
+ <strong>한국어:</strong><br>
+ • 이 링크는 <strong>{{expiryTime}}</strong> 후에 만료됩니다<br>
+ • 보안을 위해 링크는 한 번만 사용 가능합니다<br>
+ • 비밀번호 재설정을 요청하지 않으셨다면 이 이메일을 무시하세요<br><br>
+
+ <strong>English:</strong><br>
+ • This link will expire in <strong>{{expiryTime}}</strong><br>
+ • For security, this link can only be used once<br>
+ • If you didn't request this reset, please ignore this email
+ </div>
+ </div>
+
+ <div class="divider"></div>
+
+ <div class="message">
+ 버튼이 작동하지 않는 경우, 아래 링크를 복사하여 브라우저에 직접 붙여넣어 주세요:<br><br>
+ If the button doesn't work, copy and paste the following link into your browser:
+ </div>
+
+ <div style="background-color: #f8f9fa; padding: 15px; border-radius: 4px; word-break: break-all; font-family: monospace; font-size: 13px; color: #495057; margin: 15px 0;">
+ {{resetLink}}
+ </div>
+ </div>
+
+ <!-- Footer -->
+ <div class="footer">
+ <div class="footer-text">
+ 이 이메일은 eVCP 시스템에서 자동으로 발송되었습니다.<br>
+ 문의사항이 있으시면 고객지원팀에 연락해주세요.<br><br>
+ This email was sent automatically by the eVCP system.<br>
+ If you have any questions, please contact our support team.
+ </div>
+
+ <div class="support-info">
+ 지원팀 | Support: <a href="mailto:{{supportEmail}}">{{supportEmail}}</a><br>
+ © 2024 eVCP. 모든 권리 보유. | All rights reserved.
+ </div>
+ </div>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/po-rfq-notification-en.hbs b/lib/mail/templates/po-rfq-notification-en.hbs index 64194a63..f2d9c7cc 100644 --- a/lib/mail/templates/po-rfq-notification-en.hbs +++ b/lib/mail/templates/po-rfq-notification-en.hbs @@ -1,4 +1,35 @@ -{{> header logoUrl=logoUrl }}
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
<div style="max-width: 800px; margin: 0 auto;">
<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;">
@@ -114,4 +145,14 @@ </p>
</div>
-{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/po-rfq-notification-ko.hbs b/lib/mail/templates/po-rfq-notification-ko.hbs index 60cd09ef..fe53f1af 100644 --- a/lib/mail/templates/po-rfq-notification-ko.hbs +++ b/lib/mail/templates/po-rfq-notification-ko.hbs @@ -1,4 +1,35 @@ -{{> header logoUrl=logoUrl }}
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
<div style="max-width: 800px; margin: 0 auto;">
<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;">
@@ -85,4 +116,14 @@ </p>
</div>
-{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/pq-submitted-admin.hbs b/lib/mail/templates/pq-submitted-admin.hbs index d94f4afb..7943590d 100644 --- a/lib/mail/templates/pq-submitted-admin.hbs +++ b/lib/mail/templates/pq-submitted-admin.hbs @@ -1,31 +1,72 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; margin-bottom:16px;"> - PQ 제출 알림 -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 새로운 {{#if isProjectPQ}}프로젝트{{else}}일반{{/if}} PQ가 제출되어 검토가 필요합니다. -</p> - -<div style="background-color: #f3f4f6; border-radius: 4px; padding: 15px; margin: 20px 0;"> - <p style="font-size:16px; margin:4px 0;"><strong>협력업체명:</strong> {{vendorName}}</p> - <p style="font-size:16px; margin:4px 0;"><strong>협력업체 ID:</strong> {{vendorId}}</p> - {{#if isProjectPQ}} - <p style="font-size:16px; margin:4px 0;"><strong>프로젝트명:</strong> {{projectName}}</p> - <p style="font-size:16px; margin:4px 0;"><strong>프로젝트 ID:</strong> {{projectId}}</p> - {{/if}} - <p style="font-size:16px; margin:4px 0;"><strong>제출일:</strong> {{submittedDate}}</p> -</div> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 빠른 시일 내에 이 제출 내용을 검토해 주세요. -</p> - -<p> - <a href="{{adminUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;"> - PQ 제출 검토하기 - </a> -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=currentYear }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; margin-bottom:16px;">
+ PQ 제출 알림
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 새로운 {{#if isProjectPQ}}프로젝트{{else}}일반{{/if}} PQ가 제출되어 검토가 필요합니다.
+</p>
+
+<div style="background-color: #f3f4f6; border-radius: 4px; padding: 15px; margin: 20px 0;">
+ <p style="font-size:16px; margin:4px 0;"><strong>협력업체명:</strong> {{vendorName}}</p>
+ <p style="font-size:16px; margin:4px 0;"><strong>협력업체 ID:</strong> {{vendorId}}</p>
+ {{#if isProjectPQ}}
+ <p style="font-size:16px; margin:4px 0;"><strong>프로젝트명:</strong> {{projectName}}</p>
+ <p style="font-size:16px; margin:4px 0;"><strong>프로젝트 ID:</strong> {{projectId}}</p>
+ {{/if}}
+ <p style="font-size:16px; margin:4px 0;"><strong>제출일:</strong> {{submittedDate}}</p>
+</div>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 빠른 시일 내에 이 제출 내용을 검토해 주세요.
+</p>
+
+<p>
+ <a href="{{adminUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;">
+ PQ 제출 검토하기
+ </a>
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/pq-submitted-vendor.hbs b/lib/mail/templates/pq-submitted-vendor.hbs index a2f02316..0d35c33b 100644 --- a/lib/mail/templates/pq-submitted-vendor.hbs +++ b/lib/mail/templates/pq-submitted-vendor.hbs @@ -1,35 +1,76 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; margin-bottom:16px;"> - PQ 제출 확인 -</h1> - -<div style="padding: 15px; background-color: #dff0d8; border-left: 4px solid #5cb85c; margin-bottom: 20px;"> - <p style="font-size:16px; margin:4px 0;">감사합니다! 귀사의 {{#if isProjectPQ}}프로젝트{{else}}일반{{/if}} PQ가 성공적으로 제출되었습니다.</p> -</div> - -<h2 style="font-size:22px; margin-bottom:16px;">제출 상세 정보</h2> - -<div style="background-color: #f3f4f6; border-radius: 4px; padding: 15px; margin: 20px 0;"> - <p style="font-size:16px; margin:4px 0;"><strong>협력업체명:</strong> {{vendorName}}</p> - {{#if isProjectPQ}} - <p style="font-size:16px; margin:4px 0;"><strong>프로젝트명:</strong> {{projectName}}</p> - {{/if}} - <p style="font-size:16px; margin:4px 0;"><strong>제출일:</strong> {{submittedDate}}</p> -</div> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 저희 팀이 제출 내용을 검토하고 추가 정보가 필요한 경우 연락드리겠습니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 대시보드에 접속하여 제출 상태를 확인하고 업체 프로필을 관리하실 수 있습니다. -</p> - -<p> - <a href="{{portalUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;"> - 협력업체 포털로 이동 - </a> -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=currentYear }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; margin-bottom:16px;">
+ PQ 제출 확인
+</h1>
+
+<div style="padding: 15px; background-color: #dff0d8; border-left: 4px solid #5cb85c; margin-bottom: 20px;">
+ <p style="font-size:16px; margin:4px 0;">감사합니다! 귀사의 {{#if isProjectPQ}}프로젝트{{else}}일반{{/if}} PQ가 성공적으로 제출되었습니다.</p>
+</div>
+
+<h2 style="font-size:22px; margin-bottom:16px;">제출 상세 정보</h2>
+
+<div style="background-color: #f3f4f6; border-radius: 4px; padding: 15px; margin: 20px 0;">
+ <p style="font-size:16px; margin:4px 0;"><strong>협력업체명:</strong> {{vendorName}}</p>
+ {{#if isProjectPQ}}
+ <p style="font-size:16px; margin:4px 0;"><strong>프로젝트명:</strong> {{projectName}}</p>
+ {{/if}}
+ <p style="font-size:16px; margin:4px 0;"><strong>제출일:</strong> {{submittedDate}}</p>
+</div>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 저희 팀이 제출 내용을 검토하고 추가 정보가 필요한 경우 연락드리겠습니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 대시보드에 접속하여 제출 상태를 확인하고 업체 프로필을 관리하실 수 있습니다.
+</p>
+
+<p>
+ <a href="{{portalUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;">
+ 협력업체 포털로 이동
+ </a>
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/pq.hbs b/lib/mail/templates/pq.hbs index 5cd43813..a8876eeb 100644 --- a/lib/mail/templates/pq.hbs +++ b/lib/mail/templates/pq.hbs @@ -1,49 +1,90 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; margin-bottom:16px;"> - eVCP PQ 초대 -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - {{vendorName}} 귀하, -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 귀사를 저희 업체 데이터베이스에 사전적격심사(PQ) 정보를 제출하도록 초대합니다. 이 과정을 완료하면 향후 프로젝트 및 조달 기회에 귀사가 고려될 수 있습니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - PQ 정보 제출 방법: -</p> - -<ol style="font-size:16px; line-height:32px; margin-bottom:16px;"> - <li>아래 버튼을 클릭하여 저희 업체 포털에 접속하세요</li> - <li>계정에 로그인하세요 (아직 계정이 없으면 등록하세요)</li> - <li>대시보드에서 PQ 섹션으로 이동하세요</li> - <li>귀사, 역량 및 경험에 관한 모든 필수 정보를 작성하세요</li> -</ol> - -<p style="text-align: center;"> - <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;"> - 업체 포털 접속 - </a> -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 시스템에 최신 PQ 정보를 유지하는 것은 향후 기회에 귀사가 고려되기 위해 필수적입니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 문의사항이 있거나 도움이 필요하시면 저희 업체 관리팀에 문의해 주세요. -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 귀사에 대해 더 알아보고 향후 프로젝트에서 함께 일할 수 있기를 기대합니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 감사합니다,<br> - eVCP 팀 -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=currentYear }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; margin-bottom:16px;">
+ eVCP PQ 초대
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{vendorName}} 귀하,
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 귀사를 저희 업체 데이터베이스에 사전적격심사(PQ) 정보를 제출하도록 초대합니다. 이 과정을 완료하면 향후 프로젝트 및 조달 기회에 귀사가 고려될 수 있습니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ PQ 정보 제출 방법:
+</p>
+
+<ol style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ <li>아래 버튼을 클릭하여 저희 업체 포털에 접속하세요</li>
+ <li>계정에 로그인하세요 (아직 계정이 없으면 등록하세요)</li>
+ <li>대시보드에서 PQ 섹션으로 이동하세요</li>
+ <li>귀사, 역량 및 경험에 관한 모든 필수 정보를 작성하세요</li>
+</ol>
+
+<p style="text-align: center;">
+ <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;">
+ 업체 포털 접속
+ </a>
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 시스템에 최신 PQ 정보를 유지하는 것은 향후 기회에 귀사가 고려되기 위해 필수적입니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 문의사항이 있거나 도움이 필요하시면 저희 업체 관리팀에 문의해 주세요.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 귀사에 대해 더 알아보고 향후 프로젝트에서 함께 일할 수 있기를 기대합니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 감사합니다,<br>
+ eVCP 팀
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/project-pq.hbs b/lib/mail/templates/project-pq.hbs index 4a46bcf4..a790e124 100644 --- a/lib/mail/templates/project-pq.hbs +++ b/lib/mail/templates/project-pq.hbs @@ -1,58 +1,99 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; margin-bottom:16px;"> - eVCP 프로젝트 PQ 초대 -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - {{vendorName}} 귀하, -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 귀사는 다음 프로젝트의 사전적격심사(PQ) 과정에 참여하도록 선정되었습니다: -</p> - -<div style="background-color: #e6f2ff; border-radius: 4px; padding: 15px; margin: 20px 0;"> - <p style="font-size:16px; margin:4px 0;"><strong>프로젝트 코드:</strong> {{projectCode}}</p> - <p style="font-size:16px; margin:4px 0;"><strong>프로젝트명:</strong> {{projectName}}</p> -</div> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 이는 저희 업체 선정 과정에서 중요한 단계입니다. 가능한 빠른 시일 내에 프로젝트 PQ 설문지를 작성해 주세요. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 프로젝트 PQ 제출 방법: -</p> - -<ol style="font-size:16px; line-height:32px; margin-bottom:16px;"> - <li>아래 버튼을 클릭하여 저희 업체 포털에 접속하세요</li> - <li>계정에 로그인하세요 (아직 계정이 없으면 등록하세요)</li> - <li>PQ 섹션으로 이동하여 {{projectCode}}에 대한 프로젝트 PQ를 찾으세요</li> - <li>모든 필수 정보를 작성하세요</li> -</ol> - -<p style="text-align: center;"> - <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;"> - 업체 포털 접속 - </a> -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 이 프로젝트 PQ를 완료하는 것은 이 프로젝트 고려 대상이 되기 위한 선행 조건임을 참고해 주세요. -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 문의사항이 있거나 도움이 필요하시면 저희 업체 관리팀에 문의해 주세요. -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 참여해 주셔서 감사합니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 감사합니다,<br> - eVCP 팀 -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=currentYear }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; margin-bottom:16px;">
+ eVCP 프로젝트 PQ 초대
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{vendorName}} 귀하,
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 귀사는 다음 프로젝트의 사전적격심사(PQ) 과정에 참여하도록 선정되었습니다:
+</p>
+
+<div style="background-color: #e6f2ff; border-radius: 4px; padding: 15px; margin: 20px 0;">
+ <p style="font-size:16px; margin:4px 0;"><strong>프로젝트 코드:</strong> {{projectCode}}</p>
+ <p style="font-size:16px; margin:4px 0;"><strong>프로젝트명:</strong> {{projectName}}</p>
+</div>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 이는 저희 업체 선정 과정에서 중요한 단계입니다. 가능한 빠른 시일 내에 프로젝트 PQ 설문지를 작성해 주세요.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 프로젝트 PQ 제출 방법:
+</p>
+
+<ol style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ <li>아래 버튼을 클릭하여 저희 업체 포털에 접속하세요</li>
+ <li>계정에 로그인하세요 (아직 계정이 없으면 등록하세요)</li>
+ <li>PQ 섹션으로 이동하여 {{projectCode}}에 대한 프로젝트 PQ를 찾으세요</li>
+ <li>모든 필수 정보를 작성하세요</li>
+</ol>
+
+<p style="text-align: center;">
+ <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;">
+ 업체 포털 접속
+ </a>
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 이 프로젝트 PQ를 완료하는 것은 이 프로젝트 고려 대상이 되기 위한 선행 조건임을 참고해 주세요.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 문의사항이 있거나 도움이 필요하시면 저희 업체 관리팀에 문의해 주세요.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 참여해 주셔서 감사합니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 감사합니다,<br>
+ eVCP 팀
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/rfq-invite.hbs b/lib/mail/templates/rfq-invite.hbs index 8ec20a99..284ac747 100644 --- a/lib/mail/templates/rfq-invite.hbs +++ b/lib/mail/templates/rfq-invite.hbs @@ -1,43 +1,84 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;"> - {{t "rfqInvite.heading" lng=language}} #{{rfqCode}} -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - {{t "rfqInvite.greeting" lng=language}}, <strong>Vendor #{{vendorId}}</strong>. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - {{t "rfqInvite.bodyIntro" lng=language}}<br/> - <strong>{{t "rfqInvite.projectName" lng=language}}:</strong> {{projectName}}<br /> - <strong>{{t "rfqInvite.projectCode" lng=language}}:</strong> {{projectCode}}<br /> - <strong>{{t "rfqInvite.dueDate" lng=language}}:</strong> {{dueDate}}<br /> - <strong>{{t "rfqInvite.description" lng=language}}:</strong> {{description}} -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:8px;"> - {{t "rfqInvite.itemListTitle" lng=language}} -</p> - -<ul style="margin-left:4px; font-size:16px; line-height:32px;"> - {{#each items}} - <li><strong>{{this.itemCode}}</strong> ({{this.quantity}} {{this.uom}}) - {{this.description}}</li> - {{/each}} -</ul> - -<p style="font-size:14px; line-height:32px; margin-top:16px;"> - {{t "rfqInvite.moreDetail" lng=language}} -</p> - -<p> - <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;"> - {{t "rfqInvite.viewButton" lng=language}} - </a> -</p> - -<p style="font-size:16px; line-height:24px; margin-top:16px;"> - {{t "rfqInvite.supportMsg" lng=language}} -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;">
+ {{t "rfqInvite.heading" lng=language}} #{{rfqCode}}
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{t "rfqInvite.greeting" lng=language}}, <strong>Vendor #{{vendorId}}</strong>.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{t "rfqInvite.bodyIntro" lng=language}}<br/>
+ <strong>{{t "rfqInvite.projectName" lng=language}}:</strong> {{projectName}}<br />
+ <strong>{{t "rfqInvite.projectCode" lng=language}}:</strong> {{projectCode}}<br />
+ <strong>{{t "rfqInvite.dueDate" lng=language}}:</strong> {{dueDate}}<br />
+ <strong>{{t "rfqInvite.description" lng=language}}:</strong> {{description}}
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:8px;">
+ {{t "rfqInvite.itemListTitle" lng=language}}
+</p>
+
+<ul style="margin-left:4px; font-size:16px; line-height:32px;">
+ {{#each items}}
+ <li><strong>{{this.itemCode}}</strong> ({{this.quantity}} {{this.uom}}) - {{this.description}}</li>
+ {{/each}}
+</ul>
+
+<p style="font-size:14px; line-height:32px; margin-top:16px;">
+ {{t "rfqInvite.moreDetail" lng=language}}
+</p>
+
+<p>
+ <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;">
+ {{t "rfqInvite.viewButton" lng=language}}
+ </a>
+</p>
+
+<p style="font-size:16px; line-height:24px; margin-top:16px;">
+ {{t "rfqInvite.supportMsg" lng=language}}
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/rfq-notification.hbs b/lib/mail/templates/rfq-notification.hbs index fc510ad0..f6a785c6 100644 --- a/lib/mail/templates/rfq-notification.hbs +++ b/lib/mail/templates/rfq-notification.hbs @@ -1,166 +1,166 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>{{t "email.rfq.title"}}</title> - <style> - body { - font-family: Arial, sans-serif; - line-height: 1.6; - color: #333; - margin: 0; - padding: 0; - } - .container { - max-width: 600px; - margin: 0 auto; - padding: 20px; - } - .header { - background-color: #1a56db; - color: #ffffff; - padding: 20px; - text-align: center; - border-radius: 5px 5px 0 0; - } - .content { - padding: 20px; - background-color: #ffffff; - border: 1px solid #e5e7eb; - border-top: none; - border-radius: 0 0 5px 5px; - } - .footer { - text-align: center; - margin-top: 20px; - font-size: 0.8em; - color: #6b7280; - } - table { - width: 100%; - border-collapse: collapse; - margin-bottom: 20px; - } - th, td { - border: 1px solid #e5e7eb; - padding: 12px; - text-align: left; - } - th { - background-color: #f3f4f6; - } - .button { - display: inline-block; - background-color: #1a56db; - color: #ffffff; - padding: 12px 24px; - text-decoration: none; - border-radius: 5px; - font-weight: bold; - margin-top: 20px; - } - .section-title { - margin-top: 25px; - margin-bottom: 10px; - font-weight: bold; - border-bottom: 1px solid #e5e7eb; - padding-bottom: 5px; - } - </style> -</head> -<body> - <div class="container"> - <div class="header"> - <h1>{{t "email.rfq.notification_title"}}</h1> - </div> - <div class="content"> - <p>{{t "email.greeting" name=vendor.user.fullName}},</p> - - <p>{{t "email.rfq.introduction"}}</p> - - <div class="section-title">{{t "email.rfq.details_section"}}</div> - <table> - <tr> - <th>{{t "email.rfq.code_label"}}</th> - <td>{{rfq.code}}</td> - </tr> - <tr> - <th>{{t "email.rfq.title_label"}}</th> - <td>{{rfq.title}}</td> - </tr> - <tr> - <th>{{t "email.rfq.description_label"}}</th> - <td>{{rfq.description}}</td> - </tr> - <tr> - <th>{{t "email.rfq.vendor_label"}}</th> - <td>{{vendor.name}}</td> - </tr> - <tr> - <th>{{t "email.rfq.quotation_code_label"}}</th> - <td>{{quotationCode}}</td> - </tr> - <tr> - <th>{{t "email.rfq.due_date_label"}}</th> - <td>{{rfq.dueDate}}</td> - </tr> - <tr> - <th>{{t "email.rfq.delivery_date_label"}}</th> - <td>{{rfq.deliveryDate}}</td> - </tr> - <tr> - <th>{{t "email.rfq.currency_label"}}</th> - <td>{{details.currency}}</td> - </tr> - <tr> - <th>{{t "email.rfq.payment_terms_label"}}</th> - <td>{{details.paymentTerms}}</td> - </tr> - <tr> - <th>{{t "email.rfq.incoterms_label"}}</th> - <td>{{details.incoterms}}</td> - </tr> - </table> - - <div class="section-title">{{t "email.rfq.items_section"}}</div> - <table> - <thead> - <tr> - <th>{{t "email.rfq.item_number"}}</th> - <th>{{t "email.rfq.item_description"}}</th> - <th>{{t "email.rfq.item_quantity"}}</th> - <th>{{t "email.rfq.item_uom"}}</th> - </tr> - </thead> - <tbody> - {{#each items}} - <tr> - <td>{{itemNumber}}</td> - <td>{{description}}</td> - <td>{{quantity}}</td> - <td>{{uom}}</td> - </tr> - {{/each}} - </tbody> - </table> - - <p>{{t "email.rfq.action_instructions"}}</p> - - <p style="text-align: center;"> - <a href="{{systemUrl}}/vendor/quotations/{{quotationCode}}" class="button"> - {{t "email.rfq.view_button"}} - </a> - </p> - - <p>{{t "email.rfq.closing"}}</p> - <p>{{t "email.rfq.sender_signature" name=sender.fullName}}<br> - {{sender.email}}</p> - </div> - <div class="footer"> - <p>{{t "email.footer.copyright"}} © {{year}} {{t "email.footer.company_name"}}</p> - <p>{{t "email.footer.address"}}</p> - </div> - </div> -</body> +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>{{t "email.rfq.title"}}</title>
+ <style>
+ body {
+ font-family: Arial, sans-serif;
+ line-height: 1.6;
+ color: #333;
+ margin: 0;
+ padding: 0;
+ }
+ .container {
+ max-width: 600px;
+ margin: 0 auto;
+ padding: 20px;
+ }
+ .header {
+ background-color: #1a56db;
+ color: #ffffff;
+ padding: 20px;
+ text-align: center;
+ border-radius: 5px 5px 0 0;
+ }
+ .content {
+ padding: 20px;
+ background-color: #ffffff;
+ border: 1px solid #e5e7eb;
+ border-top: none;
+ border-radius: 0 0 5px 5px;
+ }
+ .footer {
+ text-align: center;
+ margin-top: 20px;
+ font-size: 0.8em;
+ color: #6b7280;
+ }
+ table {
+ width: 100%;
+ border-collapse: collapse;
+ margin-bottom: 20px;
+ }
+ th, td {
+ border: 1px solid #e5e7eb;
+ padding: 12px;
+ text-align: left;
+ }
+ th {
+ background-color: #f3f4f6;
+ }
+ .button {
+ display: inline-block;
+ background-color: #1a56db;
+ color: #ffffff;
+ padding: 12px 24px;
+ text-decoration: none;
+ border-radius: 5px;
+ font-weight: bold;
+ margin-top: 20px;
+ }
+ .section-title {
+ margin-top: 25px;
+ margin-bottom: 10px;
+ font-weight: bold;
+ border-bottom: 1px solid #e5e7eb;
+ padding-bottom: 5px;
+ }
+ </style>
+</head>
+<body>
+ <div class="container">
+ <div class="header">
+ <h1>{{t "email.rfq.notification_title"}}</h1>
+ </div>
+ <div class="content">
+ <p>{{t "email.greeting" name=vendor.user.fullName}},</p>
+
+ <p>{{t "email.rfq.introduction"}}</p>
+
+ <div class="section-title">{{t "email.rfq.details_section"}}</div>
+ <table>
+ <tr>
+ <th>{{t "email.rfq.code_label"}}</th>
+ <td>{{rfq.code}}</td>
+ </tr>
+ <tr>
+ <th>{{t "email.rfq.title_label"}}</th>
+ <td>{{rfq.title}}</td>
+ </tr>
+ <tr>
+ <th>{{t "email.rfq.description_label"}}</th>
+ <td>{{rfq.description}}</td>
+ </tr>
+ <tr>
+ <th>{{t "email.rfq.vendor_label"}}</th>
+ <td>{{vendor.name}}</td>
+ </tr>
+ <tr>
+ <th>{{t "email.rfq.quotation_code_label"}}</th>
+ <td>{{quotationCode}}</td>
+ </tr>
+ <tr>
+ <th>{{t "email.rfq.due_date_label"}}</th>
+ <td>{{rfq.dueDate}}</td>
+ </tr>
+ <tr>
+ <th>{{t "email.rfq.delivery_date_label"}}</th>
+ <td>{{rfq.deliveryDate}}</td>
+ </tr>
+ <tr>
+ <th>{{t "email.rfq.currency_label"}}</th>
+ <td>{{details.currency}}</td>
+ </tr>
+ <tr>
+ <th>{{t "email.rfq.payment_terms_label"}}</th>
+ <td>{{details.paymentTerms}}</td>
+ </tr>
+ <tr>
+ <th>{{t "email.rfq.incoterms_label"}}</th>
+ <td>{{details.incoterms}}</td>
+ </tr>
+ </table>
+
+ <div class="section-title">{{t "email.rfq.items_section"}}</div>
+ <table>
+ <thead>
+ <tr>
+ <th>{{t "email.rfq.item_number"}}</th>
+ <th>{{t "email.rfq.item_description"}}</th>
+ <th>{{t "email.rfq.item_quantity"}}</th>
+ <th>{{t "email.rfq.item_uom"}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#each items}}
+ <tr>
+ <td>{{itemNumber}}</td>
+ <td>{{description}}</td>
+ <td>{{quantity}}</td>
+ <td>{{uom}}</td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+
+ <p>{{t "email.rfq.action_instructions"}}</p>
+
+ <p style="text-align: center;">
+ <a href="{{systemUrl}}/vendor/quotations/{{quotationCode}}" class="button">
+ {{t "email.rfq.view_button"}}
+ </a>
+ </p>
+
+ <p>{{t "email.rfq.closing"}}</p>
+ <p>{{t "email.rfq.sender_signature" name=sender.fullName}}<br>
+ {{sender.email}}</p>
+ </div>
+ <div class="footer">
+ <p>{{t "email.footer.copyright"}} © {{year}} {{t "email.footer.company_name"}}</p>
+ <p>{{t "email.footer.address"}}</p>
+ </div>
+ </div>
+</body>
</html>
\ No newline at end of file diff --git a/lib/mail/templates/tech-sales-quotation-accepted-ko.hbs b/lib/mail/templates/tech-sales-quotation-accepted-ko.hbs index b36b4473..b0e23fec 100644 --- a/lib/mail/templates/tech-sales-quotation-accepted-ko.hbs +++ b/lib/mail/templates/tech-sales-quotation-accepted-ko.hbs @@ -1,112 +1,153 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;"> - 견적 선택 안내 - RFQ NO. : #{{rfq.code}} -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 안녕하세요, <strong>{{vendor.name}}</strong>님. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - <strong style="color: #163CC4;">축하드립니다!</strong> - 귀하께서 제출하신 견적이 선택되었습니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 본 견적은 프로젝트 수주 과정에서 참조될 예정입니다. 견적의 선택이 추후 계약을 보장하지는 않는다는 점을 유의해 주시기 바랍니다. -</p> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">가. 선택된 견적서 정보</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) RFQ 번호 : {{rfq.code}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 프로젝트 : {{project.name}}</strong> - <br>* 프로젝트 코드 : {{rfq.projectCode}} - {{#if project.sector}} - <br>* 부문 : {{project.sector}} - {{/if}} - {{#if project.shipCount}} - <br>* 척수 : {{project.shipCount}}척 - {{/if}} - {{#if project.ownerName}} - <br>* 선주 : {{project.ownerName}} - {{/if}} - {{#if project.className}} - <br>* 선급 : {{project.className}} - {{/if}} - {{#if project.shipModelName}} - <br>* 선형 : {{project.shipModelName}} - {{/if}} - </p> - - {{#if series}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>* 시리즈별 K/L 일정 (Keel Laying Quarter)</strong> - {{#each series}} - <br> - {{sersNo}}호선: {{klQuarter}} - {{/each}} - </p> - {{/if}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 자재명 : {{rfq.title}}</strong> - {{#if rfq.materialCode}} - <br>* 자재그룹 코드 : {{rfq.materialCode}} - {{/if}} - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>4) 선택된 견적 금액 : {{quotation.currency}} {{quotation.totalPrice}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>5) 견적 유효기간 : {{quotation.validUntil}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>6) 선택일시 : {{quotation.acceptedAt}}</strong> - </p> - {{#if quotation.remark}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>7) 견적서 특이사항</strong> - <br>{{quotation.remark}} - </p> - {{/if}} -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">다. 담당자 연락처</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>기술영업 담당자</strong> - <br>* 담당자 : {{manager.name}} - <br>* 이메일 : {{manager.email}} - </p> -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">라. 유의사항</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) 유의사항</strong> - <br>본 견적은 프로젝트 수주 과정에서 참조될 예정입니다. 견적의 선택이 추후 계약을 보장하지는 않는다는 점을 유의해 주시기 바랍니다. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 기밀 유지</strong> - <br>프로젝트 관련 모든 정보는 기밀로 관리해 주시기 바랍니다. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 협력 관계</strong> - <br>성공적인 프로젝트 완수를 위해 적극적인 협력을 부탁드립니다. - </p> -</div> - -<p> - <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;"> - 기술영업에 제출된 견적 목록 확인 - </a> -</p> - -<p style="font-size:14px; line-height:24px; margin-top:24px; color: #666;"> - 견적 제출에 감사드리며, 앞으로도 좋은 협력 관계를 기대합니다.<br> - {{companyName}} 기술영업팀 -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;">
+ 견적 선택 안내 - RFQ NO. : #{{rfq.code}}
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 안녕하세요, <strong>{{vendor.name}}</strong>님.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ <strong style="color: #163CC4;">축하드립니다!</strong>
+ 귀하께서 제출하신 견적이 선택되었습니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 본 견적은 프로젝트 수주 과정에서 참조될 예정입니다. 견적의 선택이 추후 계약을 보장하지는 않는다는 점을 유의해 주시기 바랍니다.
+</p>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">가. 선택된 견적서 정보</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) RFQ 번호 : {{rfq.code}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 프로젝트 : {{project.name}}</strong>
+ <br>* 프로젝트 코드 : {{rfq.projectCode}}
+ {{#if project.sector}}
+ <br>* 부문 : {{project.sector}}
+ {{/if}}
+ {{#if project.shipCount}}
+ <br>* 척수 : {{project.shipCount}}척
+ {{/if}}
+ {{#if project.ownerName}}
+ <br>* 선주 : {{project.ownerName}}
+ {{/if}}
+ {{#if project.className}}
+ <br>* 선급 : {{project.className}}
+ {{/if}}
+ {{#if project.shipModelName}}
+ <br>* 선형 : {{project.shipModelName}}
+ {{/if}}
+ </p>
+
+ {{#if series}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>* 시리즈별 K/L 일정 (Keel Laying Quarter)</strong>
+ {{#each series}}
+ <br> - {{sersNo}}호선: {{klQuarter}}
+ {{/each}}
+ </p>
+ {{/if}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 자재명 : {{rfq.title}}</strong>
+ {{#if rfq.materialCode}}
+ <br>* 자재그룹 코드 : {{rfq.materialCode}}
+ {{/if}}
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>4) 선택된 견적 금액 : {{quotation.currency}} {{quotation.totalPrice}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>5) 견적 유효기간 : {{quotation.validUntil}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>6) 선택일시 : {{quotation.acceptedAt}}</strong>
+ </p>
+ {{#if quotation.remark}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>7) 견적서 특이사항</strong>
+ <br>{{quotation.remark}}
+ </p>
+ {{/if}}
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">다. 담당자 연락처</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>기술영업 담당자</strong>
+ <br>* 담당자 : {{manager.name}}
+ <br>* 이메일 : {{manager.email}}
+ </p>
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">라. 유의사항</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) 유의사항</strong>
+ <br>본 견적은 프로젝트 수주 과정에서 참조될 예정입니다. 견적의 선택이 추후 계약을 보장하지는 않는다는 점을 유의해 주시기 바랍니다.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 기밀 유지</strong>
+ <br>프로젝트 관련 모든 정보는 기밀로 관리해 주시기 바랍니다.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 협력 관계</strong>
+ <br>성공적인 프로젝트 완수를 위해 적극적인 협력을 부탁드립니다.
+ </p>
+</div>
+
+<p>
+ <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;">
+ 기술영업에 제출된 견적 목록 확인
+ </a>
+</p>
+
+<p style="font-size:14px; line-height:24px; margin-top:24px; color: #666;">
+ 견적 제출에 감사드리며, 앞으로도 좋은 협력 관계를 기대합니다.<br>
+ {{companyName}} 기술영업팀
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/tech-sales-quotation-rejected-ko.hbs b/lib/mail/templates/tech-sales-quotation-rejected-ko.hbs index 58a08c7b..ae57fd21 100644 --- a/lib/mail/templates/tech-sales-quotation-rejected-ko.hbs +++ b/lib/mail/templates/tech-sales-quotation-rejected-ko.hbs @@ -1,117 +1,158 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;"> - 견적 검토 결과 안내 - RFQ NO. : #{{rfq.code}} -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 안녕하세요, <strong>{{vendor.name}}</strong>님. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 귀하께서 제출해주신 기술영업 견적서에 대한 검토 결과를 안내드립니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 아쉽게도 이번 건에서는 다른 업체의 견적이 선택되었습니다. - 귀중한 시간을 할애하여 기술영업 견적서를 작성해 주신 점에 대해 깊이 감사드립니다. - <strong>본 기술영업 견적이 향후 실제 계약을 위한 구매 부서의 견적 요청을 제한하지 않는다는 점을 말씀드립니다.</strong> -</p> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">가. 검토 대상 견적서 정보</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) RFQ 번호 : {{rfq.code}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 프로젝트 : {{project.name}}</strong> - <br>* 프로젝트 코드 : {{rfq.projectCode}} - {{#if project.sector}} - <br>* 부문 : {{project.sector}} - {{/if}} - {{#if project.shipCount}} - <br>* 척수 : {{project.shipCount}}척 - {{/if}} - {{#if project.ownerName}} - <br>* 선주 : {{project.ownerName}} - {{/if}} - {{#if project.className}} - <br>* 선급 : {{project.className}} - {{/if}} - {{#if project.shipModelName}} - <br>* 선형 : {{project.shipModelName}} - {{/if}} - </p> - - {{#if series}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>* 시리즈별 K/L 일정 (Keel Laying Quarter)</strong> - {{#each series}} - <br> - {{sersNo}}호선: {{klQuarter}} - {{/each}} - </p> - {{/if}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 자재명 : {{rfq.title}}</strong> - {{#if rfq.materialCode}} - <br>* 자재그룹 코드 : {{rfq.materialCode}} - {{/if}} - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>4) 제출하신 견적 금액 : {{quotation.currency}} {{quotation.totalPrice}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>5) 견적 유효기간 : {{quotation.validUntil}}</strong> - </p> - {{#if quotation.remark}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>6) 제출하신 특이사항</strong> - <br>{{quotation.remark}} - </p> - {{/if}} -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">나. 검토 결과</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) 결과 : 미선정</strong> - <br>이번 RFQ에서는 다른 업체가 선정되었습니다. - </p> - {{#if quotation.rejectionReason}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 참고사항</strong> - <br>{{quotation.rejectionReason}} - </p> - {{/if}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 감사 인사</strong> - <br>* 귀사의 견적서 응답에 진심으로 감사드립니다. - </p> -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">라. 담당자 연락처</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>기술영업 담당자</strong> - <br>* 담당자 : {{manager.name}} - <br>* 이메일 : {{manager.email}} - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>문의 사항</strong> - <br>* 견적 관련 피드백이나 향후 협력 방안에 대해 문의하시기 바랍니다. - <br>* 새로운 사업 기회나 기술 제휴에 대해서도 언제든 연락 주시기 바랍니다. - </p> -</div> - -<p> - <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;"> - 기술영업 수신견적 목록 보기 - </a> -</p> - -<p style="font-size:14px; line-height:24px; margin-top:24px; color: #666;"> - 다시 한번 견적서 제출에 감사드리며, 향후 좋은 협력 기회가 있기를 기대합니다.<br> - {{companyName}} 기술영업 -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;">
+ 견적 검토 결과 안내 - RFQ NO. : #{{rfq.code}}
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 안녕하세요, <strong>{{vendor.name}}</strong>님.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 귀하께서 제출해주신 기술영업 견적서에 대한 검토 결과를 안내드립니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 아쉽게도 이번 건에서는 다른 업체의 견적이 선택되었습니다.
+ 귀중한 시간을 할애하여 기술영업 견적서를 작성해 주신 점에 대해 깊이 감사드립니다.
+ <strong>본 기술영업 견적이 향후 실제 계약을 위한 구매 부서의 견적 요청을 제한하지 않는다는 점을 말씀드립니다.</strong>
+</p>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">가. 검토 대상 견적서 정보</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) RFQ 번호 : {{rfq.code}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 프로젝트 : {{project.name}}</strong>
+ <br>* 프로젝트 코드 : {{rfq.projectCode}}
+ {{#if project.sector}}
+ <br>* 부문 : {{project.sector}}
+ {{/if}}
+ {{#if project.shipCount}}
+ <br>* 척수 : {{project.shipCount}}척
+ {{/if}}
+ {{#if project.ownerName}}
+ <br>* 선주 : {{project.ownerName}}
+ {{/if}}
+ {{#if project.className}}
+ <br>* 선급 : {{project.className}}
+ {{/if}}
+ {{#if project.shipModelName}}
+ <br>* 선형 : {{project.shipModelName}}
+ {{/if}}
+ </p>
+
+ {{#if series}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>* 시리즈별 K/L 일정 (Keel Laying Quarter)</strong>
+ {{#each series}}
+ <br> - {{sersNo}}호선: {{klQuarter}}
+ {{/each}}
+ </p>
+ {{/if}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 자재명 : {{rfq.title}}</strong>
+ {{#if rfq.materialCode}}
+ <br>* 자재그룹 코드 : {{rfq.materialCode}}
+ {{/if}}
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>4) 제출하신 견적 금액 : {{quotation.currency}} {{quotation.totalPrice}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>5) 견적 유효기간 : {{quotation.validUntil}}</strong>
+ </p>
+ {{#if quotation.remark}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>6) 제출하신 특이사항</strong>
+ <br>{{quotation.remark}}
+ </p>
+ {{/if}}
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">나. 검토 결과</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) 결과 : 미선정</strong>
+ <br>이번 RFQ에서는 다른 업체가 선정되었습니다.
+ </p>
+ {{#if quotation.rejectionReason}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 참고사항</strong>
+ <br>{{quotation.rejectionReason}}
+ </p>
+ {{/if}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 감사 인사</strong>
+ <br>* 귀사의 견적서 응답에 진심으로 감사드립니다.
+ </p>
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">라. 담당자 연락처</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>기술영업 담당자</strong>
+ <br>* 담당자 : {{manager.name}}
+ <br>* 이메일 : {{manager.email}}
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>문의 사항</strong>
+ <br>* 견적 관련 피드백이나 향후 협력 방안에 대해 문의하시기 바랍니다.
+ <br>* 새로운 사업 기회나 기술 제휴에 대해서도 언제든 연락 주시기 바랍니다.
+ </p>
+</div>
+
+<p>
+ <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;">
+ 기술영업 수신견적 목록 보기
+ </a>
+</p>
+
+<p style="font-size:14px; line-height:24px; margin-top:24px; color: #666;">
+ 다시 한번 견적서 제출에 감사드리며, 향후 좋은 협력 기회가 있기를 기대합니다.<br>
+ {{companyName}} 기술영업
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/tech-sales-quotation-submitted-manager-ko.hbs b/lib/mail/templates/tech-sales-quotation-submitted-manager-ko.hbs index 6700a29b..cbe68e14 100644 --- a/lib/mail/templates/tech-sales-quotation-submitted-manager-ko.hbs +++ b/lib/mail/templates/tech-sales-quotation-submitted-manager-ko.hbs @@ -1,127 +1,168 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;"> - 견적서 접수 알림 - RFQ NO. : #{{rfq.code}} -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 안녕하세요, <strong>{{manager.name}}</strong>님. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - <strong>{{vendor.name}}</strong>에서 견적서를 제출했습니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 견적서 검토 후 선택 여부를 결정해 주시기 바랍니다. - 시스템에서 견적서 상세 내용을 확인하실 수 있습니다. -</p> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">가. 접수된 견적서 정보</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) RFQ 번호 : {{rfq.code}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 프로젝트 : {{project.name}}</strong> - <br>* 프로젝트 코드 : {{rfq.projectCode}} - {{#if project.sector}} - <br>* 부문 : {{project.sector}} - {{/if}} - {{#if project.shipCount}} - <br>* 척수 : {{project.shipCount}}척 - {{/if}} - {{#if project.ownerName}} - <br>* 선주 : {{project.ownerName}} - {{/if}} - {{#if project.className}} - <br>* 선급 : {{project.className}} - {{/if}} - </p> - - - {{#if items}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 자재명</strong> - {{#each items}} - <br>* {{itemList}} ({{itemCode}}) - {{/each}} - {{#if rfq.materialCode}} - <br>* 자재그룹 코드 : {{rfq.materialCode}} - {{/if}} - </p> - {{else}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 자재명 : {{rfq.title}}</strong> - {{#if rfq.materialCode}} - <br>* 자재그룹 코드 : {{rfq.materialCode}} - {{/if}} - </p> - {{/if}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>4) 제출 벤더</strong> - <br>* 벤더명 : {{vendor.name}} - {{#if vendor.code}} - <br>* 벤더코드 : {{vendor.code}} - {{/if}} - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>5) 견적 금액 : {{quotation.currency}} {{quotation.totalPrice}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>6) 견적 유효기간 : {{quotation.validUntil}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>7) 제출일시 : {{quotation.submittedAt}}</strong> - </p> - {{#if quotation.remark}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>8) 벤더 특이사항</strong> - <br>{{quotation.remark}} - </p> - {{/if}} -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">나. 검토 및 선택 안내</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) 견적서 검토</strong> - <br>* 시스템에 접속하여 견적서 상세 내용을 확인하실 수 있습니다. - <br>* 견적 비교 기능을 통해 다른 벤더들과 비교 검토가 가능합니다. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 견적 선택/거절</strong> - <br>* 검토 완료 후 시스템에서 견적 선택 또는 거절 처리를 해주시기 바랍니다. - <br>* 선택/거절 시 벤더에게 자동으로 결과 통보 이메일이 발송됩니다. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 추가 문의</strong> - <br>* 견적 내용에 대해 추가 문의사항이 있는 경우 벤더와 직접 커뮤니케이션하실 수 있습니다. - <br>* 시스템의 메시지 기능을 이용해 주시기 바랍니다. - </p> -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">다. 처리 기한 안내</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) 견적 유효기간 : {{quotation.validUntil}}</strong> - <br>견적 유효기간 내에 검토 및 선택을 완료해 주시기 바랍니다. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 신속한 처리 요청</strong> - <br>* 벤더가 제출한 견적서에 대해 신속한 검토를 부탁드립니다. - <br>* 지연 시 벤더에게 별도 안내가 필요할 수 있습니다. - </p> -</div> - -<p> - <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;"> - 견적서 검토하기 - </a> -</p> - -<p style="font-size:14px; line-height:24px; margin-top:24px; color: #666;"> - {{companyName}} 기술영업시스템에서 자동 발송된 메일입니다. -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;">
+ 견적서 접수 알림 - RFQ NO. : #{{rfq.code}}
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 안녕하세요, <strong>{{manager.name}}</strong>님.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ <strong>{{vendor.name}}</strong>에서 견적서를 제출했습니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 견적서 검토 후 선택 여부를 결정해 주시기 바랍니다.
+ 시스템에서 견적서 상세 내용을 확인하실 수 있습니다.
+</p>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">가. 접수된 견적서 정보</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) RFQ 번호 : {{rfq.code}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 프로젝트 : {{project.name}}</strong>
+ <br>* 프로젝트 코드 : {{rfq.projectCode}}
+ {{#if project.sector}}
+ <br>* 부문 : {{project.sector}}
+ {{/if}}
+ {{#if project.shipCount}}
+ <br>* 척수 : {{project.shipCount}}척
+ {{/if}}
+ {{#if project.ownerName}}
+ <br>* 선주 : {{project.ownerName}}
+ {{/if}}
+ {{#if project.className}}
+ <br>* 선급 : {{project.className}}
+ {{/if}}
+ </p>
+
+
+ {{#if items}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 자재명</strong>
+ {{#each items}}
+ <br>* {{itemList}} ({{itemCode}})
+ {{/each}}
+ {{#if rfq.materialCode}}
+ <br>* 자재그룹 코드 : {{rfq.materialCode}}
+ {{/if}}
+ </p>
+ {{else}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 자재명 : {{rfq.title}}</strong>
+ {{#if rfq.materialCode}}
+ <br>* 자재그룹 코드 : {{rfq.materialCode}}
+ {{/if}}
+ </p>
+ {{/if}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>4) 제출 벤더</strong>
+ <br>* 벤더명 : {{vendor.name}}
+ {{#if vendor.code}}
+ <br>* 벤더코드 : {{vendor.code}}
+ {{/if}}
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>5) 견적 금액 : {{quotation.currency}} {{quotation.totalPrice}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>6) 견적 유효기간 : {{quotation.validUntil}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>7) 제출일시 : {{quotation.submittedAt}}</strong>
+ </p>
+ {{#if quotation.remark}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>8) 벤더 특이사항</strong>
+ <br>{{quotation.remark}}
+ </p>
+ {{/if}}
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">나. 검토 및 선택 안내</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) 견적서 검토</strong>
+ <br>* 시스템에 접속하여 견적서 상세 내용을 확인하실 수 있습니다.
+ <br>* 견적 비교 기능을 통해 다른 벤더들과 비교 검토가 가능합니다.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 견적 선택/거절</strong>
+ <br>* 검토 완료 후 시스템에서 견적 선택 또는 거절 처리를 해주시기 바랍니다.
+ <br>* 선택/거절 시 벤더에게 자동으로 결과 통보 이메일이 발송됩니다.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 추가 문의</strong>
+ <br>* 견적 내용에 대해 추가 문의사항이 있는 경우 벤더와 직접 커뮤니케이션하실 수 있습니다.
+ <br>* 시스템의 메시지 기능을 이용해 주시기 바랍니다.
+ </p>
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">다. 처리 기한 안내</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) 견적 유효기간 : {{quotation.validUntil}}</strong>
+ <br>견적 유효기간 내에 검토 및 선택을 완료해 주시기 바랍니다.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 신속한 처리 요청</strong>
+ <br>* 벤더가 제출한 견적서에 대해 신속한 검토를 부탁드립니다.
+ <br>* 지연 시 벤더에게 별도 안내가 필요할 수 있습니다.
+ </p>
+</div>
+
+<p>
+ <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;">
+ 견적서 검토하기
+ </a>
+</p>
+
+<p style="font-size:14px; line-height:24px; margin-top:24px; color: #666;">
+ {{companyName}} 기술영업시스템에서 자동 발송된 메일입니다.
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/tech-sales-quotation-submitted-vendor-ko.hbs b/lib/mail/templates/tech-sales-quotation-submitted-vendor-ko.hbs index 0bc39964..9775aebd 100644 --- a/lib/mail/templates/tech-sales-quotation-submitted-vendor-ko.hbs +++ b/lib/mail/templates/tech-sales-quotation-submitted-vendor-ko.hbs @@ -1,124 +1,165 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;"> - 견적서 제출 완료 확인서 - RFQ NO. : #{{rfq.code}} -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 안녕하세요, <strong>{{vendor.name}}</strong>님. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 귀하께서 제출하신 견적서가 성공적으로 접수되었음을 확인드립니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 제출해주신 견적서는 당사 기술영업 담당자가 검토 후 결과를 안내드릴 예정입니다. - 견적 검토 과정에서 추가 문의사항이 있을 경우 별도로 연락드리겠습니다. -</p> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">가. 제출된 견적서 정보</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) RFQ 번호 : {{rfq.code}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 프로젝트 : {{project.name}}</strong> - <br>* 프로젝트 코드 : {{rfq.projectCode}} - {{#if project.sector}} - <br>* 부문 : {{project.sector}} - {{/if}} - {{#if project.shipCount}} - <br>* 척수 : {{project.shipCount}}척 - {{/if}} - {{#if project.ownerName}} - <br>* 선주 : {{project.ownerName}} - {{/if}} - {{#if project.className}} - <br>* 선급 : {{project.className}} - {{/if}} - </p> - - - {{#if items}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 자재명</strong> - {{#each items}} - <br>* {{itemList}} ({{itemCode}}) - {{/each}} - {{#if rfq.materialCode}} - <br>* 자재그룹 코드 : {{rfq.materialCode}} - {{/if}} - </p> - {{else}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 자재명 : {{rfq.title}}</strong> - {{#if rfq.materialCode}} - <br>* 자재그룹 코드 : {{rfq.materialCode}} - {{/if}} - </p> - {{/if}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>4) 견적 금액 : {{quotation.currency}} {{quotation.totalPrice}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>5) 견적 유효기간 : {{quotation.validUntil}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>6) 제출일시 : {{quotation.submittedAt}}</strong> - </p> - {{#if quotation.remark}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>7) 특이사항</strong> - <br>{{quotation.remark}} - </p> - {{/if}} -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">나. 다음 단계 안내</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) 견적 검토 과정</strong> - <br>* 당사 기술영업 담당자가 제출하신 견적서를 검토합니다. - <br>* 검토 과정에서 추가 자료나 설명이 필요한 경우 연락드리겠습니다. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 결과 통보</strong> - <br>* 견적 검토 완료 후 선택 여부를 이메일로 안내드립니다. - <br>* 선택되신 경우 후속 절차에 대해 별도 안내드리겠습니다. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 문의사항</strong> - <br>* 담당자 : {{manager.name}} - <br>* 이메일 : {{manager.email}} - </p> -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">다. 유의사항</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) 견적서 제출이 완료되었습니다.</strong> - <br>견적서 수정이 필요한 경우 담당자에게 문의하시기 바랍니다. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 견적 유효기간을 준수해 주시기 바랍니다.</strong> - <br>유효기간 만료 전 견적 선택이 이루어지지 않을 경우, 재견적을 요청할 수 있습니다. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 제출하신 견적서는 기밀로 관리됩니다.</strong> - <br>견적 정보는 당사 내부 검토 목적으로만 사용됩니다. - </p> -</div> - -<p> - <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;"> - 견적서 현황 확인하기 - </a> -</p> - -<p style="font-size:14px; line-height:24px; margin-top:24px; color: #666;"> - 감사합니다.<br> - {{companyName}} 기술영업팀 -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;">
+ 견적서 제출 완료 확인서 - RFQ NO. : #{{rfq.code}}
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 안녕하세요, <strong>{{vendor.name}}</strong>님.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 귀하께서 제출하신 견적서가 성공적으로 접수되었음을 확인드립니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 제출해주신 견적서는 당사 기술영업 담당자가 검토 후 결과를 안내드릴 예정입니다.
+ 견적 검토 과정에서 추가 문의사항이 있을 경우 별도로 연락드리겠습니다.
+</p>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">가. 제출된 견적서 정보</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) RFQ 번호 : {{rfq.code}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 프로젝트 : {{project.name}}</strong>
+ <br>* 프로젝트 코드 : {{rfq.projectCode}}
+ {{#if project.sector}}
+ <br>* 부문 : {{project.sector}}
+ {{/if}}
+ {{#if project.shipCount}}
+ <br>* 척수 : {{project.shipCount}}척
+ {{/if}}
+ {{#if project.ownerName}}
+ <br>* 선주 : {{project.ownerName}}
+ {{/if}}
+ {{#if project.className}}
+ <br>* 선급 : {{project.className}}
+ {{/if}}
+ </p>
+
+
+ {{#if items}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 자재명</strong>
+ {{#each items}}
+ <br>* {{itemList}} ({{itemCode}})
+ {{/each}}
+ {{#if rfq.materialCode}}
+ <br>* 자재그룹 코드 : {{rfq.materialCode}}
+ {{/if}}
+ </p>
+ {{else}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 자재명 : {{rfq.title}}</strong>
+ {{#if rfq.materialCode}}
+ <br>* 자재그룹 코드 : {{rfq.materialCode}}
+ {{/if}}
+ </p>
+ {{/if}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>4) 견적 금액 : {{quotation.currency}} {{quotation.totalPrice}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>5) 견적 유효기간 : {{quotation.validUntil}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>6) 제출일시 : {{quotation.submittedAt}}</strong>
+ </p>
+ {{#if quotation.remark}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>7) 특이사항</strong>
+ <br>{{quotation.remark}}
+ </p>
+ {{/if}}
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">나. 다음 단계 안내</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) 견적 검토 과정</strong>
+ <br>* 당사 기술영업 담당자가 제출하신 견적서를 검토합니다.
+ <br>* 검토 과정에서 추가 자료나 설명이 필요한 경우 연락드리겠습니다.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 결과 통보</strong>
+ <br>* 견적 검토 완료 후 선택 여부를 이메일로 안내드립니다.
+ <br>* 선택되신 경우 후속 절차에 대해 별도 안내드리겠습니다.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 문의사항</strong>
+ <br>* 담당자 : {{manager.name}}
+ <br>* 이메일 : {{manager.email}}
+ </p>
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">다. 유의사항</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) 견적서 제출이 완료되었습니다.</strong>
+ <br>견적서 수정이 필요한 경우 담당자에게 문의하시기 바랍니다.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 견적 유효기간을 준수해 주시기 바랍니다.</strong>
+ <br>유효기간 만료 전 견적 선택이 이루어지지 않을 경우, 재견적을 요청할 수 있습니다.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 제출하신 견적서는 기밀로 관리됩니다.</strong>
+ <br>견적 정보는 당사 내부 검토 목적으로만 사용됩니다.
+ </p>
+</div>
+
+<p>
+ <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;">
+ 견적서 현황 확인하기
+ </a>
+</p>
+
+<p style="font-size:14px; line-height:24px; margin-top:24px; color: #666;">
+ 감사합니다.<br>
+ {{companyName}} 기술영업팀
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/tech-sales-rfq-invite-ko.hbs b/lib/mail/templates/tech-sales-rfq-invite-ko.hbs index d3ee0d8f..37521960 100644 --- a/lib/mail/templates/tech-sales-rfq-invite-ko.hbs +++ b/lib/mail/templates/tech-sales-rfq-invite-ko.hbs @@ -1,170 +1,211 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;"> - SHI 기술영업 RFQ NO. : #{{rfq.code}} -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 안녕하세요, <strong>{{vendor.name}}</strong>님. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 귀사의 일익 번창하심을 기원합니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 표제 품목에 대한 기술영업 견적을 요청하오니 하기 및 첨부 내용 확인하시어 견적서를 eVCP를 통해 제출 바랍니다. - 본 견적 요청은 프로젝트 수주를 위한 소요비용 추정 목적으로, 프로젝트 규모 및 자재명을 기준으로 견적을 산정해 주시기 바랍니다. - 또한, 귀사의 신제품 적용 방안이나, 당사 사양 및 공급 범위에 Deviation이 있는 경우 - 별도의 견적을 제출하시어 당사에서 적극 검토할 수 있도록 협조 바랍니다. - 귀사의 견적은 아래의 견적 마감일 이전에 당사로 제출 되어야하며, 견적 마감일 및 당사의 지연 통보없이 미 제출될 경우에는 대상에서 제외될 수 있습니다. -</p> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">가. 거래조건</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) 프로젝트 : {{project.name}}</strong> - <br>* 프로젝트 코드 : {{rfq.projectCode}} - {{#if project.sector}} - <br>* 부문 : {{project.sector}} - {{/if}} - {{#if project.shipCount}} - <br>* 척수 : {{project.shipCount}}척 - {{/if}} - {{#if project.ownerName}} - <br>* 선주 : {{project.ownerName}} - {{/if}} - {{#if project.className}} - <br>* 선급 : {{project.className}} - {{/if}} - </p> - - - - {{#if items}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 자재명</strong> - {{#each items}} - <br>* {{itemList}} ({{itemCode}}) - {{#if workType}}<br> - 작업유형: {{workType}}{{/if}} - {{#if shipType}}<br> - 선종: {{shipType}}{{/if}} - {{/each}} - {{#if rfq.materialCode}} - <br>* 자재그룹 코드 : {{rfq.materialCode}} - {{/if}} - </p> - {{else}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 자재명 : {{rfq.title}}</strong> - {{#if rfq.materialCode}} - <br>* 자재그룹 코드 : {{rfq.materialCode}} - {{/if}} - {{#if project.shipType}} - <br>* 선종 : {{project.shipType}} - {{/if}} - </p> - {{/if}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) Spec, & Scope of Supply : 첨부 사양서 참조</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>4) Class / Flag : {{#if project.className}}{{project.className}}{{else}}첨부 사양서 참조{{/if}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>5) 예상 납기일 : 프로젝트 일정에 따라 결정</strong> - <br>* 상세 납기는 조선소 스케쥴에 따라 변경될 수 있으며, 당사 기술영업/조달/현업/생산 부서와 협의하여 결정됨. - <br>* 안전보건에 관한 사항을 고려하여 납기(또는 계약기간)의 적정성을 검토하고, - <br>안전보건확보를 위해 납기의 조정이 필요한 경우 기간 조정을 신청하시기 바랍니다. - <br>* (당사 사업장 내에서 수행하는 작업이 포함된 계약) - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>6) Warranty : 선박 인도 후 12개월 시점까지 납품한 "자재" 또는 "용역"이 계약 내용과 동일함을 보증하며,</strong> - <br>Repair 시 6개월 추가되나, 총 인도 후 18개월을 넘지 않음. - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>7) 견적마감기한 : {{rfq.dueDate}}</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>8) 견적 유효기간 : 견적일로부터 90일간</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>9) 기타 일반사항은 삼성중공업 표준하도급기본계약서, 안전보건관리 약정서 및 자재 안전 납품/하역을 위한 표준규정에 준함.</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>10) 유의사항</strong> - <br>- 본 견적 요청은 프로젝트 수주를 위한 소요비용 추정 목적입니다. - <br>- 협력사는 견적 제출을 위해 소요되는 비용 일체를 부담하며, - <br> 견적 제출에 따른 별도 보상은 없습니다. - <br>- 제출된 견적은 향후 실제 발주 시 참고자료로 활용될 수 있으며, - <br> 이는 실제 발주를 보장하는 것은 아닙니다. - </p> -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">나. 견적 제출 내용</h2> - <p style="font-size:18px; line-height:24px; margin-bottom:24px;"> - <strong>응답은 아래 링크의 eVCP 시스템을 통해 제출하시기 바랍니다.</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) 견적 총액 (통화 명시 필수)</strong> - <br>* 예시: {{details.currency}} 100,000 또는 KRW 130,000,000 - <br>* 기본 통화: {{details.currency}} - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 견적 유효기간</strong> - <br>* 예시: 견적일로부터 90일간 유효 - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 기술사양서 및 제품 카탈로그 (선택사항)</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>4) 당사 사양에 대한 Deviation List (해당시)</strong> - <br style="color:red">* 별도 Deviation이 없는 경우 견적서 상에 명기 - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>5) 인증서 및 승인서류 (해당시)</strong> - </p> -</div> - -<div style="margin-bottom:24px;"> - <h2 style="font-size:20px; margin-bottom:12px;">다. 기술영업 특이사항</h2> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>1) 본 RFQ는 기술영업 부서에서 발송하는 견적 요청으로, 프로젝트 수주를 위한 소요비용 추정이 목적입니다.</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>2) 견적 산정 시 프로젝트 규모(척수, 선종)와 자재명을 기준으로 해주시기 바랍니다.</strong> - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>3) 기술적 문의사항은 담당자에게 직접 연락 바랍니다.</strong> - {{#if sender.fullName}} - <br>* 담당자 : {{sender.fullName}} - {{/if}} - {{#if sender.email}} - <br>* 이메일 : {{sender.email}} - {{/if}} - </p> - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>4) 견적서 제출은 반드시 eVCP 시스템을 통해 제출하시기 바랍니다.</strong> - <br>* 견적 코드: {{quotationCode}} - </p> - {{#if rfq.description}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px;"> - <strong>5) 추가 요청사항</strong> - <br>{{rfq.description}} - </p> - {{/if}} - {{#if isResend}} - <p style="font-size:16px; line-height:24px; margin-bottom:8px; color: #d73527;"> - <strong>※ 재전송 안내</strong> - <br>본 메일은 재전송된 RFQ입니다. 이전에 제출하신 견적이 있다면 수정 또는 재제출이 가능합니다. - </p> - {{/if}} -</div> - -<p> - <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;"> - 견적서 확인하기 - </a> -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; line-height:40px; margin-bottom:16px;">
+ SHI 기술영업 RFQ NO. : #{{rfq.code}}
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 안녕하세요, <strong>{{vendor.name}}</strong>님.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 귀사의 일익 번창하심을 기원합니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 표제 품목에 대한 기술영업 견적을 요청하오니 하기 및 첨부 내용 확인하시어 견적서를 eVCP를 통해 제출 바랍니다.
+ 본 견적 요청은 프로젝트 수주를 위한 소요비용 추정 목적으로, 프로젝트 규모 및 자재명을 기준으로 견적을 산정해 주시기 바랍니다.
+ 또한, 귀사의 신제품 적용 방안이나, 당사 사양 및 공급 범위에 Deviation이 있는 경우
+ 별도의 견적을 제출하시어 당사에서 적극 검토할 수 있도록 협조 바랍니다.
+ 귀사의 견적은 아래의 견적 마감일 이전에 당사로 제출 되어야하며, 견적 마감일 및 당사의 지연 통보없이 미 제출될 경우에는 대상에서 제외될 수 있습니다.
+</p>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">가. 거래조건</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) 프로젝트 : {{project.name}}</strong>
+ <br>* 프로젝트 코드 : {{rfq.projectCode}}
+ {{#if project.sector}}
+ <br>* 부문 : {{project.sector}}
+ {{/if}}
+ {{#if project.shipCount}}
+ <br>* 척수 : {{project.shipCount}}척
+ {{/if}}
+ {{#if project.ownerName}}
+ <br>* 선주 : {{project.ownerName}}
+ {{/if}}
+ {{#if project.className}}
+ <br>* 선급 : {{project.className}}
+ {{/if}}
+ </p>
+
+
+
+ {{#if items}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 자재명</strong>
+ {{#each items}}
+ <br>* {{itemList}} ({{itemCode}})
+ {{#if workType}}<br> - 작업유형: {{workType}}{{/if}}
+ {{#if shipType}}<br> - 선종: {{shipType}}{{/if}}
+ {{/each}}
+ {{#if rfq.materialCode}}
+ <br>* 자재그룹 코드 : {{rfq.materialCode}}
+ {{/if}}
+ </p>
+ {{else}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 자재명 : {{rfq.title}}</strong>
+ {{#if rfq.materialCode}}
+ <br>* 자재그룹 코드 : {{rfq.materialCode}}
+ {{/if}}
+ {{#if project.shipType}}
+ <br>* 선종 : {{project.shipType}}
+ {{/if}}
+ </p>
+ {{/if}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) Spec, & Scope of Supply : 첨부 사양서 참조</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>4) Class / Flag : {{#if project.className}}{{project.className}}{{else}}첨부 사양서 참조{{/if}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>5) 예상 납기일 : 프로젝트 일정에 따라 결정</strong>
+ <br>* 상세 납기는 조선소 스케쥴에 따라 변경될 수 있으며, 당사 기술영업/조달/현업/생산 부서와 협의하여 결정됨.
+ <br>* 안전보건에 관한 사항을 고려하여 납기(또는 계약기간)의 적정성을 검토하고,
+ <br>안전보건확보를 위해 납기의 조정이 필요한 경우 기간 조정을 신청하시기 바랍니다.
+ <br>* (당사 사업장 내에서 수행하는 작업이 포함된 계약)
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>6) Warranty : 선박 인도 후 12개월 시점까지 납품한 "자재" 또는 "용역"이 계약 내용과 동일함을 보증하며,</strong>
+ <br>Repair 시 6개월 추가되나, 총 인도 후 18개월을 넘지 않음.
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>7) 견적마감기한 : {{rfq.dueDate}}</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>8) 견적 유효기간 : 견적일로부터 90일간</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>9) 기타 일반사항은 삼성중공업 표준하도급기본계약서, 안전보건관리 약정서 및 자재 안전 납품/하역을 위한 표준규정에 준함.</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>10) 유의사항</strong>
+ <br>- 본 견적 요청은 프로젝트 수주를 위한 소요비용 추정 목적입니다.
+ <br>- 협력사는 견적 제출을 위해 소요되는 비용 일체를 부담하며,
+ <br> 견적 제출에 따른 별도 보상은 없습니다.
+ <br>- 제출된 견적은 향후 실제 발주 시 참고자료로 활용될 수 있으며,
+ <br> 이는 실제 발주를 보장하는 것은 아닙니다.
+ </p>
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">나. 견적 제출 내용</h2>
+ <p style="font-size:18px; line-height:24px; margin-bottom:24px;">
+ <strong>응답은 아래 링크의 eVCP 시스템을 통해 제출하시기 바랍니다.</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) 견적 총액 (통화 명시 필수)</strong>
+ <br>* 예시: {{details.currency}} 100,000 또는 KRW 130,000,000
+ <br>* 기본 통화: {{details.currency}}
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 견적 유효기간</strong>
+ <br>* 예시: 견적일로부터 90일간 유효
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 기술사양서 및 제품 카탈로그 (선택사항)</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>4) 당사 사양에 대한 Deviation List (해당시)</strong>
+ <br style="color:red">* 별도 Deviation이 없는 경우 견적서 상에 명기
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>5) 인증서 및 승인서류 (해당시)</strong>
+ </p>
+</div>
+
+<div style="margin-bottom:24px;">
+ <h2 style="font-size:20px; margin-bottom:12px;">다. 기술영업 특이사항</h2>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>1) 본 RFQ는 기술영업 부서에서 발송하는 견적 요청으로, 프로젝트 수주를 위한 소요비용 추정이 목적입니다.</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>2) 견적 산정 시 프로젝트 규모(척수, 선종)와 자재명을 기준으로 해주시기 바랍니다.</strong>
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>3) 기술적 문의사항은 담당자에게 직접 연락 바랍니다.</strong>
+ {{#if sender.fullName}}
+ <br>* 담당자 : {{sender.fullName}}
+ {{/if}}
+ {{#if sender.email}}
+ <br>* 이메일 : {{sender.email}}
+ {{/if}}
+ </p>
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>4) 견적서 제출은 반드시 eVCP 시스템을 통해 제출하시기 바랍니다.</strong>
+ <br>* 견적 코드: {{quotationCode}}
+ </p>
+ {{#if rfq.description}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px;">
+ <strong>5) 추가 요청사항</strong>
+ <br>{{rfq.description}}
+ </p>
+ {{/if}}
+ {{#if isResend}}
+ <p style="font-size:16px; line-height:24px; margin-bottom:8px; color: #d73527;">
+ <strong>※ 재전송 안내</strong>
+ <br>본 메일은 재전송된 RFQ입니다. 이전에 제출하신 견적이 있다면 수정 또는 재제출이 가능합니다.
+ </p>
+ {{/if}}
+</div>
+
+<p>
+ <a href="{{systemUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px;">
+ 견적서 확인하기
+ </a>
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/vendor-active.hbs b/lib/mail/templates/vendor-active.hbs index a2643f94..9f0dd00a 100644 --- a/lib/mail/templates/vendor-active.hbs +++ b/lib/mail/templates/vendor-active.hbs @@ -1,25 +1,66 @@ -{{> header logoUrl=logoUrl }} - -<h2 style="font-size:28px; margin-bottom:16px;">협력업체 등록이 완료되었습니다</h2> - -<p style="font-size:16px;">{{vendorName}} 귀하,</p> - -<p style="font-size:16px;">축하합니다! 귀사의 협력업체 등록이 완료되었으며 협력업체 정보가 당사 시스템에 성공적으로 등록되었습니다.</p> - -<p style="font-size:16px;">귀사의 협력업체 코드는 다음과 같습니다:</p> - -<div style="font-size:24px; font-weight:bold; letter-spacing:2px; background-color:#F1F5F9; padding:8px 16px; border-radius:4px; display:inline-block; margin:12px 0;"> - {{vendorCode}} -</div> - -<p style="font-size:1px;">이 코드를 사용하여 포털에 접속하고 계정을 관리할 수 있습니다.</p> - -<p style="text-align: center; margin: 25px 0;"> - <a href="{{portalUrl}}" target="_blank" style="display:inline-block; background-color:#163CC4; color:#ffffff; padding:10px 20px; text-decoration:none; border-radius:4px;">협력업체 포털 접속</a> -</p> - -<p style="font-size:16px;">문의사항이 있으시면 협력업체 관리팀에 연락해 주세요.</p> - -<p style="font-size:16px;">감사합니다.<br />eVCP 팀</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h2 style="font-size:28px; margin-bottom:16px;">협력업체 등록이 완료되었습니다</h2>
+
+<p style="font-size:16px;">{{vendorName}} 귀하,</p>
+
+<p style="font-size:16px;">축하합니다! 귀사의 협력업체 등록이 완료되었으며 협력업체 정보가 당사 시스템에 성공적으로 등록되었습니다.</p>
+
+<p style="font-size:16px;">귀사의 협력업체 코드는 다음과 같습니다:</p>
+
+<div style="font-size:24px; font-weight:bold; letter-spacing:2px; background-color:#F1F5F9; padding:8px 16px; border-radius:4px; display:inline-block; margin:12px 0;">
+ {{vendorCode}}
+</div>
+
+<p style="font-size:1px;">이 코드를 사용하여 포털에 접속하고 계정을 관리할 수 있습니다.</p>
+
+<p style="text-align: center; margin: 25px 0;">
+ <a href="{{portalUrl}}" target="_blank" style="display:inline-block; background-color:#163CC4; color:#ffffff; padding:10px 20px; text-decoration:none; border-radius:4px;">협력업체 포털 접속</a>
+</p>
+
+<p style="font-size:16px;">문의사항이 있으시면 협력업체 관리팀에 연락해 주세요.</p>
+
+<p style="font-size:16px;">감사합니다.<br />eVCP 팀</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/vendor-additional-info.hbs b/lib/mail/templates/vendor-additional-info.hbs index 17d9b130..227ba12f 100644 --- a/lib/mail/templates/vendor-additional-info.hbs +++ b/lib/mail/templates/vendor-additional-info.hbs @@ -1,19 +1,59 @@ -{{#> layout title=(t "email.additionalInfo.title")}} - <p>{{t "email.additionalInfo.greeting" vendorName=vendorName}}</p> - - <p>{{t "email.additionalInfo.messageP1"}}</p> - - <p>{{t "email.additionalInfo.messageP2"}}</p> - - <p>{{t "email.additionalInfo.messageP3"}}</p> - - <div class="button-container"> - <a href="{{vendorInfoUrl}}" class="button">{{t "email.additionalInfo.buttonText"}}</a> - </div> - - <p>{{t "email.additionalInfo.messageP4"}}</p> - - <p>{{t "email.additionalInfo.closing"}}</p> - - <p>EVCP Team</p> -{{/layout}}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 추가 정보 요청</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f5f5f5;
+ font-family: Arial, sans-serif;
+ color: #111827;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ border: 1px solid #e5e7eb;
+ border-radius: 6px;
+ padding: 24px;
+ }
+ .button-container {
+ text-align: center;
+ margin: 25px 0;
+ }
+ .button {
+ display: inline-block;
+ background-color: #163CC4;
+ color: #ffffff !important;
+ padding: 12px 20px;
+ text-decoration: none;
+ border-radius: 4px;
+ font-weight: bold;
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+ <p>{{t "email.additionalInfo.greeting" vendorName=vendorName}}</p>
+
+ <p>{{t "email.additionalInfo.messageP1"}}</p>
+
+ <p>{{t "email.additionalInfo.messageP2"}}</p>
+
+ <p>{{t "email.additionalInfo.messageP3"}}</p>
+
+ <div class="button-container">
+ <a href="{{vendorInfoUrl}}" class="button">{{t "email.additionalInfo.buttonText"}}</a>
+ </div>
+
+ <p>{{t "email.additionalInfo.messageP4"}}</p>
+
+ <p>{{t "email.additionalInfo.closing"}}</p>
+
+ <p>EVCP Team</p>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/vendor-invitation.hbs b/lib/mail/templates/vendor-invitation.hbs index 955bcde4..d80f223a 100644 --- a/lib/mail/templates/vendor-invitation.hbs +++ b/lib/mail/templates/vendor-invitation.hbs @@ -1,38 +1,79 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="font-size:28px; margin-bottom:16px;"> - 협력업체 등록 초대 -</h1> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - {{companyName}} 귀하, -</p> - -<p style="font-size:16px; line-height:32px; margin-bottom:16px;"> - 귀사를 저희 eVCP 시스템에 협력업체로 등록하도록 초대합니다. 등록된 협력업체로서, 귀사는 제품 관리, 문의 수신 및 조달 프로세스 참여가 가능한 저희 플랫폼에 접근할 수 있습니다. -</p> - -<div style="background-color: #f3f4f6; border-radius: 4px; padding: 15px; margin: 20px 0;"> - <p style="font-size:16px; margin:4px 0;">등록을 완료하려면 아래 버튼을 클릭해 주세요. 이 버튼을 클릭하면 계정을 설정하고 필요한 정보를 제공할 수 있는 보안 등록 포털로 이동합니다.</p> -</div> - -<p style="text-align: center;"> - <a href="{{registrationLink}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;"> - 지금 등록하기 - </a> -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 이 초대 링크는 14일 후에 만료됩니다. 등록 과정에서 문제가 발생하면 support@evcp.com으로 지원팀에 문의해 주세요. -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 귀사와 함께 일하고 귀사가 저희 협력업체 네트워크의 일원이 되기를 기대합니다. -</p> - -<p style="font-size:16px; line-height:32px; margin-top:16px;"> - 감사합니다,<br> - eVCP 팀 -</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=currentYear }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; margin-bottom:16px;">
+ 협력업체 등록 초대
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{companyName}} 귀하,
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ 귀사를 저희 eVCP 시스템에 협력업체로 등록하도록 초대합니다. 등록된 협력업체로서, 귀사는 제품 관리, 문의 수신 및 조달 프로세스 참여가 가능한 저희 플랫폼에 접근할 수 있습니다.
+</p>
+
+<div style="background-color: #f3f4f6; border-radius: 4px; padding: 15px; margin: 20px 0;">
+ <p style="font-size:16px; margin:4px 0;">등록을 완료하려면 아래 버튼을 클릭해 주세요. 이 버튼을 클릭하면 계정을 설정하고 필요한 정보를 제공할 수 있는 보안 등록 포털로 이동합니다.</p>
+</div>
+
+<p style="text-align: center;">
+ <a href="{{registrationLink}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;">
+ 지금 등록하기
+ </a>
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 이 초대 링크는 14일 후에 만료됩니다. 등록 과정에서 문제가 발생하면 support@evcp.com으로 지원팀에 문의해 주세요.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 귀사와 함께 일하고 귀사가 저희 협력업체 네트워크의 일원이 되기를 기대합니다.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-top:16px;">
+ 감사합니다,<br>
+ eVCP 팀
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/vendor-pq-comment.hbs b/lib/mail/templates/vendor-pq-comment.hbs index a5c32375..13c3101f 100644 --- a/lib/mail/templates/vendor-pq-comment.hbs +++ b/lib/mail/templates/vendor-pq-comment.hbs @@ -1,41 +1,82 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="text-align:center; font-size:28px; margin-bottom:20px;">PQ 검토 의견</h1> - -<p style="font-size:16px;">안녕하세요 {{name}} ({{vendorCode}})님,</p> - -<p style="font-size:16px;">PQ 정보를 제출해 주셔서 감사합니다. 검토팀이 초기 검토를 완료하였으며 일부 수정이나 추가 정보를 요청드립니다.</p> - -<p style="font-size:16px;"><span style="color:#d14; font-weight:bold;">조치 필요:</span> 계정에 로그인하셔서 아래 의견을 바탕으로 PQ 제출 내용을 업데이트해 주세요.</p> - -{{#if hasGeneralComment}} -<div style="margin:20px 0; padding:15px; background-color:#f9f9f9; border-left:4px solid #0071bc;"> - <h3>일반 의견:</h3> - <p>{{generalComment}}</p> -</div> -{{/if}} - -<div style="margin:20px 0; padding:15px; background-color:#f9f9f9; border-left:4px solid #0071bc;"> - <h3>세부 항목 의견 ({{commentCount}}개):</h3> - {{#each comments}} - <div style="margin-bottom:15px; border-bottom:1px solid #eee; padding-bottom:15px;"> - <div> - <span style="font-weight:bold; color:#0071bc; display:inline-block; min-width:60px;">{{code}}</span> - <span style="font-weight:bold; color:#333;">{{checkPoint}}</span> - </div> - <p>{{text}}</p> - </div> - {{/each}} -</div> - -<p style="font-size:16px;">위 의견을 검토하시고 PQ 제출 내용을 업데이트해 주세요.</p> - -<div style="text-align:center; margin:20px 0;"> - <a href="{{loginUrl}}" class="btn" style="padding:10px 20px; font-size:16px; background-color:#0071bc; color:#fff; text-decoration:none; border-radius:4px;">로그인하여 PQ 업데이트하기</a> -</div> - -<p style="font-size:16px;">문의사항이 있으시면 지원팀에 문의해 주세요.</p> - -<p style="font-size:16px;">감사합니다,<br />eVCP 팀</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=currentYear }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="text-align:center; font-size:28px; margin-bottom:20px;">PQ 검토 의견</h1>
+
+<p style="font-size:16px;">안녕하세요 {{name}} ({{vendorCode}})님,</p>
+
+<p style="font-size:16px;">PQ 정보를 제출해 주셔서 감사합니다. 검토팀이 초기 검토를 완료하였으며 일부 수정이나 추가 정보를 요청드립니다.</p>
+
+<p style="font-size:16px;"><span style="color:#d14; font-weight:bold;">조치 필요:</span> 계정에 로그인하셔서 아래 의견을 바탕으로 PQ 제출 내용을 업데이트해 주세요.</p>
+
+{{#if hasGeneralComment}}
+<div style="margin:20px 0; padding:15px; background-color:#f9f9f9; border-left:4px solid #0071bc;">
+ <h3>일반 의견:</h3>
+ <p>{{generalComment}}</p>
+</div>
+{{/if}}
+
+<div style="margin:20px 0; padding:15px; background-color:#f9f9f9; border-left:4px solid #0071bc;">
+ <h3>세부 항목 의견 ({{commentCount}}개):</h3>
+ {{#each comments}}
+ <div style="margin-bottom:15px; border-bottom:1px solid #eee; padding-bottom:15px;">
+ <div>
+ <span style="font-weight:bold; color:#0071bc; display:inline-block; min-width:60px;">{{code}}</span>
+ <span style="font-weight:bold; color:#333;">{{checkPoint}}</span>
+ </div>
+ <p>{{text}}</p>
+ </div>
+ {{/each}}
+</div>
+
+<p style="font-size:16px;">위 의견을 검토하시고 PQ 제출 내용을 업데이트해 주세요.</p>
+
+<div style="text-align:center; margin:20px 0;">
+ <a href="{{loginUrl}}" class="btn" style="padding:10px 20px; font-size:16px; background-color:#0071bc; color:#fff; text-decoration:none; border-radius:4px;">로그인하여 PQ 업데이트하기</a>
+</div>
+
+<p style="font-size:16px;">문의사항이 있으시면 지원팀에 문의해 주세요.</p>
+
+<p style="font-size:16px;">감사합니다,<br />eVCP 팀</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/vendor-pq-status.hbs b/lib/mail/templates/vendor-pq-status.hbs index bbd0c326..42af0705 100644 --- a/lib/mail/templates/vendor-pq-status.hbs +++ b/lib/mail/templates/vendor-pq-status.hbs @@ -1,23 +1,64 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="text-align:center; font-size:28px; margin-bottom:20px;">업체 PQ 상태 업데이트</h1> - -<p style="font-size:16px;">안녕하세요 {{name}}님,</p> - -<p style="font-size:16px;"> - 귀사의 업체 상태가 <strong>{{status}}</strong>로 업데이트되었습니다. -</p> - -<p style="font-size:16px;"> - 자세한 내용을 확인하고 추가 조치를 취하시려면 로그인해 주세요: - <br /> - <a href="{{loginUrl}}" target="_blank" style="color:#163CC4; text-decoration:underline;"> - 포털로 이동 - </a> -</p> - -<p style="font-size:16px;">문의사항이 있으시면 언제든지 연락해 주세요.</p> - -<p style="font-size:16px;">감사합니다,<br/>eVCP 팀</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="text-align:center; font-size:28px; margin-bottom:20px;">업체 PQ 상태 업데이트</h1>
+
+<p style="font-size:16px;">안녕하세요 {{name}}님,</p>
+
+<p style="font-size:16px;">
+ 귀사의 업체 상태가 <strong>{{status}}</strong>로 업데이트되었습니다.
+</p>
+
+<p style="font-size:16px;">
+ 자세한 내용을 확인하고 추가 조치를 취하시려면 로그인해 주세요:
+ <br />
+ <a href="{{loginUrl}}" target="_blank" style="color:#163CC4; text-decoration:underline;">
+ 포털로 이동
+ </a>
+</p>
+
+<p style="font-size:16px;">문의사항이 있으시면 언제든지 연락해 주세요.</p>
+
+<p style="font-size:16px;">감사합니다,<br/>eVCP 팀</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/vendor-project-pq-status.hbs b/lib/mail/templates/vendor-project-pq-status.hbs index 5b9efc3a..20c36fa4 100644 --- a/lib/mail/templates/vendor-project-pq-status.hbs +++ b/lib/mail/templates/vendor-project-pq-status.hbs @@ -1,42 +1,83 @@ -{{> header logoUrl=logoUrl }} - -<h1 style="text-align:center; font-size:28px; margin-bottom:20px;"> 프로젝트 PQ 상태 업데이트</h1> - -<p style="font-size:16px;">안녕하세요 {{name}}님,</p> - -<p style="font-size:16px;"> - <strong>{{projectName}}</strong>에 대한 귀사의 상태가 <strong>{{status}}</strong>로 업데이트되었습니다. -</p> - -{{#if hasRejectionReason}} -<p style="font-size:16px; padding:15px; background-color:#f8f8f8; border-left:4px solid #e74c3c;"> - <strong>거절 사유:</strong><br/> - {{rejectionReason}} -</p> -{{/if}} - -{{#if approvalDate}} -<p style="font-size:16px;"> - <strong>승인 날짜:</strong> {{approvalDate}} -</p> -{{/if}} - -{{#if rejectionDate}} -<p style="font-size:16px;"> - <strong>거절 날짜:</strong> {{rejectionDate}} -</p> -{{/if}} - -<p style="font-size:16px;"> - 자세한 내용을 확인하고 추가 조치를 취하시려면 로그인해 주세요: - <br /> - <a href="{{loginUrl}}" target="_blank" style="color:#163CC4; text-decoration:underline;"> - 포털로 이동 - </a> -</p> - -<p style="font-size:16px;">문의사항이 있으시면 언제든지 연락해 주세요.</p> - -<p style="font-size:16px;">감사합니다,<br/>eVCP 팀</p> - -{{> footer logoUrl=logoUrl companyName=companyName year=year }}
\ No newline at end of file +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="text-align:center; font-size:28px; margin-bottom:20px;"> 프로젝트 PQ 상태 업데이트</h1>
+
+<p style="font-size:16px;">안녕하세요 {{name}}님,</p>
+
+<p style="font-size:16px;">
+ <strong>{{projectName}}</strong>에 대한 귀사의 상태가 <strong>{{status}}</strong>로 업데이트되었습니다.
+</p>
+
+{{#if hasRejectionReason}}
+<p style="font-size:16px; padding:15px; background-color:#f8f8f8; border-left:4px solid #e74c3c;">
+ <strong>거절 사유:</strong><br/>
+ {{rejectionReason}}
+</p>
+{{/if}}
+
+{{#if approvalDate}}
+<p style="font-size:16px;">
+ <strong>승인 날짜:</strong> {{approvalDate}}
+</p>
+{{/if}}
+
+{{#if rejectionDate}}
+<p style="font-size:16px;">
+ <strong>거절 날짜:</strong> {{rejectionDate}}
+</p>
+{{/if}}
+
+<p style="font-size:16px;">
+ 자세한 내용을 확인하고 추가 조치를 취하시려면 로그인해 주세요:
+ <br />
+ <a href="{{loginUrl}}" target="_blank" style="color:#163CC4; text-decoration:underline;">
+ 포털로 이동
+ </a>
+</p>
+
+<p style="font-size:16px;">문의사항이 있으시면 언제든지 연락해 주세요.</p>
+
+<p style="font-size:16px;">감사합니다,<br/>eVCP 팀</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file diff --git a/lib/mail/templates/vendor-user-created.hbs b/lib/mail/templates/vendor-user-created.hbs new file mode 100644 index 00000000..d397b1b2 --- /dev/null +++ b/lib/mail/templates/vendor-user-created.hbs @@ -0,0 +1,66 @@ +<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>eVCP 메일</title>
+ <style>
+ body {
+ margin: 0 !important;
+ padding: 20px !important;
+ background-color: #f4f4f4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ }
+ .email-container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ }
+ </style>
+</head>
+<body>
+ <div class="email-container">
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px; border-bottom:1px solid #163CC4; padding-bottom:16px;">
+ <tr>
+ <td align="center">
+ <span style="display: block; text-align: left; color: #163CC4; font-weight: bold; font-size: 32px;">eVCP</span>
+ </td>
+ </tr>
+</table>
+
+<h1 style="font-size:28px; margin-bottom:16px;">
+ {{t "vendorUserCreated.title" lng=language}}
+</h1>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{t "vendorUserCreated.greeting" lng=language}}, <strong>{{name}}</strong>.
+</p>
+
+<p style="font-size:16px; line-height:32px; margin-bottom:16px;">
+ {{t "vendorUserCreated.body1" lng=language}}
+</p>
+
+<p>
+ <a href="{{loginUrl}}" target="_blank" style="display: inline-block; width: 250px; padding: 12px 20px; background-color: #163CC4; color: #ffffff !important; text-decoration: none; border-radius: 8px; text-align: center; line-height: 28px; margin-top: 16px;">
+ {{t "vendorUserCreated.loginCTA" lng=language}}
+ </a>
+</p>
+
+<p style="font-size:16px; line-height:24px; margin-top:16px;">
+ {{t "vendorUserCreated.supportMsg" lng=language}}
+</p>
+
+<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:32px; border-top:1px solid #e5e7eb; padding-top:16px;">
+ <tr>
+ <td align="center">
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">© {{currentYear}} EVCP. {{t "email.vendor.invitation.copyright"}}</p>
+ <p style="font-size:16px; color:#6b7280; margin:4px 0;">{{t "email.vendor.invitation.no_reply"}}</p>
+ </td>
+ </tr>
+</table>
+ </div>
+</body>
+</html>
\ No newline at end of file |
