diff --git a/main.go b/main.go index 39a6f6e..27caec6 100644 --- a/main.go +++ b/main.go @@ -311,11 +311,36 @@ func saveApps(apps []App) error { func handleGetReservations(w http.ResponseWriter, r *http.Request) { reservations, err := loadReservations() if err != nil { - http.Error(w, "Failed to load reservations", http.StatusInternalServerError) + http.Error(w, "Nepodařilo se načíst rezervace", http.StatusInternalServerError) return } - // Convert reservations to calendar events + // Get current time + now := time.Now() + + // Filter out expired reservations (ended more than 24 hours ago) + var activeReservations []Reservation + for _, res := range reservations { + // Parse end time + endDateTime, err := time.Parse("2006-01-02 15:04", + fmt.Sprintf("%s %s", res.EndDate, res.EndTime)) + if err != nil { + continue + } // Keep reservation if it ended less than 48 hours ago + if endDateTime.Add(48 * time.Hour).After(now) { + activeReservations = append(activeReservations, res) + } + } + + // If we filtered out any reservations, save the cleaned up list + if len(activeReservations) < len(reservations) { + err = saveReservations(activeReservations) + if err != nil { + log.Printf("Error saving cleaned up reservations: %v", err) + } + } + + // Convert active reservations to calendar events type Event struct { ID string `json:"id"` Title string `json:"title"` @@ -327,16 +352,16 @@ func handleGetReservations(w http.ResponseWriter, r *http.Request) { } var events []Event - for _, res := range reservations { + for _, res := range activeReservations { // Create proper ISO datetime strings - start := fmt.Sprintf("%sT%s:00", res.StartDate, res.StartTime) - end := fmt.Sprintf("%sT%s:00", res.EndDate, res.EndTime) + startDateTime := fmt.Sprintf("%sT%s:00", res.StartDate, res.StartTime) + endDateTime := fmt.Sprintf("%sT%s:00", res.EndDate, res.EndTime) events = append(events, Event{ ID: res.ID, Title: fmt.Sprintf("%s - %s", res.Vehicle, res.DriverName), - Start: start, - End: end, + Start: startDateTime, + End: endDateTime, DriverName: res.DriverName, Vehicle: res.Vehicle, Purpose: res.Purpose, diff --git a/rezervace-aut.html b/rezervace-aut.html index 68afd22..779fb4c 100644 --- a/rezervace-aut.html +++ b/rezervace-aut.html @@ -1199,49 +1199,40 @@ // Filter and sort events const currentAndFutureEvents = events - .filter(event => { - const eventDate = new Date(event.start); - eventDate.setHours(0, 0, 0, 0); - return eventDate >= now; - }) - .sort((a, b) => a.start.getTime() - b.start.getTime()); + .filter(event => event.end >= now) + .sort((a, b) => a.start - b.start); // Update count reservationsCount.textContent = currentAndFutureEvents.length > 0 - ? `Celkem: ${currentAndFutureEvents.length} rezervací` - : ''; + ? `Počet rezervací: ${currentAndFutureEvents.length}` + : 'Žádné aktuální ani budoucí rezervace'; if (currentAndFutureEvents.length === 0) { - reservationsList.innerHTML = '
Žádné aktuální ani budoucí rezervace
'; + reservationsList.innerHTML = ` +
+ Žádné aktuální ani budoucí rezervace +
+ `; return; } const html = currentAndFutureEvents.map(event => { - const vehicleClass = 'event-' + event.extendedProps.vehicle.toLowerCase().replace(/[^a-z0-9]+/g, '-'); - const startDate = formatDateTime(event.start); - const endDate = formatDateTime(event.end); - - // Check if the reservation is for today - const today = new Date(); - const eventDate = new Date(event.start); - const isToday = eventDate.getDate() === today.getDate() && - eventDate.getMonth() === today.getMonth() && - eventDate.getFullYear() === today.getFullYear(); - + const vehicleClass = 'vehicle-' + event.extendedProps.vehicle.toLowerCase().replace(/\s+/g, '-'); return ` -
-
-
-
-
- ${event.extendedProps.driverName} - ${isToday ? 'Dnes' : ''} +
+ + ${event.extendedProps.vehicle} + +
+
${event.extendedProps.driverName}
+
+ ${formatDateTime(event.start)} - ${formatDateTime(event.end)} +
+ ${event.extendedProps.purpose ? ` +
+ Účel: ${event.extendedProps.purpose}
-
${event.extendedProps.vehicle}
-
-
- ${startDate} - ${endDate} -
+ ` : ''}
`;