fix(eta): normalize day filtering and handle case sensitivity in schedules
This commit is contained in:
@ -41,6 +41,8 @@ export function useETA() {
|
||||
const diaActual = new Date().getDay();
|
||||
const dias = ['domingo', 'lunes', 'martes', 'miercoles', 'jueves', 'viernes', 'sabado'];
|
||||
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 { data: horarios, error: hError } = await supabase
|
||||
@ -53,16 +55,19 @@ export function useETA() {
|
||||
if (hError) throw hError;
|
||||
|
||||
const horariosHoy = (horarios ?? []).filter(h => {
|
||||
if (h.dias_operacion) {
|
||||
return h.dias_operacion.includes('todos') || h.dias_operacion.includes(diaString);
|
||||
const diasOP = h.dias_operacion as string[] | null;
|
||||
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) {
|
||||
// No hay horarios hoy, no perdemos tiempo en geo
|
||||
busesActivos.value = [];
|
||||
cargando.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -138,7 +143,7 @@ export function useETA() {
|
||||
estado = 'pasó';
|
||||
}
|
||||
|
||||
if (etaMinutos < -60) continue;
|
||||
if (etaMinutos < -45) continue;
|
||||
|
||||
resultados.push({
|
||||
horario_id: h.id,
|
||||
@ -155,7 +160,7 @@ export function useETA() {
|
||||
return a.etaMinutos - b.etaMinutos;
|
||||
});
|
||||
|
||||
busesActivos.value = resultados.slice(0, 3);
|
||||
busesActivos.value = resultados.slice(0, 5);
|
||||
} catch (e) {
|
||||
console.error('SIBU | Error calculando ETA:', e);
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user