Unknown type supprt
This commit is contained in:
+37
-3
@@ -1494,6 +1494,12 @@
|
||||
openNewPPRModal();
|
||||
}
|
||||
|
||||
// Press 'g' to book out local flight starting with G
|
||||
if (e.key === 'g' || e.key === 'G') {
|
||||
e.preventDefault();
|
||||
openLocalFlightModal('LOCAL', 'G');
|
||||
}
|
||||
|
||||
// Press 'l' to book out local flight (LOCAL type)
|
||||
if (e.key === 'l' || e.key === 'L') {
|
||||
e.preventDefault();
|
||||
@@ -2624,6 +2630,9 @@
|
||||
document.getElementById('ppr-form').reset();
|
||||
document.getElementById('ppr-id').value = '';
|
||||
|
||||
// Clear the unsaved aircraft flag
|
||||
document.getElementById('ppr-form').removeAttribute('data-unsaved-aircraft');
|
||||
|
||||
// Set default ETA and ETD
|
||||
const now = new Date();
|
||||
const eta = new Date(now.getTime() + 60 * 60 * 1000); // +1 hour
|
||||
@@ -3040,6 +3049,9 @@
|
||||
|
||||
if (!accessToken) return;
|
||||
|
||||
// Auto-save any unsaved aircraft types
|
||||
await autoSaveUnsavedAircraft(this);
|
||||
|
||||
const formData = new FormData(this);
|
||||
const pprData = {};
|
||||
|
||||
@@ -3531,22 +3543,29 @@
|
||||
});
|
||||
|
||||
// Local Flight (Book Out) Modal Functions
|
||||
function openLocalFlightModal(flightType = 'LOCAL') {
|
||||
function openLocalFlightModal(flightType = 'LOCAL', prefillReg = '') {
|
||||
document.getElementById('local-flight-form').reset();
|
||||
document.getElementById('local-flight-id').value = '';
|
||||
document.getElementById('local-flight-modal-title').textContent = 'Book Out';
|
||||
document.getElementById('local_flight_type').value = flightType;
|
||||
document.getElementById('localFlightModal').style.display = 'block';
|
||||
|
||||
// Clear the unsaved aircraft flag
|
||||
document.getElementById('local-flight-form').removeAttribute('data-unsaved-aircraft');
|
||||
|
||||
// Clear aircraft lookup results
|
||||
clearLocalAircraftLookup();
|
||||
|
||||
// Update destination field visibility based on flight type
|
||||
handleFlightTypeChange(flightType);
|
||||
|
||||
// Auto-focus on registration field
|
||||
// Auto-focus on registration field and prefill if provided
|
||||
setTimeout(() => {
|
||||
document.getElementById('local_registration').focus();
|
||||
const regField = document.getElementById('local_registration');
|
||||
regField.focus();
|
||||
if (prefillReg) {
|
||||
regField.value = prefillReg;
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
|
||||
@@ -3555,6 +3574,9 @@
|
||||
document.getElementById('book-in-id').value = '';
|
||||
document.getElementById('bookInModal').style.display = 'block';
|
||||
|
||||
// Clear the unsaved aircraft flag
|
||||
document.getElementById('book-in-form').removeAttribute('data-unsaved-aircraft');
|
||||
|
||||
// Clear aircraft lookup results
|
||||
clearBookInAircraftLookup();
|
||||
clearBookInArrivalAirportLookup();
|
||||
@@ -3573,6 +3595,9 @@
|
||||
document.getElementById('overflight-id').value = '';
|
||||
document.getElementById('overflightModal').style.display = 'block';
|
||||
|
||||
// Clear the unsaved aircraft flag
|
||||
document.getElementById('overflight-form').removeAttribute('data-unsaved-aircraft');
|
||||
|
||||
// Clear aircraft lookup results
|
||||
clearOverflightAircraftLookup();
|
||||
clearOverflightDepartureAirportLookup();
|
||||
@@ -4502,6 +4527,9 @@
|
||||
|
||||
if (!accessToken) return;
|
||||
|
||||
// Auto-save any unsaved aircraft types
|
||||
await autoSaveUnsavedAircraft(this);
|
||||
|
||||
const formData = new FormData(this);
|
||||
const flightType = formData.get('flight_type');
|
||||
const flightData = {};
|
||||
@@ -4585,6 +4613,9 @@
|
||||
|
||||
if (!accessToken) return;
|
||||
|
||||
// Auto-save any unsaved aircraft types
|
||||
await autoSaveUnsavedAircraft(this);
|
||||
|
||||
const formData = new FormData(this);
|
||||
const arrivalData = {};
|
||||
|
||||
@@ -4664,6 +4695,9 @@
|
||||
|
||||
if (!accessToken) return;
|
||||
|
||||
// Auto-save any unsaved aircraft types
|
||||
await autoSaveUnsavedAircraft(this);
|
||||
|
||||
const formData = new FormData(this);
|
||||
const overflightData = {};
|
||||
|
||||
|
||||
@@ -692,6 +692,9 @@
|
||||
document.getElementById('ppr-form').addEventListener('submit', async function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
// Auto-save any unsaved aircraft types
|
||||
await autoSaveUnsavedAircraft(this);
|
||||
|
||||
const formData = new FormData(this);
|
||||
const pprData = {};
|
||||
|
||||
|
||||
+137
-4
@@ -163,15 +163,26 @@ function createLookup(fieldId, resultsId, selectCallback, options = {}) {
|
||||
const resultsDiv = document.getElementById(resultsId);
|
||||
|
||||
if (config.isAircraft) {
|
||||
// Aircraft lookup: auto-populate on single match, format input on no match
|
||||
// Aircraft lookup: auto-populate on single match, mark form for auto-save on no match
|
||||
if (!results || results.length === 0) {
|
||||
// Format the aircraft registration and auto-populate
|
||||
// Format the aircraft registration
|
||||
const formatted = formatAircraftRegistration(searchTerm);
|
||||
const field = document.getElementById(fieldId);
|
||||
if (field) {
|
||||
field.value = formatted;
|
||||
// Mark the form for auto-saving this aircraft
|
||||
const form = field.closest('form');
|
||||
if (form) {
|
||||
form.setAttribute('data-unsaved-aircraft', fieldId);
|
||||
}
|
||||
}
|
||||
resultsDiv.innerHTML = ''; // Clear results, field is auto-populated
|
||||
|
||||
// Show message that type will be saved
|
||||
resultsDiv.innerHTML = `
|
||||
<div class="aircraft-no-match">
|
||||
No match found - aircraft type will be saved automatically when you submit
|
||||
</div>
|
||||
`;
|
||||
} else if (results.length === 1) {
|
||||
// Single match - auto-populate
|
||||
const aircraft = results[0];
|
||||
@@ -183,7 +194,14 @@ function createLookup(fieldId, resultsId, selectCallback, options = {}) {
|
||||
|
||||
// Auto-populate the form fields
|
||||
const field = document.getElementById(fieldId);
|
||||
if (field) field.value = aircraft.registration;
|
||||
if (field) {
|
||||
field.value = aircraft.registration;
|
||||
// Clear the unsaved aircraft flag since we found a match
|
||||
const form = field.closest('form');
|
||||
if (form) {
|
||||
form.removeAttribute('data-unsaved-aircraft');
|
||||
}
|
||||
}
|
||||
|
||||
// Also populate type field
|
||||
let typeFieldId;
|
||||
@@ -208,6 +226,14 @@ function createLookup(fieldId, resultsId, selectCallback, options = {}) {
|
||||
Multiple matches found (${results.length}) - please be more specific
|
||||
</div>
|
||||
`;
|
||||
// Clear the unsaved aircraft flag since multiple matches found
|
||||
const field = document.getElementById(fieldId);
|
||||
if (field) {
|
||||
const form = field.closest('form');
|
||||
if (form) {
|
||||
form.removeAttribute('data-unsaved-aircraft');
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Airport lookup: show list of options with keyboard navigation
|
||||
@@ -501,3 +527,110 @@ function selectBookInAircraft(registration) {
|
||||
function selectBookInArrivalAirport(icaoCode) {
|
||||
lookupManager.selectItem('book-in-arrival-airport-lookup-results', 'book_in_from', icaoCode);
|
||||
}
|
||||
|
||||
// Save user aircraft type for future lookups
|
||||
async function saveUserAircraft(registrationFieldId, resultsDivId) {
|
||||
const regField = document.getElementById(registrationFieldId);
|
||||
if (!regField || !regField.value.trim()) {
|
||||
showNotification('Please enter a registration first', true);
|
||||
return;
|
||||
}
|
||||
|
||||
// Determine the type field ID based on registration field
|
||||
let typeFieldId;
|
||||
if (registrationFieldId === 'ac_reg') {
|
||||
typeFieldId = 'ac_type';
|
||||
} else if (registrationFieldId === 'local_registration') {
|
||||
typeFieldId = 'local_type';
|
||||
} else if (registrationFieldId === 'book_in_registration') {
|
||||
typeFieldId = 'book_in_type';
|
||||
} else if (registrationFieldId === 'overflight_registration') {
|
||||
typeFieldId = 'overflight_type';
|
||||
}
|
||||
|
||||
const typeField = document.getElementById(typeFieldId);
|
||||
if (!typeField || !typeField.value.trim()) {
|
||||
showNotification('Please enter an aircraft type first', true);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await authenticatedFetch('/api/v1/aircraft/user-aircraft', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
registration: regField.value.trim(),
|
||||
type_code: typeField.value.trim()
|
||||
})
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
const data = await response.json();
|
||||
showNotification('Aircraft type saved for future use');
|
||||
|
||||
// Clear the results div
|
||||
const resultsDiv = document.getElementById(resultsDivId);
|
||||
if (resultsDiv) {
|
||||
resultsDiv.innerHTML = '';
|
||||
}
|
||||
} else {
|
||||
const error = await response.json();
|
||||
showNotification(error.detail || 'Failed to save aircraft', true);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error saving aircraft:', error);
|
||||
showNotification('Error saving aircraft', true);
|
||||
}
|
||||
}
|
||||
|
||||
// Auto-save unsaved aircraft before form submission
|
||||
async function autoSaveUnsavedAircraft(form) {
|
||||
const unsavedFieldId = form.getAttribute('data-unsaved-aircraft');
|
||||
if (!unsavedFieldId) return; // No unsaved aircraft to save
|
||||
|
||||
const regField = document.getElementById(unsavedFieldId);
|
||||
if (!regField || !regField.value.trim()) return;
|
||||
|
||||
// Determine the type field ID
|
||||
let typeFieldId;
|
||||
if (unsavedFieldId === 'ac_reg') {
|
||||
typeFieldId = 'ac_type';
|
||||
} else if (unsavedFieldId === 'local_registration') {
|
||||
typeFieldId = 'local_type';
|
||||
} else if (unsavedFieldId === 'book_in_registration') {
|
||||
typeFieldId = 'book_in_type';
|
||||
} else if (unsavedFieldId === 'overflight_registration') {
|
||||
typeFieldId = 'overflight_type';
|
||||
}
|
||||
|
||||
const typeField = document.getElementById(typeFieldId);
|
||||
if (!typeField || !typeField.value.trim()) return;
|
||||
|
||||
try {
|
||||
const response = await authenticatedFetch('/api/v1/aircraft/user-aircraft', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
registration: regField.value.trim(),
|
||||
type_code: typeField.value.trim()
|
||||
})
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
// Successfully saved, remove the flag
|
||||
form.removeAttribute('data-unsaved-aircraft');
|
||||
console.log('Auto-saved aircraft type for', regField.value.trim());
|
||||
} else if (response.status === 400) {
|
||||
// Already exists, just remove the flag
|
||||
form.removeAttribute('data-unsaved-aircraft');
|
||||
} else {
|
||||
console.error('Failed to auto-save aircraft');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error auto-saving aircraft:', error);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user