This commit is contained in:
@@ -4,11 +4,11 @@ import { useNavigate, useSearchParams } from "react-router-dom";
|
|||||||
import { selectInboundRoutes, selectTomorrowAllRoutes, selectTomorrowInboundRoutes, selectTomorrowOutboundRoutes, selectHistoryInboundRoutes, selectHistoryRoutes, selectHistoryOutboundRoutes, selectOutboundRoutes, selectAllRoutes, selectAllActiveVehicles, selectAllActiveDrivers, transRoutesSlice } from "./../../store";
|
import { selectInboundRoutes, selectTomorrowAllRoutes, selectTomorrowInboundRoutes, selectTomorrowOutboundRoutes, selectHistoryInboundRoutes, selectHistoryRoutes, selectHistoryOutboundRoutes, selectOutboundRoutes, selectAllRoutes, selectAllActiveVehicles, selectAllActiveDrivers, transRoutesSlice } from "./../../store";
|
||||||
import RoutesSection from "./RoutesSection";
|
import RoutesSection from "./RoutesSection";
|
||||||
import PersonnelSection from "./PersonnelSection";
|
import PersonnelSection from "./PersonnelSection";
|
||||||
import { AuthService, CustomerService, TransRoutesService, DriverService, EventsService, SignatureRequestService, DailyRoutesTemplateService } from "../../services";
|
import { AuthService, CustomerService, TransRoutesService, DriverService, EventsService, DailyRoutesTemplateService } from "../../services";
|
||||||
import { PERSONAL_ROUTE_STATUS, ROUTE_STATUS, reportRootUrl, CUSTOMER_TYPE_TEXT, PERSONAL_ROUTE_STATUS_TEXT, PICKUP_STATUS, PICKUP_STATUS_TEXT, REPORT_TYPE } from "../../shared";
|
import { PERSONAL_ROUTE_STATUS, ROUTE_STATUS, reportRootUrl, CUSTOMER_TYPE_TEXT, PERSONAL_ROUTE_STATUS_TEXT, PICKUP_STATUS, PICKUP_STATUS_TEXT, REPORT_TYPE } from "../../shared";
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import DatePicker from "react-datepicker";
|
import DatePicker from "react-datepicker";
|
||||||
import { CalendarWeek, ClockHistory, Copy, Download, Eraser, Plus, Clock, Send, Filter, CalendarCheck, Check } from "react-bootstrap-icons";
|
import { CalendarWeek, ClockHistory, Copy, Download, Eraser, Plus, Clock, Filter, CalendarCheck, Check } from "react-bootstrap-icons";
|
||||||
import { Breadcrumb, Tabs, Tab, Dropdown, Spinner, Modal, Button, ProgressBar } from "react-bootstrap";
|
import { Breadcrumb, Tabs, Tab, Dropdown, Spinner, Modal, Button, ProgressBar } from "react-bootstrap";
|
||||||
import RouteCustomerTable from "./RouteCustomerTable";
|
import RouteCustomerTable from "./RouteCustomerTable";
|
||||||
|
|
||||||
@@ -40,10 +40,8 @@ const RoutesDashboard = () => {
|
|||||||
const [routesForSignature, setRoutesForSignature] = useState(allRoutes);
|
const [routesForSignature, setRoutesForSignature] = useState(allRoutes);
|
||||||
const [currentTab, setCurrentTab] = useState('allRoutesOverview');
|
const [currentTab, setCurrentTab] = useState('allRoutesOverview');
|
||||||
const [sorting, setSorting] = useState({key: '', order: ''});
|
const [sorting, setSorting] = useState({key: '', order: ''});
|
||||||
const [selectedItems, setSelectedItems] = useState([]);
|
|
||||||
const [showFilterDropdown, setShowFilterDropdown] = useState(false);
|
const [showFilterDropdown, setShowFilterDropdown] = useState(false);
|
||||||
const [showDateDropdown, setShowDateDropdown] = useState(false);
|
const [showDateDropdown, setShowDateDropdown] = useState(false);
|
||||||
const [showSignatureRequestLoading, setShowSignatureRequestLoading] = useState(false);
|
|
||||||
const [routesForShowing, setRoutesForShowing] = useState(allRoutes);
|
const [routesForShowing, setRoutesForShowing] = useState(allRoutes);
|
||||||
const [routesInboundForShowing, setRoutesInboundForShowing] = useState(inboundRoutes);
|
const [routesInboundForShowing, setRoutesInboundForShowing] = useState(inboundRoutes);
|
||||||
const [routesOutboundForShowing, setRoutesOutboundForShowing] = useState(outboundRoutes);
|
const [routesOutboundForShowing, setRoutesOutboundForShowing] = useState(outboundRoutes);
|
||||||
@@ -750,7 +748,6 @@ const RoutesDashboard = () => {
|
|||||||
setCurrentTab(k);
|
setCurrentTab(k);
|
||||||
setKeyword('');
|
setKeyword('');
|
||||||
setSorting({key: '', order: ''});
|
setSorting({key: '', order: ''});
|
||||||
setSelectedItems([]);
|
|
||||||
setDateSelected(new Date());
|
setDateSelected(new Date());
|
||||||
setOriginDateSelected(undefined);
|
setOriginDateSelected(undefined);
|
||||||
setTargetedDateSelected(undefined);
|
setTargetedDateSelected(undefined);
|
||||||
@@ -1141,43 +1138,6 @@ const RoutesDashboard = () => {
|
|||||||
setSorting(newSorting);
|
setSorting(newSorting);
|
||||||
}
|
}
|
||||||
|
|
||||||
const toggleSelectedAllItems = () => {
|
|
||||||
const filteredSignatures = routesForSignature && routesForSignature.filter((route) => {
|
|
||||||
if (!selectedDriver) {
|
|
||||||
return route;
|
|
||||||
} else {
|
|
||||||
return route?.driver === selectedDriver;
|
|
||||||
}
|
|
||||||
}).filter(((route) => route.name?.toLowerCase().includes(keyword?.toLowerCase()) || drivers.find((d) => d.id === route?.driver)?.name?.toLowerCase().includes(keyword?.toLowerCase())));
|
|
||||||
if (selectedItems.length !== filteredSignatures.length || selectedItems.length === 0) {
|
|
||||||
const newSelectedItems = [...filteredSignatures].map((sig) => sig.id);
|
|
||||||
setSelectedItems(newSelectedItems);
|
|
||||||
} else {
|
|
||||||
setSelectedItems([]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const toggleItem = (id) => {
|
|
||||||
if (selectedItems.includes(id)) {
|
|
||||||
const newSelectedItems = [...selectedItems].filter((item) => item !== id);
|
|
||||||
setSelectedItems(newSelectedItems);
|
|
||||||
} else {
|
|
||||||
const newSelectedItems = [...selectedItems, id];
|
|
||||||
setSelectedItems(newSelectedItems);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const checkSelectAll = () => {
|
|
||||||
const filteredSignatures = routesForSignature && routesForSignature.filter((route) => {
|
|
||||||
if (!selectedDriver) {
|
|
||||||
return route;
|
|
||||||
} else {
|
|
||||||
return route?.driver === selectedDriver;
|
|
||||||
}
|
|
||||||
}).filter((route) => route.name?.toLowerCase().includes(keyword?.toLowerCase()) || drivers.find((d) => d.id === route?.driver)?.name?.toLowerCase().includes(keyword?.toLowerCase()));
|
|
||||||
return selectedItems.length === filteredSignatures.length && selectedItems.length > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const pickOriginDateSelected = (v) => {
|
const pickOriginDateSelected = (v) => {
|
||||||
setOriginDateSelected(v);
|
setOriginDateSelected(v);
|
||||||
setDateSelected(v);
|
setDateSelected(v);
|
||||||
@@ -1452,24 +1412,6 @@ const RoutesDashboard = () => {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const generateSignatureRequest = async () => {
|
|
||||||
setShowSignatureRequestLoading(true);
|
|
||||||
for (const id of selectedItems) {
|
|
||||||
const currentRoute = routesForSignature.find(route => route?.id === id);
|
|
||||||
const currentDriver = drivers.find(driver => driver?.id === currentRoute?.driver);
|
|
||||||
await SignatureRequestService.createNewSignatureRequest({
|
|
||||||
driver_id: currentRoute?.id,
|
|
||||||
driver_name: currentDriver?.name,
|
|
||||||
route_id: currentRoute?.id,
|
|
||||||
route_date: currentRoute?.schedule_date,
|
|
||||||
route_name: currentRoute?.name,
|
|
||||||
status: 'active',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
setShowSignatureRequestLoading(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Save template modal handlers
|
// Save template modal handlers
|
||||||
const openSaveTemplateModal = () => {
|
const openSaveTemplateModal = () => {
|
||||||
setShowSaveTemplateModal(true);
|
setShowSaveTemplateModal(true);
|
||||||
@@ -1786,7 +1728,6 @@ const RoutesDashboard = () => {
|
|||||||
<table className="personnel-info-table me-4">
|
<table className="personnel-info-table me-4">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th className="th-checkbox"><input type="checkbox" checked={checkSelectAll()} onClick={() => toggleSelectedAllItems()}></input></th>
|
|
||||||
<th className="th-index">No.</th>
|
<th className="th-index">No.</th>
|
||||||
{
|
{
|
||||||
columns.map((column, index) => <th className="sortable-header" key={index}>
|
columns.map((column, index) => <th className="sortable-header" key={index}>
|
||||||
@@ -1806,7 +1747,6 @@ const RoutesDashboard = () => {
|
|||||||
}
|
}
|
||||||
}).filter((route) => route.name?.toLowerCase().includes(keyword?.toLowerCase()) || drivers.find((d) => d.id === route?.driver)?.name?.toLowerCase().includes(keyword?.toLowerCase()))?.map(({id, name, end_time, driver, type, signature}, index) => {
|
}).filter((route) => route.name?.toLowerCase().includes(keyword?.toLowerCase()) || drivers.find((d) => d.id === route?.driver)?.name?.toLowerCase().includes(keyword?.toLowerCase()))?.map(({id, name, end_time, driver, type, signature}, index) => {
|
||||||
return (<tr key={index}>
|
return (<tr key={index}>
|
||||||
<td className="td-checkbox"><input type="checkbox" checked={selectedItems.includes(id)} onClick={()=>toggleItem(id)}/></td>
|
|
||||||
<td className="td-index">{index + 1}</td>
|
<td className="td-index">{index + 1}</td>
|
||||||
<td>{name}</td>
|
<td>{name}</td>
|
||||||
<td>{drivers.find((d) => d.id === driver)?.name}</td>
|
<td>{drivers.find((d) => d.id === driver)?.name}</td>
|
||||||
@@ -1925,8 +1865,6 @@ const RoutesDashboard = () => {
|
|||||||
</Dropdown.Toggle>
|
</Dropdown.Toggle>
|
||||||
<Dropdown.Menu as={customMenu}/>
|
<Dropdown.Menu as={customMenu}/>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
<button className="btn btn-primary me-2" onClick={() => generateSignatureRequest()}><Send size={16} className="me-2"></Send>{ showSignatureRequestLoading ? <Spinner size={12}></Spinner> : 'Send Signature Link'}</button>
|
|
||||||
<button className="btn btn-primary"><Download size={16} className="me-2"></Download>Export</button>
|
|
||||||
</> }
|
</> }
|
||||||
|
|
||||||
{ currentTab === 'allRoutesStatus' && <>
|
{ currentTab === 'allRoutesStatus' && <>
|
||||||
|
|||||||
Reference in New Issue
Block a user