summaryrefslogtreecommitdiff
path: root/lib/mail/templates
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mail/templates')
-rw-r--r--lib/mail/templates/custom-rfq-invitation.hbs332
1 files changed, 332 insertions, 0 deletions
diff --git a/lib/mail/templates/custom-rfq-invitation.hbs b/lib/mail/templates/custom-rfq-invitation.hbs
new file mode 100644
index 00000000..9303035b
--- /dev/null
+++ b/lib/mail/templates/custom-rfq-invitation.hbs
@@ -0,0 +1,332 @@
+<!DOCTYPE html>
+<html lang="{{language}}">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>RFQ 견적 μš”μ²­</title>
+ <style>
+ body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
+ line-height: 1.8;
+ color: #333;
+ max-width: 900px;
+ margin: 0 auto;
+ padding: 20px;
+ background-color: #f8fafc;
+ }
+ .container {
+ background-color: white;
+ border-radius: 12px;
+ padding: 40px;
+ box-shadow: 0 4px 20px rgba(0,0,0,0.08);
+ border: 1px solid #e2e8f0;
+ }
+ .header {
+ border-bottom: 4px solid #1e40af;
+ padding-bottom: 30px;
+ margin-bottom: 40px;
+ text-align: center;
+ }
+ .company-logo {
+ font-size: 28px;
+ font-weight: bold;
+ color: #1e40af;
+ margin-bottom: 10px;
+ letter-spacing: -0.5px;
+ }
+ .greeting {
+ font-size: 18px;
+ color: #1f2937;
+ margin-bottom: 30px;
+ line-height: 1.6;
+ }
+ .rfq-info {
+ background: linear-gradient(135deg, #3b82f6 0%, #1e40af 100%);
+ color: white;
+ padding: 25px;
+ border-radius: 10px;
+ margin: 30px 0;
+ text-align: center;
+ }
+ .rfq-title {
+ font-size: 24px;
+ font-weight: bold;
+ margin-bottom: 10px;
+ }
+ .rfq-code {
+ font-size: 18px;
+ font-weight: 600;
+ opacity: 0.9;
+ }
+ .project-section, .rfq-section, .contract-section, .notice-section {
+ margin: 30px 0;
+ padding: 25px;
+ background-color: #f8fafc;
+ border-radius: 8px;
+ border-left: 5px solid #3b82f6;
+ }
+ .section-title {
+ font-size: 20px;
+ font-weight: bold;
+ color: #1e40af;
+ margin-bottom: 20px;
+ padding-bottom: 10px;
+ border-bottom: 2px solid #e2e8f0;
+ }
+ .info-grid {
+ display: grid;
+ grid-template-columns: 1fr 2fr;
+ gap: 15px;
+ margin: 20px 0;
+ }
+ .info-item {
+ display: flex;
+ margin-bottom: 12px;
+ }
+ .info-label {
+ font-weight: 600;
+ color: #4b5563;
+ min-width: 120px;
+ margin-right: 15px;
+ }
+ .info-value {
+ color: #111827;
+ flex: 1;
+ }
+ .warranty-box {
+ background-color: #f0f9ff;
+ border: 2px solid #3b82f6;
+ padding: 20px;
+ border-radius: 8px;
+ margin: 20px 0;
+ font-style: italic;
+ }
+ .requirements-list {
+ background-color: #fef3c7;
+ border-left: 4px solid #f59e0b;
+ padding: 20px;
+ margin: 20px 0;
+ border-radius: 6px;
+ }
+ .requirements-list ul {
+ margin: 0;
+ padding-left: 20px;
+ }
+ .requirements-list li {
+ margin: 8px 0;
+ line-height: 1.6;
+ }
+ .contract-badges {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ margin: 15px 0;
+ }
+ .contract-badge {
+ background-color: #dcfce7;
+ color: #166534;
+ padding: 8px 16px;
+ border-radius: 20px;
+ font-size: 14px;
+ font-weight: 600;
+ border: 2px solid #bbf7d0;
+ }
+ .contract-badge::before {
+ content: "πŸ“„ ";
+ }
+ .notice-section {
+ background-color: #fef2f2;
+ border-left-color: #ef4444;
+ border: 2px solid #fecaca;
+ }
+ .notice-list {
+ list-style: disc;
+ padding-left: 20px;
+ margin: 15px 0;
+ }
+ .notice-list li {
+ margin: 10px 0;
+ line-height: 1.6;
+ color: #7f1d1d;
+ }
+ .closing {
+ margin-top: 40px;
+ padding: 30px;
+ background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
+ border-radius: 10px;
+ text-align: center;
+ font-style: italic;
+ color: #4b5563;
+ }
+ .highlight-arrow {
+ font-size: 18px;
+ font-weight: bold;
+ color: #dc2626;
+ text-align: center;
+ margin: 20px 0;
+ background-color: #fef2f2;
+ padding: 10px;
+ border-radius: 6px;
+ display: inline-block;
+ }
+ .footer-note {
+ margin-top: 30px;
+ padding: 20px;
+ background-color: #f9fafb;
+ border-radius: 6px;
+ font-size: 14px;
+ color: #6b7280;
+ border: 1px solid #e5e7eb;
+ }
+ </style>
+</head>
+<body>
+ <div class="container">
+ <!-- Header -->
+ <div class="header">
+ <div class="company-logo">{{t 'email.company_name'}}</div>
+ </div>
+
+ <!-- Greeting -->
+ <div class="greeting">
+ μ•ˆλ…•ν•˜μ„Έμš”.<br><br>
+ 귀사 일읡 λ²ˆμ°½ν•˜μ‹¬μ„ κΈ°μ›ν•©λ‹ˆλ‹€.<br><br>
+ νμ‚¬λŠ” 귀사와 ν‘œμ œ ν”„λ‘œμ νŠΈμ˜ ν’ˆλͺ©μ— λŒ€ν•œ 거래λ₯Ό μœ„ν•΄<br>
+ λ‹€μŒ ν’ˆλͺ©μ— λŒ€ν•΄ κ·€μ‚¬μ˜ 견적 μ œμΆœμ„ μš”μ²­ν•˜μ˜€λ‹ˆ μ•„λž˜ λ‚΄μš© 및 당사 μ‹œμŠ€ν…œ μ ‘μ†ν•˜μ‹œμ–΄<br>
+ 견적의 상세 λ‚΄μš© ν™•μΈν•˜μ‹  λ’€ κ²¬μ λ§ˆκ°μΌκΉŒμ§€ 견적 제좜 λ°”λžλ‹ˆλ‹€.<br><br>
+ κ·€μ‚¬μ˜ 견적은 λ°˜λ“œμ‹œ 견적마감일 이전에 νμ‚¬λ‘œ μ œμΆœλ˜μ–΄μ•Ό ν•˜λ©°,<br>
+ 견적마감일 μ „ λ³„λ„μ˜ μ§€μ—° 톡보 없이 미제좜될 κ²½μš°μ—λŠ” λŒ€μƒμ—μ„œ μ œμ™Έλ  수 μžˆμŠ΅λ‹ˆλ‹€.
+ </div>
+
+ <!-- RFQ Information -->
+ <div class="rfq-info">
+ <div class="rfq-title">{{rfqTitle}}</div>
+ <div class="rfq-code">RFQ No: {{rfqCode}}</div>
+ </div>
+
+ <!-- 1. ν”„λ‘œμ νŠΈ 정보 -->
+ <div class="project-section">
+ <div class="section-title">1. ν”„λ‘œμ νŠΈ 정보</div>
+ <div class="info-grid">
+ <div class="info-item">
+ <div class="info-label">ν”„λ‘œμ νŠΈμ •λ³΄</div>
+ <div class="info-value">[{{projectCode}}] {{projectName}}</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">고객정보</div>
+ <div class="info-value">{{customerName}} ({{customerCode}})</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">μ„ μ’…</div>
+ <div class="info-value">{{shipType}} ({{shipClass}})</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">μ²™μˆ˜</div>
+ <div class="info-value">{{shipCount}}μ²™</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">μ„ κΈ‰</div>
+ <div class="info-value">{{projectFlag}}</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">ꡭ적</div>
+ <div class="info-value">{{flag}}</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">κ³„μ•½λ°œνš¨μΌ</div>
+ <div class="info-value">{{contractStartDate}} - {{contractEndDate}}</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">Key Event</div>
+ <div class="info-value">(S/C) {{scDate}} - (D/L) {{dlDate}}</div>
+ </div>
+ </div>
+ </div>
+
+ <!-- 2. κ²¬μ μš”μ²­ 정보 -->
+ <div class="rfq-section">
+ <div class="section-title">2. κ²¬μ μš”μ²­ 정보</div>
+ <div class="info-grid">
+ <div class="info-item">
+ <div class="info-label">PKG 정보</div>
+ <div class="info-value">[{{packageNo}}] {{packageName}}</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">자재그룹 정보</div>
+ <div class="info-value">[{{materialGroup}}] {{materialGroupDesc}}</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">ν’ˆλͺ©</div>
+ <div class="info-value">{{#if itemCode}}{{itemCode}} - {{/if}}{{itemName}}</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">ν’ˆλͺ© 수</div>
+ <div class="info-value">{{itemCount}}개</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">PR 번호</div>
+ <div class="info-value">{{#if prNumber}}{{prNumber}}{{else}}ν•΄λ‹Ήμ—†μŒ{{/if}}</div>
+ </div>
+ <div class="info-item">
+ <div class="info-label">PR λ°œν–‰μΌ</div>
+ <div class="info-value">{{#if prIssueDate}}{{prIssueDate}}{{else}}ν•΄λ‹Ήμ—†μŒ{{/if}}</div>
+ </div>
+ </div>
+
+ <div class="warranty-box">
+ <strong>Warranty</strong> {{warrantyDescription}}<br>
+ {{repairDescription}}<br>
+ {{totalWarrantyDescription}}
+ </div>
+
+ <div class="requirements-list">
+ <strong>ν•„μˆ˜μ œμΆœμ •λ³΄</strong>
+ <ul>
+ {{#each requiredDocuments}}
+ <li>{{this}}</li>
+ {{/each}}
+ </ul>
+ </div>
+ </div>
+
+ <!-- 3. ν•„μˆ˜ 기본계약 -->
+ <div class="contract-section">
+ <div class="section-title">3. ν•„μˆ˜ 기본계약</div>
+ <div class="contract-badges">
+ {{#if contractRequirements.hasNda}}<span class="contract-badge">{{contractRequirements.ndaDescription}}</span>{{/if}}
+ {{#if contractRequirements.hasGeneralGtc}}<span class="contract-badge">{{contractRequirements.generalGtcDescription}}</span>{{/if}}
+ {{#if contractRequirements.hasProjectGtc}}<span class="contract-badge">{{contractRequirements.projectGtcDescription}}</span>{{/if}}
+ {{#if contractRequirements.hasAgreement}}<span class="contract-badge">{{contractRequirements.agreementDescription}}</span>{{/if}}
+ </div>
+
+ </div>
+
+ <!-- 4. μœ μ˜μ‚¬ν•­ -->
+ <div class="notice-section">
+ <div class="section-title">4. μœ μ˜μ‚¬ν•­</div>
+ <ul class="notice-list">
+ <li>λ°œμ£ΌμžλŠ” μ΅œμ €κ°€ 견적을 μ œμΆœν•˜μ§€ μ•Šμ€ ν˜‘λ ₯사λ₯Ό μ„ μ •ν•  수 있으며, 견적의 일뢀 λ˜λŠ” μ „λΆ€λ₯Ό μŠΉμΈν•˜κ±°λ‚˜ κ±°μ ˆν•  수 있고 κ±°λΆ€ν•˜λŠ” 경우 별도 톡보할 μ˜λ¬΄κ°€ μ—†λ‹€. λ˜ν•œ, μ΅œμ’… νƒˆλ½ 사싀을 톡보할 μ˜λ¬΄λ„ μ—†λ‹€.</li>
+ <li>ν˜‘λ ₯μ‚¬λŠ” 견적 μ œμΆœμ„ μœ„ν•΄ μ†Œμš”λ˜λŠ” λΉ„μš© 일체λ₯Ό λΆ€λ‹΄ν•˜λ©°, μ΅œμ’… κ³„μ•½μžλ‘œ μ„ μ •λ˜μ§€ λͺ»ν•œ κ²½μš°μ—λ„ λ°œμ£Όμžμ—κ²Œ 보상을 청ꡬ할 수 μ—†λ‹€. λ˜ν•œ, μ„ μ£Ό 승인쑰건으둜 μ„ μ •λœ ν˜‘λ ₯μ‚¬λŠ” λ°˜λ“œμ‹œ μ„ μ£Ό μŠΉμΈμ„ λ“ν•œ ν›„ μž‘μ—…μ— μ°©μˆ˜ν•˜μ—¬μ•Ό ν•˜λ©°, 승인 거절 μ‹œ 계약은 λ―Έ 체결, ν•΄μ œλ  수 있고 이 경우 ν˜‘λ ₯μ‚¬λŠ” μ–΄λ– ν•œ 보상도 청ꡬ할 수 μ—†λ‹€.</li>
+ </ul>
+ </div>
+
+ <!-- Closing -->
+ <div class="closing">
+ 이번 기회λ₯Ό ν†΅ν•˜μ—¬ κ·€μ‚¬μ™€μ˜ ν˜‘μ—…μœΌλ‘œ λ‹€κ°€μ˜¬ 미래 μ‘°μ„ /ν•΄μ–‘μ‚°μ—… μ‹œμž₯μ—μ„œ ν•¨κ»˜ μ„±μž₯ν•΄ λ‚˜κ°ˆ 수 있기λ₯Ό κΈ°λŒ€ν•©λ‹ˆλ‹€.
+ </div>
+
+ <!-- Footer Note -->
+ <div class="footer-note">
+ <p><strong>πŸ“§ λ°œμ†‘ 정보:</strong></p>
+ <p>μˆ˜μ‹ : {{vendorName}} ({{vendorCountry}})</p>
+ <p>λ°œμ‹ : {{companyName}} {{picName}} ν”„λ‘œ {{picTeam}}</p>
+ <p>견적마감일: {{formattedDueDate}}</p>
+ <p>λ°œμ†‘μΌμ‹œ: {{formatDate now 'YYYY-MM-DD HH:mm:ss'}}</p>
+ <p>μ‹œμŠ€ν…œ: {{systemName}}</p>
+ {{#if hasAttachments}}
+ <p>μ²¨λΆ€νŒŒμΌ: {{attachmentsCount}}개 포함</p>
+ {{/if}}
+ </div>
+ </div>
+</body>
+</html>