Step {step.step}: {step.title}
{step.status.toLowerCase()}
{/* Email Template Button (Step 4) - Show when approved */}
{step.step === 4 && step.status === 'approved' && (
)}
{/* E-Invoice Download Button (Step 7) */}
{step.step === 7 && step.einvoiceUrl && isCompleted && (
)}
{step.approver}
{step.description}
TAT: {step.tatHours}h
{step.elapsedHours && (
Elapsed: {step.elapsedHours}h
)}
{/* Comment Section */}
{step.comment && (
)}
{/* IO Organization Details (Step 3) - Show when step is approved and has IO details */}
{step.step === 3 && step.status === 'approved' && step.ioDetails && step.ioDetails.ioNumber && (
IO Number:
{step.ioDetails.ioNumber}
{step.ioDetails.blockedAmount !== undefined && step.ioDetails.blockedAmount > 0 && (
Blocked Amount:
₹{step.ioDetails.blockedAmount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
)}
IO Remark:
{step.ioDetails.ioRemark || 'N/A'}
Organised by {step.ioDetails.organizedBy || step.approver || 'N/A'} on{' '}
{step.ioDetails.organizedAt
? formatDateSafe(step.ioDetails.organizedAt)
: (step.approvedAt ? formatDateSafe(step.approvedAt) : 'N/A')
}
)}
{/* DMS Processing Details (Step 6) */}
{step.step === 6 && step.dmsDetails && step.dmsDetails.dmsNumber && (
DMS Number:
{step.dmsDetails.dmsNumber}
{step.dmsDetails.dmsRemarks && (
DMS Remarks:
{step.dmsDetails.dmsRemarks}
)}
{step.dmsDetails.pushedAt && (
Pushed by {step.dmsDetails.pushedBy} on{' '}
{formatDateSafe(step.dmsDetails.pushedAt)}
)}
)}
{/* Action Buttons */}
{isActive && (
{/* Step 1: Submit Proposal Button - Only for dealer or step 1 approver */}
{step.step === 1 && (isDealer || isStep1Approver) && (
)}
{/* Step 2: Confirm Request - Only for initiator or step 2 approver */}
{step.step === 2 && (isInitiator || isStep2Approver) && (
)}
{/* Step 3: Approve and Organise IO - Only for department lead (step 3 approver) */}
{step.step === 3 && (() => {
// Find step 3 from approvalFlow to get approverEmail
const step3Level = approvalFlow.find((l: any) => (l.step || l.levelNumber || l.level_number) === 3);
const step3ApproverEmail = (step3Level?.approverEmail || '').toLowerCase();
const isStep3ApproverByEmail = step3ApproverEmail && userEmail === step3ApproverEmail;
return isStep3ApproverByEmail || isStep3Approver || isCurrentApprover;
})() && (
)}
{/* Step 5: Upload Completion Documents - Only for dealer */}
{step.step === 5 && isDealer && (
)}
{/* Step 6: Push to DMS - Only for initiator or step 6 approver */}
{step.step === 6 && (isInitiator || (() => {
const step6Level = approvalFlow.find((l: any) => (l.step || l.levelNumber || l.level_number) === 6);
const step6ApproverEmail = (step6Level?.approverEmail || '').toLowerCase();
return step6ApproverEmail && userEmail === step6ApproverEmail;
})()) && (
)}
{/* Step 8: View & Send Credit Note - Only for finance approver or step 8 approver */}
{step.step === 8 && (() => {
const step8Level = approvalFlow.find((l: any) => (l.step || l.levelNumber || l.level_number) === 8);
const step8ApproverEmail = (step8Level?.approverEmail || '').toLowerCase();
const isStep8Approver = step8ApproverEmail && userEmail === step8ApproverEmail;
// Also check if user has finance role
const userRole = (user as any)?.role?.toUpperCase() || '';
const isFinanceUser = userRole === 'FINANCE' || userRole === 'ADMIN';
return isStep8Approver || isFinanceUser;
})() && (
)}
)}
{/* Approved Date */}
{step.approvedAt && (
Approved on {formatDateSafe(step.approvedAt)}
)}