diff --git a/src/dealer-claim/components/request-detail/WorkflowTab.tsx b/src/dealer-claim/components/request-detail/WorkflowTab.tsx index ad71461..3cf7186 100644 --- a/src/dealer-claim/components/request-detail/WorkflowTab.tsx +++ b/src/dealer-claim/components/request-detail/WorkflowTab.tsx @@ -10,7 +10,7 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Progress } from '@/components/ui/progress'; -import { TrendingUp, Clock, CheckCircle, CircleCheckBig, Upload, Mail, Download, Receipt, Activity, AlertTriangle, AlertOctagon, XCircle, History, ChevronDown, ChevronUp, RefreshCw, RotateCw, Eye, FileSpreadsheet, X, Loader2 } from 'lucide-react'; +import { TrendingUp, Clock, CheckCircle, CheckCircle2, CircleCheckBig, Upload, Mail, Download, Receipt, Activity, AlertTriangle, AlertOctagon, XCircle, History, ChevronDown, ChevronUp, RefreshCw, RotateCw, Eye, FileSpreadsheet, X, Loader2 } from 'lucide-react'; import { formatDateTime, formatDateDDMMYYYY } from '@/utils/dateFormatter'; import { formatHoursMinutes } from '@/utils/slaTracker'; import { @@ -26,7 +26,7 @@ import { // InitiatorActionModal - Removed, using direct buttons instead } from './modals'; import { toast } from 'sonner'; -import { submitProposal, updateIODetails, submitCompletion, updateEInvoice, sendCreditNoteToDealer } from '@/services/dealerClaimApi'; +import { submitProposal, updateIODetails, submitCompletion, updateEInvoice, sendCreditNoteToDealer, retriggerWFMPush } from '@/services/dealerClaimApi'; import { getWorkflowDetails, approveLevel, rejectLevel, handleInitiatorAction, getWorkflowHistory } from '@/services/workflowApi'; import { uploadDocument } from '@/services/documentApi'; import { TokenManager } from '@/utils/tokenManager'; @@ -1766,19 +1766,88 @@ export function DealerClaimWorkflowTab({ })()} {/* CSV Export Button (Requestor Claim Approval) */} {(() => { - const isRequestorClaimStep = (step.levelName || step.title || '').toLowerCase().includes('requestor claim') || - (step.levelName || step.title || '').toLowerCase().includes('requestor - claim'); - const hasInvoice = request?.invoice || (request?.irn && step.status === 'approved'); - return isRequestorClaimStep && hasInvoice && ( - + const isInvoiceStep = (step.levelName || step.title || '').toLowerCase().includes('requestor claim') || + (step.levelName || step.title || '').toLowerCase().includes('requestor - claim') || + (step.levelName || step.title || '').toLowerCase().includes('e-invoice') || + (step.levelName || step.title || '').toLowerCase().includes('invoice generation'); + + const invoice = request?.invoice || request?.claimDetails?.invoice; + const hasInvoice = !!invoice || (request?.irn && step.status === 'approved'); + if (!isInvoiceStep || !hasInvoice) return null; + + const wfmStatus = invoice?.wfmPushStatus; + const wfmError = invoice?.wfmPushError; + + const handleRetrigger = async (e: React.MouseEvent) => { + e.stopPropagation(); + try { + toast.loading('Retriggering WFM push...'); + await retriggerWFMPush(request.id || request.requestId); + toast.dismiss(); + toast.success('WFM push re-triggered successfully'); + // Optionally refresh data + if (typeof (request as any).refresh === 'function') { + (request as any).refresh(); + } else { + window.location.reload(); + } + } catch (error) { + toast.dismiss(); + toast.error('Failed to re-trigger WFM push'); + } + }; + + return ( +