diff --git a/app/controllers/employee.controller.js b/app/controllers/employee.controller.js index d35b5d9..c42c27a 100644 --- a/app/controllers/employee.controller.js +++ b/app/controllers/employee.controller.js @@ -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', diff --git a/client/src/components/trans-routes/RouteEdit.js b/client/src/components/trans-routes/RouteEdit.js index 00dac77..afbe697 100644 --- a/client/src/components/trans-routes/RouteEdit.js +++ b/client/src/components/trans-routes/RouteEdit.js @@ -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 = () => { *