mirror of
https://github.com/Dvorinka/PPve.git
synced 2026-06-03 20:12:59 +00:00
test cal
This commit is contained in:
@@ -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,
|
||||
|
||||
+23
-32
@@ -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 = '<div class="p-4 text-gray-500 text-center">Žádné aktuální ani budoucí rezervace</div>';
|
||||
reservationsList.innerHTML = `
|
||||
<div class="p-4 text-center text-gray-500">
|
||||
Žádné aktuální ani budoucí rezervace
|
||||
</div>
|
||||
`;
|
||||
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 `
|
||||
<div class="reservation-item hover:bg-gray-50 ${isToday ? 'bg-blue-50' : ''}">
|
||||
<div class="flex items-center gap-4 p-3">
|
||||
<div class="w-3 h-3 rounded-full ${vehicleClass}"></div>
|
||||
<div class="flex-1">
|
||||
<div class="font-medium flex items-center gap-2">
|
||||
${event.extendedProps.driverName}
|
||||
${isToday ? '<span class="text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded-full">Dnes</span>' : ''}
|
||||
<div class="reservation-item hover:bg-gray-50">
|
||||
<span class="reservation-vehicle-badge ${vehicleClass} text-sm">
|
||||
${event.extendedProps.vehicle}
|
||||
</span>
|
||||
<div class="flex-grow">
|
||||
<div class="font-medium">${event.extendedProps.driverName}</div>
|
||||
<div class="text-sm text-gray-600">
|
||||
${formatDateTime(event.start)} - ${formatDateTime(event.end)}
|
||||
</div>
|
||||
${event.extendedProps.purpose ? `
|
||||
<div class="text-sm text-gray-500 mt-1">
|
||||
Účel: ${event.extendedProps.purpose}
|
||||
</div>
|
||||
<div class="text-sm text-gray-600">${event.extendedProps.vehicle}</div>
|
||||
</div>
|
||||
<div class="text-sm text-gray-500">
|
||||
${startDate} - ${endDate}
|
||||
</div>
|
||||
` : ''}
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
Reference in New Issue
Block a user