From 8940a8981ef4d26661b90ecbbb0a8a8933d63077 Mon Sep 17 00:00:00 2001 From: laxmanhalaki Date: Wed, 11 Mar 2026 12:31:04 +0530 Subject: [PATCH] wfm file push indicator re-added in workflow step --- src/custom/pages/RequestDetail.tsx | 1 + .../components/request-detail/WorkflowTab.tsx | 97 +++++++++++++++---- src/dealer-claim/pages/Dashboard.tsx | 14 --- src/dealer-claim/pages/RequestDetail.tsx | 1 + src/hooks/useRequestDetails.ts | 2 +- .../components/QuickActionsSidebar.tsx | 4 +- 6 files changed, 84 insertions(+), 35 deletions(-) diff --git a/src/custom/pages/RequestDetail.tsx b/src/custom/pages/RequestDetail.tsx index 1cb2459..4db5c85 100644 --- a/src/custom/pages/RequestDetail.tsx +++ b/src/custom/pages/RequestDetail.tsx @@ -658,6 +658,7 @@ function CustomRequestDetailInner({ requestId: propRequestId, onBack, dynamicReq pausedByUserId={request?.pauseInfo?.pausedBy?.userId} currentUserId={(user as any)?.userId} apiRequest={apiRequest} + hideApproveReject={isDealer} /> )} diff --git a/src/dealer-claim/components/request-detail/WorkflowTab.tsx b/src/dealer-claim/components/request-detail/WorkflowTab.tsx index ad71461..fcd0774 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'; @@ -1510,6 +1510,25 @@ export function DealerClaimWorkflowTab({ loadCompletionDocuments(); }, [request]); + const handleRetrigger = async () => { + try { + toast.loading('Retriggering WFM push...', { id: 'wfm-retrigger' }); + await retriggerWFMPush(request.id); + toast.success('WFM push re-triggered successfully', { id: 'wfm-retrigger' }); + + // Refresh the request data if onRefresh is provided + if (onRefresh) { + onRefresh(); + } else { + // Fallback or full page refresh + window.location.reload(); + } + } catch (error: any) { + console.error('Error retriggering WFM push:', error); + toast.error(error.message || 'Failed to re-trigger WFM push', { id: 'wfm-retrigger' }); + } + }; + const handleDownloadCSV = async () => { try { const requestId = request.id || request.requestId; @@ -1764,23 +1783,63 @@ 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 && ( - - ); - })()} + {/* CSV Export & WFM Push Status (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'); + const wfmStatus = request?.invoice?.wfmPushStatus || (request?.invoice as any)?.wfmPushStatus; + const wfmError = request?.invoice?.wfmPushError || (request?.invoice as any)?.wfmPushError; + + return isRequestorClaimStep && hasInvoice && ( +
+ + + {/* WFM Push Status Indication */} + {wfmStatus === 'SUCCESS' ? ( +
+ +
+ ) : wfmStatus === 'FAILED' ? ( +
+
+ +
+ +
+ ) : ( +
+
+ +
+ +
+ )} +
+ ); + })()}

{step.approver}

{step.description}

diff --git a/src/dealer-claim/pages/Dashboard.tsx b/src/dealer-claim/pages/Dashboard.tsx index b9f5377..57fba41 100644 --- a/src/dealer-claim/pages/Dashboard.tsx +++ b/src/dealer-claim/pages/Dashboard.tsx @@ -230,13 +230,6 @@ export function DealerDashboard({ onNavigate, onNewRequest: _onNewRequest }: Das
-
diff --git a/src/hooks/useRequestDetails.ts b/src/hooks/useRequestDetails.ts index 1783d51..2464e2b 100644 --- a/src/hooks/useRequestDetails.ts +++ b/src/hooks/useRequestDetails.ts @@ -331,7 +331,7 @@ export function useRequestDetails( internalOrders: internalOrders || [], // New normalized tables (also available via claimDetails for backward compatibility) budgetTracking: (claimDetails as any)?.budgetTracking || null, - invoice: (claimDetails as any)?.invoice || null, + invoice: claimDetails?.invoice || (claimDetails as any)?.invoice || null, creditNote: (claimDetails as any)?.creditNote || null, completionExpenses: (claimDetails as any)?.completionExpenses || null, templateType: wf.templateType || wf.template_type, diff --git a/src/pages/RequestDetail/components/QuickActionsSidebar.tsx b/src/pages/RequestDetail/components/QuickActionsSidebar.tsx index 0d26f2b..4e0f561 100644 --- a/src/pages/RequestDetail/components/QuickActionsSidebar.tsx +++ b/src/pages/RequestDetail/components/QuickActionsSidebar.tsx @@ -32,6 +32,7 @@ interface QuickActionsSidebarProps { currentUserId?: string; // Current user's ID (kept for backwards compatibility) apiRequest?: any; onEditClaimAmount?: () => void; + hideApproveReject?: boolean; } export function QuickActionsSidebar({ @@ -52,6 +53,7 @@ export function QuickActionsSidebar({ currentUserId: currentUserIdProp, apiRequest, onEditClaimAmount, + hideApproveReject = false, }: QuickActionsSidebarProps) { const { user } = useAuth(); const [sharedRecipients, setSharedRecipients] = useState([]); @@ -210,7 +212,7 @@ export function QuickActionsSidebar({ {/* Approve/Reject Buttons */}
- {currentApprovalLevel && !isPaused && ( + {currentApprovalLevel && !isPaused && !hideApproveReject && ( <>