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 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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user