Non-PPR Total
0
@@ -551,8 +564,8 @@
Callsign |
From |
To |
-
ETA / ETD |
-
Landed / Departed |
+
ETA / ETD / Called |
+
Landed / Departed / QSY |
Circuits |
@@ -671,11 +684,12 @@
if (status) url += `&status=${status}`;
// Fetch all data in parallel
- const [pprResponse, arrivalsResponse, departuresResponse, localFlightsResponse] = await Promise.all([
+ const [pprResponse, arrivalsResponse, departuresResponse, localFlightsResponse, overflightsResponse] = await Promise.all([
authenticatedFetch(url),
authenticatedFetch(`/api/v1/arrivals/?limit=10000${dateFrom ? `&date_from=${dateFrom}` : ''}${dateTo ? `&date_to=${dateTo}` : ''}`),
authenticatedFetch(`/api/v1/departures/?limit=10000${dateFrom ? `&date_from=${dateFrom}` : ''}${dateTo ? `&date_to=${dateTo}` : ''}`),
- authenticatedFetch(`/api/v1/local-flights/?limit=10000${dateFrom ? `&date_from=${dateFrom}` : ''}${dateTo ? `&date_to=${dateTo}` : ''}`)
+ authenticatedFetch(`/api/v1/local-flights/?limit=10000${dateFrom ? `&date_from=${dateFrom}` : ''}${dateTo ? `&date_to=${dateTo}` : ''}`),
+ authenticatedFetch(`/api/v1/overflights/?limit=10000${dateFrom ? `&date_from=${dateFrom}` : ''}${dateTo ? `&date_to=${dateTo}` : ''}`)
]);
if (!pprResponse.ok) {
@@ -739,6 +753,20 @@
})));
}
+ if (overflightsResponse.ok) {
+ const overflights = await overflightsResponse.json();
+ otherFlights.push(...overflights.map(f => ({
+ ...f,
+ flightType: 'OVERFLIGHT',
+ aircraft_type: f.type,
+ circuits: null,
+ timeField: f.call_dt,
+ fromField: f.departure_airfield,
+ toField: f.destination_airfield,
+ callsign: f.registration
+ })));
+ }
+
// Apply search filtering to other flights
if (search) {
const searchLower = search.toLowerCase();
@@ -816,6 +844,7 @@
});
// Other flights movements (excluding CANCELLED)
+ let overflightCount = 0;
otherFlights.filter(flight => flight.status !== 'CANCELLED').forEach(flight => {
if (flight.flightType === 'ARRIVAL') {
nonPprArrivals += 1;
@@ -828,17 +857,21 @@
// 2 movements (takeoff + landing) plus the circuit count
const circuits = flight.circuits || 0;
circuitsMovements += 2 + circuits;
+ } else if (flight.flightType === 'OVERFLIGHT') {
+ // 1 movement for each overflight (they're just talking to tower)
+ overflightCount += 1;
}
});
const pprTotal = pprArrivals + pprDepartures;
- const nonPprTotal = localFlightsMovements + circuitsMovements + nonPprArrivals + nonPprDepartures;
+ const nonPprTotal = localFlightsMovements + circuitsMovements + nonPprArrivals + nonPprDepartures + overflightCount;
const grandTotal = pprTotal + nonPprTotal;
// Update the summary display
document.getElementById('ppr-arrivals').textContent = pprArrivals;
document.getElementById('ppr-departures').textContent = pprDepartures;
document.getElementById('ppr-total').textContent = pprTotal;
+ document.getElementById('overflights-count').textContent = overflightCount;
document.getElementById('local-flights-movements').textContent = localFlightsMovements;
document.getElementById('circuits-movements').textContent = circuitsMovements;
@@ -945,9 +978,18 @@
const from = flight.fromField || '-';
const to = flight.toField || '-';
const timeDisplay = flight.timeField ? formatDateTime(flight.timeField) : '-';
- const actualDisplay = flight.flightType === 'ARRIVAL'
- ? (flight.landed_dt ? formatDateTime(flight.landed_dt) : '-')
- : (flight.departed_dt ? formatDateTime(flight.departed_dt) : '-');
+
+ // Different display for different flight types
+ let actualDisplay = '-';
+ if (flight.flightType === 'ARRIVAL') {
+ actualDisplay = flight.landed_dt ? formatDateTime(flight.landed_dt) : '-';
+ } else if (flight.flightType === 'OVERFLIGHT') {
+ // For overflights, show qsy_dt (frequency change time)
+ actualDisplay = flight.qsy_dt ? formatDateTime(flight.qsy_dt) : '-';
+ } else {
+ actualDisplay = flight.departed_dt ? formatDateTime(flight.departed_dt) : '-';
+ }
+
const status = flight.status || (flight.flightType === 'CIRCUIT' ? 'COMPLETED' : 'PENDING');
const circuits = (flight.flightType === 'CIRCUIT' || flight.flightType === 'LOCAL') ? (flight.circuits > 0 ? flight.circuits : '-') : '-';