diff --git a/includes/pages/appointments.php b/includes/pages/appointments.php index e884eb5..853b940 100644 --- a/includes/pages/appointments.php +++ b/includes/pages/appointments.php @@ -193,11 +193,7 @@ function toggleAddressField() { } function validateHolidayFrontend() { - if (!calendar) return; // Calendar not initialized yet - var btnSave = document.getElementById('btnSaveApt'); - - // Reset state first to avoid getting stuck $('#holidayWarning').remove(); if (btnSave) btnSave.disabled = false; @@ -208,38 +204,49 @@ function validateHolidayFrontend() { var startTimeStr = $('#apt_start_time').val(); if (!docId || !startTimeStr) return; + + // Use API to check for holiday definitively (independent of calendar view) + if (btnSave) btnSave.disabled = true; // Disable while checking - var datePrefix = startTimeStr.split('T')[0]; - var events = calendar.getEvents(); - var isHoliday = false; - - for (var i = 0; i < events.length; i++) { - var ev = events[i]; - // Check for doctor holiday events matching the selected doctor - if (ev.extendedProps && ev.extendedProps.type === 'doctor_holiday' && ev.extendedProps.doctor_id == docId) { - var evStartStr = ev.startStr ? ev.startStr.split('T')[0] : ''; - var evEndStr = ev.end ? ev.endStr.split('T')[0] : evStartStr; - - if (ev.allDay) { - // All day event: check if datePrefix is within range [start, end) - if (datePrefix >= evStartStr && datePrefix < evEndStr) { - isHoliday = true; - break; + fetch('api/doctor_holidays.php?doctor_id=' + docId) + .then(response => response.json()) + .then(data => { + // Re-check current values to ensure they haven't changed while fetching + var currentDocId = $('#apt_doctor_id').val(); + var currentStartTimeStr = $('#apt_start_time').val(); + if (currentDocId != docId || currentStartTimeStr != startTimeStr) return; + + // Remove any existing warning to prevent duplication (especially from rapid successive calls) + $('#holidayWarning').remove(); + + if (data.success && data.holidays) { + var isHoliday = false; + var datePrefix = startTimeStr.split('T')[0]; + + // Check if date is in any holiday range + for (var i = 0; i < data.holidays.length; i++) { + var h = data.holidays[i]; + // h.start_date and h.end_date are YYYY-MM-DD + if (datePrefix >= h.start_date && datePrefix <= h.end_date) { + isHoliday = true; + break; + } + } + + if (isHoliday) { + $('