deploy
All checks were successful
Build And Deploy Main / build-and-deploy (push) Successful in 31s

This commit is contained in:
2026-03-11 11:16:44 -04:00
parent dbdfd11caf
commit 4626e5fd69
3 changed files with 25 additions and 12 deletions

View File

@@ -54,6 +54,7 @@ const ALL_PERMISSIONS = [
'Create&Edit_Route Template',
'View_Driver Assignment for Appointment',
'Edit_Driver Assignment for Appointment',
'isDriver',
'View_Provider Info',
'Create & Edit _Provider Info',
'View_Appointment Request',

View File

@@ -1,10 +1,10 @@
import React, {useEffect, useState, useRef} from "react";
import { useSelector,useDispatch } from "react-redux";
import { useParams, useNavigate } from "react-router-dom";
import { selectAllRoutes, transRoutesSlice, selectTomorrowAllRoutes, selectAllActiveDrivers, selectAllActiveVehicles, selectHistoryRoutes } from "./../../store";
import { selectAllRoutes, transRoutesSlice, selectTomorrowAllRoutes, selectAllActiveVehicles, selectHistoryRoutes } from "./../../store";
import { Breadcrumb, Tabs, Tab } from "react-bootstrap";
import RouteCustomerEditor from "./RouteCustomerEditor";
import { AuthService, TransRoutesService, CustomerService, EventsService } from "../../services";
import { AuthService, TransRoutesService, CustomerService, EventsService, EmployeeService } from "../../services";
import TimePicker from 'react-time-picker';
import 'react-time-picker/dist/TimePicker.css';
import moment from 'moment';
@@ -19,7 +19,6 @@ const RouteEdit = () => {
const allRoutes = useSelector(selectAllRoutes);
const tomorrowRoutes = useSelector(selectTomorrowAllRoutes);
const historyRoutes = useSelector(selectHistoryRoutes);
const drivers = useSelector(selectAllActiveDrivers);
const vehicles = useSelector(selectAllActiveVehicles);
// 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 ) || [];
@@ -35,11 +34,19 @@ const RouteEdit = () => {
const [estimatedStartTime, setEstimatedStartTime] = useState(undefined);
const [currentRoute, setCurrentRoute] = useState(undefined);
const [allCustomers, setAllCustomers] = useState([]);
const [driverOptions, setDriverOptions] = useState([]);
const [unassignedCustomers, setUnassignedCustomers] = useState([]);
const [addCustomerToRoute, setAddCustomerToRoute] = useState(null);
const [attendanceAbsentCustomers, setAttendanceAbsentCustomers] = useState([]); // customers with attendance notes on route date
const initialCustomerListRef = useRef(null);
const paramsQuery = new URLSearchParams(window.location.search);
const isDriverEligibleEmployee = (employee) => {
if (!employee || employee.status !== 'active') return false;
const roles = Array.isArray(employee.roles) ? employee.roles.map((item) => `${item || ''}`.toLowerCase()) : [];
const permissions = Array.isArray(employee.permissions) ? employee.permissions : [];
return roles.includes('driver') || permissions.includes('isDriver');
};
const scheduleDate = paramsQuery.get('dateSchedule');
const editSection = paramsQuery.get('editSection')
const hasUnsavedCustomerChanges = () => {
@@ -302,6 +309,10 @@ const RouteEdit = () => {
CustomerService.getAllCustomers().then(data => {
setAllCustomers(data?.data || []);
});
EmployeeService.getAllEmployees().then((data) => {
const employees = data?.data || [];
setDriverOptions(employees.filter(isDriverEligibleEmployee));
});
}, []);
// Calculate unassigned customers when allCustomers or routes change
@@ -489,7 +500,7 @@ const RouteEdit = () => {
<span className="required">*</span>
</div>
<select value={newDriver} onChange={e => setNewDriver(e.target.value)}>
{drivers.map((driver) => <option key={driver.id} value={driver.id}>{driver.name}</option>)}
{driverOptions.map((driver) => <option key={driver.id} value={driver.id}>{driver.name}</option>)}
</select>
</div>
<div className="me-4">
@@ -584,33 +595,33 @@ const RouteEdit = () => {
<div className="app-main-content-fields-section short">
<div className="field-body">
<div className="field-label">Driver Name</div>
<div className="field-value">{drivers.find(item => item.id === newDriver)?.name}</div>
<div className="field-value">{driverOptions.find(item => item.id === newDriver)?.name}</div>
</div>
<div className="field-body">
<div className="field-label">Preferred Name</div>
<div className="field-value">{drivers.find(item => item.id === newDriver)?.name_cn}</div>
<div className="field-value">{driverOptions.find(item => item.id === newDriver)?.name_cn}</div>
</div>
<div className="field-body">
<div className="field-label">Job Title</div>
<div className="field-value">{drivers.find(item => item.id === newDriver)?.title}</div>
<div className="field-value">{driverOptions.find(item => item.id === newDriver)?.title}</div>
</div>
<div className="field-body">
<div className="field-label">Job Type</div>
<div className="field-value">{drivers.find(item => item.id === newDriver)?.employment_status}</div>
<div className="field-value">{driverOptions.find(item => item.id === newDriver)?.employment_status}</div>
</div>
<div className="field-body">
<div className="field-label">License Type</div>
<div className="field-value">{drivers.find(item => item.id === newDriver)?.license_type}</div>
<div className="field-value">{driverOptions.find(item => item.id === newDriver)?.license_type}</div>
</div>
</div>
<div className="app-main-content-fields-section short">
<div className="field-body">
<div className="field-label">Phone Number</div>
<div className="field-value">{drivers.find(item => item.id === newDriver)?.phone}</div>
<div className="field-value">{driverOptions.find(item => item.id === newDriver)?.phone}</div>
</div>
<div className="field-body">
<div className="field-label">Email</div>
<div className="field-value">{drivers.find(item => item.id === newDriver)?.email}</div>
<div className="field-value">{driverOptions.find(item => item.id === newDriver)?.email}</div>
</div>
<div className="field-body"></div>
<div className="field-body"></div>

View File

@@ -187,7 +187,8 @@ export const EMPLOYEE_PERMISSION_GROUPS = {
'View_Route Template',
'Create&Edit_Route Template',
'View_Driver Assignment for Appointment',
'Edit_Driver Assignment for Appointment'
'Edit_Driver Assignment for Appointment',
'isDriver'
],
Medical: [
'View_Provider Info',