correccion de tiempo llegada

master
Francisco Sandoval 2024-03-02 19:09:35 -03:00
parent e28bc5fb7e
commit a3d09bde97
1 changed files with 253 additions and 285 deletions

View File

@ -1,88 +1,99 @@
<!-- frontend/src/ParaderoInfo.svelte -->
<script>
import { onMount } from 'svelte';
import { onMount } from "svelte";
import { getAplicacion } from "../services/getinfodevice";
import ImagenBus from '../assets/zyro-image.png'
import ImagenBus from "../assets/zyro-image.png";
let paraderoData = null;
let nombreParadero = 'Cargando información'
onMount(() => {
const urlParams = new URLSearchParams(window.location.search);
const id = urlParams.get('id');
const id = urlParams.get("id");
if (id) {
fetchParaderoData(id);
} else {
console.error('ID no encontrado en la URL.');
console.error("ID no encontrado en la URL.");
}
});
async function fetchParaderoData(id) {
try {
const response = await getAplicacion(id);
console.log(response)
paraderoData = response;
nombreParadero = response.NombreParadero
console.log({ nombreParadero })
} catch (error) {
console.error('Error de red: ', error);
console.error("Error de red: ", error);
}
}
let buses = [
{ numero: 10, color: 'green' },
{ numero: 10, color: 'turquoise' },
{ numero: 10, color: 'violet' },
{ numero: 10, color: 'orange' },
{ numero: 10, color: 'blue' },
{ numero: 10, color: 'red' },
{ numero: 10, color: "green" },
{ numero: 10, color: "turquoise" },
{ numero: 10, color: "violet" },
{ numero: 10, color: "orange" },
{ numero: 10, color: "blue" },
{ numero: 10, color: "red" },
];
function getCircleColor(numero) {
// Puedes personalizar esta función para asignar colores según tus preferencias
switch (numero) {
case 10:
return 'darkorange';
return "darkorange";
default:
return 'gray';
return "gray";
}
}
const colores = ["#5fbabe", "#f05eb1", " #5fab88", "#f7646c", "#5e66b5", "#73776e"];
const colores = [
"#5fbabe",
"#f05eb1",
"#5fab88",
"#f7646c",
"#5e66b5",
"#73776e",
];
// Función para obtener un color aleatorio de la lista
function getColorAleatorio(index) {
return colores[index%6];
return colores[index % 6];
}
// Función para calcular la diferencia en minutos entre la hora actual y la hora planificada
function calcularDiferenciaMinutos(horaPlanificada) {
const horaActual = new Date();
const horaPlanificadaArray = horaPlanificada.split(':');
const horaPlanificadaArray = horaPlanificada.split(":");
const horaPlanificadaDate = new Date(
horaActual.getFullYear(),
horaActual.getMonth(),
horaActual.getDate(),
horaPlanificadaArray[0],
horaPlanificadaArray[1]
horaPlanificadaArray[1],
);
const diferenciaMilisegundos = horaPlanificadaDate.getTime() - horaActual.getTime();
const diferenciaMinutos = Math.abs(Math.floor(diferenciaMilisegundos / (1000 * 60)));
console.log(diferenciaMinutos)
const diferenciaMilisegundos =
horaPlanificadaDate.getTime() - horaActual.getTime();
const diferenciaMinutos = Math.abs(
Math.floor(diferenciaMilisegundos / (1000 * 60)),
);
return diferenciaMinutos;
}
// Función para determinar el texto de la hora según la diferencia en minutos
function obtenerTextoHora(horaPlanificada) {
const diferenciaMinutos = calcularDiferenciaMinutos(horaPlanificada);
function formatTimeMinutes({ EstimadaGPS: horaPlanificada, patente }) {
// const diferenciaMinutos = calcularDiferenciaMinutos(horaPlanificada);
const horaActual = new Date();
const horaUtc = horaActual.toISOString().substring(0,10) + 'T' + horaPlanificada + 'Z'
const horaTrayecto = new Date(horaUtc);
const diferenciaMinutos = (horaTrayecto.getTime() - horaActual.getTime()) / (1000 * 60)
console.log({ patente, horaActual, horaTrayecto, horaPlanificada, diferenciaMinutos })
if (diferenciaMinutos <= 3) {
return "< a 3 Minutos";
@ -104,8 +115,7 @@
let letra = "";
let i = 0;
// Caso en el que la cadena tenga un numero primero
if(!isNaN(parseInt(cadena[i]))) {
if (!isNaN(parseInt(cadena[i]))) {
// Obtener el número
while (i < cadena.length && !isNaN(parseInt(cadena[i]))) {
numero += cadena[i];
@ -123,8 +133,7 @@
} else if (flag === 1) {
return letra ? letra : "Error: No se encontró una letra";
}
}
else {
} else {
// Obtener la letra (si hay)
while (i < cadena.length && isNaN(parseInt(cadena[i]))) {
letra += cadena[i];
@ -132,7 +141,7 @@ else {
}
// Obtener el número
while (i < cadena.length ) {
while (i < cadena.length) {
numero += cadena[i];
i++;
}
@ -142,30 +151,44 @@ else {
} else if (flag === 0) {
return letra ? letra : "Error: No se encontró una letra";
}
}
}
}
}
</script>
<!-- Resto del componente para mostrar los datos -->
<!--
<main>
<h1>Información del Paradero</h1>
<p>Detalles del paradero:</p>
<div class="contenedor">
<div class="rectangulo-naranja">
<img src={ImagenBus} alt="Bus" width="200" />
<div class="nombre-paradero">{nombreParadero}</div>
</div>
<div class="rectangulo-gris">Buses que se detienen en esta parada</div>
<div class="cuadricula">
{#if paraderoData}
<pre>{JSON.stringify(paraderoData, null, 2)}</pre>
{#each paraderoData.DetalleLineas as linea, index}
<div class="rectangulo-pequeno">
<div style="position: relative;">
<div class="numero-micro">
{LetraoNumeroMicro(linea.Descripcion, 0)}
</div>
<div class="circulo-letra" style="background-color: #{linea.colorFondo || '#5fbabe'}">
{LetraoNumeroMicro(linea.Descripcion, 1)}
</div>
</div>
<div class="hora" style="background-color: #{linea.colorFondo || '#5fbabe'}">
<div>{linea.Linea}</div>
{#if linea.Llegadas[0]?.EstimadaGPS}
{formatTimeMinutes(linea.Llegadas[0])}
({linea.Llegadas[0].patente})
{:else}
Sin información
{/if}
</div>
</div>
{/each}
{:else}
<p>Cargando datos...</p>
{/if}
</main> -->
</div>
</div>
<style>
@ -194,23 +217,20 @@ else {
.nombre-paradero {
font-size: 28px;
font-weight: bold;
color:#fff;
color: #fff;
margin-right: 10px;
margin-left: 120px;
}
.rectangulo-gris {
/* Ancho máximo */
width: 820px;
height: 40px;
background-color: #8c8b8d;
display: flex;
align-items: center;
padding-left:20px;
color:#fff
padding-left: 20px;
color: #fff;
}
.cuadricula {
@ -231,7 +251,7 @@ else {
align-items: center;
text-align: center;
width: 266px;
height: 120px;
min-height: 120px;
border: 1px solid #000000;
overflow: hidden;
}
@ -239,7 +259,7 @@ else {
.numero-micro {
font-size: 60px;
font-weight: bold;
margin-right: 80px;
margin-right: 100px;
color: #8c8b8d;
}
@ -254,10 +274,8 @@ else {
font-weight: bold;
color: #fff;
position: absolute;
bottom: 10px;
top: 25px;
right: 10px;
margin-bottom: 35px;
margin-right: 60px;
}
.hora {
@ -265,55 +283,5 @@ else {
background-color: #2196f3;
color: #fff;
width: 266px;
}
</style>
<div class="contenedor">
<div class="rectangulo-naranja">
<img src={ImagenBus} alt="Bus" width="200" />
<div class="nombre-paradero">Nombre de Paradero</div>
</div>
<div class="rectangulo-gris">Buses que se detienen en esta parada</div>
<div class="cuadricula">
{#if paraderoData}
<!--
{#each paraderoData.DetalleLineas as linea}
{#each linea.Llegadas as llegada,index}
<div class="rectangulo-pequeno" >
<div class="numero-micro">{llegada.Patente.split('-')[1]}</div>
<div class="circulo-letra" style="background-color: {getColorAleatorio(index)}">{llegada.Patente.charAt(0)}</div>
<div class="hora" style="background-color: {getColorAleatorio(index)}">{obtenerTextoHora(llegada.Planificada)} </div>
</div>
{/each}colorFondo
{/each}
-->
{#each paraderoData.DetalleLineas as linea,index}
<div class="rectangulo-pequeno" >
<div class="numero-micro">{LetraoNumeroMicro(linea.Descripcion,0)}</div>
{#if linea.colorFondo}
<div class="circulo-letra" style="background-color: #{linea.colorFondo}">{LetraoNumeroMicro(linea.Descripcion,1)}</div>
<div class="hora" style="background-color: #{linea.colorFondo}">{obtenerTextoHora(linea.Llegadas[0].EstimadaGPS)} </div>
{:else}
<div class="circulo-letra" style="background-color: #5fbabe">{LetraoNumeroMicro(linea.Descripcion,1)}</div>
<div class="hora" style="background-color: #5fbabe">{obtenerTextoHora(linea.Llegadas[0].EstimadaGPS)} </div>
{/if}
</div>
{/each}
{:else}
<p>Cargando datos...</p>
{/if}
</div>
</div>