From ebce2ecf05c8b20faefa2a6e29ce96ade2a347b3 Mon Sep 17 00:00:00 2001 From: Tomas Dvorak Date: Wed, 11 Jun 2025 20:47:42 +0200 Subject: [PATCH] c --- admin-dashboard.html | 292 +++++++++++++++++++++---------------------- index.html | 14 +-- 2 files changed, 144 insertions(+), 162 deletions(-) diff --git a/admin-dashboard.html b/admin-dashboard.html index 497ebcb..933cdb3 100644 --- a/admin-dashboard.html +++ b/admin-dashboard.html @@ -1208,30 +1208,32 @@
-

Správa rezervací vozidel

+

Správa rezervací vozidel

- -
- - - - - +
+
+ + +
+
+ + +
- - +
- +
@@ -1239,11 +1241,11 @@ - + - - + +
ŘidičOd Do ÚčelDoba 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 +}); + + + \ No newline at end of file diff --git a/index.html b/index.html index 67aecef..8edb8f8 100644 --- a/index.html +++ b/index.html @@ -431,19 +431,7 @@
- -
-
- -
-

Rezervace vozidel

-

Kalendář pro rezervaci služebních vozidel a plánování jízd

- - Otevřít aplikaci - -
- - +