+
| Řidič |
@@ -1241,11 +1239,11 @@
Od |
Do |
Účel |
- Akce |
+ Doba trvání |
-
-
+
+
@@ -4269,132 +4267,64 @@ 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; // Store for filtering
+ 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('');
- displayReservations(reservations);
- updateVehicleFilter(reservations);
} catch (error) {
console.error('Error loading reservations:', error);
tbody.innerHTML = `
|
- Chyba při načítání rezervací: ${error.message}
+ Chyba při načítání rezervací
|
`;
}
}
-// 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) {
- return `${date} ${time}`;
+ const [year, month, day] = date.split('-');
+ return `${day}.${month}.${year} ${time}`;
}
// Helper function to calculate duration
-function calculateDuration(reservation) {
- const start = new Date(`${reservation.startDate}T${reservation.startTime}`);
- const end = new Date(`${reservation.endDate}T${reservation.endTime}`);
+function calculateDuration(start, end) {
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));
@@ -4407,23 +4337,99 @@ function calculateDuration(reservation) {
return duration;
}
-// Function to update vehicle filter options
-function updateVehicleFilter(reservations) {
- const vehicleFilter = document.getElementById('vehicleFilter');
- if (!vehicleFilter) return;
+// Function to export to Excel
+function exportReservations() {
+ if (!window.allReservations || window.allReservations.length === 0) {
+ showNotification('Žádné rezervace k exportu', 'warning');
+ return;
+ }
- const vehicles = [...new Set(reservations.map(r => r.vehicle))];
- vehicleFilter.innerHTML = `
-
- ${vehicles.map(v => ``).join('')}
- `;
+ 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('');
+ }
}
// Load reservations when page loads
document.addEventListener('DOMContentLoaded', () => {
- // ...existing code...
loadReservations();
-});
-
-