From 81d4dd493f452067ed918894eb6600b372d3c78c Mon Sep 17 00:00:00 2001 From: Laxman Date: Fri, 15 May 2026 20:20:15 +0530 Subject: [PATCH] bugs coverd --- src/App.tsx | 2 +- src/features/dashboard/pages/FinanceDashboard.tsx | 6 +++--- .../master/components/SecurityDepositMaster.tsx | 2 +- .../ApplicationDetailsSidebar.tsx | 12 ++++++------ .../hooks/useApplicationDetailsAdminActions.ts | 3 ++- .../onboarding/hooks/useApplicationDetailsData.ts | 4 +++- .../hooks/useApplicationDetailsPermissions.ts | 4 ++-- .../hooks/useApplicationDetailsStageData.ts | 12 ++++++++++-- .../onboarding/pages/AllApplicationsPage.tsx | 4 ++++ src/features/onboarding/pages/ApplicationsPage.tsx | 8 -------- .../onboarding/pages/FinanceOnboardingPage.tsx | 6 +++--- .../onboarding/pages/OpportunityRequestsPage.tsx | 3 +++ src/lib/mock-data.ts | 4 ++++ src/services/onboarding.service.ts | 4 ++-- 14 files changed, 44 insertions(+), 30 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 26ab270..9a5d69b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -273,7 +273,7 @@ export default function App() { return 'Payment schedule, proofs, and audit notes for this onboarding application.'; } if (pathname === '/finance-onboarding') { - return 'Validate security deposits, first fills, and related onboarding payments.'; + return 'Validate Security Deposit, first fills, and related onboarding payments.'; } if (pathname.startsWith('/finance-audit/')) { return 'Finance audit trail and checklist for this application.'; diff --git a/src/features/dashboard/pages/FinanceDashboard.tsx b/src/features/dashboard/pages/FinanceDashboard.tsx index 7cfac2b..a0decb3 100644 --- a/src/features/dashboard/pages/FinanceDashboard.tsx +++ b/src/features/dashboard/pages/FinanceDashboard.tsx @@ -52,14 +52,14 @@ export function FinanceDashboard({ onNavigate, onViewPaymentDetails, onViewAudit const apps = response.data || []; // Derive Onboarding Payments from Application + SecurityDeposit (Standardized nomenclature) - // This ensures applications in "Payment Pending" / "Security Details" are visible + // This ensures applications in "Payment Pending" / "Security Deposit" are visible // even if no payment record has been manually initialized. const consolidatedPayments: any[] = []; apps.forEach((app: any) => { const s = app.overallStatus || app.status; const isPaymentStage = [ - 'Payment Pending', 'Security Details', 'LOI In Progress', 'LOI Issued', + 'Payment Pending', 'Security Deposit', 'Security Details', 'LOI In Progress', 'LOI Issued', 'LOA Pending', 'Dealer Code Generation', 'LOA_APPROVAL' ].includes(s); const deposits = app.securityDeposits || []; @@ -80,7 +80,7 @@ export function FinanceDashboard({ onNavigate, onViewPaymentDetails, onViewAudit }); }); } else if (isPaymentStage) { - if (['Payment Pending', 'Security Details', 'LOI In Progress'].includes(s)) { + if (['Payment Pending', 'Security Deposit', 'Security Details', 'LOI In Progress'].includes(s)) { // Virtual pending record for Security Deposit (5L) consolidatedPayments.push({ id: `virtual-${app.id}-sd`, diff --git a/src/features/master/components/SecurityDepositMaster.tsx b/src/features/master/components/SecurityDepositMaster.tsx index 1286254..d5d6bb8 100644 --- a/src/features/master/components/SecurityDepositMaster.tsx +++ b/src/features/master/components/SecurityDepositMaster.tsx @@ -73,7 +73,7 @@ export const SecurityDepositMaster: React.FC = () => { Global Payment Settings - Configure base security deposit amounts for onboarding workflows. + Configure base Security Deposit amounts for onboarding workflows. diff --git a/src/features/onboarding/components/application-details/ApplicationDetailsSidebar.tsx b/src/features/onboarding/components/application-details/ApplicationDetailsSidebar.tsx index c6d2822..8a2d15b 100644 --- a/src/features/onboarding/components/application-details/ApplicationDetailsSidebar.tsx +++ b/src/features/onboarding/components/application-details/ApplicationDetailsSidebar.tsx @@ -177,7 +177,7 @@ export function ApplicationDetailsSidebar(props: ApplicationDetailsSidebarProps) LOA approval locked First Fill (later-stage payment) must be verified by Finance - before LOA approval can proceed. This is separate from the initial security deposit before LOI Issued. + before LOA approval can proceed. This is separate from the initial Security Deposit before LOI Issued. )} @@ -194,7 +194,7 @@ export function ApplicationDetailsSidebar(props: ApplicationDetailsSidebarProps) Finance has verified the First Fill payment. The application status was not changed until you reach{' '} LOA Pending. When you get there, LOA approval will not be - blocked by payment (same pattern as recording the initial security deposit before the LOI + blocked by payment (same pattern as recording the initial Security Deposit before the LOI security step). @@ -203,7 +203,7 @@ export function ApplicationDetailsSidebar(props: ApplicationDetailsSidebarProps) {permissions.isSecurityDetailsLocked && ( - Security Details approval locked + Security Deposit approval locked Finance must verify the Security Deposit before this stage can be approved. You can still use Reject if needed. @@ -211,12 +211,12 @@ export function ApplicationDetailsSidebar(props: ApplicationDetailsSidebarProps) )} - {['Security Details', 'Payment Pending'].includes(application.status) && ( + {['Security Deposit', 'Security Details', 'Payment Pending'].includes(application.status) && ( - Security Details review + Security Deposit review - Check the initial security deposit on the Payments tab (Finance + Check the initial Security Deposit on the Payments tab (Finance may have already marked it verified). When satisfied, use Approve{' '} to move to LOI Issued. diff --git a/src/features/onboarding/hooks/useApplicationDetailsAdminActions.ts b/src/features/onboarding/hooks/useApplicationDetailsAdminActions.ts index 49f3f49..889d005 100644 --- a/src/features/onboarding/hooks/useApplicationDetailsAdminActions.ts +++ b/src/features/onboarding/hooks/useApplicationDetailsAdminActions.ts @@ -415,7 +415,8 @@ export function useApplicationDetailsAdminActions(params: UseApplicationDetailsA case 'Level 3 Interview Pending': newStatus = 'Level 3 Approved'; break; case 'Level 3 Approved': newStatus = 'FDD Verification'; break; case 'FDD Verification': newStatus = 'LOI In Progress'; break; - case 'LOI In Progress': newStatus = 'Security Details'; break; + case 'LOI In Progress': newStatus = 'Security Deposit'; break; + case 'Security Deposit': case 'Security Details': case 'Payment Pending': newStatus = 'LOI Issued'; break; case 'LOI Issued': newStatus = 'Dealer Code Generation'; break; diff --git a/src/features/onboarding/hooks/useApplicationDetailsData.ts b/src/features/onboarding/hooks/useApplicationDetailsData.ts index 8c88e4e..90c176a 100644 --- a/src/features/onboarding/hooks/useApplicationDetailsData.ts +++ b/src/features/onboarding/hooks/useApplicationDetailsData.ts @@ -84,7 +84,9 @@ export function useApplicationDetailsData({ applicationId }: UseApplicationDetai level3InterviewDate: getStageDate('3rd Level Interview', 'Level 3 Approved'), fddDate: getStageDate('FDD', 'FDD Verification'), loiApprovalDate: getStageDate('LOI Approval', 'LOI In Progress'), - securityDetailsDate: getStageDate('Security Details', 'Security Details'), + securityDetailsDate: + getStageDate('Security Deposit', 'Security Deposit') || + getStageDate('Security Details', 'Security Details'), loiIssueDate: getStageDate('LOI Issue', 'LOI Issued'), dealerCodeDate: getStageDate('Dealer Code Generation', 'Dealer Code Generation'), architectureAssignedDate: getStageDate('Architecture Team Assigned', 'Architecture Team Assigned'), diff --git a/src/features/onboarding/hooks/useApplicationDetailsPermissions.ts b/src/features/onboarding/hooks/useApplicationDetailsPermissions.ts index bc6ebce..3e9e2f0 100644 --- a/src/features/onboarding/hooks/useApplicationDetailsPermissions.ts +++ b/src/features/onboarding/hooks/useApplicationDetailsPermissions.ts @@ -188,7 +188,7 @@ export function useApplicationDetailsPermissions({ const isAdminRole = ['DD Admin', 'Super Admin', 'NBH', 'DD Lead', 'DD Head', 'Finance', 'Finance Admin', 'FDD', 'ZBH', 'RBM'].includes(currentUser.role); const isAdministrativeStage = [ 'Level 3 Approved', 'FDD Verification', - 'LOI In Progress', 'Security Details', 'Payment Pending', 'LOI Issued', 'Statutory LOI Ack', + 'LOI In Progress', 'Security Deposit', 'Security Details', 'Payment Pending', 'LOI Issued', 'Statutory LOI Ack', 'Architecture Team Assigned', 'Architecture Document Upload', 'Architecture Team Completion', 'Statutory GST', 'Statutory PAN', 'Statutory Nodal', 'Statutory Check', 'Statutory Partnership', 'Statutory Firm Reg', 'Statutory Rental', @@ -198,7 +198,7 @@ export function useApplicationDetailsPermissions({ const isLoaLocked = application.status === 'LOA Pending' && getDeposit('FIRST_FILL')?.status !== 'Verified'; const isSecurityDetailsLocked = - ['Security Details', 'Payment Pending'].includes(application.status) && + ['Security Deposit', 'Security Details', 'Payment Pending'].includes(application.status) && getDeposit('SECURITY_DEPOSIT')?.status !== 'Verified'; const isFinalState = application.status === 'Onboarded' || application.status === 'Rejected'; diff --git a/src/features/onboarding/hooks/useApplicationDetailsStageData.ts b/src/features/onboarding/hooks/useApplicationDetailsStageData.ts index df279ec..cbfdaaa 100644 --- a/src/features/onboarding/hooks/useApplicationDetailsStageData.ts +++ b/src/features/onboarding/hooks/useApplicationDetailsStageData.ts @@ -40,6 +40,14 @@ export function useApplicationDetailsStageData({ return (documents || []).some((d) => d.documentType === docType); }; + const getSecurityDepositStageStatus = (): ProcessStage['status'] => { + const rows = application.progressTracking || []; + const row = + rows.find((ps: any) => ps.stageName === 'Security Deposit') || + rows.find((ps: any) => ps.stageName === 'Security Details'); + return row?.status ? (row.status as ProcessStage['status']) : 'pending'; + }; + const getStageStatus = (stageName: string, fallbackStatus: ProcessStage['status'] = 'pending'): ProcessStage['status'] => { const backendStage = (application.progressTracking || []).find((ps: any) => ps.stageName === stageName); return backendStage?.status ? (backendStage.status as any) : fallbackStatus; @@ -113,8 +121,8 @@ export function useApplicationDetailsStageData({ documentsUploaded: 1 }, { - id: 9, name: 'Security Details', status: getStageStatus('Security Details'), - date: application.securityDetailsDate, description: 'Security verification', documentsUploaded: 3 + id: 9, name: 'Security Deposit', status: getSecurityDepositStageStatus(), + date: application.securityDetailsDate, description: 'Security Deposit verification', documentsUploaded: 3 }, { id: 10, name: 'LOI Issue', status: getStageStatus('LOI Issue'), diff --git a/src/features/onboarding/pages/AllApplicationsPage.tsx b/src/features/onboarding/pages/AllApplicationsPage.tsx index b9c86b0..ec9dc65 100644 --- a/src/features/onboarding/pages/AllApplicationsPage.tsx +++ b/src/features/onboarding/pages/AllApplicationsPage.tsx @@ -242,6 +242,10 @@ export function AllApplicationsPage({ onViewDetails, initialFilter = 'all' }: Al 'Disqualified': 'bg-gray-100 text-gray-800', 'Onboarded': 'bg-emerald-100 text-emerald-800', 'LOI Approved': 'bg-sky-100 text-sky-800', + 'Security Deposit In Progress': 'bg-amber-100 text-amber-800', + 'Security Deposit Approved': 'bg-green-100 text-green-800', + 'Security Deposit': 'bg-amber-100 text-amber-800', + /** Legacy overallStatus until DB migrated */ 'Security Details In Progress': 'bg-amber-100 text-amber-800', 'Security Details Approved': 'bg-green-100 text-green-800', 'Security Details': 'bg-amber-100 text-amber-800', diff --git a/src/features/onboarding/pages/ApplicationsPage.tsx b/src/features/onboarding/pages/ApplicationsPage.tsx index 319592e..966fbed 100644 --- a/src/features/onboarding/pages/ApplicationsPage.tsx +++ b/src/features/onboarding/pages/ApplicationsPage.tsx @@ -273,14 +273,6 @@ export function ApplicationsPage({ onViewDetails, initialFilter }: ApplicationsP -
diff --git a/src/features/onboarding/pages/FinanceOnboardingPage.tsx b/src/features/onboarding/pages/FinanceOnboardingPage.tsx index 61203d1..cc49f81 100644 --- a/src/features/onboarding/pages/FinanceOnboardingPage.tsx +++ b/src/features/onboarding/pages/FinanceOnboardingPage.tsx @@ -55,7 +55,7 @@ export function FinanceOnboardingPage({ onViewPaymentDetails }: FinanceOnboardin const paymentRows = applications.flatMap((app: any) => { const s = app.overallStatus || app.status; const isPaymentStage = [ - 'Payment Pending', 'Security Details', 'LOI In Progress', 'LOI Issued', + 'Payment Pending', 'Security Deposit', 'Security Details', 'LOI In Progress', 'LOI Issued', 'LOA Pending', 'Dealer Code Generation', 'LOA_APPROVAL' ].includes(s); const deposits = app.securityDeposits || []; @@ -77,7 +77,7 @@ export function FinanceOnboardingPage({ onViewPaymentDetails }: FinanceOnboardin // Keep virtual pending rows for in-flight cases with no deposit record yet if (isPaymentStage) { - if (['Payment Pending', 'Security Details', 'LOI In Progress'].includes(s)) { + if (['Payment Pending', 'Security Deposit', 'Security Details', 'LOI In Progress'].includes(s)) { return [{ id: `virtual-${app.id}-sd`, applicationId: app.applicationId || app.id, @@ -134,7 +134,7 @@ export function FinanceOnboardingPage({ onViewPaymentDetails }: FinanceOnboardin

Payment Verification

-

Review and verify dealer security deposits and first fill payments

+

Review and verify Security Deposit and First Fill payments for dealers