Actualizar calendario.html

This commit is contained in:
2026-03-08 18:40:06 +00:00
parent 62c1d8be40
commit 02d086ca28

View File

@@ -912,7 +912,7 @@
const id = document.getElementById('detId').value; const id = document.getElementById('detId').value;
const date = document.getElementById('dateInput').value; const date = document.getElementById('dateInput').value;
const time = document.getElementById('timeInput').value; const time = document.getElementById('timeInput').value;
const duration = document.getElementById('durationInput').value; const duration = parseInt(document.getElementById('durationInput').value) || 60;
const statusMap = document.getElementById('detStatusMap').value; const statusMap = document.getElementById('detStatusMap').value;
const selectedSt = systemStatuses.find(st => String(st.id) === String(statusMap)); const selectedSt = systemStatuses.find(st => String(st.id) === String(statusMap));
@@ -921,6 +921,42 @@
if(!confirm("No has asignado Fecha para este estado. ¿Deseas continuar?")) return; if(!confirm("No has asignado Fecha para este estado. ¿Deseas continuar?")) return;
} }
// 🛑 NUEVO: RADAR ANTI-SOLAPAMIENTO (Solo si hay fecha y hora)
if (date && time) {
let [newH, newM] = time.split(':').map(Number);
let newStartMin = newH * 60 + newM;
let newEndMin = newStartMin + duration;
const solapamiento = localServices.find(s => {
// Obviamos el propio servicio que estamos editando
if (String(s.id) === String(id)) return false;
const sDate = String(s.raw_data.scheduled_date || "").trim();
const sTime = String(s.raw_data.scheduled_time || "").trim();
// Si coinciden en fecha, miramos las horas
if (sDate === date && sTime && sTime.includes(':')) {
let [sH, sM] = sTime.split(':').map(Number);
let sDur = parseInt(s.raw_data.duration_minutes || 60);
let sStartMin = sH * 60 + sM;
let sEndMin = sStartMin + sDur;
// La fórmula mágica para saber si dos franjas chocan
return (newStartMin < sEndMin && newEndMin > sStartMin);
}
return false;
});
// Si choca, bloqueamos el guardado
if (solapamiento) {
const horaConflicto = solapamiento.raw_data.scheduled_time;
const zonaConflicto = solapamiento.raw_data["Población"] || "otra zona";
alert(`⚠️ SOLAPAMIENTO DETECTADO\n\nEstás pisando otra cita que empieza a las ${horaConflicto} en ${zonaConflicto}.\n\nPor favor, revisa la agenda visual arriba y cambia la hora o la duración.`);
return; // Abortamos aquí, no llega a guardar nada
}
}
// 🛑 FIN DEL RADAR
const btn = document.getElementById('btnSaveAppt'); const btn = document.getElementById('btnSaveAppt');
const originalContent = btn.innerHTML; const originalContent = btn.innerHTML;
btn.innerHTML = `<i data-lucide="loader-2" class="w-4 h-4 animate-spin"></i> Guardando...`; btn.innerHTML = `<i data-lucide="loader-2" class="w-4 h-4 animate-spin"></i> Guardando...`;