mirror of
https://github.com/Dvorinka/PPve.git
synced 2026-06-03 20:12:59 +00:00
jj
This commit is contained in:
+91
-40
@@ -1666,54 +1666,81 @@
|
|||||||
function updateReservationsList() {
|
function updateReservationsList() {
|
||||||
const reservationsList = document.getElementById('reservationsList');
|
const reservationsList = document.getElementById('reservationsList');
|
||||||
const reservationsCount = document.getElementById('reservationsCount');
|
const reservationsCount = document.getElementById('reservationsCount');
|
||||||
|
|
||||||
|
// Check if calendar is initialized
|
||||||
|
if (!calendar) {
|
||||||
|
console.warn('Calendar not initialized yet');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const events = calendar.getEvents();
|
const events = calendar.getEvents();
|
||||||
|
|
||||||
// Get current date at start of day
|
// Get current date at start of day
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
now.setHours(0, 0, 0, 0);
|
now.setHours(0, 0, 0, 0);
|
||||||
|
|
||||||
// Filter and sort events
|
try {
|
||||||
const currentAndFutureEvents = events
|
// Filter and sort events
|
||||||
.filter(event => event.end >= now)
|
const currentAndFutureEvents = events
|
||||||
.filter(event => selectedVehicle === 'all' || event.extendedProps.vehicle === selectedVehicle)
|
.filter(event => event && event.end && event.end >= now)
|
||||||
.sort((a, b) => a.start - b.start);
|
.filter(event => selectedVehicle === 'all' || (event.extendedProps && event.extendedProps.vehicle === selectedVehicle))
|
||||||
|
.sort((a, b) => a.start - b.start);
|
||||||
|
|
||||||
// Update count and list
|
// Update count and list
|
||||||
if (currentAndFutureEvents.length === 0) {
|
if (!currentAndFutureEvents || currentAndFutureEvents.length === 0) {
|
||||||
reservationsCount.textContent = 'Žádné aktuální ani budoucí rezervace';
|
if (reservationsCount) {
|
||||||
reservationsList.innerHTML = `
|
reservationsCount.textContent = 'Žádné aktuální ani budoucí rezervace';
|
||||||
<div class="p-4 text-center text-gray-500">
|
}
|
||||||
Žádné aktuální ani budoucí rezervace
|
if (reservationsList) {
|
||||||
</div>
|
reservationsList.innerHTML = `
|
||||||
`;
|
<div class="p-4 text-center text-gray-500">
|
||||||
return;
|
Žádné aktuální ani budoucí rezervace
|
||||||
}
|
|
||||||
|
|
||||||
reservationsCount.textContent = `Počet rezervací: ${currentAndFutureEvents.length}`;
|
|
||||||
|
|
||||||
const html = currentAndFutureEvents.map(event => {
|
|
||||||
const vehicleClass = 'vehicle-' + event.extendedProps.vehicle.toLowerCase().replace(/\s+/g, '-');
|
|
||||||
return `
|
|
||||||
<div class="reservation-item hover:bg-gray-50" data-event-id="${event.id}">
|
|
||||||
<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>
|
</div>
|
||||||
${event.extendedProps.purpose ? `
|
`;
|
||||||
<div class="text-sm text-gray-500 mt-1">
|
}
|
||||||
Účel: ${event.extendedProps.purpose}
|
return;
|
||||||
</div>
|
}
|
||||||
` : ''}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
}).join('');
|
|
||||||
|
|
||||||
reservationsList.innerHTML = html;
|
if (reservationsCount) {
|
||||||
|
reservationsCount.textContent = `Počet rezervací: ${currentAndFutureEvents.length}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const html = currentAndFutureEvents.map(event => {
|
||||||
|
if (!event || !event.extendedProps) return '';
|
||||||
|
const vehicleClass = 'vehicle-' + (event.extendedProps.vehicle || '').toLowerCase().replace(/\s+/g, '-');
|
||||||
|
return `
|
||||||
|
<div class="reservation-item hover:bg-gray-50" data-event-id="${event.id || ''}">
|
||||||
|
<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">
|
||||||
|
${event.start ? formatDateTime(event.start) : ''} - ${event.end ? formatDateTime(event.end) : ''}
|
||||||
|
</div>
|
||||||
|
${event.extendedProps.purpose ? `
|
||||||
|
<div class="text-sm text-gray-500 mt-1">
|
||||||
|
Účel: ${event.extendedProps.purpose}
|
||||||
|
</div>
|
||||||
|
` : ''}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}).join('');
|
||||||
|
|
||||||
|
if (reservationsList) {
|
||||||
|
reservationsList.innerHTML = html;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error updating reservations list:', error);
|
||||||
|
if (reservationsList) {
|
||||||
|
reservationsList.innerHTML = `
|
||||||
|
<div class="p-4 text-center text-red-500">
|
||||||
|
Chyba při načítání rezervací
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enhanced date/time formatting function
|
// Enhanced date/time formatting function
|
||||||
@@ -1905,9 +1932,33 @@
|
|||||||
reservationForm.addEventListener('submit', async function(e) {
|
reservationForm.addEventListener('submit', async function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
// ... existing validation code ...
|
// Get form values
|
||||||
|
const driverName = document.getElementById('driverName').value;
|
||||||
|
const vehicle = document.getElementById('vehicle').value;
|
||||||
|
const startDate = document.getElementById('startDate').value;
|
||||||
|
const startTime = document.getElementById('startTime').value;
|
||||||
|
const endDate = document.getElementById('endDate').value;
|
||||||
|
const endTime = document.getElementById('endTime').value;
|
||||||
|
const purpose = document.getElementById('purpose')?.value || '';
|
||||||
|
|
||||||
|
// Validate form
|
||||||
|
if (!validateDriverName(driverName)) {
|
||||||
|
showMessage('Prosím zadejte platné jméno a příjmení', 'error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Prepare reservation data
|
||||||
|
const reservationData = {
|
||||||
|
driverName: driverName,
|
||||||
|
vehicle: vehicle,
|
||||||
|
startDate: startDate,
|
||||||
|
startTime: startTime,
|
||||||
|
endDate: endDate,
|
||||||
|
endTime: endTime,
|
||||||
|
purpose: purpose
|
||||||
|
};
|
||||||
|
|
||||||
const response = await fetch('/api/reservations', {
|
const response = await fetch('/api/reservations', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
Reference in New Issue
Block a user