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', 'Create&Edit_Route Template',
'View_Driver Assignment for Appointment', 'View_Driver Assignment for Appointment',
'Edit_Driver Assignment for Appointment', 'Edit_Driver Assignment for Appointment',
'isDriver',
'View_Provider Info', 'View_Provider Info',
'Create & Edit _Provider Info', 'Create & Edit _Provider Info',
'View_Appointment Request', 'View_Appointment Request',

View File

@@ -1,10 +1,10 @@
import React, {useEffect, useState, useRef} from "react"; import React, {useEffect, useState, useRef} from "react";
import { useSelector,useDispatch } from "react-redux"; import { useSelector,useDispatch } from "react-redux";
import { useParams, useNavigate } from "react-router-dom"; 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 { Breadcrumb, Tabs, Tab } from "react-bootstrap";
import RouteCustomerEditor from "./RouteCustomerEditor"; 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 TimePicker from 'react-time-picker';
import 'react-time-picker/dist/TimePicker.css'; import 'react-time-picker/dist/TimePicker.css';
import moment from 'moment'; import moment from 'moment';
@@ -19,7 +19,6 @@ const RouteEdit = () => {
const allRoutes = useSelector(selectAllRoutes); const allRoutes = useSelector(selectAllRoutes);
const tomorrowRoutes = useSelector(selectTomorrowAllRoutes); const tomorrowRoutes = useSelector(selectTomorrowAllRoutes);
const historyRoutes = useSelector(selectHistoryRoutes); const historyRoutes = useSelector(selectHistoryRoutes);
const drivers = useSelector(selectAllActiveDrivers);
const vehicles = useSelector(selectAllActiveVehicles); 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 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 currentVehicle = vehicles.find(item => item.id === currentRoute?.vehicle ) || [];
@@ -35,11 +34,19 @@ const RouteEdit = () => {
const [estimatedStartTime, setEstimatedStartTime] = useState(undefined); const [estimatedStartTime, setEstimatedStartTime] = useState(undefined);
const [currentRoute, setCurrentRoute] = useState(undefined); const [currentRoute, setCurrentRoute] = useState(undefined);
const [allCustomers, setAllCustomers] = useState([]); const [allCustomers, setAllCustomers] = useState([]);
const [driverOptions, setDriverOptions] = useState([]);
const [unassignedCustomers, setUnassignedCustomers] = useState([]); const [unassignedCustomers, setUnassignedCustomers] = useState([]);
const [addCustomerToRoute, setAddCustomerToRoute] = useState(null); const [addCustomerToRoute, setAddCustomerToRoute] = useState(null);
const [attendanceAbsentCustomers, setAttendanceAbsentCustomers] = useState([]); // customers with attendance notes on route date const [attendanceAbsentCustomers, setAttendanceAbsentCustomers] = useState([]); // customers with attendance notes on route date
const initialCustomerListRef = useRef(null); const initialCustomerListRef = useRef(null);
const paramsQuery = new URLSearchParams(window.location.search); 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 scheduleDate = paramsQuery.get('dateSchedule');
const editSection = paramsQuery.get('editSection') const editSection = paramsQuery.get('editSection')
const hasUnsavedCustomerChanges = () => { const hasUnsavedCustomerChanges = () => {
@@ -302,6 +309,10 @@ const RouteEdit = () => {
CustomerService.getAllCustomers().then(data => { CustomerService.getAllCustomers().then(data => {
setAllCustomers(data?.data || []); setAllCustomers(data?.data || []);
}); });
EmployeeService.getAllEmployees().then((data) => {
const employees = data?.data || [];
setDriverOptions(employees.filter(isDriverEligibleEmployee));
});
}, []); }, []);
// Calculate unassigned customers when allCustomers or routes change // Calculate unassigned customers when allCustomers or routes change
@@ -489,7 +500,7 @@ const RouteEdit = () => {
<span className="required">*</span> <span className="required">*</span>
</div> </div>
<select value={newDriver} onChange={e => setNewDriver(e.target.value)}> <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> </select>
</div> </div>
<div className="me-4"> <div className="me-4">
@@ -584,33 +595,33 @@ const RouteEdit = () => {
<div className="app-main-content-fields-section short"> <div className="app-main-content-fields-section short">
<div className="field-body"> <div className="field-body">
<div className="field-label">Driver Name</div> <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>
<div className="field-body"> <div className="field-body">
<div className="field-label">Preferred Name</div> <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>
<div className="field-body"> <div className="field-body">
<div className="field-label">Job Title</div> <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>
<div className="field-body"> <div className="field-body">
<div className="field-label">Job Type</div> <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>
<div className="field-body"> <div className="field-body">
<div className="field-label">License Type</div> <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> </div>
<div className="app-main-content-fields-section short"> <div className="app-main-content-fields-section short">
<div className="field-body"> <div className="field-body">
<div className="field-label">Phone Number</div> <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>
<div className="field-body"> <div className="field-body">
<div className="field-label">Email</div> <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>
<div className="field-body"></div> <div className="field-body"></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', 'View_Route Template',
'Create&Edit_Route Template', 'Create&Edit_Route Template',
'View_Driver Assignment for Appointment', 'View_Driver Assignment for Appointment',
'Edit_Driver Assignment for Appointment' 'Edit_Driver Assignment for Appointment',
'isDriver'
], ],
Medical: [ Medical: [
'View_Provider Info', 'View_Provider Info',