+
| Řidič |
@@ -1239,11 +1241,11 @@
Od |
Do |
Účel |
- Doba trvání |
+ Akce |
-
-
+
+
@@ -4267,64 +4269,132 @@ function preventDefaults(e) {
// Function to load and display reservations
async function loadReservations() {
const tbody = document.querySelector('#reservationsTable tbody');
- if (!tbody) return;
-
try {
const response = await fetch('/api/reservations');
if (!response.ok) throw new Error('Failed to load reservations');
const reservations = await response.json();
- window.allReservations = reservations;
-
- if (!reservations || reservations.length === 0) {
- tbody.innerHTML = `
-
- |
- Žádné rezervace k zobrazení
- |
-
- `;
- return;
- }
-
- tbody.innerHTML = reservations.map(res => {
- const start = new Date(`${res.startDate}T${res.startTime}`);
- const end = new Date(`${res.endDate}T${res.endTime}`);
- const duration = calculateDuration(start, end);
-
- return `
-
- | ${res.driverName} |
- ${res.vehicle} |
- ${formatDateTime(res.startDate, res.startTime)} |
- ${formatDateTime(res.endDate, res.endTime)} |
- ${res.purpose || '-'} |
- ${duration} |
-
- `;
- }).join('');
+ window.allReservations = reservations; // Store for filtering
+ displayReservations(reservations);
+ updateVehicleFilter(reservations);
} catch (error) {
console.error('Error loading reservations:', error);
tbody.innerHTML = `
|
- Chyba při načítání rezervací
+ Chyba při načítání rezervací: ${error.message}
|
`;
}
}
+// Function to display reservations
+function displayReservations(reservations) {
+ const tbody = document.querySelector('#reservationsTable tbody');
+ if (!tbody) return;
+
+ if (!reservations.length) {
+ tbody.innerHTML = `
+
+ |
+ Žádné rezervace k zobrazení
+ |
+
+ `;
+ return;
+ }
+
+ tbody.innerHTML = reservations.map(res => `
+
+ | ${res.driverName} |
+ ${res.vehicle} |
+ ${formatDateTime(res.startDate, res.startTime)} |
+ ${formatDateTime(res.endDate, res.endTime)} |
+ ${res.purpose || '-'} |
+ ${calculateDuration(res)} |
+
+ `).join('');
+}
+
+// Function to filter reservations
+function filterReservations() {
+ if (!window.allReservations) return;
+
+ const vehicleFilter = document.getElementById('vehicleFilter').value;
+ const dateFilter = document.getElementById('dateFilter').value;
+
+ let filtered = window.allReservations;
+
+ if (vehicleFilter) {
+ filtered = filtered.filter(res => res.vehicle === vehicleFilter);
+ }
+
+ if (dateFilter) {
+ filtered = filtered.filter(res => res.startDate === dateFilter);
+ }
+
+ displayReservations(filtered);
+}
+
+// Function to export reservations to Excel
+function exportReservations() {
+ if (!window.allReservations || !window.allReservations.length) {
+ showNotification('Žádné rezervace k exportu', 'warning');
+ return;
+ }
+
+ // Get filtered reservations
+ const vehicleFilter = document.getElementById('vehicleFilter').value;
+ const dateFilter = document.getElementById('dateFilter').value;
+
+ let dataToExport = window.allReservations;
+ if (vehicleFilter) {
+ dataToExport = dataToExport.filter(res => res.vehicle === vehicleFilter);
+ }
+ if (dateFilter) {
+ dataToExport = dataToExport.filter(res => res.startDate === dateFilter);
+ }
+
+ // Create CSV content
+ const headers = ['Řidič', 'Vozidlo', 'Datum od', 'Čas od', 'Datum do', 'Čas do', 'Účel', 'Doba trvání'];
+ const csvContent = [
+ headers.join(','),
+ ...dataToExport.map(res => [
+ `"${res.driverName}"`,
+ `"${res.vehicle}"`,
+ res.startDate,
+ res.startTime,
+ res.endDate,
+ res.endTime,
+ `"${res.purpose || ''}"`,
+ `"${calculateDuration(res)}"`
+ ].join(','))
+ ].join('\n');
+
+ // Create and trigger download
+ const blob = new Blob(['\ufeff' + csvContent], { type: 'text/csv;charset=utf-8;' });
+ const link = document.createElement('a');
+ const date = new Date().toISOString().split('T')[0];
+ link.href = URL.createObjectURL(blob);
+ link.download = `rezervace_${date}.csv`;
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+}
+
// Helper function to format date and time
function formatDateTime(date, time) {
- const [year, month, day] = date.split('-');
- return `${day}.${month}.${year} ${time}`;
+ return `${date} ${time}`;
}
// Helper function to calculate duration
-function calculateDuration(start, end) {
+function calculateDuration(reservation) {
+ const start = new Date(`${reservation.startDate}T${reservation.startTime}`);
+ const end = new Date(`${reservation.endDate}T${reservation.endTime}`);
const diff = end - start;
+
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
@@ -4337,99 +4407,23 @@ function calculateDuration(start, end) {
return duration;
}
-// Function to export to Excel
-function exportReservations() {
- if (!window.allReservations || window.allReservations.length === 0) {
- showNotification('Žádné rezervace k exportu', 'warning');
- return;
- }
+// Function to update vehicle filter options
+function updateVehicleFilter(reservations) {
+ const vehicleFilter = document.getElementById('vehicleFilter');
+ if (!vehicleFilter) return;
- const reservations = filterReservations(true);
- const headers = ['Řidič', 'Vozidlo', 'Datum od', 'Čas od', 'Datum do', 'Čas do', 'Účel', 'Doba trvání'];
-
- let csvContent = '\ufeff' + headers.join(',') + '\n';
-
- csvContent += reservations.map(res => {
- const start = new Date(`${res.startDate}T${res.startTime}`);
- const end = new Date(`${res.endDate}T${res.endTime}`);
- const duration = calculateDuration(start, end);
-
- return [
- `"${res.driverName}"`,
- `"${res.vehicle}"`,
- res.startDate,
- res.startTime,
- res.endDate,
- res.endTime,
- `"${res.purpose || ''}"`,
- `"${duration}"`
- ].join(',');
- }).join('\n');
-
- const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
- const link = document.createElement('a');
- link.href = URL.createObjectURL(blob);
- link.download = `rezervace_${new Date().toISOString().split('T')[0]}.csv`;
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
-}
-
-// Function to filter reservations
-function filterReservations(returnData = false) {
- if (!window.allReservations) return returnData ? [] : null;
-
- const vehicleFilter = document.getElementById('vehicleFilter').value;
- const dateFilter = document.getElementById('dateFilter').value;
-
- let filtered = window.allReservations;
-
- if (vehicleFilter) {
- filtered = filtered.filter(res => res.vehicle === vehicleFilter);
- }
-
- if (dateFilter) {
- filtered = filtered.filter(res => res.startDate === dateFilter || res.endDate === dateFilter);
- }
-
- if (returnData) return filtered;
-
- const tbody = document.querySelector('#reservationsTable tbody');
- if (tbody) {
- if (filtered.length === 0) {
- tbody.innerHTML = `
-
- |
- Žádné rezervace odpovídající filtru
- |
-
- `;
- return;
- }
-
- tbody.innerHTML = filtered.map(res => {
- const start = new Date(`${res.startDate}T${res.startTime}`);
- const end = new Date(`${res.endDate}T${res.endTime}`);
- const duration = calculateDuration(start, end);
-
- return `
-
- | ${res.driverName} |
- ${res.vehicle} |
- ${formatDateTime(res.startDate, res.startTime)} |
- ${formatDateTime(res.endDate, res.endTime)} |
- ${res.purpose || '-'} |
- ${duration} |
-
- `;
- }).join('');
- }
+ const vehicles = [...new Set(reservations.map(r => r.vehicle))];
+ vehicleFilter.innerHTML = `
+
+ ${vehicles.map(v => ``).join('')}
+ `;
}
// Load reservations when page loads
document.addEventListener('DOMContentLoaded', () => {
+ // ...existing code...
loadReservations();
- // Set today's date as default for date filter
- const today = new Date().toISOString().split('T')[0];
- document.getElementById('dateFilter').value = today;
-});
\ No newline at end of file
+});
+
+