diff --git a/client/src/components/trans-routes/RouteView.js b/client/src/components/trans-routes/RouteView.js
index 057eed9..581862f 100644
--- a/client/src/components/trans-routes/RouteView.js
+++ b/client/src/components/trans-routes/RouteView.js
@@ -3,7 +3,7 @@ import { useSelector } from "react-redux";
import { useParams, useNavigate } from "react-router-dom";
import { selectAllRoutes, selectTomorrowAllRoutes, selectAllActiveDrivers, selectAllActiveVehicles, selectHistoryRoutes } from "./../../store";
import PersonnelSection from "./PersonnelSection";
-import { AuthService, CustomerService, SignatureRequestService } from "../../services";
+import { AuthService, CustomerService, SignatureRequestService, EmployeeService } from "../../services";
import moment from 'moment';
import { Breadcrumb, Tabs, Tab, Dropdown, Spinner, Modal, Button } from "react-bootstrap";
import { Download, Pencil } from "react-bootstrap-icons";
@@ -19,6 +19,7 @@ const RouteView = () => {
const currentRoute = (allRoutes.find(item => item.id === params.id)) || (tomorrowRoutes.find(item => item.id === params.id)) || (historyRoutes.find(item => item.id === params.id));
const currentVehicle = vehicles.find(item => item.id === currentRoute?.vehicle );
const currentDriver = drivers.find(item => item.id === currentRoute?.driver);
+ const [fallbackDriver, setFallbackDriver] = useState(undefined);
const [showVehicleDetails, setShowVehicleDetails] = useState(false);
const [signature, setSignature] = useState(undefined);
const [signatureRequest, setSignatureRequest] = useState(undefined);
@@ -26,6 +27,8 @@ const RouteView = () => {
const scheduleDate = paramsQuery.get('dateSchedule');
const navigate = useNavigate();
+ const resolvedDriverId = currentDriver?.id || fallbackDriver?.id || currentRoute?.driver;
+ const resolvedDriverName = currentDriver?.name || fallbackDriver?.name || '';
const closeModal = () => {
setShowVehicleDetails(false);
}
@@ -62,9 +65,13 @@ const RouteView = () => {
}
}
const generateSignatureRequest = () => {
+ if (!resolvedDriverId) {
+ window.alert('Driver is not assigned for this route.');
+ return;
+ }
SignatureRequestService.createNewSignatureRequest({
- driver_id: currentDriver?.id,
- driver_name: currentDriver?.name,
+ driver_id: resolvedDriverId,
+ driver_name: resolvedDriverName,
route_id: currentRoute?.id,
route_date: currentRoute?.schedule_date,
route_name: currentRoute?.name,
@@ -73,18 +80,32 @@ const RouteView = () => {
setSignatureRequest(data.data);
})
}
+ useEffect(() => {
+ if (!currentRoute?.driver || currentDriver?.id) {
+ setFallbackDriver(undefined);
+ return;
+ }
+ EmployeeService.getEmployee(currentRoute?.driver)
+ .then((data) => {
+ setFallbackDriver(data?.data);
+ })
+ .catch(() => {
+ setFallbackDriver(undefined);
+ });
+ }, [currentRoute?.driver, currentDriver?.id]);
+
useEffect(() => {
const dateArr = moment(currentRoute?.schedule_date)?.format('MM/DD/YYYY')?.split('/') || [];
CustomerService.getAvatar(`${currentRoute?.id}_${currentRoute?.driver}_${dateArr[0]}_${dateArr[1]}`).then(data => {
setSignature(data.data);
});
- SignatureRequestService.getAllSignatureRequests({driver_id: currentDriver?.id, route_id: currentRoute?.id, route_date: currentRoute?.scheduleDate}).then((data) => {
+ SignatureRequestService.getAllSignatureRequests({driver_id: resolvedDriverId, route_id: currentRoute?.id, route_date: currentRoute?.schedule_date}).then((data) => {
if (data?.data?.length > 0) {
setSignatureRequest(data?.data[0]);
}
})
- }, [currentRoute]);
+ }, [currentRoute, resolvedDriverId]);
return (
<>
@@ -119,7 +140,7 @@ const RouteView = () => {
Driver
-
{currentDriver?.name}
+
{resolvedDriverName || 'Not assigned'}
Route Type
@@ -184,7 +205,7 @@ const RouteView = () => {
- {currentRoute &&
}
+ {currentRoute && }
diff --git a/client/src/components/trans-routes/RoutesDashboard.js b/client/src/components/trans-routes/RoutesDashboard.js
index 6adaf84..1911364 100644
--- a/client/src/components/trans-routes/RoutesDashboard.js
+++ b/client/src/components/trans-routes/RoutesDashboard.js
@@ -81,6 +81,7 @@ const RoutesDashboard = () => {
const [templates, setTemplates] = useState([]);
const [selectedTemplateId, setSelectedTemplateId] = useState('');
const [applyingTemplate, setApplyingTemplate] = useState(false);
+ const [pageLoading, setPageLoading] = useState(false);
const params = new URLSearchParams(window.location.search);
@@ -159,6 +160,7 @@ const RoutesDashboard = () => {
}, [dispatch, fetchAllRoutes])
useEffect(() => {
+ setPageLoading(true);
if (scheduleDate) {
const [year, month, day] = scheduleDate?.split('-').map(Number);
setDateSelected(new Date(year, month-1, day));
@@ -166,21 +168,23 @@ const RoutesDashboard = () => {
setDateSelected(new Date())
}
const site = EventsService.site;
- DriverService.getAllActiveDrivers('driver', 'active').then((data) => {
- setDriverList(data.data);
- });
- CustomerService.getAllCustomers().then((data) => setCustomers(data?.data));
- CustomerService.getAvatar(`center_director_signature_site_${site}`).then(data => {
- if (data?.data) {
- setDirectorSignature(data?.data)
- }
- });
-
- // Fetch all daily routes templates
- DailyRoutesTemplateService.getAll().then((response) => {
- setTemplates(response.data || []);
- }).catch(err => {
- console.error('Error fetching templates:', err);
+ Promise.all([
+ DriverService.getAllActiveDrivers('driver', 'active').then((data) => {
+ setDriverList(data.data);
+ }),
+ CustomerService.getAllCustomers().then((data) => setCustomers(data?.data)),
+ CustomerService.getAvatar(`center_director_signature_site_${site}`).then(data => {
+ if (data?.data) {
+ setDirectorSignature(data?.data)
+ }
+ }).catch(() => {}),
+ DailyRoutesTemplateService.getAll().then((response) => {
+ setTemplates(response.data || []);
+ }).catch(err => {
+ console.error('Error fetching templates:', err);
+ })
+ ]).finally(() => {
+ setPageLoading(false);
});
}, []);
@@ -1071,6 +1075,11 @@ const RoutesDashboard = () => {
return (
<>
+ {pageLoading &&
+
+ Loading...
+
+
}
Transportation
diff --git a/client/src/services/DriverService.js b/client/src/services/DriverService.js
index d61a74b..47a5f44 100644
--- a/client/src/services/DriverService.js
+++ b/client/src/services/DriverService.js
@@ -26,7 +26,7 @@ const updateDriver = (id, data) => {
data.roles = ['driver'];
} else {
if (data.roles && !data.roles.includes('driver')) {
- data.roles.push('dirver');
+ data.roles.push('driver');
}
}
return http.put(`/employees/${id}`, data);
@@ -51,7 +51,7 @@ const updateDriverInStaff = (id, data) => {
data.roles = ['driver'];
} else {
if (data.roles && !data.roles.includes('driver')) {
- data.roles.push('dirver');
+ data.roles.push('driver');
}
}
return http.put(`/staffs/${id}`, data);