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...`;