mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
@@ -30,13 +30,26 @@ export default function ReportsPage() {
|
||||
const getDateRange = () => {
|
||||
const end = new Date();
|
||||
end.setHours(23, 59, 59, 999);
|
||||
const start = new Date();
|
||||
|
||||
if (dateRange === 'custom') {
|
||||
if (startDate && endDate) {
|
||||
return startDate <= endDate
|
||||
? { startDate, endDate }
|
||||
: { startDate: endDate, endDate: startDate };
|
||||
}
|
||||
const fallbackStart = new Date(end);
|
||||
fallbackStart.setDate(end.getDate() - 30);
|
||||
return {
|
||||
startDate: fallbackStart.toISOString().split('T')[0],
|
||||
endDate: end.toISOString().split('T')[0],
|
||||
};
|
||||
}
|
||||
|
||||
const start = new Date(end);
|
||||
switch (dateRange) {
|
||||
case '7': start.setDate(end.getDate() - 7); break;
|
||||
case '30': start.setDate(end.getDate() - 30); break;
|
||||
case '90': start.setDate(end.getDate() - 90); break;
|
||||
default:
|
||||
if (startDate && endDate) return { startDate, endDate };
|
||||
}
|
||||
return {
|
||||
startDate: start.toISOString().split('T')[0],
|
||||
|
||||
@@ -74,6 +74,7 @@ export default function PassengersReportPage() {
|
||||
const [tab, setTab] = useState<Tab>("occupancy");
|
||||
const [listSearch, setListSearch] = useState("");
|
||||
const [filterOrigin, setFilterOrigin] = useState("");
|
||||
const [filterDestination, setFilterDestination] = useState("");
|
||||
const [filterSeatClass, setFilterSeatClass] = useState("");
|
||||
const [filterCoachNumber, setFilterCoachNumber] = useState("");
|
||||
|
||||
@@ -110,17 +111,23 @@ export default function PassengersReportPage() {
|
||||
const originOptions = [
|
||||
...new Set(passengerList.map((p) => p.origin).filter(Boolean)),
|
||||
].sort() as string[];
|
||||
const destinationOptions = [
|
||||
...new Set(passengerList.map((p) => p.destination).filter(Boolean)),
|
||||
].sort() as string[];
|
||||
|
||||
const filteredList = passengerList
|
||||
.filter((p) => {
|
||||
if (filterCoachNumber && p.coachNumber !== filterCoachNumber) return false;
|
||||
if (filterOrigin && p.origin !== filterOrigin) return false;
|
||||
if (filterDestination && p.destination !== filterDestination) return false;
|
||||
if (filterSeatClass && p.seatClassName !== filterSeatClass) return false;
|
||||
if (listSearch.trim()) {
|
||||
const q = listSearch.toLowerCase();
|
||||
return (
|
||||
p.passengerName.toLowerCase().includes(q) ||
|
||||
p.bookingRef.toLowerCase().includes(q) ||
|
||||
(p.origin ?? '').toLowerCase().includes(q) ||
|
||||
(p.destination ?? '').toLowerCase().includes(q) ||
|
||||
(p.idDocumentNumber ?? "").toLowerCase().includes(q) ||
|
||||
(p.passportNumber ?? "").toLowerCase().includes(q)
|
||||
);
|
||||
@@ -207,6 +214,7 @@ export default function PassengersReportPage() {
|
||||
setListSearch("");
|
||||
setFilterCoachNumber("");
|
||||
setFilterOrigin("");
|
||||
setFilterDestination("");
|
||||
setFilterSeatClass("");
|
||||
}}
|
||||
disabled={loadingSchedules}
|
||||
@@ -499,6 +507,18 @@ export default function PassengersReportPage() {
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
<select
|
||||
className="input w-36"
|
||||
value={filterDestination}
|
||||
onChange={(e) => { setFilterDestination(e.target.value); resetListPage(); }}
|
||||
>
|
||||
<option value="">All destinations</option>
|
||||
{destinationOptions.map((d) => (
|
||||
<option key={d} value={d}>
|
||||
{d}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
{passengerList.length > 0 && (
|
||||
<ActionButton
|
||||
icon={Download}
|
||||
|
||||
Reference in New Issue
Block a user