Info display tweaks

This commit is contained in:
James Pattinson
2025-12-10 13:29:12 +00:00
parent 86f1dc65f4
commit f4b69aace0
6 changed files with 103 additions and 31 deletions

View File

@@ -564,7 +564,7 @@
</div>
<div class="menu-buttons">
<button class="btn btn-success" onclick="openNewPPRModal()">
New PPR Entry
New PPR
</button>
<button class="btn btn-primary" onclick="window.open('reports.html', '_blank')">
📊 Reports
@@ -587,7 +587,7 @@
<!-- Arrivals Table -->
<div class="ppr-table">
<div class="table-header">
🛬 Today's Arrivals - <span id="arrivals-count">0</span> entries
🛬 Pending Arrivals - <span id="arrivals-count">0</span>
</div>
<div id="arrivals-loading" class="loading">
@@ -614,15 +614,14 @@
</div>
<div id="arrivals-no-data" class="no-data" style="display: none;">
<h3>No arrivals for today</h3>
<p>No NEW or CONFIRMED arrivals scheduled for today.</p>
<h3>No Pending Arrivals</h3>
</div>
</div>
<!-- Departures Table -->
<div class="ppr-table" style="margin-top: 2rem;">
<div class="table-header">
🛫 Today's Departures - <span id="departures-count">0</span> entries
🛫 Pending Departures - <span id="departures-count">0</span>
</div>
<div id="departures-loading" class="loading">
@@ -650,7 +649,7 @@
</div>
<div id="departures-no-data" class="no-data" style="display: none;">
<h3>No departures for today</h3>
<h3>No Pending Departures</h3>
<p>No aircraft currently landed and ready to depart.</p>
</div>
</div>
@@ -1324,22 +1323,26 @@
document.getElementById('arrivals-no-data').style.display = 'none';
try {
// Always load today's date
const today = new Date().toISOString().split('T')[0];
let url = `/api/v1/pprs/?limit=1000&date_from=${today}&date_to=${today}`;
const response = await authenticatedFetch(url);
// Load all PPRs and filter client-side for today's arrivals
// We filter by ETA date (not ETD) and NEW/CONFIRMED status
const response = await authenticatedFetch('/api/v1/pprs/?limit=1000');
if (!response.ok) {
throw new Error('Failed to fetch arrivals');
}
const allPPRs = await response.json();
const today = new Date().toISOString().split('T')[0];
// Filter for arrivals (NEW and CONFIRMED with ETA only)
const arrivals = allPPRs.filter(ppr =>
(ppr.status === 'NEW' || ppr.status === 'CONFIRMED') && ppr.eta
);
// Filter for arrivals with ETA today and NEW or CONFIRMED status
const arrivals = allPPRs.filter(ppr => {
if (!ppr.eta || (ppr.status !== 'NEW' && ppr.status !== 'CONFIRMED')) {
return false;
}
// Extract date from ETA (UTC)
const etaDate = ppr.eta.split('T')[0];
return etaDate === today;
});
displayArrivals(arrivals);
} catch (error) {
@@ -1359,20 +1362,26 @@
document.getElementById('departures-no-data').style.display = 'none';
try {
// Always load today's date
const today = new Date().toISOString().split('T')[0];
let url = `/api/v1/pprs/?limit=1000&date_from=${today}&date_to=${today}`;
const response = await authenticatedFetch(url);
// Load all PPRs and filter client-side for today's departures
// We filter by ETD date and LANDED status only (exclude DEPARTED)
const response = await authenticatedFetch('/api/v1/pprs/?limit=1000');
if (!response.ok) {
throw new Error('Failed to fetch departures');
}
const allPPRs = await response.json();
const today = new Date().toISOString().split('T')[0];
// Filter for departures (LANDED status only)
const departures = allPPRs.filter(ppr => ppr.status === 'LANDED');
// Filter for departures with ETD today and LANDED status only
const departures = allPPRs.filter(ppr => {
if (!ppr.etd || ppr.status !== 'LANDED') {
return false;
}
// Extract date from ETD (UTC)
const etdDate = ppr.etd.split('T')[0];
return etdDate === today;
});
displayDepartures(departures);
} catch (error) {
@@ -1548,7 +1557,7 @@
isNewPPR = true;
currentPPRId = null;
etdManuallyEdited = false; // Reset the manual edit flag for new PPR
document.getElementById('modal-title').textContent = 'New PPR Entry';
document.getElementById('modal-title').textContent = 'New PPR';
document.getElementById('delete-btn').style.display = 'none';
document.getElementById('journal-section').style.display = 'none';
document.querySelector('.quick-actions').style.display = 'none';

View File

@@ -309,7 +309,7 @@
// Show landed time if available, otherwise ETA
let timeDisplay;
if (arrival.status === 'LANDED' && arrival.landed_dt) {
if ((arrival.status === 'LANDED' || arrival.status === 'DEPARTED') && arrival.landed_dt) {
const time = convertToLocalTime(arrival.landed_dt);
timeDisplay = `<div style="display: flex; align-items: center; gap: 8px;"><span style="color: #27ae60; font-weight: bold;">${time}</span><span style="font-size: 0.7em; background: #27ae60; color: white; padding: 2px 4px; border-radius: 3px; white-space: nowrap;">LANDED</span></div>`;
} else {

View File

@@ -454,6 +454,41 @@
console.log('Source:', window.PPR_CONFIG?.apiBase ? 'config.js' : 'fallback');
console.log('=======================');
// Track if user has manually edited ETD
let etdManuallyEdited = false;
// Function to update ETD based on ETA (2 hours later)
function updateETDFromETA() {
// Only auto-update if user hasn't manually edited ETD
if (etdManuallyEdited) {
return;
}
const etaDate = document.getElementById('eta-date').value;
const etaTime = document.getElementById('eta-time').value;
if (etaDate && etaTime) {
// Parse ETA
const eta = new Date(`${etaDate}T${etaTime}`);
// Calculate ETD (2 hours after ETA)
const etd = new Date(eta.getTime() + 2 * 60 * 60 * 1000);
// Format ETD
const etdDateStr = `${etd.getFullYear()}-${String(etd.getMonth() + 1).padStart(2, '0')}-${String(etd.getDate()).padStart(2, '0')}`;
const etdTimeStr = `${String(etd.getHours()).padStart(2, '0')}:${String(etd.getMinutes()).padStart(2, '0')}`;
// Update ETD fields
document.getElementById('etd-date').value = etdDateStr;
document.getElementById('etd-time').value = etdTimeStr;
}
}
// Function to mark ETD as manually edited
function markETDAsManuallyEdited() {
etdManuallyEdited = true;
}
// Iframe resizing functionality
function sendHeightToParent() {
const height = document.body.scrollHeight || document.documentElement.scrollHeight;
@@ -814,9 +849,9 @@
const nextHour = new Date(now);
nextHour.setHours(now.getHours() + 1, 0, 0, 0);
// ETD is 1 hour after ETA
// ETD is 2 hours after ETA
const etd = new Date(nextHour);
etd.setHours(nextHour.getHours() + 1);
etd.setHours(nextHour.getHours() + 2);
// Format date and time for separate inputs
function formatDate(date) {
@@ -845,6 +880,14 @@
document.addEventListener('DOMContentLoaded', function() {
initializeTimeDropdowns();
setDefaultDateTime();
// Add event listeners to ETA fields to auto-update ETD
document.getElementById('eta-date').addEventListener('change', updateETDFromETA);
document.getElementById('eta-time').addEventListener('change', updateETDFromETA);
// Add event listeners to ETD fields to mark as manually edited
document.getElementById('etd-date').addEventListener('change', markETDAsManuallyEdited);
document.getElementById('etd-time').addEventListener('change', markETDAsManuallyEdited);
});
</script>
</body>