Option Strict On Option Explicit On Imports System.Data Imports System.IO Imports System.Net Imports Extensiones Imports Microsoft.Reporting.WebForms Imports Newtonsoft.Json.Linq Imports System.Linq Partial Class GPS_RastreoTrayectos Inherits Page #Region "P R O P I E D A D E S" Private Property RastreoValido As Boolean Get Return CType(ViewState("RastreoValido"), Boolean) End Get Set(value As Boolean) ViewState("RastreoValido") = value End Set End Property Private Property TrazarLineaContinuo As Boolean Get Return CType(ViewState("TrazarLineaContinuo"), Boolean) End Get Set(value As Boolean) ViewState("TrazarLineaContinuo") = value End Set End Property Private Property CveTrayecto As Integer Get Return IfNull(ViewState("CveTrayecto"), -1, ViewState("CveTrayecto").ToString().ToEntero()).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveTrayecto") = value End Set End Property Private Property CveDispositivo As Integer Get Return IfNull(ViewState("CveDispositivo"), -1, ViewState("CveDispositivo").ToString().ToEntero()).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveDispositivo") = value End Set End Property Private Property CveCliente As Integer Get Return IfNull(ViewState("CveCliente"), -1, ViewState("CveCliente").ToString().ToEntero()).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveCliente") = value End Set End Property Private Property DtCoordenadasContinuas As DataTable Get Return CType(ViewState("DtCoordenadasContinuas"), DataTable) End Get Set(value As DataTable) ViewState("DtCoordenadasContinuas") = value End Set End Property Private Property DtPosiciones As DataTable Get Return CType(ViewState("DtPosiciones"), DataTable) End Get Set(value As DataTable) ViewState("DtPosiciones") = value End Set End Property Property GlobalDTDispositivos(CveCliente As Integer) As DataTable Get Dim Str As StringBuilder = New StringBuilder() If CveCliente <> -1 Then Str.AppendFormat(" {0} CveCliente = {1}", If(Str.Length > 0, "AND", ""), CveCliente) If CveCliente <> -1 Then Dim Dv As New DataView(DirectCast(HttpContext.Current.Application("GlobalDTDispositivos"), DataTable), Str.ToString, "", DataViewRowState.CurrentRows) GlobalDTDispositivos = Dv.ToTable Dv.Dispose() Else GlobalDTDispositivos = DirectCast(HttpContext.Current.Application("GlobalDTDispositivos"), DataTable) End If End Get Set(value As DataTable) HttpContext.Current.Application("GlobalDTDispositivos") = value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Not Page.IsPostBack Then RegistraScript("$('#SideNav').click();initMap();") If Request("P") IsNot Nothing Then Dim URLParametros = Parametros(Decripta((Request("P").ToString))) Me.CveTrayecto = URLParametros("CVETRAYECTO").ToString().ToEntero() CargaDatos() If RastreoValido Then TrazarLineaContinuo = True CreaDTCoordenadas() CreaDTPosiciones() RastrearEquipos() CargaTabla() End If End If End If End Sub Private Sub CreaDTPosiciones() DtPosiciones = Nothing Dim dt As New DataTable dt.Columns.Add("CveDispositivo", Type.GetType("System.Int32")) dt.Columns.Add("Vehiculo", Type.GetType("System.String")) dt.Columns.Add("Fecha", Type.GetType("System.String")) dt.Columns.Add("Evento", Type.GetType("System.String")) dt.Columns.Add("TiempoDetenido", Type.GetType("System.Double")) dt.Columns.Add("Velocidad", Type.GetType("System.Double")) dt.Columns.Add("Posicion", Type.GetType("System.String")) dt.Columns.Add("KMRecorridos", Type.GetType("System.Double")) dt.Columns.Add("Icono", Type.GetType("System.String")) DtPosiciones = dt End Sub Private Sub CreaDTCoordenadas() Dim dt As New DataTable dt.Columns.Add("CveDispositivo", Type.GetType("System.Int32")) dt.Columns.Add("Coord", Type.GetType("System.String")) DtCoordenadasContinuas = dt End Sub Private Sub CargaDatos() Using ObjGPS As New ClsGPS If ObjGPS.GetTrayectos(CveTrayecto, -1, -1) AndAlso ObjGPS.DtResultados.Rows.Count > 0 Then Dim Row As DataRow = ObjGPS.DtResultados.Rows(0) Me.CveDispositivo = Row("CveDispositivo").ToString().ToEntero() Me.CveCliente = Row("CveCliente").ToString().ToEntero() Me.RastreoValido = Not CBool(Row("EsFin")) End If End Using End Sub Protected Sub TimmerRefresh_Tick(sender As Object, e As EventArgs) DtPosiciones.Rows.Clear() RegistraScript("DeleteMarkers();") Dim LastCoord As String = "" Dim TmpDT As New DataTable Dim Info = "" Dim Direccion = "" Dim SBBody As New StringBuilder Dim Icono As String = "/Imagenes/rsz_11rsz_car.png" Dim Fecha, Vehiculo As String Dim ObjGPS As New ClsGPS Try If ObjGPS.GetTrayectos(CveTrayecto, -1, -1) AndAlso ObjGPS.DtResultados.Rows.Count > 0 Then Dim Row As DataRow = ObjGPS.DtResultados.Rows(0) Me.RastreoValido = Not CBool(Row("EsFin")) End If If Not RastreoValido Then Alert("El trayecto ha sido finalizado.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim RowVehiculo As DataRow = GlobalDTDispositivos(CveCliente).FiltroPrimero($"CveDispositivo = {CveDispositivo}") If ObjGPS.UltimaPosicionEquipoGet(CveDispositivo, MinFecha, MaxFecha) Then If ObjGPS.DtResultados.Rows.Count > 0 Then Dim Coord As String = SQLToGmaps(ObjGPS.DtResultados.Rows(0)("Posicion").ToString, "POINT") Fecha = ObjGPS.DtResultados.Rows(0)("FechaTrama").ToString Vehiculo = ObjGPS.DtResultados.Rows(0)("Vehiculo").ToString Info = InfoWindowCombustible($" Vehículo: {Vehiculo}", "-1", CveDispositivo, ObjGPS.DtResultados.Rows(0), False) If ObjGPS.DtResultados.Rows(0)("SPD").ToString.ToDouble > 1 Then Icono = $"/Imagenes/{RowVehiculo("Icono")}green.png" Else Icono = $"/Imagenes/{RowVehiculo("Icono")}.png" End If AddRowCoordenadasContinuas(Coord, CveDispositivo) Dim POLYPATH As String = "[" For Each RCC As DataRow In DtCoordenadasContinuas.FiltraParametros($"CveDispositivo = {CveDispositivo}", DistinctColumns:={"CveDispositivo", "Coord"}).Rows POLYPATH = $"{POLYPATH}{RCC("Coord").ToString}," Next POLYPATH = $"{POLYPATH.Substring(0, POLYPATH.Length - 1)}]" RegistraScript($"creaPolyline({POLYPATH}, '{RowVehiculo("ColorTrazo")}', '{Info}', {Coord}, '{RowVehiculo("NombreVehiculo")}', '{Icono}',{CveDispositivo}, 1)", $"{CveDispositivo}{DtCoordenadasContinuas.Rows.Count}") RegistraScript($"setTimeout(function(){{ CreaMarcador({Coord},'{RowVehiculo("NombreVehiculo").ToString()}', '{Info}', '{Icono}');}}, 1000);", CveDispositivo.ToString()) AddRowPosiciones(Vehiculo, Coord, ObjGPS.DtResultados.Rows(0)("SPD").ToString.ToDouble, Fecha, CveDispositivo, ObjGPS.DtResultados(0)("TiempoDetenido").ToString.ToDouble) End If End If TimmerRefresh.Enabled = True Catch ex As Exception OnError("Ocurrió un error al rastrear equipo", ex) End Try End Sub Private Sub RastrearEquipos() If Not RastreoValido Then Alert("El trayecto ha sido finalizado.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim LastCoord As String = "" Dim TmpDT As New DataTable Dim Info = "" Dim Direccion = "" Dim SBBody As New StringBuilder Dim Icono As String = "/Imagenes/rsz_11rsz_car.png" Dim Fecha, Vehiculo As String Dim ObjGPS As New ClsGPS Try Dim RowVehiculo As DataRow = GlobalDTDispositivos(CveCliente).FiltroPrimero($"CveDispositivo = {CveDispositivo}") If ObjGPS.UltimaPosicionEquipoGet(CveDispositivo, MinFecha, MaxFecha) Then If ObjGPS.DtResultados.Rows.Count > 0 Then Dim Coord As String = SQLToGmaps(ObjGPS.DtResultados.Rows(0)("Posicion").ToString, "POINT") Fecha = ObjGPS.DtResultados.Rows(0)("FechaTrama").ToString Vehiculo = ObjGPS.DtResultados.Rows(0)("Vehiculo").ToString Info = InfoWindowCombustible($" Vehículo: {Vehiculo}", "-1", CveDispositivo, ObjGPS.DtResultados.Rows(0), False) If ObjGPS.DtResultados.Rows(0)("SPD").ToString.ToDouble > 1 Then Icono = $"/Imagenes/{RowVehiculo("Icono")}green.png" Else Icono = $"/Imagenes/{RowVehiculo("Icono")}.png" End If AddRowCoordenadasContinuas(Coord, CveDispositivo) RegistraScript($"setTimeout(function(){{ CreaMarcador({Coord},'{RowVehiculo("NombreVehiculo").ToString()}', '{Info}', '{Icono}');}}, 1000);", CveDispositivo.ToString()) AddRowPosiciones(Vehiculo, Coord, ObjGPS.DtResultados.Rows(0)("SPD").ToString.ToDouble, Fecha, CveDispositivo, ObjGPS.DtResultados(0)("TiempoDetenido").ToString.ToDouble) End If End If TimmerRefresh.Enabled = True Catch ex As Exception OnError("Ocurrió un error al rastrear equipo", ex) End Try ObjGPS.Dispose() End Sub Private Sub CargaTabla() If DtPosiciones IsNot Nothing Then GvBarra.DataSource = DtPosiciones GvBarra.DataBind() End If If GvBarra.HeaderRow IsNot Nothing Then GvBarra.HeaderRow.Cells(3).Style.Add("display", "") GvBarra.HeaderRow.Cells(4).Style.Add("display", "none !important") End If End Sub Private Sub AddRowCoordenadasContinuas(Coord As String, CveDispositivo As Integer) Dim dr As DataRow = DtCoordenadasContinuas.NewRow() dr("CveDispositivo") = CveDispositivo dr("Coord") = Coord DtCoordenadasContinuas.Rows.Add(dr) End Sub Private Sub AddRowPosiciones(Vehiculo As String, Posicion As String, Velocidad As Double, Fecha As String, CveDispositivo As Integer, Optional TiempoDetenido As Double = 0, Optional Evento As String = "", Optional KMRecorridos As Double = 0, Optional Icono As String = "/Imagenes/rsz_11rsz_car.png") Dim dr As DataRow = DtPosiciones.NewRow() dr("Vehiculo") = Vehiculo dr("Fecha") = Fecha dr("TiempoDetenido") = TiempoDetenido dr("Velocidad") = Velocidad dr("Posicion") = Posicion dr("CveDispositivo") = CveDispositivo dr("Evento") = Evento dr("KMRecorridos") = KMRecorridos dr("Icono") = Icono DtPosiciones.Rows.Add(dr) End Sub Public Function InfoWindowCombustible(Header As String, ExtraBody As String, CveDispositivo As Integer, row As DataRow, Optional PermisoComandos As Boolean = True) As String Dim SBuilder As New StringBuilder SBuilder.Clear() SBuilder.Append($"
") SBuilder.Append($"
{Header}
") SBuilder.Append($"
") Try SBuilder.Append($"") SBuilder.Append($"") If row.Table.Columns.Contains("Combustible") Then SBuilder.Append($"") End If If row("SPD").ToString <> "-1" Then SBuilder.Append($"") End If If ExtraBody <> "" AndAlso ExtraBody <> "-1" Then SBuilder.Append(ExtraBody) End If SBuilder.AppendFormat("", row("Lat").ToString, row("Lng").ToString) Catch ex As Exception OnError("Ocurrió un error al consultar", ex) End Try SBuilder.Append($"
Fecha : {row("FechaTrama")}
Conductor : {row("Conductor").ToString}
Combustible : {IfNull(row("Combustible"), "NO DISPONIBLE", $"{row("Combustible").ToString.FormatoNumero} lts").ToString}
Velocidad : {row("SPD").ToString} KM/H
Ver en google maps
") Return SBuilder.ToString End Function Protected Sub btnPagePrev_Click(sender As Object, e As EventArgs) Dim TotalRegistros As Integer = DtPosiciones.Rows.Count Dim TotalRowsPage As Integer = GvBarra.PageSize Dim PrevIndex As Integer = HdnIndexPage.Value.ToEntero - 1 Dim CurrentIndex As Integer = PrevIndex + 1 Dim PrevIndexDT As Integer = (TotalRowsPage) * PrevIndex Dim CurrentIndexDT As Integer = (TotalRowsPage) * CurrentIndex HdnIndexPage.Value = PrevIndex.ToString If Not btnPageNext.Enabled Then btnPageNext.Enabled = True End If If PrevIndexDT <= 0 Then btnPagePrev.Enabled = False GvBarra.DataSource = DtPosiciones.FiltraPorIndices(0, CurrentIndexDT) LblRegistros.Text = $"Distribución de datos desde 0 hasta {CurrentIndexDT.ToString.FormatoNumero(0)}. Total de registros: {DtPosiciones.Rows.Count.ToString.FormatoNumero(0)}" Else LblRegistros.Text = $"Distribución de datos desde {PrevIndexDT.ToString.FormatoNumero(0)} hasta {CurrentIndexDT.ToString.FormatoNumero(0)}. Total de registros: {DtPosiciones.Rows.Count.ToString.FormatoNumero(0)}" GvBarra.DataSource = DtPosiciones.FiltraPorIndices(PrevIndexDT, CurrentIndexDT) End If GvBarra.DataBind() UPGV.Update() RegistraScript("setTimeout(function(){OpcionesHistorico();},500);") End Sub Protected Sub btnPageNext_Click(sender As Object, e As EventArgs) Dim TotalRegistros As Integer = DtPosiciones.Rows.Count Dim TotalRowsPage As Integer = GvBarra.PageSize Dim Index As Integer = HdnIndexPage.Value.ToEntero + 1 Dim NextIndex As Integer = Index + 1 Dim CurrentIndexDT As Integer = (TotalRowsPage) * Index Dim NextIndexDT As Integer = (TotalRowsPage) * NextIndex HdnIndexPage.Value = Index.ToString If Not btnPagePrev.Enabled Then btnPagePrev.Enabled = True End If If NextIndexDT >= TotalRegistros Then btnPageNext.Enabled = False GvBarra.DataSource = DtPosiciones.FiltraPorIndices(CurrentIndexDT, TotalRegistros - 1) LblRegistros.Text = $"Distribución de datos desde {CurrentIndexDT.ToString.FormatoNumero(0)} hasta {DtPosiciones.Rows.Count.ToString.FormatoNumero(0)}. Total de registros: {DtPosiciones.Rows.Count.ToString.FormatoNumero(0)}" Else GvBarra.DataSource = DtPosiciones.FiltraPorIndices(CurrentIndexDT, NextIndexDT) LblRegistros.Text = $"Distribución de datos desde {CurrentIndexDT.ToString.FormatoNumero(0)} hasta {NextIndexDT.ToString.FormatoNumero(0)}. Total de registros: {DtPosiciones.Rows.Count.ToString.FormatoNumero(0)}" End If GvBarra.DataBind() UPGV.Update() RegistraScript("setTimeout(function(){OpcionesHistorico();},500);") End Sub Private Function Parametros(Cadena As String) As Hashtable Dim P1() As String = Cadena.Split("&"c) Dim Tmp As String Dim P2() As String Dim URLParametros As New Hashtable For Each Tmp In P1 P2 = Tmp.Replace("%26%", "&").Split("="c) URLParametros.Add(P2(0).ToString.ToUpper, P2(1)) Next Return URLParametros End Function Public Sub RegistraScript(Script As String, Optional valuetick As String = "") Dim Rdm As Random = New Random() ScriptManager.RegisterStartupScript(Page, Me.GetType(), String.Format("{0}{1}{2}", (DateTime.Now.Ticks + 1), Rdm.Next(), valuetick), String.Format("", Script), False) End Sub End Class