Files
SIG/GPS/RastreoTrayectos.aspx.vb

344 lines
15 KiB
VB.net

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 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();")
Me.CveTrayecto = 97
CreaDTPosiciones()
CargaDatos()
RastrearEquipos()
CargaTabla()
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()
End If
End Using
TrazarLineaContinuo = True
CreaDTCoordenadas()
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
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()
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($"<div>")
SBuilder.Append($"<div><h5><a target=\'_blank\' href=\'\'><b>{Header}</b></a></h5></div>")
SBuilder.Append($"<div><table>")
Try
SBuilder.Append($"<tr><td>Fecha : {row("FechaTrama")} </td></tr>")
SBuilder.Append($"<tr><td>Conductor : {row("Conductor").ToString}</td></tr>")
If row.Table.Columns.Contains("Combustible") Then
SBuilder.Append($"<tr><td>Combustible : {IfNull(row("Combustible"), "NO DISPONIBLE", $"{row("Combustible").ToString.FormatoNumero} lts").ToString}</td></tr>")
End If
If row("SPD").ToString <> "-1" Then
SBuilder.Append($"<tr><td>Velocidad : {row("SPD").ToString} KM/H </td></tr>")
End If
If ExtraBody <> "" AndAlso ExtraBody <> "-1" Then
SBuilder.Append(ExtraBody)
End If
SBuilder.AppendFormat("<tr><td><a target=\'_blank\' href=\'https://www.google.com/maps/search/{0},{1}/\'>Ver en google maps</a></td></tr>", row("Lat").ToString, row("Lng").ToString)
Catch ex As Exception
OnError("Ocurrió un error al consultar", ex)
End Try
SBuilder.Append($"</table></div><div></div></div>")
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
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 type='text/javascript' language='javascript'>{0}</script>", Script), False)
End Sub
End Class