10 KiB
10 KiB
Dealer Claim Email Templates - Implementation Summary
✅ All 5 Templates Created and Integrated
All 5 new email templates for the dealer claim workflow have been successfully created and integrated into the notification system.
📧 Created Templates
1. Dealer Proposal Submitted ✅
- File:
dealerProposalSubmitted.template.ts - Notification Type:
proposal_submitted - Email Type:
DEALER_PROPOSAL_SUBMITTED - When: Step 1 - Dealer submits proposal
- Recipients: Initiator and next approver
- Features:
- Shows proposal budget, expected completion date
- Cost breakdown table (if available)
- Dealer comments
- Next approver information
2. Activity Created ✅
- File:
activityCreated.template.ts - Notification Type:
activity_created - Email Type:
ACTIVITY_CREATED - When: After Step 3 approval - Activity is created
- Recipients: Dealer, Initiator, Department Lead
- Features:
- Activity name, type, date, location
- Dealer information
- IO number (if available)
- Next steps information
3. Completion Documents Submitted ✅
- File:
completionDocumentsSubmitted.template.ts - Notification Type:
completion_submitted - Email Type:
COMPLETION_DOCUMENTS_SUBMITTED - When: Step 4 - Dealer submits completion documents
- Recipients: Initiator and next approver
- Features:
- Completion date, participants count
- Total expenses with breakdown table
- Documents count
- Next approver information
4. E-Invoice Generated ✅
- File:
einvoiceGenerated.template.ts - Notification Type:
einvoice_generated - Email Type:
EINVOICE_GENERATED - When: Step 6 - E-Invoice is generated via DMS
- Recipients: Initiator, Dealer, Finance team
- Features:
- Invoice number, date, DMS number
- Invoice amount
- Download link (if available)
- IO number and dealer information
5. Credit Note Sent ✅
- File:
creditNoteSent.template.ts - Notification Type:
credit_note_sent - Email Type:
CREDIT_NOTE_SENT - When: Step 8 - Credit note is sent to dealer
- Recipients: Dealer (primary), Initiator, Finance team
- Features:
- Credit note number, date, amount
- Related invoice number
- Reason for credit note
- Download link (if available)
- Completion message
🔧 Integration Points
✅ Type Definitions Added
DealerProposalSubmittedDatainterfaceActivityCreatedDatainterfaceCompletionDocumentsSubmittedDatainterfaceEInvoiceGeneratedDatainterfaceCreditNoteSentDatainterface
✅ Email Notification Types Added
DEALER_PROPOSAL_SUBMITTEDACTIVITY_CREATEDCOMPLETION_DOCUMENTS_SUBMITTEDEINVOICE_GENERATEDCREDIT_NOTE_SENT
✅ Email Notification Service Methods Added
sendDealerProposalSubmitted()sendActivityCreated()sendCompletionDocumentsSubmitted()sendEInvoiceGenerated()sendCreditNoteSent()
✅ Notification Service Integration
- Added to
emailTypeMap - Added switch cases in
triggerEmailByType()
✅ Templates Exported
- All templates exported in
index.ts
📝 Usage Examples
1. Send Proposal Submitted Email
await notificationService.sendToUsers([initiatorId, nextApproverId], {
title: 'Proposal Submitted',
body: `Dealer ${dealerName} has submitted a proposal for request ${requestNumber}`,
requestNumber: requestNumber,
requestId: requestId,
url: `/request/${requestNumber}`,
type: 'proposal_submitted',
priority: 'MEDIUM',
metadata: {
dealerData: {
userId: dealerId,
email: dealerEmail,
displayName: dealerName
},
proposalData: {
totalEstimatedBudget: 50000,
expectedCompletionDate: '2025-02-15',
dealerComments: 'Proposal comments...',
costBreakup: [
{ description: 'Item 1', amount: 20000 },
{ description: 'Item 2', amount: 30000 }
],
submittedAt: new Date()
},
nextApproverId: nextApproverId
}
});
2. Send Activity Created Email
await notificationService.sendToUsers([dealerId, initiatorId, deptLeadId], {
title: 'Activity Created',
body: `Activity "${activityName}" has been created for request ${requestNumber}`,
requestNumber: requestNumber,
requestId: requestId,
url: `/request/${requestNumber}`,
type: 'activity_created',
priority: 'MEDIUM',
metadata: {
activityData: {
activityName: 'Dealer Event',
activityType: 'Marketing Event',
location: 'Mumbai',
dealerName: 'ABC Motors',
dealerCode: 'ABC001',
initiatorName: 'John Doe',
departmentLeadName: 'Jane Smith',
ioNumber: 'IO123456',
nextSteps: 'IO confirmation to be made...'
}
}
});
3. Send Completion Documents Submitted Email
await notificationService.sendToUsers([initiatorId, nextApproverId], {
title: 'Completion Documents Submitted',
body: `Dealer ${dealerName} has submitted completion documents`,
requestNumber: requestNumber,
requestId: requestId,
url: `/request/${requestNumber}`,
type: 'completion_submitted',
priority: 'MEDIUM',
metadata: {
dealerData: {
userId: dealerId,
email: dealerEmail,
displayName: dealerName
},
completionData: {
activityCompletionDate: new Date('2025-02-10'),
numberOfParticipants: 50,
totalClosedExpenses: 45000,
closedExpenses: [
{ description: 'Expense 1', amount: 20000 },
{ description: 'Expense 2', amount: 25000 }
],
documentsCount: 5,
submittedAt: new Date()
},
nextApproverId: nextApproverId
}
});
4. Send E-Invoice Generated Email
await notificationService.sendToUsers([initiatorId, dealerId, financeId], {
title: 'E-Invoice Generated',
body: `E-Invoice ${invoiceNumber} has been generated for request ${requestNumber}`,
requestNumber: requestNumber,
requestId: requestId,
url: `/request/${requestNumber}`,
type: 'einvoice_generated',
priority: 'HIGH',
metadata: {
invoiceData: {
invoiceNumber: 'INV-2025-001',
invoiceDate: new Date(),
dmsNumber: 'DMS123456',
amount: 50000,
dealerName: 'ABC Motors',
dealerCode: 'ABC001',
ioNumber: 'IO123456',
generatedAt: new Date(),
downloadLink: 'https://...'
}
}
});
5. Send Credit Note Sent Email
await notificationService.sendToUsers([dealerId, initiatorId, financeId], {
title: 'Credit Note Sent',
body: `Credit note ${creditNoteNumber} has been sent for request ${requestNumber}`,
requestNumber: requestNumber,
requestId: requestId,
url: `/request/${requestNumber}`,
type: 'credit_note_sent',
priority: 'HIGH',
metadata: {
creditNoteData: {
creditNoteNumber: 'CN-2025-001',
creditNoteDate: new Date(),
creditNoteAmount: 45000,
dealerName: 'ABC Motors',
dealerCode: 'ABC001',
dealerEmail: 'dealer@example.com',
reason: 'Claim settlement',
invoiceNumber: 'INV-2025-001',
sentAt: new Date(),
downloadLink: 'https://...'
}
}
});
🎨 Template Features
All templates include:
- ✅ Royal Enfield branding
- ✅ Responsive design (mobile-friendly)
- ✅ Rich text support (tables, lists, formatting)
- ✅ Table support for cost/expense breakdowns
- ✅ Proper currency formatting (INR)
- ✅ Conditional sections (only show if data available)
- ✅ View Details button with link
- ✅ Email preferences checking
- ✅ Error handling and logging
🔄 Next Steps for Backend Integration
To use these templates in the dealer claim service, update the notification calls:
In dealerClaim.service.ts:
-
Proposal Submitted (line ~1288):
await notificationService.sendToUsers([initiatorId, nextApproverId], { type: 'proposal_submitted', metadata: { dealerData, proposalData, nextApproverId } }); -
Activity Created (line ~2141):
await notificationService.sendToUsers([dealerId, initiatorId, deptLeadId], { type: 'activity_created', metadata: { activityData } }); -
Completion Submitted (line ~1393):
await notificationService.sendToUsers([initiatorId, nextApproverId], { type: 'completion_submitted', metadata: { dealerData, completionData, nextApproverId } }); -
E-Invoice Generated (line ~1862):
await notificationService.sendToUsers([initiatorId, dealerId, financeId], { type: 'einvoice_generated', metadata: { invoiceData } }); -
Credit Note Sent (line ~2029):
await notificationService.sendToUsers([dealerId, initiatorId, financeId], { type: 'credit_note_sent', metadata: { creditNoteData } });
✅ Testing Checklist
- Test proposal submitted email with cost breakdown table
- Test activity created email with IO number
- Test completion documents email with expense breakdown
- Test e-invoice email with download link
- Test credit note email with all fields
- Verify mobile responsiveness
- Verify email preferences are respected
- Test with missing optional fields
- Verify tables render correctly in email clients
- Test with additional approvers in workflow
📚 Related Files
- Templates:
Re_Backend/src/emailtemplates/*.template.ts - Types:
Re_Backend/src/emailtemplates/types.ts - Email Service:
Re_Backend/src/services/emailNotification.service.ts - Notification Service:
Re_Backend/src/services/notification.service.ts - Preferences:
Re_Backend/src/emailtemplates/emailPreferences.helper.ts - Planning Doc:
Re_Backend/src/emailtemplates/DEALER_CLAIM_EMAIL_TEMPLATES.md
🎯 Summary
All 5 dealer claim email templates are now:
- ✅ Created with proper structure and styling
- ✅ Integrated into the notification system
- ✅ Ready to use with proper metadata
- ✅ Supporting additional approvers
- ✅ Mobile responsive
- ✅ Table support for financial data
- ✅ Following Royal Enfield branding guidelines
The templates are ready to be used in the dealer claim workflow service!