fix(eta): normalize day filtering and handle case sensitivity in schedules

This commit is contained in:
2026-03-02 15:48:02 -05:00
parent be8559bde4
commit e3f01c665a

View File

@ -41,6 +41,8 @@ export function useETA() {
const diaActual = new Date().getDay(); const diaActual = new Date().getDay();
const dias = ['domingo', 'lunes', 'martes', 'miercoles', 'jueves', 'viernes', 'sabado']; const dias = ['domingo', 'lunes', 'martes', 'miercoles', 'jueves', 'viernes', 'sabado'];
const diaString = dias[diaActual]; const diaString = dias[diaActual];
const normalizar = (s: string | null | undefined) => (s || "").toLowerCase().trim().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
const diaStringNorm = normalizar(diaString);
const tipoDia = (diaActual === 0 || diaActual === 6) ? 'weekend' : 'weekday'; const tipoDia = (diaActual === 0 || diaActual === 6) ? 'weekend' : 'weekday';
const { data: horarios, error: hError } = await supabase const { data: horarios, error: hError } = await supabase
@ -53,16 +55,19 @@ export function useETA() {
if (hError) throw hError; if (hError) throw hError;
const horariosHoy = (horarios ?? []).filter(h => { const horariosHoy = (horarios ?? []).filter(h => {
if (h.dias_operacion) { const diasOP = h.dias_operacion as string[] | null;
return h.dias_operacion.includes('todos') || h.dias_operacion.includes(diaString); if (diasOP && Array.isArray(diasOP) && diasOP.length > 0) {
return diasOP.some(d => {
const dNorm = normalizar(d);
return dNorm === 'todos' || dNorm === diaStringNorm;
});
} }
return h.schedule_type === tipoDia || h.schedule_type === 'todos' || !h.schedule_type; const stNorm = normalizar(h.schedule_type);
return stNorm === tipoDia || stNorm === 'todos' || !h.schedule_type;
}); });
if (horariosHoy.length === 0) { if (horariosHoy.length === 0) {
// No hay horarios hoy, no perdemos tiempo en geo
busesActivos.value = []; busesActivos.value = [];
cargando.value = false;
return; return;
} }
@ -138,7 +143,7 @@ export function useETA() {
estado = 'pasó'; estado = 'pasó';
} }
if (etaMinutos < -60) continue; if (etaMinutos < -45) continue;
resultados.push({ resultados.push({
horario_id: h.id, horario_id: h.id,
@ -155,7 +160,7 @@ export function useETA() {
return a.etaMinutos - b.etaMinutos; return a.etaMinutos - b.etaMinutos;
}); });
busesActivos.value = resultados.slice(0, 3); busesActivos.value = resultados.slice(0, 5);
} catch (e) { } catch (e) {
console.error('SIBU | Error calculando ETA:', e); console.error('SIBU | Error calculando ETA:', e);
} finally { } finally {