diff --git a/calendario.html b/calendario.html
index dcd2399..9e330c0 100644
--- a/calendario.html
+++ b/calendario.html
@@ -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 = ` Guardando...`;