Actualizar calendario.html
This commit is contained in:
@@ -912,7 +912,7 @@
|
||||
const id = document.getElementById('detId').value;
|
||||
const date = document.getElementById('dateInput').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 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;
|
||||
}
|
||||
|
||||
// 🛑 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 originalContent = btn.innerHTML;
|
||||
btn.innerHTML = `<i data-lucide="loader-2" class="w-4 h-4 animate-spin"></i> Guardando...`;
|
||||
|
||||
Reference in New Issue
Block a user