Re_Backend/src/emailtemplates/DEALER_CLAIM_TEMPLATES_IMPLEMENTATION.md

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

  • DealerProposalSubmittedData interface
  • ActivityCreatedData interface
  • CompletionDocumentsSubmittedData interface
  • EInvoiceGeneratedData interface
  • CreditNoteSentData interface

Email Notification Types Added

  • DEALER_PROPOSAL_SUBMITTED
  • ACTIVITY_CREATED
  • COMPLETION_DOCUMENTS_SUBMITTED
  • EINVOICE_GENERATED
  • CREDIT_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:

  1. Proposal Submitted (line ~1288):

    await notificationService.sendToUsers([initiatorId, nextApproverId], {
      type: 'proposal_submitted',
      metadata: { dealerData, proposalData, nextApproverId }
    });
    
  2. Activity Created (line ~2141):

    await notificationService.sendToUsers([dealerId, initiatorId, deptLeadId], {
      type: 'activity_created',
      metadata: { activityData }
    });
    
  3. Completion Submitted (line ~1393):

    await notificationService.sendToUsers([initiatorId, nextApproverId], {
      type: 'completion_submitted',
      metadata: { dealerData, completionData, nextApproverId }
    });
    
  4. E-Invoice Generated (line ~1862):

    await notificationService.sendToUsers([initiatorId, dealerId, financeId], {
      type: 'einvoice_generated',
      metadata: { invoiceData }
    });
    
  5. 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

  • 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!