Option Strict On Imports Extensiones Imports System.Data Imports Microsoft.Reporting.WebForms Imports GemBox.Spreadsheet Partial Class GPS_RepPuntosDeInteres Inherits ClsPaginas #Region "P R O P I E D A D E S " Private Property DispositivosLista As List(Of String) Get Return If(IsNothing(ViewState("DispositivosLista")), Nothing, CType(ViewState("DispositivosLista"), List(Of String))) End Get Set(value As List(Of String)) ViewState("DispositivosLista") = value End Set End Property Private Property DtDatosReporte As DataTable Get Return If(IsNothing(ViewState("DtDatosReporte")), Nothing, CType(ViewState("DtDatosReporte"), DataTable)) End Get Set(value As DataTable) ViewState("DtDatosReporte") = value End Set End Property Private Property DtVisitas As DataTable Get Return If(IsNothing(ViewState("DtVisitas")), Nothing, CType(ViewState("DtVisitas"), DataTable)) End Get Set(value As DataTable) ViewState("DtVisitas") = value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Not Page.IsPostBack Then CargaDatos() End If End Sub Private Sub CargaDatos() DtDatosReporte = Nothing txtFechaF.Text = Now.ToString("dd/MM/yyyy") txtFechaI.Text = Now.AddDays(-7).ToString("dd/MM/yyyy") CargaDispositivos() Dim ObjGPS As New ClsGPS If ObjGPS.PuntoDeInteresGet(-1, UsuarioActual.CveCliente, 1, -1) Then GvPuntos.DataSource = ObjGPS.DtResultados Else GvPuntos.DataSource = Nothing End If ObjGPS.Dispose() GvPuntos.DataBind() End Sub Private Sub CargaDispositivos() GvDispositivos.DataSource = GlobalDTDispositivosUsuarios(UsuarioActual.CveCliente, UsuarioActual.CveUsuario).FiltraParametros("Estatus = 1 ") GvDispositivos.DataBind() End Sub Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs) Handles BtnConsultar.Click Dim sb As New StringBuilder DispositivosLista = New List(Of String) RegistraScript("DeleteMarkers();", "0") For Each row As GridViewRow In GvDispositivos.Rows If row.FCCheckBox("chkDis").Checked Then sb.Append($"{row.DataKey("CveDispositivo").ToString},") DispositivosLista.Add(row.DataKey("CveDispositivo").ToString) End If Next ReportePuntos(sb.ToString) RegistraScript("$('#dvConsulta').modal('hide');", "00") End Sub Private Sub ReportePuntos(Dispositivos As String) 'LIMPIAR REPORTE If DtDatosReporte IsNot Nothing Then DtDatosReporte.Dispose() DtDatosReporte = Nothing End If Dim FechaI, FechaF As Date Dim SBBody As New StringBuilder Dim CoordsPoligono = "" Dim Coords = "" Dim Titulo = "" Dim Info = "" Dim COUNT = 0 Dim GeoCercas = "" Dim Color = "" FechaI = If(txtFechaI.Text.Trim = "", MinFecha, txtFechaI.Text.Trim.ToDate) FechaF = If(txtFechaF.Text.Trim = "", MaxFecha, txtFechaF.Text.Trim.ToDate) Dim ObjGPS As New ClsGPS Try For Each row As GridViewRow In GvPuntos.Rows SBBody.Clear() If row.FCCheckBox("chkGR").Checked Then If ObjGPS.RepPuntosGet(row.DataKey("CvePuntoDeInteres").ToEntero, Dispositivos, txtFechaI.Text.ToDateTime, txtFechaF.Text.ToDateTime, UsuarioActual.CveCliente) Then If DtDatosReporte IsNot Nothing Then DtDatosReporte.Merge(ObjGPS.DtResultados) Else DtDatosReporte = ObjGPS.DtResultados.Copy() End If Coords = SQLToGmaps(row.DataKey("Punto").ToString, "POINT") SBBody.Append($"
") SBBody.Append($"
Punto: {row.DataKey("PuntoDeInteres")}
") If ObjGPS.DtResultados.Rows.Count > 0 Then Color = "#26C281" SBBody.Append($"
") For Each Cve As String In DispositivosLista If ObjGPS.DtResultados.FiltraParametros($"CveDispositivo = {Cve} ").Rows.Count > 0 Then SBBody.Append($"") SBBody.Append($"") End If Next SBBody.Append($"
{ObjGPS.DtResultados.FiltroPrimeroValor("Vehiculo", $"CveDispositivo = {Cve}")}: {ObjGPS.DtResultados.FiltroPrimeroValor("Visitas", $"CveDispositivo = {Cve}")} visitas
Última Visita: {ObjGPS.DtResultados.FiltroPrimeroValor("UltimaVisita", $"CveDispositivo = {Cve}")}
") Else Color = "#e82929" SBBody.Append($"Este punto de interés no fue visitado en las fechas seleccionadas.") End If SBBody.Append($"
") RegistraScript($"CreaCirculo({Coords},'{Color}');CreaMarcador({Coords},'{row.DataKey("PuntoDeInteres")}','{SBBody.ToString}');", row.DataKey("CvePuntoDeInteres")) End If End If Next GvBarra.DataSource = DtDatosReporte GvBarra.DataBind() Catch ex As Exception OnError("Ocurrió un error al consultar los puntos de interes", ex) End Try ObjGPS.Dispose() GvBarra.DataBind() UPGV.Update() End Sub 'If GPS.GeoReferenciasEntradasSalidas(GVRow.DataKey("CveDispositivo").ToString.ToEntero, row.DataKey("CveGeoReferencia").ToString.ToEntero, FechaI, FechaF) Then ' SBBody.Append($"
") ' SBBody.Append($"") ' SBBody.Append($"") ' SBBody.Append($"") ' If GPS.DtResultados.Rows.Count > 0 Then ' CoordsPoligono = SQLToGmaps(row.DataKey("Coordenadas").ToString, "POLYGON") ' For Each rr As DataRow In GPS.DtResultados.Rows ' Coords = SQLToGmaps(rr("Posicion").ToString, "POINT") ' SBBody.Clear() ' SBBody.Append($"
") ' SBBody.Append($"

{rr("Evento")}

") ' SBBody.Append($"
Fecha : {rr("FechaTrama").ToString}
Conductor : {rr("Conductor").ToString}
Serie Vehículo: {GVRow.DataKey("SerieVehiculo").ToString}
") ' Info = SBBody.ToString ' RegistraScript($"CreaMarcador({Coords},'{GVRow.DataKey("SerieVehiculo").ToString}', '{Info}');", $"{rr("CveDispositivoEvento").ToString}{COUNT.ToString}") ' COUNT += 1 ' Next ' RegistraScript($"creaPoligono([{CoordsPoligono}], '{row.DataKey("Color").ToString}')", $"{row.DataKey("CveGeoReferencia").ToString.ToEntero}{COUNT.ToString}") ' Else ' GeoCercas = $"{GeoCercas} {row.DataKey("GeoReferencia").ToString}," ' End If ' End If Private Function SQLToGmaps(CoordsSQL As String, Tipo As String) As String Dim CoordsPoligono As String = CoordsSQL.Replace($"{Tipo}", "").Replace(")", "").Replace("(", "") Dim CoordsPuntos() As String = CoordsPoligono.Split(","c) Dim Var As String = "" For Each coordenada As String In CoordsPuntos If coordenada Is CoordsPuntos.Last Then Dim latlng() As String = coordenada.Trim.Split(" "c) Var = $"{Var}{{lat: {latlng(1)}, lng: {latlng(0)} }}" Else Dim latlng() As String = coordenada.Trim.Split(" "c) Var = $"{Var}{{lat: {latlng(1)}, lng: {latlng(0)} }}," End If Next Return Var End Function Protected Sub BtnCargarGV_Click(sender As Object, e As EventArgs) Handles BtnCargarGV.Click DtVisitas = Nothing Dim ObjGPS As New ClsGPS Try Dim PuntoInteres As String = "", Vehiculo As String = "" If ObjGPS.PuntoDeInteresGet(HdnPunto.Value.ToEntero, UsuarioActual.CveCliente, 1, -1) Then PuntoInteres = ObjGPS.DtResultados.FiltroPrimeroValor("PuntoDeInteres") End If Vehiculo = GlobalDTDispositivos(UsuarioActual.CveCliente).FiltroPrimeroValor("NoEconomico", $"CveDispositivo={HdnDispositivo.Value.ToEntero}") LblPU.Text = PuntoInteres LblUnidad.Text = Vehiculo If ObjGPS.RepPuntosDetalleGet(HdnPunto.Value.ToEntero, HdnDispositivo.Value.ToEntero, txtFechaI.Text.ToDateTime, txtFechaF.Text.ToDateTime, UsuarioActual.CveCliente) Then DtVisitas = ObjGPS.DtResultados.FiltraParametros("CveEvento = 106") GVHistorico.DataSource = DtVisitas Else GVHistorico.DataSource = Nothing End If Catch ex As Exception OnError("Ocurrió un error al cargar las visitas", ex) End Try ObjGPS.Dispose() GVHistorico.DataBind() UpdatePanel3.Update() RegistraScript("$('#dvHistorico').modal()") End Sub 'Protected Sub GvBarra_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvBarra.RowDataBound ' If e.Row.RowType = DataControlRowType.DataRow Then ' Dim RowID As String = $"row{e.Row.RowIndex}" ' e.Row.Attributes("id") = RowID ' Dim IndexGvBarra As Integer = If(String.IsNullOrEmpty(HdnIndexGvBarra.Value), -1, HdnIndexGvBarra.Value.ToEntero) ' RegistraScript($"GetDireccionesGV({e.Row.DBCampo("Posicion").ToString}, {e.Row.RowIndex}, 1);", $"{RowID}") ' End If 'End Sub Protected Sub btnImprimir_Click(sender As Object, e As EventArgs) Dim Btn As Button = CType(sender, Button) Dim Format = Btn.CommandArgument EnviarReporteProgramado(Format) End Sub Public Sub EnviarReporteProgramado(Format As String) If Format = "EXCEL" Then Dim filtros As String = $"Fecha Inicio: {txtFechaI.Text}, Fecha Fin: {txtFechaF.Text}" Dim DtImprimir As DataTable = DtDatosReporte.Copy() DtImprimir.Columns.Remove(DtImprimir.Columns("CveDispositivo")) DtImprimir.Columns("PuntoDeInteres").SetOrdinal(0) DtImprimir.Columns("Vehiculo").SetOrdinal(1) DtImprimir.Columns("UltimaVisita").SetOrdinal(2) DtImprimir.Columns("Visitas").SetOrdinal(3) DtImprimir.Columns("PuntoDeInteres").ColumnName = "Punto de Interés" DtImprimir.Columns("Vehiculo").ColumnName = "Vehículo" DtImprimir.Columns("UltimaVisita").ColumnName = "Última Visita" ImprimirExcelG(DtImprimir, "ReportePuntosInteres.xlsx", "Reporte de Puntos de Interés", filtros, NombreHoja:="ReportePuntosInteres") Else Dim RutaReporte = "Empresas/Grales/ReportesProgramados/RPTPuntosInteres.rdlc" Dim NombreReporte = "ReportePuntosInteres" Try Dim Nombre As String = "" Dim ObjClientes As New ClsClientes If ObjClientes.GetClientes(UsuarioActual.CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, -1, Estatus:=-1) Then Nombre = ObjClientes.DtResultados.FiltroPrimeroValor("Nombre") ObjClientes.Dispose() Dim RptParametro As New List(Of ReportParameter) RptParametro.Add(New ReportParameter("FechaInicio", txtFechaI.Text)) RptParametro.Add(New ReportParameter("FechaFin", txtFechaF.Text)) RptParametro.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario)) RptParametro.Add(New ReportParameter("FechaImpresion", DateTime.Now.ToShortDateString)) RptParametro.Add(New ReportParameter("Cliente", Nombre)) 'Dim MR = New ReportViewer 'MR.LocalReport.EnableHyperlinks = True 'MR.HyperlinkTarget = "_blank" Dim retorno = StreamPDF(RutaReporte, DtDatosReporte, RptParametro, $"{NombreReporte}{Date.Now.ToShortDateString}", Format, MR:=Nothing, RDSName:="DsOC") ImprimirbytesPDF(retorno, $"{NombreReporte}{Date.Now.ToShortDateString}", Format) Catch ex As Exception GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) End Try End If End Sub Protected Sub LnkImprimirEXCELVisita_Click(sender As Object, e As EventArgs) Dim filtros As String = $"Punto de Interés: {LblPU.Text}, Vehículo: {LblUnidad.Text}" Dim DtImprimir As DataTable = DtVisitas.Copy() DtImprimir.Columns.Remove(DtImprimir.Columns("CveDispositivoEvento")) DtImprimir.Columns.Remove(DtImprimir.Columns("CveEvento")) DtImprimir.Columns.Remove(DtImprimir.Columns("FechaEvento")) DtImprimir.Columns("FechaEntrada").ColumnName = "Fecha Visita" DtImprimir.Columns("Duracion").ColumnName = "Duración (min)" ImprimirExcelG(DtImprimir, "HistorialVistas.xlsx", "Historial de vistas", filtros, NombreHoja:="Historial") End Sub Private Sub ImprimirExcelG(DtDatos As DataTable, Archivo As String, Titulo As String, Filtros As String, Optional NombreHoja As String = "Hoja1") SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) Dim excel As ExcelFile = New ExcelFile Dim TotalRowHeader As Integer = 8 Dim TotalRowFooter As Integer = 2 Dim item = excel.Worksheets.Add(NombreHoja) item.InsertDataTable(DtDatos, 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 Dim worksheet = excel.Worksheets(0) worksheet.Rows.InsertEmpty(0, TotalRowHeader) Dim celdasConTexto = worksheet.GetUsedCellRange(True) celdasConTexto.Style.Font.Name = "Calibri Light" Dim RangoNombreEmpresa = worksheet.Cells.GetSubrangeAbsolute(1, celdasConTexto.FirstColumnIndex, 1, celdasConTexto.LastColumnIndex) RangoNombreEmpresa.Merged = True Dim Nombre As String = "" Dim ObjClientes As New ClsClientes If ObjClientes.GetClientes(UsuarioActual.CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, -1, Estatus:=-1) Then Nombre = ObjClientes.DtResultados.FiltroPrimeroValor("Nombre") ObjClientes.Dispose() RangoNombreEmpresa.Value = Nombre RangoNombreEmpresa.Style.Font.Size = 18 * 20 RangoNombreEmpresa.Style.Font.Name = "Calibri Light" RangoNombreEmpresa.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center RangoNombreEmpresa.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center Dim RangoTitulo = worksheet.Cells.GetSubrangeAbsolute(3, celdasConTexto.FirstColumnIndex, 3, celdasConTexto.LastColumnIndex) RangoTitulo.Merged = True RangoTitulo.Value = Titulo RangoTitulo.Style.Font.Size = 20 * 20 RangoTitulo.Style.Font.Name = "Calibri Light" RangoTitulo.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center RangoTitulo.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center 'If FechaIMes.Trim.Length > 0 And FechaFMes.Trim.Length > 0 Then ' Dim RangoFechas = worksheet.Cells.GetSubrangeAbsolute(4, celdasConTexto.FirstColumnIndex, 4, celdasConTexto.LastColumnIndex) ' RangoFechas.Merged = True ' RangoFechas.Value = $"Fechas: {FechaIMes} a {FechaFMes}" ' RangoFechas.Style.Font.Size = 15 * 20 ' RangoFechas.Style.Font.Name = "Calibri Light" ' RangoFechas.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center ' RangoFechas.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center 'End If 'If SubProyecto.Length > 0 Then ' Dim RangoSubProyecto = worksheet.Cells.GetSubrangeAbsolute(5, celdasConTexto.FirstColumnIndex, 5, celdasConTexto.LastColumnIndex) ' RangoSubProyecto.Merged = True ' RangoSubProyecto.Value = SubProyecto ' RangoSubProyecto.Style.Font.Size = 20 * 20 ' RangoSubProyecto.Style.Font.Name = "Calibri Light" ' RangoSubProyecto.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center ' RangoSubProyecto.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center 'End If If Not String.IsNullOrEmpty(Filtros) Then Dim RangoDatoTituloExtra = worksheet.Cells.GetSubrangeAbsolute(6, celdasConTexto.FirstColumnIndex, 6, celdasConTexto.LastColumnIndex) RangoDatoTituloExtra.Merged = True RangoDatoTituloExtra.Value = Filtros RangoDatoTituloExtra.Style.Font.Size = 15 * 20 RangoDatoTituloExtra.Style.Font.Name = "Calibri Light" RangoDatoTituloExtra.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center RangoDatoTituloExtra.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center End If For i = celdasConTexto.FirstColumnIndex To celdasConTexto.LastColumnIndex worksheet.Rows(8).Cells(i).Style.Font.Size = 12 * 20 worksheet.Rows(8).Cells(i).Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center worksheet.Rows(8).Cells(i).Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center worksheet.Rows(8).Cells(i).Style.FillPattern.SetPattern(GemBox.Spreadsheet.FillPatternStyle.Solid, GemBox.Spreadsheet.SpreadsheetColor.FromArgb(75, 119, 190), GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255)) worksheet.Rows(8).Cells(i).Style.Font.Color = GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255) If i > 0 Then Try worksheet.Columns(i).AutoFit(1) Catch ex As Exception End Try End If Next Dim IndexEndTable As Integer = DtDatos.Rows.Count + TotalRowHeader + TotalRowFooter worksheet.Rows(IndexEndTable).Cells(0).Value = "Usuario Imprimió" worksheet.Rows(IndexEndTable + 1).Cells(0).Value = UsuarioActual.Nombre worksheet.Rows(IndexEndTable).Cells(2).Value = "Fecha Impresión" worksheet.Rows(IndexEndTable + 1).Cells(2).Value = DateTime.Now.ToString("dd/MM/yyyy") 'Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) 'If Imagen.Exists Then ' Dim Ruta As String = String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta) ' Using sr As New StreamReader(Ruta) ' Dim ms As New MemoryStream() ' sr.BaseStream.CopyTo(ms) ' worksheet.Pictures.Add(ms, ExcelPictureFormat.Png, "A1", 100, 100, LengthUnit.Pixel) ' End Using 'End If For I = celdasConTexto.FirstColumnIndex To celdasConTexto.LastColumnIndex If I > 0 Then 'If Divisor = 1 Then ' worksheet.Columns(I + 1).Style.NumberFormat = "#,##0.00" 'Else ' worksheet.Columns(I + 1).Style.NumberFormat = "#,##" 'End If Try worksheet.Columns(I).AutoFit(1) Catch ex As Exception End Try End If Next excel.Save(Me.Response, Archivo, SaveOptions.XlsxDefault) End Sub End Class