From 9947d3903d78bc6aef2bdb59988b80e630f717e1 Mon Sep 17 00:00:00 2001 From: Lixian Zhou Date: Fri, 13 Mar 2026 10:44:37 -0400 Subject: [PATCH] fix --- client/src/App.js | 2 +- .../dashboard/DashboardCustomersList.js | 9 ++- .../src/components/trans-routes/RouteView.js | 79 ++++++++++++++++++- 3 files changed, 84 insertions(+), 6 deletions(-) diff --git a/client/src/App.js b/client/src/App.js index 270172e..1044c36 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -202,6 +202,7 @@ function App() { {/* } /> */} } /> {setShowMenu(true)}}/>} /> + } /> }> } > }> @@ -222,7 +223,6 @@ function App() { } /> } /> - } /> } /> } /> } /> diff --git a/client/src/components/dashboard/DashboardCustomersList.js b/client/src/components/dashboard/DashboardCustomersList.js index bc45757..873024f 100644 --- a/client/src/components/dashboard/DashboardCustomersList.js +++ b/client/src/components/dashboard/DashboardCustomersList.js @@ -73,6 +73,7 @@ const DashboardCustomersList = ({ additionalButtons, showBreadcrumb = false, tit const [avatarLoading, setAvatarLoading] = useState(false); const [customerAvatars, setCustomerAvatars] = useState({}); const isAllCustomersPage = title === 'All Customers'; + const customerTabOrder = ['personalInfo', 'careServices', 'medicalInsurance', 'confidentialDetails', 'formSubmission']; const [columns, setColumns] = useState(getVisibleColumnsByPermission([ { key: 'name', @@ -309,7 +310,11 @@ const DashboardCustomersList = ({ additionalButtons, showBreadcrumb = false, tit } const goToEdit = (id) => { - navigate(`/customers/edit/${id}`); + const editableTab = AuthService.canEditCustomerTab('personalInfo') + ? 'personalInfo' + : customerTabOrder.find((tabKey) => AuthService.canEditCustomerTab(tabKey)); + if (!editableTab) return; + navigate(`/customers/edit/${id}?tab=${editableTab}&fromEdit=1`); } const goToCreateNew = () => { @@ -396,7 +401,7 @@ const DashboardCustomersList = ({ additionalButtons, showBreadcrumb = false, tit /> ) )} - {AuthService.canEditAnyCustomerTab() && isAllCustomersPage ? goToEdit(customer?.id) : goToView(customer?.id)} style={{ flexShrink: 0 }}>} + {AuthService.canEditAnyCustomerTab() && goToEdit(customer?.id)} style={{ flexShrink: 0 }}>} goToView(customer?.id)}>{customer?.name} } diff --git a/client/src/components/trans-routes/RouteView.js b/client/src/components/trans-routes/RouteView.js index bf64ce8..3f51b91 100644 --- a/client/src/components/trans-routes/RouteView.js +++ b/client/src/components/trans-routes/RouteView.js @@ -22,6 +22,8 @@ const RouteView = () => { const currentDriver = drivers.find(item => item.id === currentRoute?.driver); const [fallbackDriver, setFallbackDriver] = useState(undefined); const [showVehicleDetails, setShowVehicleDetails] = useState(false); + const [showResetSignatureConfirmModal, setShowResetSignatureConfirmModal] = useState(false); + const [isResettingSignature, setIsResettingSignature] = useState(false); const [signature, setSignature] = useState(undefined); const [signatureRequest, setSignatureRequest] = useState(undefined); const [routeStatusValue, setRouteStatusValue] = useState(''); @@ -35,6 +37,7 @@ const RouteView = () => { const navigate = useNavigate(); const resolvedDriverId = currentDriver?.id || fallbackDriver?.id || currentRoute?.driver; const resolvedDriverName = currentDriver?.name || fallbackDriver?.name || ''; + const isSignatureRequestActive = signatureRequest?.status === 'active'; const routeStatusOptions = [ { value: '', label: 'Not Started' }, { value: ROUTE_STATUS.ENROUTE, label: 'En Route' }, @@ -67,6 +70,13 @@ const RouteView = () => { const openModal = () => { setShowVehicleDetails(true); } + const openResetSignatureConfirmModal = () => { + setShowResetSignatureConfirmModal(true); + } + const closeResetSignatureConfirmModal = () => { + if (isResettingSignature) return; + setShowResetSignatureConfirmModal(false); + } const getRelatedOutboundRoutesForThisView = () => { if (allRoutes.find(item => item.id === params.id)) { return allRoutes.filter(item => item.type==='outbound'); @@ -113,6 +123,53 @@ const RouteView = () => { setSignatureRequest(data.data); }) } + const resetSignatureForResign = async () => { + if (!currentRoute?.id || !currentRoute?.schedule_date) return; + if (!resolvedDriverId && !signatureRequest?.driver_id) { + window.alert('Driver is not assigned for this route.'); + return; + } + setIsResettingSignature(true); + try { + const dateArr = moment(currentRoute?.schedule_date)?.format('MM/DD/YYYY')?.split('/') || []; + const month = dateArr[0]; + const day = dateArr[1]; + const candidateDriverIds = Array.from(new Set([ + resolvedDriverId, + currentRoute?.driver, + routeSnapshot?.driver, + signatureRequest?.driver_id + ].filter(Boolean))); + await Promise.all(candidateDriverIds.map((driverId) => { + const signatureKey = `${currentRoute?.id}_${driverId}_${month}_${day}`; + return CustomerService.deleteFile({ name: signatureKey }).catch(() => null); + })); + + if (signatureRequest?.id) { + await SignatureRequestService.updateSignatureRequest(signatureRequest.id, { status: 'active' }); + const refreshedRequest = await SignatureRequestService.getSignatureRequestById(signatureRequest.id); + setSignatureRequest(refreshedRequest?.data); + } else { + const newRequest = await SignatureRequestService.createNewSignatureRequest({ + driver_id: resolvedDriverId || currentRoute?.driver, + driver_name: resolvedDriverName, + route_id: currentRoute?.id, + route_date: currentRoute?.schedule_date, + route_name: currentRoute?.name, + status: 'active', + }); + setSignatureRequest(newRequest?.data); + } + setSignature(undefined); + setShowResetSignatureConfirmModal(false); + window.alert('Signature has been reset. Driver can sign again.'); + } catch (error) { + console.error('Error resetting signature:', error); + window.alert('Failed to reset signature. Please try again.'); + } finally { + setIsResettingSignature(false); + } + } const saveRouteStatus = async () => { if (!currentRoute?.id || isSavingRouteStatus) return; try { @@ -359,14 +416,14 @@ const RouteView = () => {
Driver Signature
{signature && } - + {canEditRoutes && }
} - {!signature && !signatureRequest &&
+ {!signature && !isSignatureRequestActive &&
Signature Request
} - {!signature && signatureRequest &&
+ {!signature && isSignatureRequestActive &&
Please send this to the driver to get signature:
{`${window.location.origin}/signature/${signatureRequest?.id}`}
} @@ -443,6 +500,22 @@ const RouteView = () => { + + + Reset Driver Signature + + + Are you sure you want to reset this signature? The driver will need to sign again. + + + + + +