/** * CreditNoteSAPModal Component * Modal for Step 8: Credit Note from SAP * Allows Finance team to review credit note details and send to dealer */ import { useState } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Label } from '@/components/ui/label'; import { Receipt, CircleCheckBig, Hash, Calendar, DollarSign, Building, FileText, Download, Send } from 'lucide-react'; import { toast } from 'sonner'; import { formatDateTime } from '@/utils/dateFormatter'; interface CreditNoteSAPModalProps { isOpen: boolean; onClose: () => void; onDownload?: () => Promise; onSendToDealer?: () => Promise; creditNoteData?: { creditNoteNumber?: string; creditNoteDate?: string; creditNoteAmount?: number; status?: 'PENDING' | 'APPROVED' | 'ISSUED' | 'SENT'; }; dealerInfo?: { dealerName?: string; dealerCode?: string; dealerEmail?: string; }; activityName?: string; requestNumber?: string; requestId?: string; dueDate?: string; } export function CreditNoteSAPModal({ isOpen, onClose, onDownload, onSendToDealer, creditNoteData, dealerInfo, activityName, requestNumber, requestId: _requestId, dueDate, }: CreditNoteSAPModalProps) { const [downloading, setDownloading] = useState(false); const [sending, setSending] = useState(false); const hasCreditNote = creditNoteData?.creditNoteNumber && creditNoteData?.creditNoteNumber !== ''; const creditNoteNumber = creditNoteData?.creditNoteNumber || ''; const creditNoteDate = creditNoteData?.creditNoteDate ? formatDateTime(creditNoteData.creditNoteDate, { includeTime: false, format: 'short' }) : ''; const creditNoteAmount = creditNoteData?.creditNoteAmount || 0; const status = creditNoteData?.status || 'PENDING'; const dealerName = dealerInfo?.dealerName || 'Jaipur Royal Enfield'; const dealerCode = dealerInfo?.dealerCode || 'RE-JP-009'; const activity = activityName || 'Activity'; const requestIdDisplay = requestNumber || 'RE-REQ-2024-CM-101'; const dueDateDisplay = dueDate ? formatDateTime(dueDate, { includeTime: false, format: 'short' }) : 'Jan 4, 2026'; const handleDownload = async () => { if (onDownload) { try { setDownloading(true); await onDownload(); toast.success('Credit note downloaded successfully'); } catch (error) { console.error('Failed to download credit note:', error); toast.error('Failed to download credit note. Please try again.'); } finally { setDownloading(false); } } else { // Default behavior: show info message toast.info('Credit note will be automatically saved to Documents tab'); } }; const handleSendToDealer = async () => { if (onSendToDealer) { try { setSending(true); await onSendToDealer(); toast.success('Credit note sent to dealer successfully'); onClose(); } catch (error) { console.error('Failed to send credit note to dealer:', error); toast.error('Failed to send credit note. Please try again.'); } finally { setSending(false); } } else { // Default behavior: show info message toast.info('Email notification will be sent to dealer with credit note attachment'); } }; const formatCurrency = (amount: number) => { return `₹${amount.toLocaleString('en-IN', { minimumFractionDigits: 0, maximumFractionDigits: 0 })}`; }; return ( Credit Note from SAP Review and send credit note to dealer
{hasCreditNote ? ( <> {/* Credit Note Document Card */}

Royal Enfield

Credit Note Document

{status === 'APPROVED' || status === 'CONFIRMED' ? 'Approved' : status === 'ISSUED' ? 'Issued' : status === 'SENT' ? 'Sent' : 'Pending'}

{creditNoteNumber}

{creditNoteDate}

{/* Credit Note Amount */}

{formatCurrency(creditNoteAmount)}

) : ( /* No Credit Note Available */

No Credit Note Available

Credit note has not been generated yet. Please wait for the credit note to be generated from DMS.

)} {/* Dealer Information */}

Dealer Information

{dealerName}

{dealerCode}

{activity}

{/* Reference Details */}

Reference Details

{requestIdDisplay}

{dueDateDisplay}

{/* Available Actions Info */}

Available Actions

  • Download: Credit note will be automatically saved to Documents tab
  • Send to Dealer: Email notification will be sent to dealer with credit note attachment
  • All actions will be recorded in activity trail for audit purposes
{hasCreditNote && ( <> )}
); }