From 180fd2fe3534d044b5808aed18f5fd3a647d3155 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Mon, 6 Jan 2025 03:53:57 -0700 Subject: [PATCH] Notificaciones on campana --- App_Code/ClsPaginas.vb | 26 + App_Code/ClsSisNotificaciones.vb | 4190 +++++++++++++------------- App_Code/NotificacionesSQLWatcher.vb | 4 +- Global.asax | 6 +- Site.master | 35 +- Site.master.vb | 27 +- 6 files changed, 2219 insertions(+), 2069 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 989276d85..bc48001fa 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -201,6 +201,32 @@ Public Class ClsPaginas #End Region #Region "GlobalDTs" + + Public Shared Property GlobalDTNotificacionesUsuarios(CveUsuario As Integer, CveEmpresa As Integer) As DataTable + Get + Dim AppNombre As String = $"GlobalDTNotificacionesUsuarios-{CveEmpresa}" + If HttpContext.Current.Application(AppNombre) Is Nothing Then + Using ObjUsuarios As New ClsSisNotificaciones + If ObjUsuarios.NotificacionesUsuariosGet(-1, CveEmpresa) Then HttpContext.Current.Application(AppNombre) = ObjUsuarios.DtResultados + End Using + End If + + Dim filtros As New List(Of String) + If CveUsuario <> -1 Then filtros.Add($"CveUsuario = {CveUsuario}") + If filtros.Count > 0 Then + Dim Dv As New DataView(DirectCast(HttpContext.Current.Application(AppNombre), DataTable), String.Join(" AND ", filtros), "", DataViewRowState.CurrentRows) + GlobalDTNotificacionesUsuarios = Dv.ToTable + Dv.Dispose() + Else + GlobalDTNotificacionesUsuarios = DirectCast(HttpContext.Current.Application(AppNombre), DataTable) + End If + End Get + Set(value As DataTable) + Dim AppNombre As String = $"GlobalDTNotificacionesUsuarios-{CveEmpresa}" + HttpContext.Current.Application(AppNombre) = value + End Set + End Property + Public Shared Property GlobalTipoCambio(Optional Fecha As Date = MinFecha) As Double Get If GlobalTipoCambio <= 0 Then diff --git a/App_Code/ClsSisNotificaciones.vb b/App_Code/ClsSisNotificaciones.vb index 82679d758..354cfa4c9 100644 --- a/App_Code/ClsSisNotificaciones.vb +++ b/App_Code/ClsSisNotificaciones.vb @@ -1,42 +1,42 @@ -Option Explicit On -Option Strict Off - -Imports System.Data -Imports System.Data.SqlClient -Imports System.IO -Imports System.Net -Imports System.Net.Http -Imports CrystalDecisions.CrystalReports.Engine -Imports CrystalDecisions.Shared -Imports Extensiones -Imports GemBox.Spreadsheet -Imports Microsoft.AspNet.SignalR -Imports Microsoft.Reporting.WebForms -Imports Newtonsoft.Json.Linq - -Public Class ClsSisNotificaciones +Option Explicit On +Option Strict Off + +Imports System.Data +Imports System.Data.SqlClient +Imports System.IO +Imports System.Net +Imports System.Net.Http +Imports CrystalDecisions.CrystalReports.Engine +Imports CrystalDecisions.Shared +Imports Extensiones +Imports GemBox.Spreadsheet +Imports Microsoft.AspNet.SignalR +Imports Microsoft.Reporting.WebForms +Imports Newtonsoft.Json.Linq + +Public Class ClsSisNotificaciones Implements IDisposable -#Region "C A M P O S" +#Region "C A M P O S" 'SQL - Private SqlConexion As SqlConnection - Private SqlAdapter As SqlDataAdapter - Private SqlCommand As SqlCommand - Private Data As DataTable - Private DataSet As DataSet - - 'Atributos de la clase - Private _CveNotificacion As Integer - Private _CveEmpresa As Integer - Private _ClavesNotificaciones As Dictionary(Of String, List(Of Integer)) - - Private disposedValue As Boolean = False ' Para detectar llamadas redundantes - 'PARA REGISTRAR CONEXION - Private CveConexion As Integer = 0 -#End Region + Private SqlConexion As SqlConnection + Private SqlAdapter As SqlDataAdapter + Private SqlCommand As SqlCommand + Private Data As DataTable + Private DataSet As DataSet -#Region "P R O P I E D A D E S" + 'Atributos de la clase + Private _CveNotificacion As Integer + Private _CveEmpresa As Integer + Private _ClavesNotificaciones As Dictionary(Of String, List(Of Integer)) + + Private disposedValue As Boolean = False ' Para detectar llamadas redundantes + 'PARA REGISTRAR CONEXION + Private CveConexion As Integer = 0 +#End Region + +#Region "P R O P I E D A D E S" 'Public ReadOnly Property FirebaseWebService As String ' Get ' Return ConfigurationManager.AppSettings("FirebaseWebService").ToString() @@ -72,95 +72,95 @@ Public Class ClsSisNotificaciones End Get End Property - Public Const FirebaseWebService As String = "https://fcm.googleapis.com/fcm/send" - Public Const FirebaseServerKey As String = "AAAAqx0xsBA:APA91bHip_JcMGhNQiIzdnodY9ynkHIjX9wEc4TrLkepXK0Lz1QEar5dys6sa3ourPLGiEJD4fGGnSzrk2M_9aJuQo55LjvSJs2c1bU74u-yArMcbI0F_cKzbYAcOMRc8pbRknuWGsXX" - Public Const SenderID As String = "734929203216" - - Public ReadOnly Property DtResultados() As DataTable - Get - DtResultados = Data - End Get - End Property - Public Property NotificacionesBitacora As String - Public Property DTReportesProgramados As DataTable - Public Property DTNotificacionesGPS As DataTable - Public Property DTNotificacionesERP As DataTable + Public Const FirebaseWebService As String = "https://fcm.googleapis.com/fcm/send" + Public Const FirebaseServerKey As String = "AAAAqx0xsBA:APA91bHip_JcMGhNQiIzdnodY9ynkHIjX9wEc4TrLkepXK0Lz1QEar5dys6sa3ourPLGiEJD4fGGnSzrk2M_9aJuQo55LjvSJs2c1bU74u-yArMcbI0F_cKzbYAcOMRc8pbRknuWGsXX" + Public Const SenderID As String = "734929203216" + + Public ReadOnly Property DtResultados() As DataTable + Get + DtResultados = Data + End Get + End Property + Public Property NotificacionesBitacora As String + Public Property DTReportesProgramados As DataTable + Public Property DTNotificacionesGPS As DataTable + Public Property DTNotificacionesERP As DataTable Public Property DTNotificacionesArmadas As DataTable -#End Region - Sub New() - SqlConexion = New SqlConnection - SqlConexion.ConnectionString = ClsPaginas.UsuarioActualRutaDB - SqlAdapter = New SqlDataAdapter("", SqlConexion) - Try - SqlConexion.Open() - Catch ex As Exception - Me.OnError("Ocurrió un error al intentar conectarse a la base de datos.", ex) - End Try - - 'Inicializamos las propiedades necesarias - _ClavesNotificaciones = New Dictionary(Of String, List(Of Integer)) - ConexionAdd() - End Sub - - Private Sub DataAdapter(StrSQL As String, Optional TipoComando As CommandType = CommandType.StoredProcedure) - With SqlAdapter.SelectCommand - .Parameters.Clear() - .CommandText = StrSQL - .CommandType = TipoComando - End With - Data = New DataTable - End Sub -#Region "Conexiones" +#End Region + Sub New() + SqlConexion = New SqlConnection + SqlConexion.ConnectionString = ClsPaginas.UsuarioActualRutaDB + SqlAdapter = New SqlDataAdapter("", SqlConexion) + Try + SqlConexion.Open() + Catch ex As Exception + Me.OnError("Ocurrió un error al intentar conectarse a la base de datos.", ex) + End Try - Private Sub ConexionAdd() - If ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then - - Try - 'DataAdapter(String.Format("INSERT INTO Sis_Conexiones (Clase,Modulo) VALUES ('ClsRH','{0}')", "RH/CatMotivosBaja"), CommandType.Text) ' pendiente de terminar parra registrar el cveconexion, falta el rarámetro de módulo - DataAdapter("PA_Sis_RegistrarConexion") - With SqlAdapter.SelectCommand.Parameters - .Add("@Clase", SqlDbType.VarChar).Value = Me.GetType().Name - .Add("@Modulo", SqlDbType.VarChar).Value = String.Format("{0}?{1}", HttpContext.Current.Request.Url.AbsolutePath.ToString, HttpContext.Current.Request.QueryString.ToString) - .Add("@IDConexion", SqlDbType.Int).Direction = ParameterDirection.Output - End With - SqlAdapter.Fill(Data) - CveConexion = SqlAdapter.SelectCommand.Parameters("@IDConexion").Value.ToString.ToEntero - Catch ex As Exception - OnError("Ocurrió un error registrar la conexión.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - End If - End Sub - - Private Sub ConexionClose() - If CveConexion > 0 AndAlso ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then - - DataAdapter(String.Format("UPDATE Sis_Conexiones SET FechaCierre = GETDATE() WHERE CveConexion = {0}", CveConexion), CommandType.Text) - Try - SqlAdapter.Fill(Data) - - Catch ex As Exception - OnError("Ocurrió un error registrar la conexión.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - CveConexion = 0 - - End If - + 'Inicializamos las propiedades necesarias + _ClavesNotificaciones = New Dictionary(Of String, List(Of Integer)) + ConexionAdd() End Sub -#End Region -#Region "N O T I F I C A C I O N E S" + Private Sub DataAdapter(StrSQL As String, Optional TipoComando As CommandType = CommandType.StoredProcedure) + With SqlAdapter.SelectCommand + .Parameters.Clear() + .CommandText = StrSQL + .CommandType = TipoComando + End With + Data = New DataTable + End Sub +#Region "Conexiones" + + Private Sub ConexionAdd() + If ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then + + Try + 'DataAdapter(String.Format("INSERT INTO Sis_Conexiones (Clase,Modulo) VALUES ('ClsRH','{0}')", "RH/CatMotivosBaja"), CommandType.Text) ' pendiente de terminar parra registrar el cveconexion, falta el rarámetro de módulo + DataAdapter("PA_Sis_RegistrarConexion") + With SqlAdapter.SelectCommand.Parameters + .Add("@Clase", SqlDbType.VarChar).Value = Me.GetType().Name + .Add("@Modulo", SqlDbType.VarChar).Value = String.Format("{0}?{1}", HttpContext.Current.Request.Url.AbsolutePath.ToString, HttpContext.Current.Request.QueryString.ToString) + .Add("@IDConexion", SqlDbType.Int).Direction = ParameterDirection.Output + End With + SqlAdapter.Fill(Data) + CveConexion = SqlAdapter.SelectCommand.Parameters("@IDConexion").Value.ToString.ToEntero + Catch ex As Exception + OnError("Ocurrió un error registrar la conexión.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + End If + End Sub + + Private Sub ConexionClose() + If CveConexion > 0 AndAlso ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then + + DataAdapter(String.Format("UPDATE Sis_Conexiones SET FechaCierre = GETDATE() WHERE CveConexion = {0}", CveConexion), CommandType.Text) + Try + SqlAdapter.Fill(Data) + + Catch ex As Exception + OnError("Ocurrió un error registrar la conexión.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + CveConexion = 0 + + End If + + End Sub +#End Region + +#Region "N O T I F I C A C I O N E S" Public Shared Sub EnviarAlerta(Titulo As String, Mensaje As String, CveUsuario As String, Optional Tipo As TipoNotificacion = TipoNotificacion.AlertaVentanaNoOcultar, Optional TimeOut As Integer = 0) - Dim hub = GlobalHost.ConnectionManager.GetHubContext(Of Notificaciones)() - 'VERIFICA SI EXISTE LA CONEXION DEL USUARIO + Dim hub = GlobalHost.ConnectionManager.GetHubContext(Of Notificaciones)() + 'VERIFICA SI EXISTE LA CONEXION DEL USUARIO If Notificaciones.UsuariosConexiones.Keys.Any(Function(key) key = CveUsuario) Then hub.Clients.Client(Notificaciones.UsuariosConexiones(CveUsuario)).alertaVentana(Titulo, Mensaje, DirectCast(Tipo, Integer), TimeOut) End If End Sub Public Shared Sub ContadorCampana(Mensaje As String, CveUsuario As String) - Dim hub = GlobalHost.ConnectionManager.GetHubContext(Of Notificaciones)() - 'VERIFICA SI EXISTE LA CONEXION DEL USUARIO + Dim hub = GlobalHost.ConnectionManager.GetHubContext(Of Notificaciones)() + 'VERIFICA SI EXISTE LA CONEXION DEL USUARIO If Notificaciones.UsuariosConexiones.Keys.Any(Function(key) key = CveUsuario) Then hub.Clients.Client(Notificaciones.UsuariosConexiones(CveUsuario)).ContadorCampana(Mensaje) End If @@ -169,95 +169,95 @@ Public Class ClsSisNotificaciones Public Sub DispararNotificacion(CveNotificacion As Integer, CvesFiltro As List(Of Object), CveEmpresa As Integer) - - _CveNotificacion = CveNotificacion - _CveEmpresa = CveEmpresa - - 'MockUp de Notificacion #3 - CvesFiltro.Add(71471) 'CveOC - CvesFiltro.Add(4) 'CveEstatus - Autorizada - - ObtenerUsuariosNotificacion(CvesFiltro) - - 'Agregamos los Usuarios a la Bitacora - For Each Usuario As Integer In _ClavesNotificaciones("CveUsuario") - AddNotificacionesBitacora(Usuario) - Next - - End Sub - - Private Sub ObtenerUsuariosNotificacion(CvesFiltro As List(Of Object)) - - Select Case _CveNotificacion - - Case 1 'Notificar Solicitud de Orden de Compra - - Case 2 'Notificar Cambio Estatus Orden de Compra - NotificarEdicionOC(CveOrdenCompra:=CvesFiltro(0).ToString.ToEntero, CveEstatus:=CvesFiltro(1).ToString.ToEntero) - - Case 3 'Notificar Edicion de Orden de Compra - - Case 4 'Notificar Cambio en Bitacora de Orden de Compra - - End Select - + + _CveNotificacion = CveNotificacion + _CveEmpresa = CveEmpresa + + 'MockUp de Notificacion #3 + CvesFiltro.Add(71471) 'CveOC + CvesFiltro.Add(4) 'CveEstatus - Autorizada + + ObtenerUsuariosNotificacion(CvesFiltro) + + 'Agregamos los Usuarios a la Bitacora + For Each Usuario As Integer In _ClavesNotificaciones("CveUsuario") + AddNotificacionesBitacora(Usuario) + Next + End Sub -#End Region + Private Sub ObtenerUsuariosNotificacion(CvesFiltro As List(Of Object)) + + Select Case _CveNotificacion + + Case 1 'Notificar Solicitud de Orden de Compra + + Case 2 'Notificar Cambio Estatus Orden de Compra + NotificarEdicionOC(CveOrdenCompra:=CvesFiltro(0).ToString.ToEntero, CveEstatus:=CvesFiltro(1).ToString.ToEntero) + + Case 3 'Notificar Edicion de Orden de Compra + + Case 4 'Notificar Cambio en Bitacora de Orden de Compra + + End Select -#Region "L O G I C A - N O T I F I C A C I O N E S" - Private Sub NotificarEdicionOC(CveOrdenCompra As Integer, CveEstatus As Integer) - Select Case CveEstatus - - Case 2 'Solicitada - - Case 3 'Supervisada - - Case 4 'Autorizada - GetUsuariosNotifiacionOCAutorizada(CveOrdenCompra) - - Dim Claves As New List(Of Integer) - For Each item As DataRow In Data.Rows - Claves.Add(item("CveUsuario").ToString.ToEntero) - Next - - If Claves.Count > 0 Then - _ClavesNotificaciones.Add("CveUsuario", Claves) - End If - - End Select - End Sub -#End Region -#Region "C O R R E O" +#End Region - Private Sub EnviarCorreos(DTNotificacionesCorreo As DataTable) +#Region "L O G I C A - N O T I F I C A C I O N E S" + Private Sub NotificarEdicionOC(CveOrdenCompra As Integer, CveEstatus As Integer) + Select Case CveEstatus + + Case 2 'Solicitada + + Case 3 'Supervisada + + Case 4 'Autorizada + GetUsuariosNotifiacionOCAutorizada(CveOrdenCompra) + + Dim Claves As New List(Of Integer) + For Each item As DataRow In Data.Rows + Claves.Add(item("CveUsuario").ToString.ToEntero) + Next + + If Claves.Count > 0 Then + _ClavesNotificaciones.Add("CveUsuario", Claves) + End If + + End Select + + End Sub +#End Region + +#Region "C O R R E O" + + Private Sub EnviarCorreos(DTNotificacionesCorreo As DataTable) For Each notificacion As DataRow In DTNotificacionesCorreo.Rows Dim Hilo As New System.Threading.Thread(Sub() MandaMail(notificacion("CveNotificacionBitacora").ToString.ToEntero, notificacion("Encabezado").ToString, notificacion("Cuerpo").ToString, notificacion("Correo").ToString, "")) Hilo.Start() - Next - End Sub - - Private Sub MandaMail(CveNotificacionBitacora As Integer, Asunto As String, Cuerpo As String, Mail As String, MailCC As String) - Dim ObjMail As New ClsSisMail() - Dim ObjNotificacion As New ClsSisNotificaciones - Try - Dim ResultadoMail As Integer = 0 - Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) - If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Mail, Asunto, Cuerpo, MailCC, LSRutasMail) Then - ObjNotificacion.UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - Catch ex As Exception - OnError("Ocurrió error al mandar el Mail", ex) - End Try - ObjNotificacion.Dispose() + Next End Sub -#End Region + Private Sub MandaMail(CveNotificacionBitacora As Integer, Asunto As String, Cuerpo As String, Mail As String, MailCC As String) + Dim ObjMail As New ClsSisMail() + Dim ObjNotificacion As New ClsSisNotificaciones + Try + Dim ResultadoMail As Integer = 0 + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Mail, Asunto, Cuerpo, MailCC, LSRutasMail) Then + ObjNotificacion.UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + Catch ex As Exception + OnError("Ocurrió error al mandar el Mail", ex) + End Try + ObjNotificacion.Dispose() + End Sub + +#End Region #Region "V A L I D A - U S U A R I O" - Private Function ValidaUsuarioSistema(CveEmpresa As Integer) As Usuario + Private Function ValidaUsuarioSistema(CveEmpresa As Integer) As Usuario Dim UsuarioActual As Usuario = Nothing Dim NombreCadena As String = ClsPaginas.GlobalNombreCadenaConexion(CveEmpresa) Dim ObjUsuarios As New ClsSisUsuarioAutenticacion(NombreCadena:=NombreCadena) @@ -268,453 +268,453 @@ Public Class ClsSisNotificaciones End If ObjUsuarios.Dispose() - Return UsuarioActual - End Function - Private Sub CreaObjetoEmpresa(ByRef UsuarioActual As Usuario) - - Dim ObjEmpresa As New ClsSisEmpresas() - If ObjEmpresa.GetEmpresas(UsuarioActual.CveEmpresa, "-1", "-1", "-1", "-1") Then - If ObjEmpresa.GetEmpresasFuncionalidades(UsuarioActual.CveEmpresa) Then - Dim dttmp As Data.DataTable = ObjEmpresa.DtResultados - - Dim EmpresasFuncionalidades As New HybridDictionary - For Each Row As Data.DataRow In dttmp.Rows - EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString) - Next - ObjEmpresa.Empresa.SetFuncionalidades(EmpresasFuncionalidades) - End If - - UsuarioActual.Empresa = ObjEmpresa.Empresa - End If - ObjEmpresa.Dispose() + Return UsuarioActual + End Function + Private Sub CreaObjetoEmpresa(ByRef UsuarioActual As Usuario) + + Dim ObjEmpresa As New ClsSisEmpresas() + If ObjEmpresa.GetEmpresas(UsuarioActual.CveEmpresa, "-1", "-1", "-1", "-1") Then + If ObjEmpresa.GetEmpresasFuncionalidades(UsuarioActual.CveEmpresa) Then + Dim dttmp As Data.DataTable = ObjEmpresa.DtResultados + + Dim EmpresasFuncionalidades As New HybridDictionary + For Each Row As Data.DataRow In dttmp.Rows + EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString) + Next + ObjEmpresa.Empresa.SetFuncionalidades(EmpresasFuncionalidades) + End If + + UsuarioActual.Empresa = ObjEmpresa.Empresa + End If + ObjEmpresa.Dispose() End Sub #End Region -#Region "N O T I F I C A C I O N E S - M E T O D O S G E N E R A L E S" +#Region "N O T I F I C A C I O N E S - M E T O D O S G E N E R A L E S" - Public Function ObtenerNotificaciones() As Boolean - - If Not GetNotificacionesBitacoraPendientes(1000) Then - Return False - End If - - If DTNotificacionesGPS IsNot Nothing AndAlso DTNotificacionesGPS.Rows.Count > 0 Then - EnviarNotificacionesGPS() - End If - - If DTNotificacionesERP IsNot Nothing AndAlso DTNotificacionesERP.Rows.Count > 0 Then - 'EnviarNotificacionesERP() - End If - - If DTNotificacionesArmadas IsNot Nothing AndAlso DTNotificacionesArmadas.Rows.Count > 0 Then - EnviarNotificacionesArmadas() - End If - - If DTReportesProgramados IsNot Nothing AndAlso DTReportesProgramados.Rows.Count > 0 Then - ArmarReportesProgramados() - End If - - Return False - End Function - - Public Sub ArmarReportesProgramados() + Public Function ObtenerNotificaciones() As Boolean + + If Not GetNotificacionesBitacoraPendientes(1000) Then + Return False + End If + + If DTNotificacionesGPS IsNot Nothing AndAlso DTNotificacionesGPS.Rows.Count > 0 Then + EnviarNotificacionesGPS() + End If + + If DTNotificacionesERP IsNot Nothing AndAlso DTNotificacionesERP.Rows.Count > 0 Then + 'EnviarNotificacionesERP() + End If + + If DTNotificacionesArmadas IsNot Nothing AndAlso DTNotificacionesArmadas.Rows.Count > 0 Then + EnviarNotificacionesArmadas() + End If + + If DTReportesProgramados IsNot Nothing AndAlso DTReportesProgramados.Rows.Count > 0 Then + ArmarReportesProgramados() + End If + + Return False + End Function + + Public Sub ArmarReportesProgramados() Try - For Each RowReporte As DataRow In DTReportesProgramados.Rows - Dim CveReporteProgramado As Integer = RowReporte("CveReporteProgramado").ToString.ToEntero - Dim CveNotificacionBitacora As Integer = RowReporte("CveNotificacionBitacora").ToString.ToEntero - - Dim Correos As String = RowReporte("Correos").ToString - Dim NombreCliente As String = RowReporte("Cliente").ToString - - Dim FechaI As DateTime = RowReporte("FechaI").ToString.ToDateTime - Dim FechaF As DateTime = RowReporte("FechaF").ToString.ToDateTime - - Dim CveReporte As Integer = RowReporte("CveReporte").ToString.ToEntero - Dim CveCliente As Integer = RowReporte("CveCliente").ToString.ToEntero - Dim CveEmpresa As Integer = RowReporte("CveEmpresa").ToString.ToEntero - - Dim DtExtras As DataTable = Nothing - Dim DtDispositivos As DataTable = Nothing - - Dim Formato As String = RowReporte("Formato").ToString - - Dim UsuarioActual As Usuario = ValidaUsuarioSistema(CveEmpresa) - - Dim ObjGPS As New ClsGPS - If CveReporte.Contiene(1, 2, 3, 4, 5, 6, 7, 8, 10) Then - If ObjGPS.ReportesProgramadosDispositivosGet(CveReporteProgramado) Then - DtDispositivos = ObjGPS.DtResultados.Copy() - End If - End If - If CveReporte = 4 Then - If ObjGPS.ReportesProgramadosEventosGet(CveReporteProgramado) Then - DtExtras = ObjGPS.DtResultados - End If - End If - ObjGPS.Dispose() - - EnviarReporteProgramado(CveCliente, NombreCliente, Formato, Correos, FechaI, FechaF, CveReporte, CveNotificacionBitacora, DtDispositivos, DtExtras, UsuarioActual) - - If DtExtras IsNot Nothing Then - DtExtras.Clear() - DtExtras.Dispose() - End If - - If DtDispositivos IsNot Nothing Then - DtDispositivos.Clear() - DtDispositivos.Dispose() - End If - + For Each RowReporte As DataRow In DTReportesProgramados.Rows + Dim CveReporteProgramado As Integer = RowReporte("CveReporteProgramado").ToString.ToEntero + Dim CveNotificacionBitacora As Integer = RowReporte("CveNotificacionBitacora").ToString.ToEntero + + Dim Correos As String = RowReporte("Correos").ToString + Dim NombreCliente As String = RowReporte("Cliente").ToString + + Dim FechaI As DateTime = RowReporte("FechaI").ToString.ToDateTime + Dim FechaF As DateTime = RowReporte("FechaF").ToString.ToDateTime + + Dim CveReporte As Integer = RowReporte("CveReporte").ToString.ToEntero + Dim CveCliente As Integer = RowReporte("CveCliente").ToString.ToEntero + Dim CveEmpresa As Integer = RowReporte("CveEmpresa").ToString.ToEntero + + Dim DtExtras As DataTable = Nothing + Dim DtDispositivos As DataTable = Nothing + + Dim Formato As String = RowReporte("Formato").ToString + + Dim UsuarioActual As Usuario = ValidaUsuarioSistema(CveEmpresa) + + Dim ObjGPS As New ClsGPS + If CveReporte.Contiene(1, 2, 3, 4, 5, 6, 7, 8, 10) Then + If ObjGPS.ReportesProgramadosDispositivosGet(CveReporteProgramado) Then + DtDispositivos = ObjGPS.DtResultados.Copy() + End If + End If + If CveReporte = 4 Then + If ObjGPS.ReportesProgramadosEventosGet(CveReporteProgramado) Then + DtExtras = ObjGPS.DtResultados + End If + End If + ObjGPS.Dispose() + + EnviarReporteProgramado(CveCliente, NombreCliente, Formato, Correos, FechaI, FechaF, CveReporte, CveNotificacionBitacora, DtDispositivos, DtExtras, UsuarioActual) + + If DtExtras IsNot Nothing Then + DtExtras.Clear() + DtExtras.Dispose() + End If + + If DtDispositivos IsNot Nothing Then + DtDispositivos.Clear() + DtDispositivos.Dispose() + End If + If UsuarioActual IsNot Nothing Then UsuarioActual = Nothing - End If - Next - Catch ex As Exception - OnError("Ocurrió un error al enviar el reporte programado", ex) - End Try - End Sub - - - 'Public Function ArmarNotificacion(TipoPlantilla As Integer) As DataTable - ' If ArmarPlantillaNotificacion(NotificacionesBitacora, TipoPlantilla) Then - ' Return DtResultados - ' End If - ' Return New DataTable() - 'End Function - - Public Sub EnviarReporteProgramado(CveCliente As Integer, NombreCliente As String, Formato As String, Correos As String, FechaI As DateTime, FechaF As DateTime, CveReporte As Integer, CveNotificacionBitacora As Integer, DtDispositivos As DataTable, DtExtras As DataTable, UsuarioActual As Usuario) - Dim CveDispositivo As Integer = -1 - Dim NombreVehiculo As String = "" - Dim RutaReporte As String - Dim retorno As Byte() = Nothing - - Select Case CveReporte - Case 1 'Ultima Posicion - Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) - Dim ObjGPS As New ClsGPS - Try - RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTUltimaPosicion.rdlc" - Dim Direcciones As JArray = Nothing - If Formato = "Excel" Then - Dim Dispositivos As New StringBuilder - For Each Row As DataRow In DtDispositivos.Rows - Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) - Next - If ObjGPS.UltimaPosicionEquipoGet(Dispositivos.ToString(), CveCliente) Then - Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - retorno = GenerarReporteUltimaPosicionExcel(DtDispositivos, ObjGPS.DtResultados, FechaI, FechaF, Correos) - If retorno IsNot Nothing Then - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteTiempoMuerto.xlsx"}) - End If - End If - ElseIf Formato = "PDF" Then - Dim Dispositivos As New StringBuilder - For Each Row As DataRow In DtDispositivos.Rows - Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) - Next - If ObjGPS.UltimaPosicionEquipoGet(Dispositivos.ToString(), CveCliente) Then - Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - retorno = GenerarReporteUltimaPosicion(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) - If retorno IsNot Nothing Then - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteUltimaPosicion.pdf"}) - End If - End If - End If - If LSRutasMail.Count > 0 Then - Dim ObjMail As New ClsSisMail() - Dim ResultadoMail As Integer = 0 - If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - End If - - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - ObjGPS.Dispose() - Case 2 'Historico - - Dim ObjGPS As New ClsGPS - Try - RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTHistorico.rpt" - Dim ObjMail As New ClsSisMail() - Dim ResultadoMail As Integer = 0 - Dim Archivos As New List(Of ClsSisMail.ArchivoMail) - Dim NombreReporte As String = "Reporte" - Dim DataSource As DataSet = Nothing - - If Formato = "Excel" Then - DataSource = New DataSet() - End If - - For Each RowDisp As DataRow In DtDispositivos.Rows - CveDispositivo = RowDisp("CveDispositivo").ToString().ToEntero - NombreVehiculo = RowDisp("NombreVehiculo").ToString() - NombreReporte = $"Reporte_Historico_{NombreVehiculo}_{FechaI.ToString("yyyy_MM_dd_HH_mm_ss")}_{ FechaF.ToString("yyyy_MM_dd_HH_mm_ss")}" - - Dim Direcciones As JArray = Nothing - If ObjGPS.GetPosicionEquipo(CveDispositivo, FechaI, FechaF) Then - Try - Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al obtener las direcciones {0}", ex)) - End Try - If Formato = "PDF" Then - retorno = GenerarReporteHistorico(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos, NombreReporte, NombreCliente, UsuarioActual) - ElseIf Formato = "Excel" Then - ObjGPS.DtResultados.TableName = NombreVehiculo - DataSource.Tables.Add(ObjGPS.DtResultados) - End If - End If - - If retorno IsNot Nothing Then - Archivos.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = $"{NombreReporte}.pdf"}) - End If - Next - - If DataSource IsNot Nothing Then - NombreReporte = $"Reporte_Historico_{FechaI.ToString("yyyy_MM_dd_HH_mm_ss")}_{ FechaF.ToString("yyyy_MM_dd_HH_mm_ss")}" - retorno = GenerarReporteHistoricoExcel(DataSource, RutaReporte, FechaI, FechaF, Correos, NombreReporte) - If retorno IsNot Nothing Then - Archivos.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = $"{NombreReporte}.xlsx"}) - End If - End If - - If Archivos.Count > 0 Then - If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", $"Se adjunta el {Formato} en el Reporte Programado.", "", Archivos) Then - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - End If - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - ObjGPS.Dispose() - Case 3 'Tiempo Muerto - Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) - Dim ObjGPS As New ClsGPS - Try - RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTiempoMuerto.rpt" - Dim DataSource As DataSet = Nothing - Dim Direcciones As JArray = Nothing - If Formato = "Excel" Then - Dim Dispositivos As New StringBuilder - For Each Row As DataRow In DtDispositivos.Rows - Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) - Next - If ObjGPS.GetRepTiempoMuerto(Dispositivos.ToString(), CveCliente, FechaI, FechaF) Then - Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - retorno = GenerarReporteTiempoMuertoExcel(ObjGPS.DtResultados, FechaI, FechaF, Correos) - If retorno IsNot Nothing Then - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteTiempoMuerto.xlsx"}) - End If - End If - ElseIf Formato = "PDF" Then - Dim Dispositivos As New StringBuilder - For Each Row As DataRow In DtDispositivos.Rows - Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) - Next - If ObjGPS.GetRepTiempoMuerto(Dispositivos.ToString(), CveCliente, FechaI, FechaF) Then - Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - retorno = GenerarReporteTiempoMuerto(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos, "ReporteTiempoMuerto") - If retorno IsNot Nothing Then - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteTiempoMuerto.pdf"}) - End If - End If - End If - If LSRutasMail.Count > 0 Then - Dim ObjMail As New ClsSisMail() - Dim ResultadoMail As Integer = 0 - If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - End If - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - ObjGPS.Dispose() - Case 4 'Evento - Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) - Dim ObjGPS As New ClsGPS - Try - RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTEventos.rpt" - Dim Direcciones As JArray = Nothing - Dim Dispositivos As New StringBuilder - For Each Row As DataRow In DtDispositivos.Rows - Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) - Next - Dim Eventos As New StringBuilder - For Each Row As DataRow In DtExtras.Rows - Eventos.AppendFormat("{0};", Row("Cve")) - Next - If ObjGPS.GetRepEventos(Dispositivos.ToString(), Eventos.ToString(), FechaI, FechaF, CveCliente) Then - Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - Dim NombreArchivo As String = "" - If Formato = "Excel" Then - retorno = GenerarReporteEventosExcel(DtDispositivos, ObjGPS.DtResultados, FechaI, FechaF, Correos) - NombreArchivo = "ReporteEventos.xlsx" - ElseIf Formato = "PDF" Then - retorno = GenerarReporteEventos(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) - NombreArchivo = "ReporteEventos.pdf" - End If - If retorno IsNot Nothing Then - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = NombreArchivo}) - End If - End If - If LSRutasMail.Count > 0 Then - Dim ObjMail As New ClsSisMail() - Dim ResultadoMail As Integer = 0 - If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - End If - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - ObjGPS.Dispose() - Case 5 'Ralenti - Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) - Dim ObjGPS As New ClsGPS - Try - RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTRalenti.rdlc" - Dim Direcciones As JArray = Nothing - If Formato = "Excel" Then - Dim Dispositivos As New StringBuilder - For Each Row As DataRow In DtDispositivos.Rows - Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) - Next - If ObjGPS.GetRepRalenti(Dispositivos.ToString(), FechaI, FechaF, CveCliente) Then - Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - retorno = GenerarReporteRalentiExcel(DtDispositivos, ObjGPS.DtResultados, FechaI, FechaF, Correos) - If retorno IsNot Nothing Then - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteRalenti.xlsx"}) - End If - End If - ElseIf Formato = "PDF" Then - Dim Dispositivos As New StringBuilder - For Each Row As DataRow In DtDispositivos.Rows - Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) - Next - If ObjGPS.GetRepRalenti(Dispositivos.ToString(), FechaI, FechaF, CveCliente) Then - Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - retorno = GenerarReporteRalenti(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) - If retorno IsNot Nothing Then - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteRalenti.pdf"}) - End If - End If - End If - If LSRutasMail.Count > 0 Then - Dim ObjMail As New ClsSisMail() - Dim ResultadoMail As Integer = 0 - If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - End If - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - ObjGPS.Dispose() - Case 6 'Geocercas - RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPGeocercas.rdlc" - Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) - Dim ObjGPS As New ClsGPS - Try - Dim Dispositivos As New StringBuilder - For Each Row As DataRow In DtDispositivos.Rows - Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) - Next - If ObjGPS.GetRepGeoReferenciasEntradasSalidas(Dispositivos.ToString(), FechaI, FechaF, CveCliente) Then - If ObjGPS.DtResultados.Rows.Count > 0 Then - Dim Direcciones As JArray = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - Dim NombreArchivo As String = "" - If Formato = "Excel" Then - retorno = GenerarReporteGeocercasExcel(ObjGPS.DtResultados, FechaI, FechaF, Correos) - NombreArchivo = "ReporteGeocercas.xlsx" - ElseIf Formato = "PDF" Then - retorno = GenerarReporteGeocercas(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) - NombreArchivo = "ReporteGeocercas.pdf" - End If - If retorno IsNot Nothing AndAlso Not String.IsNullOrEmpty(NombreArchivo) Then - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = NombreArchivo}) - End If - End If - End If - If LSRutasMail.Count > 0 Then - Dim ObjMail As New ClsSisMail() - Dim ResultadoMail As Integer = 0 - If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - End If - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - ObjGPS.Dispose() - Case 7 'Puntos de Interes - RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPPuntosDeInteres.rdlc" - Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) - Dim ObjGPS As New ClsGPS - Try - Dim Dispositivos As New StringBuilder - For Each Row As DataRow In DtDispositivos.Rows - Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) - Next - If ObjGPS.GetRepPuntosDeInteres(Dispositivos.ToString(), FechaI, FechaF, CveCliente) Then - If ObjGPS.DtResultados.Rows.Count > 0 Then - Dim Direcciones As JArray = ConsultarDirecciones(ObjGPS.DtResultados) - For Each Dir As JObject In Direcciones - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() - Next - Dim NombreArchivo As String = "" - If Formato = "Excel" Then - retorno = GenerarReportePuntosDeInteresExcel(ObjGPS.DtResultados, FechaI, FechaF, Correos) - NombreArchivo = "ReportePuntosInteres.xlsx" - ElseIf Formato = "PDF" Then - retorno = GenerarReportePuntosInteres(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) - NombreArchivo = "ReportePuntosInteres.pdf" - End If - If retorno IsNot Nothing AndAlso Not String.IsNullOrEmpty(NombreArchivo) Then - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = NombreArchivo}) - End If - End If - End If - If LSRutasMail.Count > 0 Then - Dim ObjMail As New ClsSisMail() - Dim ResultadoMail As Integer = 0 - If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - End If - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try + End If + Next + Catch ex As Exception + OnError("Ocurrió un error al enviar el reporte programado", ex) + End Try + End Sub + + + 'Public Function ArmarNotificacion(TipoPlantilla As Integer) As DataTable + ' If ArmarPlantillaNotificacion(NotificacionesBitacora, TipoPlantilla) Then + ' Return DtResultados + ' End If + ' Return New DataTable() + 'End Function + + Public Sub EnviarReporteProgramado(CveCliente As Integer, NombreCliente As String, Formato As String, Correos As String, FechaI As DateTime, FechaF As DateTime, CveReporte As Integer, CveNotificacionBitacora As Integer, DtDispositivos As DataTable, DtExtras As DataTable, UsuarioActual As Usuario) + Dim CveDispositivo As Integer = -1 + Dim NombreVehiculo As String = "" + Dim RutaReporte As String + Dim retorno As Byte() = Nothing + + Select Case CveReporte + Case 1 'Ultima Posicion + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + Dim ObjGPS As New ClsGPS + Try + RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTUltimaPosicion.rdlc" + Dim Direcciones As JArray = Nothing + If Formato = "Excel" Then + Dim Dispositivos As New StringBuilder + For Each Row As DataRow In DtDispositivos.Rows + Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) + Next + If ObjGPS.UltimaPosicionEquipoGet(Dispositivos.ToString(), CveCliente) Then + Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + retorno = GenerarReporteUltimaPosicionExcel(DtDispositivos, ObjGPS.DtResultados, FechaI, FechaF, Correos) + If retorno IsNot Nothing Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteTiempoMuerto.xlsx"}) + End If + End If + ElseIf Formato = "PDF" Then + Dim Dispositivos As New StringBuilder + For Each Row As DataRow In DtDispositivos.Rows + Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) + Next + If ObjGPS.UltimaPosicionEquipoGet(Dispositivos.ToString(), CveCliente) Then + Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + retorno = GenerarReporteUltimaPosicion(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) + If retorno IsNot Nothing Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteUltimaPosicion.pdf"}) + End If + End If + End If + If LSRutasMail.Count > 0 Then + Dim ObjMail As New ClsSisMail() + Dim ResultadoMail As Integer = 0 + If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + End If + + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + ObjGPS.Dispose() + Case 2 'Historico + + Dim ObjGPS As New ClsGPS + Try + RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTHistorico.rpt" + Dim ObjMail As New ClsSisMail() + Dim ResultadoMail As Integer = 0 + Dim Archivos As New List(Of ClsSisMail.ArchivoMail) + Dim NombreReporte As String = "Reporte" + Dim DataSource As DataSet = Nothing + + If Formato = "Excel" Then + DataSource = New DataSet() + End If + + For Each RowDisp As DataRow In DtDispositivos.Rows + CveDispositivo = RowDisp("CveDispositivo").ToString().ToEntero + NombreVehiculo = RowDisp("NombreVehiculo").ToString() + NombreReporte = $"Reporte_Historico_{NombreVehiculo}_{FechaI.ToString("yyyy_MM_dd_HH_mm_ss")}_{ FechaF.ToString("yyyy_MM_dd_HH_mm_ss")}" + + Dim Direcciones As JArray = Nothing + If ObjGPS.GetPosicionEquipo(CveDispositivo, FechaI, FechaF) Then + Try + Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al obtener las direcciones {0}", ex)) + End Try + If Formato = "PDF" Then + retorno = GenerarReporteHistorico(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos, NombreReporte, NombreCliente, UsuarioActual) + ElseIf Formato = "Excel" Then + ObjGPS.DtResultados.TableName = NombreVehiculo + DataSource.Tables.Add(ObjGPS.DtResultados) + End If + End If + + If retorno IsNot Nothing Then + Archivos.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = $"{NombreReporte}.pdf"}) + End If + Next + + If DataSource IsNot Nothing Then + NombreReporte = $"Reporte_Historico_{FechaI.ToString("yyyy_MM_dd_HH_mm_ss")}_{ FechaF.ToString("yyyy_MM_dd_HH_mm_ss")}" + retorno = GenerarReporteHistoricoExcel(DataSource, RutaReporte, FechaI, FechaF, Correos, NombreReporte) + If retorno IsNot Nothing Then + Archivos.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = $"{NombreReporte}.xlsx"}) + End If + End If + + If Archivos.Count > 0 Then + If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", $"Se adjunta el {Formato} en el Reporte Programado.", "", Archivos) Then + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + End If + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + ObjGPS.Dispose() + Case 3 'Tiempo Muerto + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + Dim ObjGPS As New ClsGPS + Try + RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTiempoMuerto.rpt" + Dim DataSource As DataSet = Nothing + Dim Direcciones As JArray = Nothing + If Formato = "Excel" Then + Dim Dispositivos As New StringBuilder + For Each Row As DataRow In DtDispositivos.Rows + Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) + Next + If ObjGPS.GetRepTiempoMuerto(Dispositivos.ToString(), CveCliente, FechaI, FechaF) Then + Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + retorno = GenerarReporteTiempoMuertoExcel(ObjGPS.DtResultados, FechaI, FechaF, Correos) + If retorno IsNot Nothing Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteTiempoMuerto.xlsx"}) + End If + End If + ElseIf Formato = "PDF" Then + Dim Dispositivos As New StringBuilder + For Each Row As DataRow In DtDispositivos.Rows + Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) + Next + If ObjGPS.GetRepTiempoMuerto(Dispositivos.ToString(), CveCliente, FechaI, FechaF) Then + Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + retorno = GenerarReporteTiempoMuerto(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos, "ReporteTiempoMuerto") + If retorno IsNot Nothing Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteTiempoMuerto.pdf"}) + End If + End If + End If + If LSRutasMail.Count > 0 Then + Dim ObjMail As New ClsSisMail() + Dim ResultadoMail As Integer = 0 + If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + End If + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + ObjGPS.Dispose() + Case 4 'Evento + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + Dim ObjGPS As New ClsGPS + Try + RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTEventos.rpt" + Dim Direcciones As JArray = Nothing + Dim Dispositivos As New StringBuilder + For Each Row As DataRow In DtDispositivos.Rows + Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) + Next + Dim Eventos As New StringBuilder + For Each Row As DataRow In DtExtras.Rows + Eventos.AppendFormat("{0};", Row("Cve")) + Next + If ObjGPS.GetRepEventos(Dispositivos.ToString(), Eventos.ToString(), FechaI, FechaF, CveCliente) Then + Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + Dim NombreArchivo As String = "" + If Formato = "Excel" Then + retorno = GenerarReporteEventosExcel(DtDispositivos, ObjGPS.DtResultados, FechaI, FechaF, Correos) + NombreArchivo = "ReporteEventos.xlsx" + ElseIf Formato = "PDF" Then + retorno = GenerarReporteEventos(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) + NombreArchivo = "ReporteEventos.pdf" + End If + If retorno IsNot Nothing Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = NombreArchivo}) + End If + End If + If LSRutasMail.Count > 0 Then + Dim ObjMail As New ClsSisMail() + Dim ResultadoMail As Integer = 0 + If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + End If + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + ObjGPS.Dispose() + Case 5 'Ralenti + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + Dim ObjGPS As New ClsGPS + Try + RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPTRalenti.rdlc" + Dim Direcciones As JArray = Nothing + If Formato = "Excel" Then + Dim Dispositivos As New StringBuilder + For Each Row As DataRow In DtDispositivos.Rows + Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) + Next + If ObjGPS.GetRepRalenti(Dispositivos.ToString(), FechaI, FechaF, CveCliente) Then + Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + retorno = GenerarReporteRalentiExcel(DtDispositivos, ObjGPS.DtResultados, FechaI, FechaF, Correos) + If retorno IsNot Nothing Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteRalenti.xlsx"}) + End If + End If + ElseIf Formato = "PDF" Then + Dim Dispositivos As New StringBuilder + For Each Row As DataRow In DtDispositivos.Rows + Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) + Next + If ObjGPS.GetRepRalenti(Dispositivos.ToString(), FechaI, FechaF, CveCliente) Then + Direcciones = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + retorno = GenerarReporteRalenti(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) + If retorno IsNot Nothing Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = "ReporteRalenti.pdf"}) + End If + End If + End If + If LSRutasMail.Count > 0 Then + Dim ObjMail As New ClsSisMail() + Dim ResultadoMail As Integer = 0 + If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + End If + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + ObjGPS.Dispose() + Case 6 'Geocercas + RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPGeocercas.rdlc" + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + Dim ObjGPS As New ClsGPS + Try + Dim Dispositivos As New StringBuilder + For Each Row As DataRow In DtDispositivos.Rows + Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) + Next + If ObjGPS.GetRepGeoReferenciasEntradasSalidas(Dispositivos.ToString(), FechaI, FechaF, CveCliente) Then + If ObjGPS.DtResultados.Rows.Count > 0 Then + Dim Direcciones As JArray = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + Dim NombreArchivo As String = "" + If Formato = "Excel" Then + retorno = GenerarReporteGeocercasExcel(ObjGPS.DtResultados, FechaI, FechaF, Correos) + NombreArchivo = "ReporteGeocercas.xlsx" + ElseIf Formato = "PDF" Then + retorno = GenerarReporteGeocercas(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) + NombreArchivo = "ReporteGeocercas.pdf" + End If + If retorno IsNot Nothing AndAlso Not String.IsNullOrEmpty(NombreArchivo) Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = NombreArchivo}) + End If + End If + End If + If LSRutasMail.Count > 0 Then + Dim ObjMail As New ClsSisMail() + Dim ResultadoMail As Integer = 0 + If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + End If + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + ObjGPS.Dispose() + Case 7 'Puntos de Interes + RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPPuntosDeInteres.rdlc" + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + Dim ObjGPS As New ClsGPS + Try + Dim Dispositivos As New StringBuilder + For Each Row As DataRow In DtDispositivos.Rows + Dispositivos.AppendFormat("{0};", Row("CveDispositivo")) + Next + If ObjGPS.GetRepPuntosDeInteres(Dispositivos.ToString(), FechaI, FechaF, CveCliente) Then + If ObjGPS.DtResultados.Rows.Count > 0 Then + Dim Direcciones As JArray = ConsultarDirecciones(ObjGPS.DtResultados) + For Each Dir As JObject In Direcciones + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("Direccion") = Dir("Direccion").ToString() + Next + Dim NombreArchivo As String = "" + If Formato = "Excel" Then + retorno = GenerarReportePuntosDeInteresExcel(ObjGPS.DtResultados, FechaI, FechaF, Correos) + NombreArchivo = "ReportePuntosInteres.xlsx" + ElseIf Formato = "PDF" Then + retorno = GenerarReportePuntosInteres(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos) + NombreArchivo = "ReportePuntosInteres.pdf" + End If + If retorno IsNot Nothing AndAlso Not String.IsNullOrEmpty(NombreArchivo) Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = NombreArchivo}) + End If + End If + End If + If LSRutasMail.Count > 0 Then + Dim ObjMail As New ClsSisMail() + Dim ResultadoMail As Integer = 0 + If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", "Se adjunta en pdf el Reporte Programado.", "", LSRutasMail) Then + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + End If + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try ObjGPS.Dispose() 'Case 8 ' Subida/Bajada de Pasajeros ' Dim PasajerosEntrada, PasajerosSalida, Ascensos, Descensos As Integer @@ -802,145 +802,145 @@ Public Class ClsSisNotificaciones ' End Try ' ObjGPS.Dispose() ' End If - Case 10 'Reporte de Ignicion - Dim ObjGPS As New ClsGPS - Try - RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPIgnicion.rdlc" - Dim ObjMail As New ClsSisMail() - Dim ResultadoMail As Integer = 0 - Dim Archivos As New List(Of ClsSisMail.ArchivoMail) - Dim NombreReporte As String = "Reporte" - Dim DataSource As DataSet = Nothing - - If Formato = "Excel" Then - DataSource = New DataSet() - End If - - For Each RowDisp As DataRow In DtDispositivos.Rows - CveDispositivo = RowDisp("CveDispositivo").ToString().ToEntero - NombreVehiculo = RowDisp("NombreVehiculo").ToString() - NombreReporte = $"Reporte_Ignicion_{NombreVehiculo}_{FechaI.ToString("yyyy_MM_dd_HH_mm_ss")}_{ FechaF.ToString("yyyy_MM_dd_HH_mm_ss")}" - - Dim DireccionesInicial As JArray = Nothing, DireccionesFinal As JArray = Nothing - - If ObjGPS.GetRepIgnicion(CveDispositivo, FechaI, FechaF, CveCliente) Then - Try + Case 10 'Reporte de Ignicion + Dim ObjGPS As New ClsGPS + Try + RutaReporte = $"{ModExtensiones.DirectorioBaseEmpresas}/Empresas/Grales/ReportesProgramados/RPIgnicion.rdlc" + Dim ObjMail As New ClsSisMail() + Dim ResultadoMail As Integer = 0 + Dim Archivos As New List(Of ClsSisMail.ArchivoMail) + Dim NombreReporte As String = "Reporte" + Dim DataSource As DataSet = Nothing + + If Formato = "Excel" Then + DataSource = New DataSet() + End If + + For Each RowDisp As DataRow In DtDispositivos.Rows + CveDispositivo = RowDisp("CveDispositivo").ToString().ToEntero + NombreVehiculo = RowDisp("NombreVehiculo").ToString() + NombreReporte = $"Reporte_Ignicion_{NombreVehiculo}_{FechaI.ToString("yyyy_MM_dd_HH_mm_ss")}_{ FechaF.ToString("yyyy_MM_dd_HH_mm_ss")}" + + Dim DireccionesInicial As JArray = Nothing, DireccionesFinal As JArray = Nothing + + If ObjGPS.GetRepIgnicion(CveDispositivo, FechaI, FechaF, CveCliente) Then + Try DireccionesInicial = ConsultarDireccionesIgnicion(ObjGPS.DtResultados, "CveTramaEncendido", "LatitudInicial", "LongitudInicial") DireccionesFinal = ConsultarDireccionesIgnicion(ObjGPS.DtResultados, "CveTramaApagado", "LatitudFinal", "LongitudFinal") - For Each Dir As JObject In DireccionesInicial - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("DireccionInical") = Dir("Direccion").ToString() - Next - - For Each Dir As JObject In DireccionesFinal - ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("DireccionFinal") = Dir("Direccion").ToString() - Next - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al obtener las direcciones {0}", ex)) - End Try - If Formato = "PDF" Then - retorno = GenerarReporteIgnicion(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos, NombreReporte) - ElseIf Formato = "Excel" Then - ObjGPS.DtResultados.TableName = NombreVehiculo - DataSource.Tables.Add(ObjGPS.DtResultados) - End If - End If - - If retorno IsNot Nothing Then - Archivos.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = $"{NombreReporte}.pdf"}) - End If - Next - - If DataSource IsNot Nothing Then - NombreReporte = $"Reporte_Ignicion_{FechaI.ToString("yyyy_MM_dd_HH_mm_ss")}_{ FechaF.ToString("yyyy_MM_dd_HH_mm_ss")}" - retorno = GenerarReporteIgnicionExcel(DataSource, RutaReporte, FechaI, FechaF, Correos, NombreReporte) - If retorno IsNot Nothing Then - Archivos.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = $"{NombreReporte}.xlsx"}) - End If - End If - - If Archivos.Count > 0 Then - If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", $"Se adjunta el {Formato} en el Reporte Programado.", "", Archivos) Then - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - End If - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - ObjGPS.Dispose() - End Select + For Each Dir As JObject In DireccionesInicial + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("DireccionInical") = Dir("Direccion").ToString() + Next + + For Each Dir As JObject In DireccionesFinal + ObjGPS.DtResultados.Rows(Dir("Indice").ToEntero())("DireccionFinal") = Dir("Direccion").ToString() + Next + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al obtener las direcciones {0}", ex)) + End Try + If Formato = "PDF" Then + retorno = GenerarReporteIgnicion(ObjGPS.DtResultados, RutaReporte, FechaI, FechaF, Correos, NombreReporte) + ElseIf Formato = "Excel" Then + ObjGPS.DtResultados.TableName = NombreVehiculo + DataSource.Tables.Add(ObjGPS.DtResultados) + End If + End If + + If retorno IsNot Nothing Then + Archivos.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = $"{NombreReporte}.pdf"}) + End If + Next + + If DataSource IsNot Nothing Then + NombreReporte = $"Reporte_Ignicion_{FechaI.ToString("yyyy_MM_dd_HH_mm_ss")}_{ FechaF.ToString("yyyy_MM_dd_HH_mm_ss")}" + retorno = GenerarReporteIgnicionExcel(DataSource, RutaReporte, FechaI, FechaF, Correos, NombreReporte) + If retorno IsNot Nothing Then + Archivos.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = retorno, .NombreArchivo = $"{NombreReporte}.xlsx"}) + End If + End If + + If Archivos.Count > 0 Then + If ObjMail.SendMail(ClsPaginas.EmpresaNotificacionesGPS, Correos, $"Reporte Programado {Date.Today.ToShortDateString}", $"Se adjunta el {Formato} en el Reporte Programado.", "", Archivos) Then + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + End If + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + ObjGPS.Dispose() + End Select End Sub -#Region "G E N E R A R - R E P O R T E" - Private Function GenerarReporteUltimaPosicion(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As Byte() = Nothing - If DataSource IsNot Nothing AndAlso DataSource.Rows.Count > 0 Then - Dim js As JObject = Nothing - Try - Dim RptParametro As New List(Of ReportParameter) - RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToShortDateString)) - RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToShortDateString)) - RptParametro.Add(New ReportParameter("MapaURL", "")) - RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) - RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) - - Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReporteUltimaPosicion", "PDF", MR:=Nothing, RDSName:="DsOC") - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - Else - Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) - End If - Return Retorno - End Function - Private Function GenerarReporteUltimaPosicionExcel(DtDispositivos As DataTable, DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As New MemoryStream() - SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) - - Dim FileExcel As ExcelFile = New ExcelFile - For Each Dr As DataRow In DtDispositivos.Rows - Dim CveDispositivo As Integer = Dr("CveDispositivo").ToString().ToEntero() - Dim NombreVehiculo = Dr("NombreVehiculo").ToString() - - Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") - Dim Dt = GenerarDTUltimaPosicion(NombreVehiculo, FilterRows) - - Dim item = FileExcel.Worksheets.Add(Dt.TableName) - item.InsertDataTable(Dt, New InsertDataTableOptions() With - { - .ColumnHeaders = True, - .StartRow = 0, - .StartColumn = 0 - }) - item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) - item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) - - Dim columnCount = item.CalculateMaxUsedColumns() - For i = 0 To columnCount - item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) - Next - Next - FileExcel.Save(Retorno, SaveOptions.XlsxDefault) - - Return Retorno.ToArray() - End Function - Private Function GenerarReporteHistorico(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String, NombreCliente As String, UsuarioActual As Usuario) As Byte() - Dim Retorno As Byte() = Nothing - Try - Dim RptParametro As New List(Of CrystalParametro) - +#Region "G E N E R A R - R E P O R T E" + Private Function GenerarReporteUltimaPosicion(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As Byte() = Nothing + If DataSource IsNot Nothing AndAlso DataSource.Rows.Count > 0 Then + Dim js As JObject = Nothing + Try + Dim RptParametro As New List(Of ReportParameter) + RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToShortDateString)) + RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToShortDateString)) + RptParametro.Add(New ReportParameter("MapaURL", "")) + RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) + RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) + + Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReporteUltimaPosicion", "PDF", MR:=Nothing, RDSName:="DsOC") + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + Else + Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) + End If + Return Retorno + End Function + Private Function GenerarReporteUltimaPosicionExcel(DtDispositivos As DataTable, DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As New MemoryStream() + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As ExcelFile = New ExcelFile + For Each Dr As DataRow In DtDispositivos.Rows + Dim CveDispositivo As Integer = Dr("CveDispositivo").ToString().ToEntero() + Dim NombreVehiculo = Dr("NombreVehiculo").ToString() + + Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") + Dim Dt = GenerarDTUltimaPosicion(NombreVehiculo, FilterRows) + + Dim item = FileExcel.Worksheets.Add(Dt.TableName) + item.InsertDataTable(Dt, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + Dim columnCount = item.CalculateMaxUsedColumns() + For i = 0 To columnCount + item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) + Next + Next + FileExcel.Save(Retorno, SaveOptions.XlsxDefault) + + Return Retorno.ToArray() + End Function + Private Function GenerarReporteHistorico(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String, NombreCliente As String, UsuarioActual As Usuario) As Byte() + Dim Retorno As Byte() = Nothing + Try + Dim RptParametro As New List(Of CrystalParametro) + Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) - RptParametro.Add(New CrystalParametro("FechaInicio", FechaI.ToString)) - RptParametro.Add(New CrystalParametro("FechaFin", FechaF.ToString)) - RptParametro.Add(New CrystalParametro("UsuarioImprimio", Correos)) - RptParametro.Add(New CrystalParametro("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) - If DataSource.Rows.Count > 0 Then - RptParametro.Add(New CrystalParametro("KMRecorridos", $"{DataSource.Rows(0)("KMRecorridos")} KM")) - Else - RptParametro.Add(New CrystalParametro("KMRecorridos", "0 KM")) + RptParametro.Add(New CrystalParametro("FechaInicio", FechaI.ToString)) + RptParametro.Add(New CrystalParametro("FechaFin", FechaF.ToString)) + RptParametro.Add(New CrystalParametro("UsuarioImprimio", Correos)) + RptParametro.Add(New CrystalParametro("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) + If DataSource.Rows.Count > 0 Then + RptParametro.Add(New CrystalParametro("KMRecorridos", $"{DataSource.Rows(0)("KMRecorridos")} KM")) + Else + RptParametro.Add(New CrystalParametro("KMRecorridos", "0 KM")) End If RptParametro.Add(New CrystalParametro("NombreEmpresa", NombreCliente)) @@ -949,99 +949,99 @@ Public Class ClsSisNotificaciones RptParametro.Add(New CrystalParametro("LogoPath", logouri)) Else RptParametro.Add(New CrystalParametro("LogoPath", "")) - End If - - Retorno = StreamPDFCrystal(Liga, DataSource, RptParametro, NombreReporte, "PDF") - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - Return Retorno - End Function - Private Function GenerarReporteHistoricoExcel(DataSource As DataSet, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String) As Byte() - Dim Retorno As New MemoryStream() - SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) - - Dim FileExcel As ExcelFile = New ExcelFile - For Each Dt As DataTable In DataSource.Tables - - Dt.Columns.Remove("CveTrama") - Dt.Columns.Remove("CveDispositivo") - Dt.Columns.Remove("LatLng") - Dt.Columns.Remove("NoEconomico") - Dt.Columns.Remove("DevID") - Dt.Columns.Remove("KMRecorridos") - Dt.Columns.Remove("TiempoMuerto") - Dt.Columns.Remove("SPD") - Dt.Columns.Remove("Lng") - Dt.Columns.Remove("PWR_VOLT") - Dt.Columns.Remove("H_METER") - Dt.Columns.Remove("Posicion") - Dt.Columns.Remove("CRS") - - Dt.Columns("Vehiculo").SetOrdinal(0) - Dt.Columns("Vehiculo").ColumnName = "Vehículo" - Dt.Columns("Direccion").SetOrdinal(Dt.Columns.Count - 1) - - Dt.Columns("Direccion").ColumnName = "Dirección" - Dt.Columns("Lat").ColumnName = "Latitud" - Dt.Columns("Lon").ColumnName = "Longitud" - - Dim item = FileExcel.Worksheets.Add(Dt.TableName) - item.InsertDataTable(Dt, New InsertDataTableOptions() With - { - .ColumnHeaders = True, - .StartRow = 0, - .StartColumn = 0 - }) - item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) - item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) - - Dim columnCount = item.CalculateMaxUsedColumns() - For i = 0 To columnCount - item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) - Next - - Next - FileExcel.Save(Retorno, SaveOptions.XlsxDefault) - If DataSet IsNot Nothing Then - DataSet.Clear() - DataSet.Dispose() - End If - Return Retorno.ToArray() + End If + + Retorno = StreamPDFCrystal(Liga, DataSource, RptParametro, NombreReporte, "PDF") + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + Return Retorno + End Function + Private Function GenerarReporteHistoricoExcel(DataSource As DataSet, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String) As Byte() + Dim Retorno As New MemoryStream() + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As ExcelFile = New ExcelFile + For Each Dt As DataTable In DataSource.Tables + + Dt.Columns.Remove("CveTrama") + Dt.Columns.Remove("CveDispositivo") + Dt.Columns.Remove("LatLng") + Dt.Columns.Remove("NoEconomico") + Dt.Columns.Remove("DevID") + Dt.Columns.Remove("KMRecorridos") + Dt.Columns.Remove("TiempoMuerto") + Dt.Columns.Remove("SPD") + Dt.Columns.Remove("Lng") + Dt.Columns.Remove("PWR_VOLT") + Dt.Columns.Remove("H_METER") + Dt.Columns.Remove("Posicion") + Dt.Columns.Remove("CRS") + + Dt.Columns("Vehiculo").SetOrdinal(0) + Dt.Columns("Vehiculo").ColumnName = "Vehículo" + Dt.Columns("Direccion").SetOrdinal(Dt.Columns.Count - 1) + + Dt.Columns("Direccion").ColumnName = "Dirección" + Dt.Columns("Lat").ColumnName = "Latitud" + Dt.Columns("Lon").ColumnName = "Longitud" + + Dim item = FileExcel.Worksheets.Add(Dt.TableName) + item.InsertDataTable(Dt, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + Dim columnCount = item.CalculateMaxUsedColumns() + For i = 0 To columnCount + item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) + Next + + Next + FileExcel.Save(Retorno, SaveOptions.XlsxDefault) + If DataSet IsNot Nothing Then + DataSet.Clear() + DataSet.Dispose() + End If + Return Retorno.ToArray() End Function - Private Function GenerarReporteIgnicion(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String) As Byte() - Dim Retorno As Byte() = Nothing - Try + Private Function GenerarReporteIgnicion(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String) As Byte() + Dim Retorno As Byte() = Nothing + Try Dim RptParametro As New List(Of ReportParameter) - RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToString)) - RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToString)) - RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) - RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) - - Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReporteIgnicion", "PDF", MR:=Nothing, RDSName:="DsOC") - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - Return Retorno - End Function - - Private Function GenerarReporteIgnicionExcel(DataSource As DataSet, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String) As Byte() - Dim Retorno As New MemoryStream() - SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) - - Dim FileExcel As ExcelFile = New ExcelFile - For Each Dt As DataTable In DataSource.Tables - - Dt.Columns.Remove("CveDispositivo") - Dt.Columns.Remove("CveTramaEncendido") - Dt.Columns.Remove("CveTramaApagado") - - Dt.Columns("Vehiculo").SetOrdinal(0) + RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToString)) + RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToString)) + RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) + RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) + + Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReporteIgnicion", "PDF", MR:=Nothing, RDSName:="DsOC") + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + Return Retorno + End Function + + Private Function GenerarReporteIgnicionExcel(DataSource As DataSet, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String) As Byte() + Dim Retorno As New MemoryStream() + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As ExcelFile = New ExcelFile + For Each Dt As DataTable In DataSource.Tables + + Dt.Columns.Remove("CveDispositivo") + Dt.Columns.Remove("CveTramaEncendido") + Dt.Columns.Remove("CveTramaApagado") + + Dt.Columns("Vehiculo").SetOrdinal(0) Dt.Columns("Vehiculo").ColumnName = "Vehículo" - Dt.Columns("VMedia").ColumnName = "Velocidad Media" + Dt.Columns("VMedia").ColumnName = "Velocidad Media" Dt.Columns("VMax").ColumnName = "Velocidad Maxima" Dt.Columns("FechaEncendido").ColumnName = "Fecha Encendido" @@ -1060,384 +1060,384 @@ Public Class ClsSisNotificaciones Dt.Columns("DireccionFinal").SetOrdinal(Dt.Columns.Count - 1) Dt.Columns("DireccionFinal").ColumnName = "Dirección Final" - Dim item = FileExcel.Worksheets.Add(Dt.TableName) - item.InsertDataTable(Dt, New InsertDataTableOptions() With - { - .ColumnHeaders = True, - .StartRow = 0, - .StartColumn = 0 - }) - item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) - item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) - - Dim columnCount = item.CalculateMaxUsedColumns() - For i = 0 To columnCount - item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) - Next - - Next - FileExcel.Save(Retorno, SaveOptions.XlsxDefault) - If DataSet IsNot Nothing Then - DataSet.Clear() - DataSet.Dispose() - End If - Return Retorno.ToArray() + Dim item = FileExcel.Worksheets.Add(Dt.TableName) + item.InsertDataTable(Dt, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + Dim columnCount = item.CalculateMaxUsedColumns() + For i = 0 To columnCount + item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) + Next + + Next + FileExcel.Save(Retorno, SaveOptions.XlsxDefault) + If DataSet IsNot Nothing Then + DataSet.Clear() + DataSet.Dispose() + End If + Return Retorno.ToArray() End Function - - Private Function GenerarReporteTiempoMuerto(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String) As Byte() - Dim Retorno As Byte() = Nothing - Try - Dim RptParametro As New List(Of CrystalParametro) - RptParametro.Add(New CrystalParametro("FechaInicio", FechaI.ToString)) - RptParametro.Add(New CrystalParametro("FechaFin", FechaF.ToString)) - RptParametro.Add(New CrystalParametro("UsuarioImprimio", Correos)) - RptParametro.Add(New CrystalParametro("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) - RptParametro.Add(New CrystalParametro("TiempoMuerto", "10 Min")) - - Retorno = StreamPDFCrystal(Liga, DataSource, RptParametro, NombreReporte, "PDF") - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - Return Retorno - End Function - Private Function GenerarReporteTiempoMuertoExcel(DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As New MemoryStream() - SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) - - Dim FileExcel As ExcelFile = New ExcelFile - For Each Row As DataRow In DataSource.Rows - Dim Dt = GenerarDTTiempoMuerto(Row) - - Dim item = FileExcel.Worksheets.Add(Dt.TableName) - item.InsertDataTable(Dt, New InsertDataTableOptions() With - { - .ColumnHeaders = True, - .StartRow = 0, - .StartColumn = 0 - }) - item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) - item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) - - Dim columnCount = item.CalculateMaxUsedColumns() - For i = 0 To columnCount - item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) - Next - - Next - FileExcel.Save(Retorno, SaveOptions.XlsxDefault) - - Return Retorno.ToArray() - End Function - Private Function GenerarReporteRalenti(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As Byte() = Nothing - If DataSource IsNot Nothing AndAlso DataSource.Rows.Count > 0 Then - Try - Dim RptParametro As New List(Of ReportParameter) - RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToShortDateString)) - RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToShortDateString)) - RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) - RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) - - Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReporteRalenti", "PDF", MR:=Nothing, RDSName:="DsOC") - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - Else - Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) - End If - Return Retorno - End Function - Private Function GenerarReporteRalentiExcel(DtDispositivos As DataTable, DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As New MemoryStream() - SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) - - Dim FileExcel As ExcelFile = New ExcelFile - - For Each Dr As DataRow In DtDispositivos.Rows - Dim CveDispositivo As Integer = Dr("CveDispositivo").ToString().ToEntero() - Dim NombreVehiculo = Dr("NombreVehiculo").ToString() - Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") - - Dim Dt = GenerarDTRalenti(NombreVehiculo, FilterRows) - Dim item = FileExcel.Worksheets.Add(Dt.TableName) - item.InsertDataTable(Dt, New InsertDataTableOptions() With - { - .ColumnHeaders = True, - .StartRow = 0, - .StartColumn = 0 - }) - item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) - item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) - - Dim columnCount = item.CalculateMaxUsedColumns() - For i = 0 To columnCount - item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) - Next - - Next - FileExcel.Save(Retorno, SaveOptions.XlsxDefault) - - Return Retorno.ToArray() - End Function - Private Function GenerarReporteEventos(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As Byte() = Nothing - If DataSource IsNot Nothing Then - Try - Dim RptParametro As New List(Of CrystalParametro) - RptParametro.Add(New CrystalParametro("FechaInicio", FechaI.ToString)) - RptParametro.Add(New CrystalParametro("FechaFin", FechaF.ToString)) - RptParametro.Add(New CrystalParametro("UsuarioImprimio", Correos)) - RptParametro.Add(New CrystalParametro("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) - - Retorno = StreamPDFCrystal(Liga, DataSource, RptParametro, "ReporteEvento", "PDF") - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - Else - Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) - End If - Return Retorno - End Function - Private Function GenerarReporteEventosExcel(DtDispositivos As DataTable, DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As New MemoryStream() - SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) - - Dim FileExcel As ExcelFile = New ExcelFile - 'Dim DtDispositivos As DataTable = DataSource.FiltraParametros("", "", {"CveDispositivo", "Unidad"}) - - For Each Dr As DataRow In DtDispositivos.Rows - Dim CveDispositivo As Integer = Dr("CveDispositivo").ToString().ToEntero() - Dim NombreVehiculo = Dr("NombreVehiculo").ToString() - Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") - - Dim Dt = GenerarDTEventos(NombreVehiculo, FilterRows) - Dim item = FileExcel.Worksheets.Add(Dt.TableName) - item.InsertDataTable(Dt, New InsertDataTableOptions() With - { - .ColumnHeaders = True, - .StartRow = 0, - .StartColumn = 0 - }) - item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) - item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) - - Dim columnCount = item.CalculateMaxUsedColumns() - For i = 0 To columnCount - item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) - Next - - Next - FileExcel.Save(Retorno, SaveOptions.XlsxDefault) - If DtDispositivos IsNot Nothing Then - DtDispositivos.Clear() - DtDispositivos.Dispose() - End If - Return Retorno.ToArray() - End Function - Private Function GenerarReporteGeocercas(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As Byte() = Nothing - If DataSource IsNot Nothing AndAlso DataSource.Rows.Count > 0 Then - Try - Dim RptParametro As New List(Of ReportParameter) - RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToShortDateString)) - RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToShortDateString)) - RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) - RptParametro.Add(New ReportParameter("MapaURL", "")) - RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) - - Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReporteGeoReferencias", "PDF", MR:=Nothing, RDSName:="DsOC") - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - Else - Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) - End If - Return Retorno - End Function - Private Function GenerarReportePuntosInteres(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As Byte() = Nothing - If DataSource IsNot Nothing AndAlso DataSource.Rows.Count > 0 Then - Try - Dim RptParametro As New List(Of ReportParameter) - RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToShortDateString)) - RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToShortDateString)) - RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) - RptParametro.Add(New ReportParameter("MapaURL", "")) - RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) - - Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReportePuntosInteres", "PDF", MR:=Nothing, RDSName:="DsOC") - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - Else - Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) - End If - Return Retorno - End Function - Private Function GenerarReporteGeocercasExcel(DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As New MemoryStream() - SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) - - Dim FileExcel As ExcelFile = New ExcelFile - Dim DtDispositivos As DataTable = DataSource.FiltraParametros("", "", {"CveDispositivo", "Unidad"}) - Dim CveDispositivo As Integer = -1 - Dim NombreVehiculo As String - For Each Dr As DataRow In DtDispositivos.Rows - CveDispositivo = Dr("CveDispositivo").ToString().ToEntero() - NombreVehiculo = Dr("Unidad").ToString() - - Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") - Dim Dt = GenerarDTGeocercas(NombreVehiculo, FilterRows) - Dim item = FileExcel.Worksheets.Add(Dt.TableName) - item.InsertDataTable(Dt, New InsertDataTableOptions() With - { - .ColumnHeaders = True, - .StartRow = 0, - .StartColumn = 0 - }) - item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) - item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) - - Dim columnCount = item.CalculateMaxUsedColumns() - For i = 0 To columnCount - item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) - Next - - Next - FileExcel.Save(Retorno, SaveOptions.XlsxDefault) - If DtDispositivos IsNot Nothing Then - DtDispositivos.Clear() - DtDispositivos.Dispose() - End If - Return Retorno.ToArray() - End Function - Private Function GenerarReportePuntosDeInteresExcel(DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() - Dim Retorno As New MemoryStream() - SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) - - Dim FileExcel As ExcelFile = New ExcelFile - Dim DtDispositivos As DataTable = DataSource.FiltraParametros("", "", {"CveDispositivo", "Unidad"}) - Dim CveDispositivo As Integer = -1 - Dim NombreVehiculo As String - For Each Dr As DataRow In DtDispositivos.Rows - CveDispositivo = Dr("CveDispositivo").ToString().ToEntero() - NombreVehiculo = Dr("Unidad").ToString() - - Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") - Dim Dt = GenerarDTPuntosInteres(NombreVehiculo, FilterRows) - Dim item = FileExcel.Worksheets.Add(Dt.TableName) - item.InsertDataTable(Dt, New InsertDataTableOptions() With - { - .ColumnHeaders = True, - .StartRow = 0, - .StartColumn = 0 - }) - item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) - item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) - - Dim columnCount = item.CalculateMaxUsedColumns() - For i = 0 To columnCount - item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) - Next - - Next - FileExcel.Save(Retorno, SaveOptions.XlsxDefault) - - If DtDispositivos IsNot Nothing Then - DtDispositivos.Clear() - DtDispositivos.Dispose() - End If - - Return Retorno.ToArray() - End Function - - Private Function GenerarDTUltimaPosicion(Unidad As String, rows As DataTable) As DataTable - Dim dt As New DataTable(Unidad) - - dt.Columns.Add("Vehículo", Type.GetType("System.String")) - dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) - dt.Columns.Add("Tiempo Detenido", Type.GetType("System.String")) - dt.Columns.Add("Latitud", Type.GetType("System.Double")) - dt.Columns.Add("Longitud", Type.GetType("System.Double")) - dt.Columns.Add("Conductor", Type.GetType("System.String")) - dt.Columns.Add("Dirección", Type.GetType("System.String")) - - For Each Row As DataRow In rows.Rows - Dim dr = dt.NewRow() - dr("Vehículo") = Row("Vehiculo").ToString() - dr("Fecha") = Row("FechaTrama").ToString().ToDateTime() - dr("Tiempo Detenido") = Row("TiempoDetenido").ToString() - dr("Latitud") = Row("Lat").ToString().ToDouble() - dr("Longitud") = Row("Lon").ToString().ToDouble() - dr("Conductor") = Row("Conductor").ToString() - dr("Dirección") = Row("Direccion").ToString() - - dt.Rows.Add(dr) - Next - Return dt - - End Function - Private Function GenerarDTTiempoMuerto(row As DataRow) As DataTable - Dim dt As New DataTable(row("Unidad").ToString()) - - dt.Columns.Add("Unidad", Type.GetType("System.String")) - dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) - dt.Columns.Add("Tiempo Detenido", Type.GetType("System.String")) - dt.Columns.Add("Latitud", Type.GetType("System.Double")) - dt.Columns.Add("Longitud", Type.GetType("System.Double")) - dt.Columns.Add("Conductor", Type.GetType("System.String")) - dt.Columns.Add("Dirección", Type.GetType("System.String")) - - Dim dr = dt.NewRow() - dr("Unidad") = row("Unidad").ToString() - dr("Fecha") = row("Fecha").ToString().ToDateTime() - dr("Tiempo Detenido") = row("TiempoDetenido").ToString() - dr("Latitud") = row("Lat").ToString().ToDouble() - dr("Longitud") = row("Lon").ToString().ToDouble() - dr("Conductor") = row("Conductor").ToString() - dr("Dirección") = row("Direccion").ToString() - - dt.Rows.Add(dr) - Return dt - - End Function - Private Function GenerarDTRalenti(Unidad As String, rows As DataTable) As DataTable - Dim dt As New DataTable(Unidad) - - dt.Columns.Add("Vehículo", Type.GetType("System.String")) - dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) - dt.Columns.Add("Tiempo Detenido", Type.GetType("System.String")) - dt.Columns.Add("Latitud", Type.GetType("System.Double")) - dt.Columns.Add("Longitud", Type.GetType("System.Double")) - dt.Columns.Add("Conductor", Type.GetType("System.String")) - dt.Columns.Add("Dirección", Type.GetType("System.String")) - - For Each Row As DataRow In rows.Rows - Dim dr = dt.NewRow() - dr("Vehículo") = Row("Unidad").ToString() - dr("Fecha") = Row("Fecha").ToString().ToDateTime() - dr("Tiempo Detenido") = Row("TiempoDetenido").ToString() - dr("Latitud") = Row("Lat").ToString().ToDouble() - dr("Longitud") = Row("Lon").ToString().ToDouble() - dr("Conductor") = Row("Conductor").ToString() - dr("Dirección") = Row("Direccion").ToString() - - dt.Rows.Add(dr) - Next - Return dt - - End Function - Private Function GenerarDTEventos(Unidad As String, rows As DataTable) As DataTable - Dim dt As New DataTable(Unidad) - - dt.Columns.Add("Vehículo", Type.GetType("System.String")) - dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) - dt.Columns.Add("Evento", Type.GetType("System.String")) - dt.Columns.Add("Latitud", Type.GetType("System.Double")) - dt.Columns.Add("Longitud", Type.GetType("System.Double")) - dt.Columns.Add("Conductor", Type.GetType("System.String")) - dt.Columns.Add("Dirección", Type.GetType("System.String")) - + + Private Function GenerarReporteTiempoMuerto(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String, NombreReporte As String) As Byte() + Dim Retorno As Byte() = Nothing + Try + Dim RptParametro As New List(Of CrystalParametro) + RptParametro.Add(New CrystalParametro("FechaInicio", FechaI.ToString)) + RptParametro.Add(New CrystalParametro("FechaFin", FechaF.ToString)) + RptParametro.Add(New CrystalParametro("UsuarioImprimio", Correos)) + RptParametro.Add(New CrystalParametro("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) + RptParametro.Add(New CrystalParametro("TiempoMuerto", "10 Min")) + + Retorno = StreamPDFCrystal(Liga, DataSource, RptParametro, NombreReporte, "PDF") + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + Return Retorno + End Function + Private Function GenerarReporteTiempoMuertoExcel(DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As New MemoryStream() + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As ExcelFile = New ExcelFile + For Each Row As DataRow In DataSource.Rows + Dim Dt = GenerarDTTiempoMuerto(Row) + + Dim item = FileExcel.Worksheets.Add(Dt.TableName) + item.InsertDataTable(Dt, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + Dim columnCount = item.CalculateMaxUsedColumns() + For i = 0 To columnCount + item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) + Next + + Next + FileExcel.Save(Retorno, SaveOptions.XlsxDefault) + + Return Retorno.ToArray() + End Function + Private Function GenerarReporteRalenti(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As Byte() = Nothing + If DataSource IsNot Nothing AndAlso DataSource.Rows.Count > 0 Then + Try + Dim RptParametro As New List(Of ReportParameter) + RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToShortDateString)) + RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToShortDateString)) + RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) + RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) + + Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReporteRalenti", "PDF", MR:=Nothing, RDSName:="DsOC") + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + Else + Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) + End If + Return Retorno + End Function + Private Function GenerarReporteRalentiExcel(DtDispositivos As DataTable, DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As New MemoryStream() + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As ExcelFile = New ExcelFile + + For Each Dr As DataRow In DtDispositivos.Rows + Dim CveDispositivo As Integer = Dr("CveDispositivo").ToString().ToEntero() + Dim NombreVehiculo = Dr("NombreVehiculo").ToString() + Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") + + Dim Dt = GenerarDTRalenti(NombreVehiculo, FilterRows) + Dim item = FileExcel.Worksheets.Add(Dt.TableName) + item.InsertDataTable(Dt, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + Dim columnCount = item.CalculateMaxUsedColumns() + For i = 0 To columnCount + item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) + Next + + Next + FileExcel.Save(Retorno, SaveOptions.XlsxDefault) + + Return Retorno.ToArray() + End Function + Private Function GenerarReporteEventos(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As Byte() = Nothing + If DataSource IsNot Nothing Then + Try + Dim RptParametro As New List(Of CrystalParametro) + RptParametro.Add(New CrystalParametro("FechaInicio", FechaI.ToString)) + RptParametro.Add(New CrystalParametro("FechaFin", FechaF.ToString)) + RptParametro.Add(New CrystalParametro("UsuarioImprimio", Correos)) + RptParametro.Add(New CrystalParametro("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) + + Retorno = StreamPDFCrystal(Liga, DataSource, RptParametro, "ReporteEvento", "PDF") + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + Else + Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) + End If + Return Retorno + End Function + Private Function GenerarReporteEventosExcel(DtDispositivos As DataTable, DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As New MemoryStream() + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As ExcelFile = New ExcelFile + 'Dim DtDispositivos As DataTable = DataSource.FiltraParametros("", "", {"CveDispositivo", "Unidad"}) + + For Each Dr As DataRow In DtDispositivos.Rows + Dim CveDispositivo As Integer = Dr("CveDispositivo").ToString().ToEntero() + Dim NombreVehiculo = Dr("NombreVehiculo").ToString() + Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") + + Dim Dt = GenerarDTEventos(NombreVehiculo, FilterRows) + Dim item = FileExcel.Worksheets.Add(Dt.TableName) + item.InsertDataTable(Dt, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + Dim columnCount = item.CalculateMaxUsedColumns() + For i = 0 To columnCount + item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) + Next + + Next + FileExcel.Save(Retorno, SaveOptions.XlsxDefault) + If DtDispositivos IsNot Nothing Then + DtDispositivos.Clear() + DtDispositivos.Dispose() + End If + Return Retorno.ToArray() + End Function + Private Function GenerarReporteGeocercas(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As Byte() = Nothing + If DataSource IsNot Nothing AndAlso DataSource.Rows.Count > 0 Then + Try + Dim RptParametro As New List(Of ReportParameter) + RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToShortDateString)) + RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToShortDateString)) + RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) + RptParametro.Add(New ReportParameter("MapaURL", "")) + RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) + + Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReporteGeoReferencias", "PDF", MR:=Nothing, RDSName:="DsOC") + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + Else + Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) + End If + Return Retorno + End Function + Private Function GenerarReportePuntosInteres(DataSource As DataTable, Liga As String, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As Byte() = Nothing + If DataSource IsNot Nothing AndAlso DataSource.Rows.Count > 0 Then + Try + Dim RptParametro As New List(Of ReportParameter) + RptParametro.Add(New ReportParameter("FechaInicio", FechaI.ToShortDateString)) + RptParametro.Add(New ReportParameter("FechaFin", FechaF.ToShortDateString)) + RptParametro.Add(New ReportParameter("UsuarioImprimio", Correos)) + RptParametro.Add(New ReportParameter("MapaURL", "")) + RptParametro.Add(New ReportParameter("FechaImpresion", ClsPaginas.NowADS().ToShortDateString)) + + Retorno = StreamPDF(Liga, DataSource, RptParametro, "ReportePuntosInteres", "PDF", MR:=Nothing, RDSName:="DsOC") + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + Else + Alert("No se pudo imprimir el pdf, ya que no se ha hecho una consulta, o ésta no arrojó resultados.", TipoMensaje.MsgInformacion) + End If + Return Retorno + End Function + Private Function GenerarReporteGeocercasExcel(DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As New MemoryStream() + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As ExcelFile = New ExcelFile + Dim DtDispositivos As DataTable = DataSource.FiltraParametros("", "", {"CveDispositivo", "Unidad"}) + Dim CveDispositivo As Integer = -1 + Dim NombreVehiculo As String + For Each Dr As DataRow In DtDispositivos.Rows + CveDispositivo = Dr("CveDispositivo").ToString().ToEntero() + NombreVehiculo = Dr("Unidad").ToString() + + Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") + Dim Dt = GenerarDTGeocercas(NombreVehiculo, FilterRows) + Dim item = FileExcel.Worksheets.Add(Dt.TableName) + item.InsertDataTable(Dt, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + Dim columnCount = item.CalculateMaxUsedColumns() + For i = 0 To columnCount + item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) + Next + + Next + FileExcel.Save(Retorno, SaveOptions.XlsxDefault) + If DtDispositivos IsNot Nothing Then + DtDispositivos.Clear() + DtDispositivos.Dispose() + End If + Return Retorno.ToArray() + End Function + Private Function GenerarReportePuntosDeInteresExcel(DataSource As DataTable, FechaI As DateTime, FechaF As DateTime, Correos As String) As Byte() + Dim Retorno As New MemoryStream() + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As ExcelFile = New ExcelFile + Dim DtDispositivos As DataTable = DataSource.FiltraParametros("", "", {"CveDispositivo", "Unidad"}) + Dim CveDispositivo As Integer = -1 + Dim NombreVehiculo As String + For Each Dr As DataRow In DtDispositivos.Rows + CveDispositivo = Dr("CveDispositivo").ToString().ToEntero() + NombreVehiculo = Dr("Unidad").ToString() + + Dim FilterRows = DataSource.FiltraParametros($"CveDispositivo = {CveDispositivo}") + Dim Dt = GenerarDTPuntosInteres(NombreVehiculo, FilterRows) + Dim item = FileExcel.Worksheets.Add(Dt.TableName) + item.InsertDataTable(Dt, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + item.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + item.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + Dim columnCount = item.CalculateMaxUsedColumns() + For i = 0 To columnCount + item.Columns(i).AutoFit(1, item.Rows(i), item.Rows(item.Rows.Count - 1)) + Next + + Next + FileExcel.Save(Retorno, SaveOptions.XlsxDefault) + + If DtDispositivos IsNot Nothing Then + DtDispositivos.Clear() + DtDispositivos.Dispose() + End If + + Return Retorno.ToArray() + End Function + + Private Function GenerarDTUltimaPosicion(Unidad As String, rows As DataTable) As DataTable + Dim dt As New DataTable(Unidad) + + dt.Columns.Add("Vehículo", Type.GetType("System.String")) + dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) + dt.Columns.Add("Tiempo Detenido", Type.GetType("System.String")) + dt.Columns.Add("Latitud", Type.GetType("System.Double")) + dt.Columns.Add("Longitud", Type.GetType("System.Double")) + dt.Columns.Add("Conductor", Type.GetType("System.String")) + dt.Columns.Add("Dirección", Type.GetType("System.String")) + + For Each Row As DataRow In rows.Rows + Dim dr = dt.NewRow() + dr("Vehículo") = Row("Vehiculo").ToString() + dr("Fecha") = Row("FechaTrama").ToString().ToDateTime() + dr("Tiempo Detenido") = Row("TiempoDetenido").ToString() + dr("Latitud") = Row("Lat").ToString().ToDouble() + dr("Longitud") = Row("Lon").ToString().ToDouble() + dr("Conductor") = Row("Conductor").ToString() + dr("Dirección") = Row("Direccion").ToString() + + dt.Rows.Add(dr) + Next + Return dt + + End Function + Private Function GenerarDTTiempoMuerto(row As DataRow) As DataTable + Dim dt As New DataTable(row("Unidad").ToString()) + + dt.Columns.Add("Unidad", Type.GetType("System.String")) + dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) + dt.Columns.Add("Tiempo Detenido", Type.GetType("System.String")) + dt.Columns.Add("Latitud", Type.GetType("System.Double")) + dt.Columns.Add("Longitud", Type.GetType("System.Double")) + dt.Columns.Add("Conductor", Type.GetType("System.String")) + dt.Columns.Add("Dirección", Type.GetType("System.String")) + + Dim dr = dt.NewRow() + dr("Unidad") = row("Unidad").ToString() + dr("Fecha") = row("Fecha").ToString().ToDateTime() + dr("Tiempo Detenido") = row("TiempoDetenido").ToString() + dr("Latitud") = row("Lat").ToString().ToDouble() + dr("Longitud") = row("Lon").ToString().ToDouble() + dr("Conductor") = row("Conductor").ToString() + dr("Dirección") = row("Direccion").ToString() + + dt.Rows.Add(dr) + Return dt + + End Function + Private Function GenerarDTRalenti(Unidad As String, rows As DataTable) As DataTable + Dim dt As New DataTable(Unidad) + + dt.Columns.Add("Vehículo", Type.GetType("System.String")) + dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) + dt.Columns.Add("Tiempo Detenido", Type.GetType("System.String")) + dt.Columns.Add("Latitud", Type.GetType("System.Double")) + dt.Columns.Add("Longitud", Type.GetType("System.Double")) + dt.Columns.Add("Conductor", Type.GetType("System.String")) + dt.Columns.Add("Dirección", Type.GetType("System.String")) + + For Each Row As DataRow In rows.Rows + Dim dr = dt.NewRow() + dr("Vehículo") = Row("Unidad").ToString() + dr("Fecha") = Row("Fecha").ToString().ToDateTime() + dr("Tiempo Detenido") = Row("TiempoDetenido").ToString() + dr("Latitud") = Row("Lat").ToString().ToDouble() + dr("Longitud") = Row("Lon").ToString().ToDouble() + dr("Conductor") = Row("Conductor").ToString() + dr("Dirección") = Row("Direccion").ToString() + + dt.Rows.Add(dr) + Next + Return dt + + End Function + Private Function GenerarDTEventos(Unidad As String, rows As DataTable) As DataTable + Dim dt As New DataTable(Unidad) + + dt.Columns.Add("Vehículo", Type.GetType("System.String")) + dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) + dt.Columns.Add("Evento", Type.GetType("System.String")) + dt.Columns.Add("Latitud", Type.GetType("System.Double")) + dt.Columns.Add("Longitud", Type.GetType("System.Double")) + dt.Columns.Add("Conductor", Type.GetType("System.String")) + dt.Columns.Add("Dirección", Type.GetType("System.String")) + If rows IsNot Nothing Then For Each Row As DataRow In rows.Rows Dim dr = dt.NewRow() @@ -1451,532 +1451,532 @@ Public Class ClsSisNotificaciones dt.Rows.Add(dr) Next - End If - - Return dt - - End Function - Private Function GenerarDTGeocercas(Unidad As String, rows As DataTable) As DataTable - Dim dt As New DataTable(Unidad) - - dt.Columns.Add("Vehículo", Type.GetType("System.String")) - dt.Columns.Add("Geocerca", Type.GetType("System.String")) - dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) - dt.Columns.Add("Evento", Type.GetType("System.String")) - dt.Columns.Add("Latitud", Type.GetType("System.Double")) - dt.Columns.Add("Longitud", Type.GetType("System.Double")) - dt.Columns.Add("Conductor", Type.GetType("System.String")) - dt.Columns.Add("Velocidad", Type.GetType("System.String")) - dt.Columns.Add("Dirección", Type.GetType("System.String")) - - For Each Row As DataRow In rows.Rows - Dim dr = dt.NewRow() - dr("Vehículo") = Row("Unidad").ToString() - dr("Fecha") = Row("Fecha").ToString().ToDateTime() - dr("Evento") = Row("Evento").ToString() - dr("Geocerca") = Row("Geocerca").ToString() - dr("Latitud") = Row("Lat").ToString().ToDouble() - dr("Longitud") = Row("Lon").ToString().ToDouble() - dr("Velocidad") = Row("Velocidad").ToString().ToDouble() - dr("Conductor") = Row("Conductor").ToString() - dr("Dirección") = Row("Direccion").ToString() - dt.Rows.Add(dr) - Next - Return dt - - End Function - Private Function GenerarDTPuntosInteres(Unidad As String, rows As DataTable) As DataTable - Dim dt As New DataTable(Unidad) - - dt.Columns.Add("Vehículo", Type.GetType("System.String")) - dt.Columns.Add("Punto De Interés", Type.GetType("System.String")) - dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) - dt.Columns.Add("Evento", Type.GetType("System.String")) - dt.Columns.Add("Latitud", Type.GetType("System.Double")) - dt.Columns.Add("Longitud", Type.GetType("System.Double")) - dt.Columns.Add("Conductor", Type.GetType("System.String")) - dt.Columns.Add("Velocidad", Type.GetType("System.String")) - dt.Columns.Add("Dirección", Type.GetType("System.String")) - - For Each Row As DataRow In rows.Rows - Dim dr = dt.NewRow() - dr("Vehículo") = Row("Unidad").ToString() - dr("Fecha") = Row("Fecha").ToString().ToDateTime() - dr("Evento") = Row("Evento").ToString() - dr("Punto De Interés") = Row("PuntoDeInteres").ToString() - dr("Latitud") = Row("Lat").ToString().ToDouble() - dr("Longitud") = Row("Lon").ToString().ToDouble() - dr("Velocidad") = Row("Velocidad").ToString().ToDouble() - dr("Conductor") = Row("Conductor").ToString() - dr("Dirección") = Row("Direccion").ToString() - dt.Rows.Add(dr) - Next - Return dt - + End If + + Return dt + + End Function + Private Function GenerarDTGeocercas(Unidad As String, rows As DataTable) As DataTable + Dim dt As New DataTable(Unidad) + + dt.Columns.Add("Vehículo", Type.GetType("System.String")) + dt.Columns.Add("Geocerca", Type.GetType("System.String")) + dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) + dt.Columns.Add("Evento", Type.GetType("System.String")) + dt.Columns.Add("Latitud", Type.GetType("System.Double")) + dt.Columns.Add("Longitud", Type.GetType("System.Double")) + dt.Columns.Add("Conductor", Type.GetType("System.String")) + dt.Columns.Add("Velocidad", Type.GetType("System.String")) + dt.Columns.Add("Dirección", Type.GetType("System.String")) + + For Each Row As DataRow In rows.Rows + Dim dr = dt.NewRow() + dr("Vehículo") = Row("Unidad").ToString() + dr("Fecha") = Row("Fecha").ToString().ToDateTime() + dr("Evento") = Row("Evento").ToString() + dr("Geocerca") = Row("Geocerca").ToString() + dr("Latitud") = Row("Lat").ToString().ToDouble() + dr("Longitud") = Row("Lon").ToString().ToDouble() + dr("Velocidad") = Row("Velocidad").ToString().ToDouble() + dr("Conductor") = Row("Conductor").ToString() + dr("Dirección") = Row("Direccion").ToString() + dt.Rows.Add(dr) + Next + Return dt + + End Function + Private Function GenerarDTPuntosInteres(Unidad As String, rows As DataTable) As DataTable + Dim dt As New DataTable(Unidad) + + dt.Columns.Add("Vehículo", Type.GetType("System.String")) + dt.Columns.Add("Punto De Interés", Type.GetType("System.String")) + dt.Columns.Add("Fecha", Type.GetType("System.DateTime")) + dt.Columns.Add("Evento", Type.GetType("System.String")) + dt.Columns.Add("Latitud", Type.GetType("System.Double")) + dt.Columns.Add("Longitud", Type.GetType("System.Double")) + dt.Columns.Add("Conductor", Type.GetType("System.String")) + dt.Columns.Add("Velocidad", Type.GetType("System.String")) + dt.Columns.Add("Dirección", Type.GetType("System.String")) + + For Each Row As DataRow In rows.Rows + Dim dr = dt.NewRow() + dr("Vehículo") = Row("Unidad").ToString() + dr("Fecha") = Row("Fecha").ToString().ToDateTime() + dr("Evento") = Row("Evento").ToString() + dr("Punto De Interés") = Row("PuntoDeInteres").ToString() + dr("Latitud") = Row("Lat").ToString().ToDouble() + dr("Longitud") = Row("Lon").ToString().ToDouble() + dr("Velocidad") = Row("Velocidad").ToString().ToDouble() + dr("Conductor") = Row("Conductor").ToString() + dr("Dirección") = Row("Direccion").ToString() + dt.Rows.Add(dr) + Next + Return dt + End Function -#End Region +#End Region - Private Sub EnviarNotificacionesGPS() - Try - If DTNotificacionesGPS IsNot Nothing Then - - 'Dim DTNotificacionesCampana = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 1") - Dim DTNotificacionesCorreo = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 2") - Dim DTNotificacionesVentana = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 3") - 'Dim DTNotificacionesSMS = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 4") - Dim DTNotificacionesApp = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 5") - - If DTNotificacionesVentana IsNot Nothing AndAlso DTNotificacionesVentana.Rows.Count > 0 Then - - - For Each Dr As DataRow In DTNotificacionesVentana.Rows - Dim Encabezado As String = Dr("Encabezado").ToString.Replace("{Vehiculo}", Dr("Vehiculo").ToString).Replace("{Clase}", Dr("Clase").ToString) - Dim Mensaje As String = Dr("Cuerpo").ToString.Replace("{Mensaje}", $"{Dr("Nombre").ToString} {Dr("FechaEvento")}") - Dim CveUsuario As Integer = Dr("CveUsuario").ToString.ToEntero - Dim TipoNotificacion As Integer = Dr("TipoNotificacion").ToString().ToEntero() - Dim Pie As String = Dr("Pie").ToString - Dim Sonido As String = Dr("Sonido").ToString - Dim Persistencia As Boolean = CBool(Dr("Persistencia").ToString().ToEntero()) - Dim Pos As String = Dr("Posicion").ToString - Dim Coords As String = If(Not String.IsNullOrEmpty(Pos), SQLToGmapsJArray(Pos, "POINT").ToString, "") - - 'Dim JsonParams As New JObject( - ' New JProperty("Titulo", Encabezado), - ' New JProperty("Mensaje", Mensaje), - ' New JProperty("Pie", Pie), - ' New JProperty("Tipo", TipoNotificacion), - ' New JProperty("Sonido", Sonido), - ' New JProperty("Persistencia", Persistencia), - ' New JProperty("Coordenadas", Coords) - ' ) - - Dim CveNotificacionBitacora As Integer = Dr("CveNotificacionBitacora").ToString.ToEntero - Dim context = GlobalHost.ConnectionManager.GetHubContext(Of MyGPSHub)() - SendNotificacionGPS(context, CveNotificacionBitacora, CveUsuario, Encabezado, Mensaje, TipoNotificacion, Pie, Sonido, Persistencia, Coords) - - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - Next - End If - - If DTNotificacionesApp IsNot Nothing AndAlso DTNotificacionesApp.Rows.Count > 0 Then - Dim DtTokens As DataTable = Nothing - - Dim ObjGPS As New ClsGPS - If ObjGPS.GetDeviceTokens(-1, "-1", "-1", 1) Then - DtTokens = ObjGPS.DtResultados.Copy() - End If - ObjGPS.Dispose() - - If DtTokens IsNot Nothing Then - For Each RowToken As DataRow In DtTokens.Rows - Dim CveUsuario As Integer = RowToken("CveUsuario").ToString.ToEntero() - Dim CveToken As Integer = RowToken("CveToken").ToString().ToEntero() - Dim DeviceId As String = RowToken("DeviceId").ToString() - Dim Token = RowToken("Token").ToString() - Dim SO = RowToken("SO").ToString() - Dim Badge As Integer = RowToken("Badge").ToString().ToEntero() - - If Not String.IsNullOrEmpty(Token) AndAlso CveUsuario > 0 AndAlso CveToken > 0 Then - Dim DtAppsNotifications As DataTable = DTNotificacionesApp.FiltraParametros(String.Format("CveUsuario={0}", CveUsuario)) - - Dim CveNotificacionBitacora As Integer = -1 - Dim CveDispositivo As Integer = -1 - Dim Vehiculo As String = "" - Dim Pos As String = "" - Dim Lat As Double = 0 - Dim Lng As Double = 0 - Dim Mensaje As String = "" - - For Each Dr As DataRow In DtAppsNotifications.Rows - Mensaje = Dr("Nombre").ToString() - CveNotificacionBitacora = Dr("CveNotificacionBitacora").ToString.ToEntero() - CveDispositivo = Dr("CveDispositivo").ToString.ToEntero() - Vehiculo = Dr("Vehiculo").ToString() - Pos = Dr("Posicion").ToString() - - If Not String.IsNullOrEmpty(Pos) Then - Dim ArrayPoint = SQLToGmapsJArray(Pos, "POINT") - Lat = ArrayPoint(0)("lat").ToString().ToDouble() - Lng = ArrayPoint(0)("lng").ToString().ToDouble() - End If - - If CveNotificacionBitacora > 0 AndAlso CveDispositivo > 0 Then - EnviarNotificacionAppGPS(CveToken, DeviceId, Token, SO, Badge, Vehiculo, Mensaje, CveUsuario, CveNotificacionBitacora, CveDispositivo, Vehiculo, Lat, Lng) - End If - Next - If DtAppsNotifications IsNot Nothing Then - DtAppsNotifications.Clear() - DtAppsNotifications.Dispose() - End If - End If - Next - If DtTokens IsNot Nothing Then - DtTokens.Clear() - DtTokens.Dispose() - End If - End If + Private Sub EnviarNotificacionesGPS() + Try + If DTNotificacionesGPS IsNot Nothing Then + + 'Dim DTNotificacionesCampana = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 1") + Dim DTNotificacionesCorreo = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 2") + Dim DTNotificacionesVentana = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 3") + 'Dim DTNotificacionesSMS = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 4") + Dim DTNotificacionesApp = DTNotificacionesGPS.FiltraParametros("CveTipoPlantilla = 5") + + If DTNotificacionesVentana IsNot Nothing AndAlso DTNotificacionesVentana.Rows.Count > 0 Then + + + For Each Dr As DataRow In DTNotificacionesVentana.Rows + Dim Encabezado As String = Dr("Encabezado").ToString.Replace("{Vehiculo}", Dr("Vehiculo").ToString).Replace("{Clase}", Dr("Clase").ToString) + Dim Mensaje As String = Dr("Cuerpo").ToString.Replace("{Mensaje}", $"{Dr("Nombre").ToString} {Dr("FechaEvento")}") + Dim CveUsuario As Integer = Dr("CveUsuario").ToString.ToEntero + Dim TipoNotificacion As Integer = Dr("TipoNotificacion").ToString().ToEntero() + Dim Pie As String = Dr("Pie").ToString + Dim Sonido As String = Dr("Sonido").ToString + Dim Persistencia As Boolean = CBool(Dr("Persistencia").ToString().ToEntero()) + Dim Pos As String = Dr("Posicion").ToString + Dim Coords As String = If(Not String.IsNullOrEmpty(Pos), SQLToGmapsJArray(Pos, "POINT").ToString, "") + + 'Dim JsonParams As New JObject( + ' New JProperty("Titulo", Encabezado), + ' New JProperty("Mensaje", Mensaje), + ' New JProperty("Pie", Pie), + ' New JProperty("Tipo", TipoNotificacion), + ' New JProperty("Sonido", Sonido), + ' New JProperty("Persistencia", Persistencia), + ' New JProperty("Coordenadas", Coords) + ' ) + + Dim CveNotificacionBitacora As Integer = Dr("CveNotificacionBitacora").ToString.ToEntero + Dim context = GlobalHost.ConnectionManager.GetHubContext(Of MyGPSHub)() + SendNotificacionGPS(context, CveNotificacionBitacora, CveUsuario, Encabezado, Mensaje, TipoNotificacion, Pie, Sonido, Persistencia, Coords) + + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + Next End If - If DTNotificacionesCorreo IsNot Nothing AndAlso DTNotificacionesCorreo.Rows.Count > 0 Then - EnviarCorreos(DTNotificacionesCorreo) - End If - - If Not DTNotificacionesApp Is Nothing Then DTNotificacionesApp.Dispose() - 'If Not DTNotificacionesCampana Is Nothing Then DTNotificacionesCampana.Dispose() - If Not DTNotificacionesCorreo Is Nothing Then DTNotificacionesCorreo.Dispose() - 'If Not DTNotificacionesSMS Is Nothing Then DTNotificacionesSMS.Dispose() - If Not DTNotificacionesVentana Is Nothing Then DTNotificacionesVentana.Dispose() - - End If - Catch ex As Exception - GuardaLog(ex.ToString()) - End Try - End Sub - - Private Sub EnviarNotificacionesERP() - - End Sub - Private Sub EnviarNotificacionesArmadas() - Dim CveNotificacionBitacora As Integer = -1 - Dim CveUsuario As Integer = -1 - Dim TextoVentana As String = "" - Dim TipoNotificacion As Integer = 0 - Dim Titulo As String = "" - For Each Row As DataRow In DTNotificacionesArmadas.Rows - CveNotificacionBitacora = Row("CveNotificacionBitacora").ToString().ToEntero() - CveUsuario = Row("CveUsuario").ToString().ToEntero() - TipoNotificacion = Row("TipoNotificacion").ToString().ToEntero() - TextoVentana = Row("TextoVentana").ToString() - 'Select Case TipoNotificacion - ' Case 0 - ' Titulo = "" - ' Case 1 - ' Titulo = "Alerta" - ' Case 2 - ' Titulo = "Emergencia" - ' Case Else - ' Titulo = "" - 'End Select - If CveUsuario > 0 Then - SendNotificacionERP(CveUsuario, Titulo, TextoVentana, TipoNotificacion) - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - CveUsuario = -1 - Titulo = "" - TextoVentana = "" - TipoNotificacion = -1 - Next - End Sub - - - ''' - ''' Envia las push notifications a los usuarios con notificaciones pendientes a sus aplicaciones moviles - ''' - Private Sub EnviarNotificacionAppGPS(CveToken As Integer, DeviceId As String, Token As String, SO As String, Badge As Integer, Titulo As String, Mensaje As String, CveUsuario As Integer, CveNotificacionBitacora As Integer, CveDispositivo As Integer, Vehiculo As String, Lat As Double, Lng As Double) - Try - If Not String.IsNullOrEmpty(Token) Then - 'SE DEFINE EL CUERPO DE LA RESPUESTA DE FIREBASE - Dim Definition = New With { - Key .[multicast_id] = "", - Key .[success] = 0, - Key .[failure] = 0, - Key .[canonical_ids] = 0 - } - - Dim Request As WebRequest = WebRequest.Create(FirebaseWebService) - Request.Method = "post" - Request.ContentType = "application/json" - Request.Headers.Add(String.Format("Authorization: key={0}", FirebaseServerKey)) - Request.Headers.Add(String.Format("Sender: id={0}", SenderID)) - - 'SE DEFINE EL CUERPO DEL MENSAJE - Dim DataNotification = Nothing - Dim NotificacionesPendientes = Badge + 1 - If SO = "iOS" Then - DataNotification = New With { - .to = Token, - .notification = New With { - .body = Mensaje, - .title = Titulo, - .badge = NotificacionesPendientes.ToString, - .click_action = "SHOW_MAP_CATEGORY" - }, - .data = New With { - .cveDispositivo = CveDispositivo, - .vehiculo = Vehiculo, - .lat = Lat, - .lng = Lng - } - } - ElseIf SO = "Android" Then - DataNotification = New With { - .to = Token, - .data = New With { - .data = New With { - .message = Mensaje, - .title = Titulo, - .is_background = False, - .payload = New With { - .cveDispositivo = CveDispositivo, - .vehiculo = Vehiculo, - .lat = Lat, - .lng = Lng - }, - .timestamp = ClsPaginas.NowADS().ToString("yyyy-MM-dd HH:mm:ss") - } - } - } - End If - If DataNotification IsNot Nothing Then - Dim json = Newtonsoft.Json.JsonConvert.SerializeObject(DataNotification) - Dim byteArray As Byte() = Encoding.UTF8.GetBytes(json) - Request.ContentLength = byteArray.Length - - Using dataStream As Stream = Request.GetRequestStream() - dataStream.Write(byteArray, 0, byteArray.Length) - Using tResponse As WebResponse = Request.GetResponse() - Using dataStreamResponse As Stream = tResponse.GetResponseStream() - Using tReader As New StreamReader(dataStreamResponse) - Dim sResponseFromServer As String = tReader.ReadToEnd() - Try - Dim respuesta = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(sResponseFromServer, Definition) - If respuesta.success > 0 Then - Dim ObjGPS As New ClsGPS() - ObjGPS.UpdateNotificacionesPendientesDeviceToken(CveToken, CveUsuario, DeviceId, SO, NotificacionesPendientes) - ObjGPS.Dispose() - - UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) - End If - If respuesta.failure > 0 Then - Dim ObjGPS As New ClsGPS() - ObjGPS.UpdateEstatusDeviceToken(CveToken, False) - ObjGPS.Dispose() - End If - Catch ex As Exception - OnError("Ocurrio un error al recibir la respuesta de firebase.", ex) - End Try - End Using - End Using - End Using - End Using - End If - End If - Catch ex As Exception - OnError("Ocurrio un error al enviar la notificación.", ex) - End Try + If DTNotificacionesApp IsNot Nothing AndAlso DTNotificacionesApp.Rows.Count > 0 Then + Dim DtTokens As DataTable = Nothing + + Dim ObjGPS As New ClsGPS + If ObjGPS.GetDeviceTokens(-1, "-1", "-1", 1) Then + DtTokens = ObjGPS.DtResultados.Copy() + End If + ObjGPS.Dispose() + + If DtTokens IsNot Nothing Then + For Each RowToken As DataRow In DtTokens.Rows + Dim CveUsuario As Integer = RowToken("CveUsuario").ToString.ToEntero() + Dim CveToken As Integer = RowToken("CveToken").ToString().ToEntero() + Dim DeviceId As String = RowToken("DeviceId").ToString() + Dim Token = RowToken("Token").ToString() + Dim SO = RowToken("SO").ToString() + Dim Badge As Integer = RowToken("Badge").ToString().ToEntero() + + If Not String.IsNullOrEmpty(Token) AndAlso CveUsuario > 0 AndAlso CveToken > 0 Then + Dim DtAppsNotifications As DataTable = DTNotificacionesApp.FiltraParametros(String.Format("CveUsuario={0}", CveUsuario)) + + Dim CveNotificacionBitacora As Integer = -1 + Dim CveDispositivo As Integer = -1 + Dim Vehiculo As String = "" + Dim Pos As String = "" + Dim Lat As Double = 0 + Dim Lng As Double = 0 + Dim Mensaje As String = "" + + For Each Dr As DataRow In DtAppsNotifications.Rows + Mensaje = Dr("Nombre").ToString() + CveNotificacionBitacora = Dr("CveNotificacionBitacora").ToString.ToEntero() + CveDispositivo = Dr("CveDispositivo").ToString.ToEntero() + Vehiculo = Dr("Vehiculo").ToString() + Pos = Dr("Posicion").ToString() + + If Not String.IsNullOrEmpty(Pos) Then + Dim ArrayPoint = SQLToGmapsJArray(Pos, "POINT") + Lat = ArrayPoint(0)("lat").ToString().ToDouble() + Lng = ArrayPoint(0)("lng").ToString().ToDouble() + End If + + If CveNotificacionBitacora > 0 AndAlso CveDispositivo > 0 Then + EnviarNotificacionAppGPS(CveToken, DeviceId, Token, SO, Badge, Vehiculo, Mensaje, CveUsuario, CveNotificacionBitacora, CveDispositivo, Vehiculo, Lat, Lng) + End If + Next + If DtAppsNotifications IsNot Nothing Then + DtAppsNotifications.Clear() + DtAppsNotifications.Dispose() + End If + End If + Next + If DtTokens IsNot Nothing Then + DtTokens.Clear() + DtTokens.Dispose() + End If + End If + End If + + If DTNotificacionesCorreo IsNot Nothing AndAlso DTNotificacionesCorreo.Rows.Count > 0 Then + EnviarCorreos(DTNotificacionesCorreo) + End If + + If Not DTNotificacionesApp Is Nothing Then DTNotificacionesApp.Dispose() + 'If Not DTNotificacionesCampana Is Nothing Then DTNotificacionesCampana.Dispose() + If Not DTNotificacionesCorreo Is Nothing Then DTNotificacionesCorreo.Dispose() + 'If Not DTNotificacionesSMS Is Nothing Then DTNotificacionesSMS.Dispose() + If Not DTNotificacionesVentana Is Nothing Then DTNotificacionesVentana.Dispose() + + End If + Catch ex As Exception + GuardaLog(ex.ToString()) + End Try End Sub -#End Region + Private Sub EnviarNotificacionesERP() -#Region "N O T I F I C A C I O N E S - P R O C E D I M I E N T O S G E N E R A L E S" - Public Function GetNotificaciones(CveNotificacion As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesGet") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveNotificacion", SqlDbType.Int).Value = CveNotificacion - End With - - Try - SqlAdapter.Fill(Data) - _CveNotificacion = Data.Rows(0)("CveNotificacion").ToString.ToEntero - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - - ''' - ''' Regresa las notificaciones no entregadas. - ''' - Public Function GetNotificacionesBitacoraPendientes(TopNotificaciones As Integer) As Boolean - Dim Retorno As Boolean = False - DataSet = New DataSet - DataAdapter("PA_NotificacionesBitacoraGet") - - With SqlAdapter.SelectCommand.Parameters - .Add("@TopNotificaciones", SqlDbType.Int).Value = TopNotificaciones - End With - - Try - SqlAdapter.Fill(DataSet) - - DTNotificacionesGPS = DataSet.Tables(0).Copy() - DTNotificacionesERP = DataSet.Tables(1).Copy() - DTNotificacionesArmadas = DataSet.Tables(2).Copy() - DTReportesProgramados = DataSet.Tables(3).Copy() - - DataSet.Clear() - DataSet.Dispose() - DataSet = Nothing - - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener las notificaciones pendientes.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - Public Shared Sub SendNotificacionERP(CveUsuario As Integer, Titulo As String, Mensaje As String, TipoNotificacion As Integer, Optional timeoutseconds As Integer = 5) - 'Dim context = GlobalHost.ConnectionManager.GetHubContext(Of MyHub)() - 'Dim Conexiones = MyHub.idsfromCveUsuario(CveUsuario) - 'For Each ConnectionID As String In Conexiones - ' context.Clients.Client(ConnectionID).sendNotificacionERP(Titulo, Mensaje, TipoNotificacion) - 'Next - Dim lista As New List(Of String) - lista.Add(CveUsuario.ToString()) - 'Notificaciones.AlertaVentana(Mensaje, lista, Titulo, timeoutseconds) - End Sub - 'Public Sub SendNotificacionGPS(context As IHubContext, CveUsuario As Integer, JsonParams As String) - ' context.Clients.All.DisparaNotificacionUsuario(CveUsuario,) - ' Dim Conexiones = MyHub.idsfromCveUsuario(CveUsuario) - ' For Each ConnectionID As String In Conexiones - ' context.Clients.Client(ConnectionID).sendNotificacionGPS(JsonParams) - ' Next - 'End Sub - Public Sub SendNotificacionGPS(context As IHubContext, CveNotificacionBitacora As Integer, CveUsuario As Integer, Encabezado As String, Mensaje As String, TipoNotificacion As Integer, Pie As String, Sonido As String, Persistencia As Boolean, Coords As String) - context.Clients.All.addLatestNotification(Mensaje, CveUsuario, Encabezado, TipoNotificacion, Pie, Sonido, CveNotificacionBitacora, Persistencia, Coords) - End Sub - - Public Function GetNotificacionesCampanaPendientes(CveUsuario As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesCampanaGet") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener las notificaciones pendientes.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - - Public Function GetNotificacionesCampanaDetalle(CveUsuario As Integer, Tipo As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesCampanaDetalleGet") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario - .Add("@Tipo", SqlDbType.TinyInt).Value = Tipo - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener las notificaciones pendientes.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - - Public Function UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora As Integer, Notifico As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesBitacoraNotificadaUpdate") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveNotificacionBitacora", SqlDbType.Int).Value = CveNotificacionBitacora - .Add("@Notifico", SqlDbType.Int).Value = Notifico - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al actualizar la notificacion.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - - Public Function UpdateNotificacionesCampanaNotifico(CveNotificacionBitacora As Integer, Notifico As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesCampanaNotificadaUpdate") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveNotificacionBitacora", SqlDbType.Int).Value = CveNotificacionBitacora - .Add("@Notifico", SqlDbType.Int).Value = Notifico - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al actualizar la notificacion.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - - 'Public Function ArmarPlantillaNotificacion(NotificacionesBitacora As String, TipoPlantilla As Integer) As Boolean - ' Dim Retorno As Boolean = False - ' DataAdapter("PA_NotificacionesPlantillaArmado") - - ' With SqlAdapter.SelectCommand.Parameters - ' .Add("@NotificacionesBitacora", SqlDbType.VarChar).Value = NotificacionesBitacora - ' .Add("@TipoPlantilla", SqlDbType.Int).Value = TipoPlantilla - ' End With - - ' Try - ' SqlAdapter.Fill(Data) - ' Retorno = True - ' Catch ex As Exception - ' OnError("Ocurrió un error al obtener las notificaciones pendientes.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - ' End Try - - ' Return Retorno - 'End Function - - Public Function AddNotificacionesBitacora(CveUsuario As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesBitacoraAdd") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveNotificacion", SqlDbType.Int).Value = _CveNotificacion - .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario - .Add("@CveEmpresa", SqlDbType.Int).Value = _CveEmpresa - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al agregar la notificacion a la bitacora.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - Public Function AddNotificacionesBitacoraArmada(CveUsuario As Integer, TipoNotifacion As Integer, TextoVentana As String, TextoCorreo As String, TextoApp As String, FechaNotificacion As DateTime) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesBitacoraArmadaAdd") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario - .Add("@TipoNotifacion", SqlDbType.TinyInt).Value = TipoNotifacion - .Add("@TextoVentana", SqlDbType.VarChar).Value = TextoVentana - .Add("@TextoCorreo", SqlDbType.VarChar).Value = TextoCorreo - .Add("@TextoApp", SqlDbType.VarChar).Value = TextoApp - .Add("@FechaNotificacion", SqlDbType.DateTime).Value = FechaNotificacion - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al agregar la notificacion a la bitacora.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno + End Sub + Private Sub EnviarNotificacionesArmadas() + Dim CveNotificacionBitacora As Integer = -1 + Dim CveUsuario As Integer = -1 + Dim TextoVentana As String = "" + Dim TipoNotificacion As Integer = 0 + Dim Titulo As String = "" + For Each Row As DataRow In DTNotificacionesArmadas.Rows + CveNotificacionBitacora = Row("CveNotificacionBitacora").ToString().ToEntero() + CveUsuario = Row("CveUsuario").ToString().ToEntero() + TipoNotificacion = Row("TipoNotificacion").ToString().ToEntero() + TextoVentana = Row("TextoVentana").ToString() + 'Select Case TipoNotificacion + ' Case 0 + ' Titulo = "" + ' Case 1 + ' Titulo = "Alerta" + ' Case 2 + ' Titulo = "Emergencia" + ' Case Else + ' Titulo = "" + 'End Select + If CveUsuario > 0 Then + SendNotificacionERP(CveUsuario, Titulo, TextoVentana, TipoNotificacion) + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + CveUsuario = -1 + Titulo = "" + TextoVentana = "" + TipoNotificacion = -1 + Next + End Sub + + + ''' + ''' Envia las push notifications a los usuarios con notificaciones pendientes a sus aplicaciones moviles + ''' + Private Sub EnviarNotificacionAppGPS(CveToken As Integer, DeviceId As String, Token As String, SO As String, Badge As Integer, Titulo As String, Mensaje As String, CveUsuario As Integer, CveNotificacionBitacora As Integer, CveDispositivo As Integer, Vehiculo As String, Lat As Double, Lng As Double) + Try + If Not String.IsNullOrEmpty(Token) Then + 'SE DEFINE EL CUERPO DE LA RESPUESTA DE FIREBASE + Dim Definition = New With { + Key .[multicast_id] = "", + Key .[success] = 0, + Key .[failure] = 0, + Key .[canonical_ids] = 0 + } + + Dim Request As WebRequest = WebRequest.Create(FirebaseWebService) + Request.Method = "post" + Request.ContentType = "application/json" + Request.Headers.Add(String.Format("Authorization: key={0}", FirebaseServerKey)) + Request.Headers.Add(String.Format("Sender: id={0}", SenderID)) + + 'SE DEFINE EL CUERPO DEL MENSAJE + Dim DataNotification = Nothing + Dim NotificacionesPendientes = Badge + 1 + If SO = "iOS" Then + DataNotification = New With { + .to = Token, + .notification = New With { + .body = Mensaje, + .title = Titulo, + .badge = NotificacionesPendientes.ToString, + .click_action = "SHOW_MAP_CATEGORY" + }, + .data = New With { + .cveDispositivo = CveDispositivo, + .vehiculo = Vehiculo, + .lat = Lat, + .lng = Lng + } + } + ElseIf SO = "Android" Then + DataNotification = New With { + .to = Token, + .data = New With { + .data = New With { + .message = Mensaje, + .title = Titulo, + .is_background = False, + .payload = New With { + .cveDispositivo = CveDispositivo, + .vehiculo = Vehiculo, + .lat = Lat, + .lng = Lng + }, + .timestamp = ClsPaginas.NowADS().ToString("yyyy-MM-dd HH:mm:ss") + } + } + } + End If + If DataNotification IsNot Nothing Then + Dim json = Newtonsoft.Json.JsonConvert.SerializeObject(DataNotification) + Dim byteArray As Byte() = Encoding.UTF8.GetBytes(json) + Request.ContentLength = byteArray.Length + + Using dataStream As Stream = Request.GetRequestStream() + dataStream.Write(byteArray, 0, byteArray.Length) + Using tResponse As WebResponse = Request.GetResponse() + Using dataStreamResponse As Stream = tResponse.GetResponseStream() + Using tReader As New StreamReader(dataStreamResponse) + Dim sResponseFromServer As String = tReader.ReadToEnd() + Try + Dim respuesta = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(sResponseFromServer, Definition) + If respuesta.success > 0 Then + Dim ObjGPS As New ClsGPS() + ObjGPS.UpdateNotificacionesPendientesDeviceToken(CveToken, CveUsuario, DeviceId, SO, NotificacionesPendientes) + ObjGPS.Dispose() + + UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora, 1) + End If + If respuesta.failure > 0 Then + Dim ObjGPS As New ClsGPS() + ObjGPS.UpdateEstatusDeviceToken(CveToken, False) + ObjGPS.Dispose() + End If + Catch ex As Exception + OnError("Ocurrio un error al recibir la respuesta de firebase.", ex) + End Try + End Using + End Using + End Using + End Using + End If + End If + Catch ex As Exception + OnError("Ocurrio un error al enviar la notificación.", ex) + End Try + End Sub + +#End Region + +#Region "N O T I F I C A C I O N E S - P R O C E D I M I E N T O S G E N E R A L E S" + Public Function GetNotificaciones(CveNotificacion As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveNotificacion", SqlDbType.Int).Value = CveNotificacion + End With + + Try + SqlAdapter.Fill(Data) + _CveNotificacion = Data.Rows(0)("CveNotificacion").ToString.ToEntero + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + ''' + ''' Regresa las notificaciones no entregadas. + ''' + Public Function GetNotificacionesBitacoraPendientes(TopNotificaciones As Integer) As Boolean + Dim Retorno As Boolean = False + DataSet = New DataSet + DataAdapter("PA_NotificacionesBitacoraGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@TopNotificaciones", SqlDbType.Int).Value = TopNotificaciones + End With + + Try + SqlAdapter.Fill(DataSet) + + DTNotificacionesGPS = DataSet.Tables(0).Copy() + DTNotificacionesERP = DataSet.Tables(1).Copy() + DTNotificacionesArmadas = DataSet.Tables(2).Copy() + DTReportesProgramados = DataSet.Tables(3).Copy() + + DataSet.Clear() + DataSet.Dispose() + DataSet = Nothing + + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener las notificaciones pendientes.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + Public Shared Sub SendNotificacionERP(CveUsuario As Integer, Titulo As String, Mensaje As String, TipoNotificacion As Integer, Optional timeoutseconds As Integer = 5) + 'Dim context = GlobalHost.ConnectionManager.GetHubContext(Of MyHub)() + 'Dim Conexiones = MyHub.idsfromCveUsuario(CveUsuario) + 'For Each ConnectionID As String In Conexiones + ' context.Clients.Client(ConnectionID).sendNotificacionERP(Titulo, Mensaje, TipoNotificacion) + 'Next + Dim lista As New List(Of String) + lista.Add(CveUsuario.ToString()) + 'Notificaciones.AlertaVentana(Mensaje, lista, Titulo, timeoutseconds) + End Sub + 'Public Sub SendNotificacionGPS(context As IHubContext, CveUsuario As Integer, JsonParams As String) + ' context.Clients.All.DisparaNotificacionUsuario(CveUsuario,) + ' Dim Conexiones = MyHub.idsfromCveUsuario(CveUsuario) + ' For Each ConnectionID As String In Conexiones + ' context.Clients.Client(ConnectionID).sendNotificacionGPS(JsonParams) + ' Next + 'End Sub + Public Sub SendNotificacionGPS(context As IHubContext, CveNotificacionBitacora As Integer, CveUsuario As Integer, Encabezado As String, Mensaje As String, TipoNotificacion As Integer, Pie As String, Sonido As String, Persistencia As Boolean, Coords As String) + context.Clients.All.addLatestNotification(Mensaje, CveUsuario, Encabezado, TipoNotificacion, Pie, Sonido, CveNotificacionBitacora, Persistencia, Coords) + End Sub + + Public Function GetNotificacionesCampanaPendientes(CveUsuario As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesCampanaGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener las notificaciones pendientes.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function GetNotificacionesCampanaDetalle(CveUsuario As Integer, Tipo As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesCampanaDetalleGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@Tipo", SqlDbType.TinyInt).Value = Tipo + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener las notificaciones pendientes.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function UpdateNotificacionesBitacoraNotifico(CveNotificacionBitacora As Integer, Notifico As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesBitacoraNotificadaUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveNotificacionBitacora", SqlDbType.Int).Value = CveNotificacionBitacora + .Add("@Notifico", SqlDbType.Int).Value = Notifico + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al actualizar la notificacion.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function UpdateNotificacionesCampanaNotifico(CveNotificacionBitacora As Integer, Notifico As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesCampanaNotificadaUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveNotificacionBitacora", SqlDbType.Int).Value = CveNotificacionBitacora + .Add("@Notifico", SqlDbType.Int).Value = Notifico + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al actualizar la notificacion.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + 'Public Function ArmarPlantillaNotificacion(NotificacionesBitacora As String, TipoPlantilla As Integer) As Boolean + ' Dim Retorno As Boolean = False + ' DataAdapter("PA_NotificacionesPlantillaArmado") + + ' With SqlAdapter.SelectCommand.Parameters + ' .Add("@NotificacionesBitacora", SqlDbType.VarChar).Value = NotificacionesBitacora + ' .Add("@TipoPlantilla", SqlDbType.Int).Value = TipoPlantilla + ' End With + + ' Try + ' SqlAdapter.Fill(Data) + ' Retorno = True + ' Catch ex As Exception + ' OnError("Ocurrió un error al obtener las notificaciones pendientes.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + ' End Try + + ' Return Retorno + 'End Function + + Public Function AddNotificacionesBitacora(CveUsuario As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesBitacoraAdd") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveNotificacion", SqlDbType.Int).Value = _CveNotificacion + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@CveEmpresa", SqlDbType.Int).Value = _CveEmpresa + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al agregar la notificacion a la bitacora.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + Public Function AddNotificacionesBitacoraArmada(CveUsuario As Integer, TipoNotifacion As Integer, TextoVentana As String, TextoCorreo As String, TextoApp As String, FechaNotificacion As DateTime) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesBitacoraArmadaAdd") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@TipoNotifacion", SqlDbType.TinyInt).Value = TipoNotifacion + .Add("@TextoVentana", SqlDbType.VarChar).Value = TextoVentana + .Add("@TextoCorreo", SqlDbType.VarChar).Value = TextoCorreo + .Add("@TextoApp", SqlDbType.VarChar).Value = TextoApp + .Add("@FechaNotificacion", SqlDbType.DateTime).Value = FechaNotificacion + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al agregar la notificacion a la bitacora.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno End Function 'Public Function ArmarReporteProgramado(NotificacionBitacora As Integer) As Boolean @@ -2031,313 +2031,413 @@ Public Class ClsSisNotificaciones ' Return Retorno 'End Function -#End Region +#End Region -#Region "N O T I F I C A C I O N E S - P R O C E D I M I E N T O S E S P E C I F I C O S" - Public Function GetUsuariosNotifiacionOCAutorizada(CveOC As Integer) As Boolean 'Notifiacion #1 - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesOCAutorizadaGet") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveOC", SqlDbType.Int).Value = CveOC - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener las autorizaciones de Orden de Compra.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - - Public Function GetCambioPasajeros(CveTrama As Integer, CveDispositivo As Integer, CveUsuario As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_GPS_CambioPasajerosGet") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveTrama", SqlDbType.Int).Value = CveTrama - .Add("@CveDispositivo", SqlDbType.Int).Value = CveDispositivo - .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener los reportes programados.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function -#End Region +#Region "N O T I F I C A C I O N E S - P R O C E D I M I E N T O S E S P E C I F I C O S" + Public Function GetUsuariosNotifiacionOCAutorizada(CveOC As Integer) As Boolean 'Notifiacion #1 + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesOCAutorizadaGet") -#Region "N O T I F I C A C I O N E S - U S U A R I O S" - Public Function GetUsuariosNotificacion(CveUsuario As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesUsuarioGet") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - - Public Function AddUsuariosNotificacion(CveUsuario As Integer, CveNotificacion As Integer, Alerta_Correo As Boolean, Alerta_Ventana As Boolean, Alerta_SMS As Boolean, Alerta_App As Boolean, Alerta_Campana As Boolean) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesUsuarioAdd") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario - .Add("@Alerta_Campana", SqlDbType.Bit).Value = Alerta_Campana - .Add("@CveNotificacion", SqlDbType.Int).Value = CveNotificacion - .Add("@Alerta_Correo", SqlDbType.Bit).Value = Alerta_Correo - .Add("@Alerta_Ventana", SqlDbType.Bit).Value = Alerta_Ventana - .Add("@Alerta_SMS", SqlDbType.Bit).Value = Alerta_SMS - .Add("@Alerta_App", SqlDbType.Bit).Value = Alerta_App - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al agregar las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - - Public Function UpdateUsuariosNotificacion(CveNotificacionUsuario As Integer, CveUsuario As Integer, CveDispositivo As Integer, CveNotificacion As Integer, Alerta_Correo As Boolean, Alerta_Ventana As Boolean, - Alerta_SMS As Boolean, Alerta_App As Boolean, Alerta_Campana As Boolean, Estatus As Boolean) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesUsuarioUpdate") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveNotificacionUsuario", SqlDbType.Int).Value = CveNotificacionUsuario - .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario - .Add("@CveDispositivo", SqlDbType.Int).Value = CveDispositivo - .Add("@Alerta_Campana", SqlDbType.Bit).Value = Alerta_Campana - .Add("@CveNotificacion", SqlDbType.Int).Value = CveNotificacion - .Add("@Alerta_Correo", SqlDbType.Bit).Value = Alerta_Correo - .Add("@Alerta_Ventana", SqlDbType.Bit).Value = Alerta_Ventana - .Add("@Alerta_SMS", SqlDbType.Bit).Value = Alerta_SMS - .Add("@Alerta_App", SqlDbType.Bit).Value = Alerta_App - .Add("@Estatus", SqlDbType.Bit).Value = Estatus - - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al actualizar las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno - End Function - - Public Function DeleteNotificacion(CveNotificacion As Integer, CveUsuario As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_NotificacionesUsuarioDelete") - - With SqlAdapter.SelectCommand.Parameters - .Add("@CveNotificacion", SqlDbType.Int).Value = CveNotificacion - .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario - End With - - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al eliminar las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try - - Return Retorno + With SqlAdapter.SelectCommand.Parameters + .Add("@CveOC", SqlDbType.Int).Value = CveOC + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener las autorizaciones de Orden de Compra.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno End Function -#End Region + Public Function GetCambioPasajeros(CveTrama As Integer, CveDispositivo As Integer, CveUsuario As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_GPS_CambioPasajerosGet") -#Region "P D F" - Public Function StreamPDF(RutaReporte As String, DtDatos As DataTable, Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "DataSet1", Optional MR As ReportViewer = Nothing) As Byte() - Dim lrds As New List(Of ReportDataSource) - Dim rds As New ReportDataSource - rds.Name = RDSName - rds.Value = DtDatos - lrds.Add(rds) - Return StreamPDF(RutaReporte, lrds, Parametros, NombreArchivo, Formato, MR) - End Function - Public Function StreamPDF(RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing) As Byte() - 'limpio ReportViwer - Dim sw As New System.Diagnostics.Stopwatch() - sw.Start() - - If IsNothing(MR) Then MR = New ReportViewer - Dim Bytes As Byte() = Nothing - Try - ' MasterReporteador.LocalReport.DataSources.Clear() - For Each RDS As ReportDataSource In DataSource - MR.LocalReport.DataSources.Add(RDS) - Next - MR.LocalReport.ReportPath = RutaReporte - MR.ProcessingMode = ProcessingMode.Local - MR.LocalReport.EnableExternalImages = True - MR.LocalReport.SetParameters(Parametros) - MR.LocalReport.Refresh() - Dim Warnings As Warning() = Nothing - Dim StreamIds As String() = Nothing - Dim MimeType As String = Nothing - Dim Encoding As String = Nothing - Dim Extension As String = Nothing - Bytes = MR.LocalReport.Render(Formato, Nothing, MimeType, Encoding, Extension, StreamIds, Warnings) - Catch ex As Microsoft.Reporting.WebForms.ScriptManagerNotFoundException - GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") - Catch ex As Exception - GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") - End Try - - sw.Stop() - If sw.Elapsed.TotalSeconds > 2 Then - GuardaLog($"Reporte:{RutaReporte} | Tiempo Renderizado Milisegundos: {sw.ElapsedMilliseconds},Total Segundos: {sw.Elapsed.TotalSeconds} ") - End If - - Return Bytes - End Function - Public Function StreamPDFCrystal(RutaReporte As String, DataSource As DataTable, Parametros As List(Of CrystalParametro), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportDocument = Nothing) As Byte() - 'limpio ReportViwer - Dim sw As New System.Diagnostics.Stopwatch() - sw.Start() - If IsNothing(MR) Then MR = New ReportDocument() - Dim Bytes As Byte() = Nothing - Dim formatType As ExportFormatType = ExportFormatType.NoFormat - Try - MR.Load(RutaReporte) - MR.SetDataSource(DataSource) - - For Each item As CrystalParametro In Parametros - MR.SetParameterValue(item.Nombre, item.Valor) - Next - - Select Case Formato - Case "PDF" - formatType = ExportFormatType.PortableDocFormat - 'Format = "Application/pdf" - Case "EXCEL" - formatType = ExportFormatType.Excel - 'Format = "application/ms-excel" - End Select - Dim Stream As IO.Stream = MR.ExportToStream(formatType) - Dim BD As New BinaryReader(MR.ExportToStream(formatType)) - Bytes = BD.ReadBytes(CInt(MR.ExportToStream(formatType).Length)) - BD.Dispose() - Stream.Dispose() - 'Dim Buffer(CInt(Stream.Length)) As Byte - 'Bytes = Buffer - 'MR.ExportToHttpResponse(formatType, Response, True, NombreArchivo) - Catch ex As CrystalReportsException - GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") - 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 - 'GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") - Catch ex As Exception - GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") - 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 - 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") - End Try - sw.Stop() - If sw.Elapsed.TotalSeconds > 10 Then - GuardaLog($"Reporte:{RutaReporte} | Tiempo Renderizado Milisegundos: {sw.ElapsedMilliseconds},Total Segundos: {sw.Elapsed.TotalSeconds} ") - End If - If MR IsNot Nothing Then MR.Dispose() - Return Bytes + With SqlAdapter.SelectCommand.Parameters + .Add("@CveTrama", SqlDbType.Int).Value = CveTrama + .Add("@CveDispositivo", SqlDbType.Int).Value = CveDispositivo + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener los reportes programados.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno End Function -#End Region - Public Function ConsultarDirecciones(Dt As DataTable) As JArray - Dim retorno As JArray = Nothing - Dim posicionesArray = New JArray(From Row As DataRow In Dt - Let index = Dt.Rows().IndexOf(Row) - Select New JObject( - New JProperty("indice", index), - New JProperty("cveTrama", Row("CveTrama").ToString.ToEntero), - New JProperty("lat", Row("Lat").ToString.ToDouble), - New JProperty("lon", Row("Lon").ToString.ToDouble) - )) - - Dim Base64array = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(posicionesArray.ToString())) - - Using wc As New HttpClient() - Try - Dim Url = New Uri(String.Format("{0}nominatim/reverseMultiple.php", ClsPaginas.UrlDirecciones)) - Dim FormStuff = String.Format("formato=json&posiciones={0}", Base64array) - Dim content = New StringContent(FormStuff, Encoding.UTF8, "application/x-www-form-urlencoded") - Dim response = wc.PostAsync(Url, content).Result - Dim result = response.Content.ReadAsStringAsync().Result - retorno = JArray.Parse(result) - response.Dispose() - content = Nothing - Url = Nothing - FormStuff = Nothing - Catch ex As Exception - OnError("Ocurrió un error al obtener las direcciones", ex) - End Try - End Using - Return retorno +#End Region + +#Region "N O T I F I C A C I O N E S - U S U A R I O S" + Public Function GetUsuariosNotificacion(CveUsuario As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesUsuarioGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno End Function - Public Function ConsultarDireccionesIgnicion(Dt As DataTable, StrCveTrama As String, StrLatitud As String, StrLongitud As String) As JArray - Dim retorno As JArray = Nothing - Dim posicionesArray = New JArray(From Row As DataRow In Dt - Let index = Dt.Rows().IndexOf(Row) - Select New JObject( - New JProperty("indice", index), - New JProperty("cveTrama", Row(StrCveTrama).ToString.ToEntero), - New JProperty("lat", Row(StrLatitud).ToString.ToDouble), - New JProperty("lon", Row(StrLongitud).ToString.ToDouble) - )) - - Dim Base64array = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(posicionesArray.ToString())) - - Using wc As New HttpClient() - Try - Dim Url = New Uri(String.Format("{0}nominatim/reverseMultiple.php", ClsPaginas.UrlDirecciones)) - Dim FormStuff = String.Format("formato=json&posiciones={0}", Base64array) - Dim content = New StringContent(FormStuff, Encoding.UTF8, "application/x-www-form-urlencoded") - Dim response = wc.PostAsync(Url, content).Result - Dim result = response.Content.ReadAsStringAsync().Result - retorno = JArray.Parse(result) - response.Dispose() - content = Nothing - Url = Nothing - FormStuff = Nothing - Catch ex As Exception - OnError("Ocurrió un error al obtener las direcciones", ex) - End Try - End Using - Return retorno + Public Function AddUsuariosNotificacion(CveUsuario As Integer, CveNotificacion As Integer, Alerta_Correo As Boolean, Alerta_Ventana As Boolean, Alerta_SMS As Boolean, Alerta_App As Boolean, Alerta_Campana As Boolean) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesUsuarioAdd") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@Alerta_Campana", SqlDbType.Bit).Value = Alerta_Campana + .Add("@CveNotificacion", SqlDbType.Int).Value = CveNotificacion + .Add("@Alerta_Correo", SqlDbType.Bit).Value = Alerta_Correo + .Add("@Alerta_Ventana", SqlDbType.Bit).Value = Alerta_Ventana + .Add("@Alerta_SMS", SqlDbType.Bit).Value = Alerta_SMS + .Add("@Alerta_App", SqlDbType.Bit).Value = Alerta_App + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al agregar las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function UpdateUsuariosNotificacion(CveNotificacionUsuario As Integer, CveUsuario As Integer, CveDispositivo As Integer, CveNotificacion As Integer, Alerta_Correo As Boolean, Alerta_Ventana As Boolean, + Alerta_SMS As Boolean, Alerta_App As Boolean, Alerta_Campana As Boolean, Estatus As Boolean) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesUsuarioUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveNotificacionUsuario", SqlDbType.Int).Value = CveNotificacionUsuario + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@CveDispositivo", SqlDbType.Int).Value = CveDispositivo + .Add("@Alerta_Campana", SqlDbType.Bit).Value = Alerta_Campana + .Add("@CveNotificacion", SqlDbType.Int).Value = CveNotificacion + .Add("@Alerta_Correo", SqlDbType.Bit).Value = Alerta_Correo + .Add("@Alerta_Ventana", SqlDbType.Bit).Value = Alerta_Ventana + .Add("@Alerta_SMS", SqlDbType.Bit).Value = Alerta_SMS + .Add("@Alerta_App", SqlDbType.Bit).Value = Alerta_App + .Add("@Estatus", SqlDbType.Bit).Value = Estatus + + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al actualizar las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function DeleteNotificacion(CveNotificacion As Integer, CveUsuario As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_NotificacionesUsuarioDelete") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveNotificacion", SqlDbType.Int).Value = CveNotificacion + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al eliminar las notificaciones.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + +#End Region + +#Region "P D F" + Public Function StreamPDF(RutaReporte As String, DtDatos As DataTable, Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "DataSet1", Optional MR As ReportViewer = Nothing) As Byte() + Dim lrds As New List(Of ReportDataSource) + Dim rds As New ReportDataSource + rds.Name = RDSName + rds.Value = DtDatos + lrds.Add(rds) + Return StreamPDF(RutaReporte, lrds, Parametros, NombreArchivo, Formato, MR) + End Function + Public Function StreamPDF(RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing) As Byte() + 'limpio ReportViwer + Dim sw As New System.Diagnostics.Stopwatch() + sw.Start() + + If IsNothing(MR) Then MR = New ReportViewer + Dim Bytes As Byte() = Nothing + Try + ' MasterReporteador.LocalReport.DataSources.Clear() + For Each RDS As ReportDataSource In DataSource + MR.LocalReport.DataSources.Add(RDS) + Next + MR.LocalReport.ReportPath = RutaReporte + MR.ProcessingMode = ProcessingMode.Local + MR.LocalReport.EnableExternalImages = True + MR.LocalReport.SetParameters(Parametros) + MR.LocalReport.Refresh() + Dim Warnings As Warning() = Nothing + Dim StreamIds As String() = Nothing + Dim MimeType As String = Nothing + Dim Encoding As String = Nothing + Dim Extension As String = Nothing + Bytes = MR.LocalReport.Render(Formato, Nothing, MimeType, Encoding, Extension, StreamIds, Warnings) + Catch ex As Microsoft.Reporting.WebForms.ScriptManagerNotFoundException + GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + Catch ex As Exception + GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + End Try + + sw.Stop() + If sw.Elapsed.TotalSeconds > 2 Then + GuardaLog($"Reporte:{RutaReporte} | Tiempo Renderizado Milisegundos: {sw.ElapsedMilliseconds},Total Segundos: {sw.Elapsed.TotalSeconds} ") + End If + + Return Bytes + End Function + Public Function StreamPDFCrystal(RutaReporte As String, DataSource As DataTable, Parametros As List(Of CrystalParametro), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportDocument = Nothing) As Byte() + 'limpio ReportViwer + Dim sw As New System.Diagnostics.Stopwatch() + sw.Start() + If IsNothing(MR) Then MR = New ReportDocument() + Dim Bytes As Byte() = Nothing + Dim formatType As ExportFormatType = ExportFormatType.NoFormat + Try + MR.Load(RutaReporte) + MR.SetDataSource(DataSource) + + For Each item As CrystalParametro In Parametros + MR.SetParameterValue(item.Nombre, item.Valor) + Next + + Select Case Formato + Case "PDF" + formatType = ExportFormatType.PortableDocFormat + 'Format = "Application/pdf" + Case "EXCEL" + formatType = ExportFormatType.Excel + 'Format = "application/ms-excel" + End Select + Dim Stream As IO.Stream = MR.ExportToStream(formatType) + Dim BD As New BinaryReader(MR.ExportToStream(formatType)) + Bytes = BD.ReadBytes(CInt(MR.ExportToStream(formatType).Length)) + BD.Dispose() + Stream.Dispose() + 'Dim Buffer(CInt(Stream.Length)) As Byte + 'Bytes = Buffer + 'MR.ExportToHttpResponse(formatType, Response, True, NombreArchivo) + Catch ex As CrystalReportsException + GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + 'GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + Catch ex As Exception + GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + End Try + sw.Stop() + If sw.Elapsed.TotalSeconds > 10 Then + GuardaLog($"Reporte:{RutaReporte} | Tiempo Renderizado Milisegundos: {sw.ElapsedMilliseconds},Total Segundos: {sw.Elapsed.TotalSeconds} ") + End If + If MR IsNot Nothing Then MR.Dispose() + Return Bytes + End Function +#End Region + Public Function ConsultarDirecciones(Dt As DataTable) As JArray + Dim retorno As JArray = Nothing + Dim posicionesArray = New JArray(From Row As DataRow In Dt + Let index = Dt.Rows().IndexOf(Row) + Select New JObject( + New JProperty("indice", index), + New JProperty("cveTrama", Row("CveTrama").ToString.ToEntero), + New JProperty("lat", Row("Lat").ToString.ToDouble), + New JProperty("lon", Row("Lon").ToString.ToDouble) + )) + + Dim Base64array = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(posicionesArray.ToString())) + + Using wc As New HttpClient() + Try + Dim Url = New Uri(String.Format("{0}nominatim/reverseMultiple.php", ClsPaginas.UrlDirecciones)) + Dim FormStuff = String.Format("formato=json&posiciones={0}", Base64array) + Dim content = New StringContent(FormStuff, Encoding.UTF8, "application/x-www-form-urlencoded") + Dim response = wc.PostAsync(Url, content).Result + Dim result = response.Content.ReadAsStringAsync().Result + retorno = JArray.Parse(result) + response.Dispose() + content = Nothing + Url = Nothing + FormStuff = Nothing + Catch ex As Exception + OnError("Ocurrió un error al obtener las direcciones", ex) + End Try + End Using + Return retorno + End Function + + Public Function ConsultarDireccionesIgnicion(Dt As DataTable, StrCveTrama As String, StrLatitud As String, StrLongitud As String) As JArray + Dim retorno As JArray = Nothing + Dim posicionesArray = New JArray(From Row As DataRow In Dt + Let index = Dt.Rows().IndexOf(Row) + Select New JObject( + New JProperty("indice", index), + New JProperty("cveTrama", Row(StrCveTrama).ToString.ToEntero), + New JProperty("lat", Row(StrLatitud).ToString.ToDouble), + New JProperty("lon", Row(StrLongitud).ToString.ToDouble) + )) + + Dim Base64array = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(posicionesArray.ToString())) + + Using wc As New HttpClient() + Try + Dim Url = New Uri(String.Format("{0}nominatim/reverseMultiple.php", ClsPaginas.UrlDirecciones)) + Dim FormStuff = String.Format("formato=json&posiciones={0}", Base64array) + Dim content = New StringContent(FormStuff, Encoding.UTF8, "application/x-www-form-urlencoded") + Dim response = wc.PostAsync(Url, content).Result + Dim result = response.Content.ReadAsStringAsync().Result + retorno = JArray.Parse(result) + response.Dispose() + content = Nothing + Url = Nothing + FormStuff = Nothing + Catch ex As Exception + OnError("Ocurrió un error al obtener las direcciones", ex) + End Try + End Using + Return retorno + End Function + +#Region "Notifica2.0" + ''' + ''' Obtiene mensajes de notificaciones de usuarios, por defecto obtine los ultimos 20. + ''' + ''' Clave del usuario destinatario. + ''' Clave de la empresa. + ''' determina si retorna todos los mensanjes o solo los ultimos 20. + ''' Devuelve True si la operación fue exitosa, de lo contrario False. + Public Function NotificacionesUsuariosMensajesGet(cveusuario As Int32, cveEmpresa As Int32, mostrarTodos As Boolean, verVistos As Boolean) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_SIGNotificacionesUsuariosMensajesGet", CommandType.StoredProcedure) + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveusuarioPara", SqlDbType.Int).Value = cveusuario + .Add("@CveEmpresa", SqlDbType.Int).Value = cveEmpresa + .Add("@MostrarTodos", SqlDbType.Bit).Value = mostrarTodos + .Add("@verVistos", SqlDbType.Bit).Value = verVistos + End With + + Try + SqlAdapter.Fill(Data) + retorno = True + Catch Ex1 As SqlException + Me.OnError("Ocurrió un error al intentar obtener Notificación.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + Catch ex As Exception + OnError("Ocurrió un error al intentar obtener Notificación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + Return retorno End Function + ''' + ''' Obtiene notificaciones de usuarios. + ''' + ''' Clave del usuario destinatario. + ''' Clave de la empresa. + ''' determina si retorna todos los mensanjes o solo los ultimos 20. + ''' Devuelve True si la operación fue exitosa, de lo contrario False. + Public Function NotificacionesUsuariosGet(cveusuario As Int32, cveEmpresa As Int32) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_SIGNotificacionesUsuariosGet", CommandType.StoredProcedure) + + With SqlAdapter.SelectCommand.Parameters + .Add("@Cveusuario", SqlDbType.Int).Value = cveusuario + .Add("@CveEmpresa", SqlDbType.Int).Value = cveEmpresa + End With + + Try + SqlAdapter.Fill(Data) + retorno = True + Catch Ex1 As SqlException + Me.OnError("Ocurrió un error al intentar obtener Notificación.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + Catch ex As Exception + OnError("Ocurrió un error al intentar obtener Notificación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + Return retorno + End Function + + Public Function NotificacionesUsuariosAdd(cveOrigen As Int32, cveusuarioPara As Int32, cveUsuarioDe As Int32, notificaCorreo As Boolean, notificaToast As Boolean, notificaCampana As Boolean, + icono As String, asunto As String, mensaje As String, cveEmpresa As Int32) As Boolean + Dim notificacion As String = "1" + NotificacionesUsuariosMensajesAdd(cveOrigen, cveusuarioPara, cveUsuarioDe, notificaCorreo, notificaToast, notificaCampana, icono, asunto, mensaje, cveEmpresa) + If (notificaCampana) Then + If (Not IsNothing(Data) AndAlso Data.Rows.Count > 0) Then + notificacion = Data(0)("Notificaciones").ToString() + End If + Dim _hubContext As IHubContext = GlobalHost.ConnectionManager.GetHubContext(Of Notificaciones)() + _hubContext.Clients.Client(Notificaciones.UsuariosConexiones(cveusuarioPara)).ContadorCampana(notificacion) + ClsPaginas.GlobalDTNotificacionesUsuarios(-1, cveEmpresa) = Nothing + End If + + End Function + Private Function NotificacionesUsuariosMensajesAdd(cveOrigen As Int32, cveusuarioPara As Int32, cveUsuarioDe As Int32, notificaCorreo As Boolean, notificaToast As Boolean, notificaCampana As Boolean, + icono As String, asunto As String, mensaje As String, cveEmpresa As Int32) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_SIGNotificacionesUsuariosMensajesAdd", CommandType.StoredProcedure) + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveOrigen", SqlDbType.Int).Value = cveOrigen + .Add("@CveusuarioPara", SqlDbType.Int).Value = cveusuarioPara + .Add("@CveUsuarioDe", SqlDbType.Int).Value = cveUsuarioDe + .Add("@NotificaCorreo", SqlDbType.Bit).Value = notificaCorreo + .Add("@NotificaToast", SqlDbType.Bit).Value = notificaToast + .Add("@NotificaCampana", SqlDbType.Bit).Value = notificaCampana + .Add("@Icono", SqlDbType.VarChar).Value = icono + .Add("@Asunto", SqlDbType.VarChar).Value = asunto + .Add("@Mensaje", SqlDbType.VarChar).Value = mensaje + .Add("@CveEmpresa", SqlDbType.Int).Value = cveEmpresa + End With + Try + SqlAdapter.Fill(Data) + retorno = True + Catch Ex1 As SqlException + Me.OnError("Ocurrió un error al intentar agregar Notificación.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + Catch ex As Exception + OnError("Ocurrió un error al intentar agregar Notificación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + Return retorno + Return retorno + End Function +#End Region -#Region " IDisposable Support " +#Region " IDisposable Support " ' IDisposable - Protected Overridable Sub Dispose(disposing As Boolean) - If Not Me.disposedValue Then + Protected Overridable Sub Dispose(disposing As Boolean) + If Not Me.disposedValue Then If disposing Then - If Not DTNotificacionesGPS Is Nothing Then DTNotificacionesGPS.Dispose() : DTNotificacionesGPS = Nothing - If Not DTNotificacionesERP Is Nothing Then DTNotificacionesERP.Dispose() : DTNotificacionesERP = Nothing - If Not DTNotificacionesArmadas Is Nothing Then DTNotificacionesArmadas.Dispose() : DTNotificacionesArmadas = Nothing - If Not DTReportesProgramados Is Nothing Then DTReportesProgramados.Dispose() : DTReportesProgramados = Nothing + If Not DTNotificacionesGPS Is Nothing Then DTNotificacionesGPS.Dispose() : DTNotificacionesGPS = Nothing + If Not DTNotificacionesERP Is Nothing Then DTNotificacionesERP.Dispose() : DTNotificacionesERP = Nothing + If Not DTNotificacionesArmadas Is Nothing Then DTNotificacionesArmadas.Dispose() : DTNotificacionesArmadas = Nothing + If Not DTReportesProgramados Is Nothing Then DTReportesProgramados.Dispose() : DTReportesProgramados = Nothing NotificacionesBitacora = "" @@ -2346,23 +2446,23 @@ Public Class ClsSisNotificaciones If Not SqlAdapter Is Nothing Then SqlAdapter.Dispose() : SqlAdapter = Nothing If Not SqlCommand Is Nothing Then SqlCommand.Dispose() : SqlCommand = Nothing If SqlConexion.State <> ConnectionState.Closed Then SqlConexion.Close() - If Not SqlConexion Is Nothing Then SqlConexion.Dispose() : SqlConexion = Nothing - - - End If - - ' TODO: Liberar su propio estado (objetos no administrados). - ' TODO: Establecer campos grandes como Null. - End If - Me.disposedValue = True - End Sub - - ' Visual Basic agregó este código para implementar correctamente el modelo descartable. - Public Sub Dispose() Implements IDisposable.Dispose - ' No cambie este código. Coloque el código de limpieza en Dispose (ByVal que se dispone como Boolean). - ConexionClose() - Dispose(True) - GC.SuppressFinalize(Me) + If Not SqlConexion Is Nothing Then SqlConexion.Dispose() : SqlConexion = Nothing + + + End If + + ' TODO: Liberar su propio estado (objetos no administrados). + ' TODO: Establecer campos grandes como Null. + End If + Me.disposedValue = True End Sub -#End Region -End Class + + ' Visual Basic agregó este código para implementar correctamente el modelo descartable. + Public Sub Dispose() Implements IDisposable.Dispose + ' No cambie este código. Coloque el código de limpieza en Dispose (ByVal que se dispone como Boolean). + ConexionClose() + Dispose(True) + GC.SuppressFinalize(Me) + End Sub +#End Region +End Class diff --git a/App_Code/NotificacionesSQLWatcher.vb b/App_Code/NotificacionesSQLWatcher.vb index 327dbc656..c77d2dbf8 100644 --- a/App_Code/NotificacionesSQLWatcher.vb +++ b/App_Code/NotificacionesSQLWatcher.vb @@ -28,7 +28,7 @@ Public Class NotificacionesSQLWatcher Using connection As New SqlConnection(rutadb) ' Consulta para detectar cambios recientes Dim command As New SqlCommand( - "SELECT CveUsuario, Notificaciones, Fecha FROM NotificacionesUsuarios", connection) + "SELECT CveUsuario, Notificaciones, Fecha FROM SIG_NotificacionesUsuarios", connection) ' Asociar dependencia SQL a la consulta Dim dependency As New SqlDependency(command) @@ -51,7 +51,7 @@ Public Class NotificacionesSQLWatcher ' Método para enviar notificaciones solo de los registros actualizados Private Sub SendNotifications() Using connection As New SqlConnection(rutadb) - Dim query As String = "SELECT CveUsuario, Notificaciones, Fecha FROM NotificacionesUsuarios WHERE Fecha > DATEADD(MINUTE, -1, GETDATE())" + Dim query As String = "SELECT CveUsuario, Notificaciones, Fecha FROM SIG_NotificacionesUsuarios WHERE Fecha > DATEADD(MINUTE, -1, GETDATE())" Dim command As New SqlCommand(query, connection) connection.Open() diff --git a/Global.asax b/Global.asax index a07e05b26..cbc4a5205 100644 --- a/Global.asax +++ b/Global.asax @@ -49,9 +49,9 @@ GlobalConfiguration.Configure(AddressOf WebApiConfig.Register) GlobalConfiguration.Configuration.EnsureInitialized() - - Dim watcher As New NotificacionesSQLWatcher() - watcher.StartWatching() + 'se comenta ya que se envbia directo desde el metodo NotificacionesUsuariosAdd en clssisnotificaciones + 'Dim watcher As New NotificacionesSQLWatcher() + 'watcher.StartWatching() End Sub diff --git a/Site.master b/Site.master index 7fd217389..b85df0783 100644 --- a/Site.master +++ b/Site.master @@ -20,12 +20,12 @@ <%: Scripts.Render("~/bundles/modernizr") %> <%: Styles.Render("~/Content/AjaxControlToolkit/Styles/Bundle") %> - + - + - + <%-- --%> @@ -139,13 +139,18 @@ <%= countNotificaciones %> @@ -347,8 +352,8 @@
-
-
- @@ -646,7 +651,7 @@
- + <%--