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

Správa rezervací vozidel

+

Správa rezervací vozidel

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

Rezervace vozidel

+

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

+ + Otevřít aplikaci + +
+ +