diff --git a/Ashx/SIGPolizaVirtual.ashx b/Ashx/SIGPolizaVirtual.ashx
index 1ea9302b0..5119765e9 100644
--- a/Ashx/SIGPolizaVirtual.ashx
+++ b/Ashx/SIGPolizaVirtual.ashx
@@ -3,6 +3,7 @@
Imports Fluent
Imports System
Imports System.Web
+Imports System.Net
Imports System.Net.Http
Imports System.Web.Http
Imports System.Data
@@ -11,6 +12,9 @@ Imports Newtonsoft.Json.Linq
Imports Extensiones
Imports System.IO
Imports System.Runtime.CompilerServices
+Imports System.Xml
+Imports System.Xml.Serialization
+Imports System.Linq
Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
@@ -56,11 +60,19 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
#End Region
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
- context.Response.ContentType = "application/json"
+ context.Response.ContentType = "application/xml"
Dim UsuarioActual = ValidaUsuarioSistema(1, 100)
'Dim ObjFactura As New Modelos.Factura(usuario, 898028, 140)
+ CancelarFacturaPADE(context, UsuarioActual)
+
+
+ End Sub
+
+
+ Private Sub TimbrarFacturaPADE(ByVal context As HttpContext, UsuarioActual As Usuario)
+
Dim UsuarioServicio As String = "rene.molina@adssistemas.mx"
Dim ClaveServicio As String = "Facturacion2021#"
@@ -125,11 +137,189 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
New JProperty("opciones", New String(0) {""})
)
- Dim resp = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado/timbrarConCSD", payload.ToString(), TokenAuth)
+ Dim Respuesta = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado/timbrarConCSD", payload.ToString(), TokenAuth)
- context.Response.Write(resp)
+ If Not String.IsNullOrEmpty(Respuesta) Then
+ Dim result As PADEServicioTimbradoResp = Nothing
+ Dim serializer As XmlSerializer = New XmlSerializer(GetType(PADEServicioTimbradoResp))
+
+ Try
+ Using reader As TextReader = New StringReader(Respuesta)
+ result = CType(serializer.Deserialize(reader), PADEServicioTimbradoResp)
+ End Using
+ Catch ex As Exception
+ OnError("Ocurrió un error al obtener los resultados", ex)
+ End Try
+
+ If result IsNot Nothing Then
+ Dim xmlGuardar = result.xmlBase64.ToBase64Decode()
+ context.Response.Write(xmlGuardar)
+ Else
+ context.Response.Write(Respuesta)
+ End If
+ Else
+ context.Response.Write(Respuesta)
+ End If
End Sub
+ Private Sub CancelarFacturaPADE(ByVal context As HttpContext, UsuarioActual As Usuario)
+
+ Dim UsuarioServicio As String = "rene.molina@adssistemas.mx"
+ Dim ClaveServicio As String = "Facturacion2021#"
+
+ Dim EmisorRFC As String = "ZUÑ920208KL4"
+ Dim ArchivoLLave As String = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key"
+ Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer"
+ Dim Clave = "12345678a"
+ Dim TimbraProduccion = False
+
+ If Not File.Exists(ArchivoCertificado) Then
+ context.Response.Write("El archivo de llave privada no existe")
+ Exit Sub
+ End If
+ If Not File.Exists(ArchivoLLave) Then
+ context.Response.Write("El archivo de llave privada no existe")
+ Exit Sub
+ End If
+ If UsuarioActual.Empresa.ContraseñaKey = "" Then
+ context.Response.Write("La clave no puede ser vacía")
+ Exit Sub
+ End If
+
+ Dim llaveByte As Byte(), certByte As Byte()
+ Dim llaveBase64 As String = "", certBase64 As String = ""
+ Dim cfdi As New GoFac.GoCfdi()
+ Dim complemento As String = ""
+ Dim complementoConcepto As String = ""
+
+
+ Try
+ llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave)
+ llaveBase64 = Convert.ToBase64String(llaveByte)
+ Catch ex As Exception
+ context.Response.Write($"Error al leer la llave privada: {ex.Message}")
+ Exit Sub
+ End Try
+
+
+ Try
+ certByte = System.IO.File.ReadAllBytes(ArchivoCertificado)
+ certBase64 = Convert.ToBase64String(certByte)
+ Catch ex As Exception
+ context.Response.Write($"Error al leer el certificado: {ex.Message}")
+ Exit Sub
+ End Try
+
+ Dim TokenAuth As String = ToBase64Encode($"{UsuarioServicio}:{ClaveServicio}")
+
+ Dim Contrato As String = "72330711-cac6-4106-8051-cbcda1aef495"
+
+ Dim FolioFiscal As String = "9A46AD71-560B-4048-8B40-80ADC57C1CDC"
+
+ 'Dim Respuesta As String = EnviarInformacionCancelacionPADE("https://timbrado.pade.mx/servicio/rest/cancelacion/cancelar", TokenAuth, Contrato, EmisorRFC, certBase64, llaveBase64, Clave, FolioFiscal)
+
+ 'context.Response.Write(Respuesta)
+
+ Dim Respuesta As String = EnviarInformacionCancelacionPADESOAP("https://timbrado.pade.mx/servicio/Timbrado3.3?wsdl", UsuarioServicio, ClaveServicio, Contrato, EmisorRFC, certBase64, llaveBase64, Clave, FolioFiscal, TimbraProduccion)
+
+ If Not String.IsNullOrEmpty(Respuesta) Then
+ Dim result As PADEServicioCancelacionResp = Nothing
+ Dim serializer As XmlSerializer = New XmlSerializer(GetType(PADEServicioCancelacionResp))
+
+ Try
+ Using reader As TextReader = New StringReader(Respuesta)
+ result = CType(serializer.Deserialize(reader), PADEServicioCancelacionResp)
+ End Using
+ Catch ex As Exception
+ OnError("Ocurrió un error al obtener los resultados", ex)
+ End Try
+
+ If result IsNot Nothing Then
+ context.Response.ContentType = "application/json"
+ context.Response.Write(JsonConvert.SerializeObject(result))
+ Else
+ context.Response.Write(Respuesta)
+ End If
+ Else
+ context.Response.Write(Respuesta)
+ End If
+
+ 'Dim arrayFolioFiscal = New String(0) {FolioFiscal}
+ 'Dim arrayOpciones = New List(Of String)
+ 'If Not TimbraProduccion Then
+ ' arrayOpciones.Add("MODO_PRUEBA:1")
+ 'End If
+
+ 'Dim pade = New PADE33.PadeTimbradoServiceClient()
+
+ 'Dim Res = pade.cancelarConOpciones(Contrato, UsuarioServicio, ClaveServicio, EmisorRFC, arrayFolioFiscal, certByte, llaveByte, Clave, arrayOpciones.ToArray())
+
+ 'context.Response.Write(Res)
+ End Sub
+
+
+ Private Function EnviarInformacionCancelacionPADESOAP(ByVal url As String, UsuarioServicio As String, PassServicio As String, contrato As String, rfcEmisor As String,
+ certBase64 As String, keyBase64 As String, keyPass As String, arregloUUID As String, TimbraProduccion As Boolean) As String
+ Dim retorno = ""
+ Try
+
+ Dim request As HttpWebRequest = CType(WebRequest.Create($"{url}"), HttpWebRequest)
+ 'request.Headers.Add("SOAPAction:http://tempuri.org/TestCfd33 ")
+ request.ContentType = "text/xml;charset=""utf-8"""
+ request.Accept = "text/xml"
+ request.Method = "POST"
+
+ Dim XMLString As String = $"
+
+
+ {contrato}
+ {UsuarioServicio}
+ {PassServicio}
+ {rfcEmisor}
+ {arregloUUID}
+ {certBase64}
+ {keyBase64}
+ {keyPass}
+ {If(TimbraProduccion, "", "MODO_PRUEBA:3")}
+
+
+ "
+
+ Dim SOAPReqBody As XmlDocument = New XmlDocument()
+ SOAPReqBody.LoadXml(XMLString)
+
+ Using stream As Stream = request.GetRequestStream()
+ SOAPReqBody.Save(stream)
+ End Using
+
+ Dim response As String = ""
+
+ Using Serviceres As WebResponse = request.GetResponse()
+ Using rd As StreamReader = New StreamReader(Serviceres.GetResponseStream())
+ response = rd.ReadToEnd()
+ End Using
+ End Using
+
+ If Not String.IsNullOrEmpty(response) Then
+ Dim xmlRetorno = New XmlDocument()
+ xmlRetorno.LoadXml(response)
+ Dim elemList As XmlNodeList = xmlRetorno.GetElementsByTagName("return")
+
+ If elemList.Count > 0 Then
+ If elemList(0).ChildNodes.Count > 0 Then
+ retorno = elemList(0).ChildNodes(0).Value
+ End If
+ End If
+
+ End If
+
+ Catch ex As Exception
+ retorno = ""
+ OnError("Ocurrió un error al cancelar", ex)
+ End Try
+
+ Return retorno
+ End Function
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
@@ -159,6 +349,46 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
End Function
+ Private Function EnviarInformacionCancelacionPADE(url As String, tokenAuth As String, contrato As String, rfcEmisor As String,
+ certBase64 As String, keyBase64 As String, keyPass As String, arregloUUID As String) As String
+ Dim Retorno As String = ""
+ Try
+ Dim urlParametros As String = String.Format("contrato={0}&rfcEmisor={1}&certBase64={2}&keyBase64={3}&keyPass={4}&arregloUUID={5}&opciones={6}", contrato, rfcEmisor, certBase64, keyBase64, keyPass, arregloUUID, "MODO_PRUEBA:1")
+
+ Dim urlRequest As String = String.Format("{0}?{1}", url, urlParametros)
+
+ Using httpClient = New HttpClient()
+ httpClient.Timeout = New TimeSpan(0, 1, 0)
+ Using request = New HttpRequestMessage(HttpMethod.Post, New Uri(urlRequest))
+ request.Headers.Add("Authorization", $"Basic {tokenAuth}")
+
+ Dim response = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result
+ Retorno = response.Content.ReadAsStringAsync().Result
+ 'Dim Parametros = New List(Of KeyValuePair(Of String, String))
+
+ 'Parametros.Add(New KeyValuePair(Of String, String)("contrato", contrato))
+ 'Parametros.Add(New KeyValuePair(Of String, String)("rfcEmisor", rfcEmisor))
+ 'Parametros.Add(New KeyValuePair(Of String, String)("certBase64", certBase64))
+ 'Parametros.Add(New KeyValuePair(Of String, String)("keyBase64", keyBase64))
+ 'Parametros.Add(New KeyValuePair(Of String, String)("keyPass", keyPass))
+ 'Parametros.Add(New KeyValuePair(Of String, String)("arregloUUID", arregloUUID))
+
+ 'Using content = New FormUrlEncodedContent(Parametros)
+ ' request.Content = content
+
+
+ 'End Using
+
+ End Using
+ End Using
+ Catch ex As Exception
+ Retorno = ""
+ OnError("Ocurrió un error al enviar la informacion", ex)
+ End Try
+ Return Retorno
+ End Function
+
+
Public Function ToBase64Encode(ByVal plainText As String) As String
Dim plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText)
Return System.Convert.ToBase64String(plainTextBytes)
@@ -170,6 +400,53 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
Return System.Text.Encoding.UTF8.GetString(base64EncodedBytes)
End Function
+
+ Public Class PADEServicioTimbradoResp
+
+ Public Property id As String
+
+ Public Property timbradoOk As Boolean
+
+ Public Property contrato As String
+
+ Public Property codigo As String
+
+ Public Property mensaje As String
+
+ Public Property UUID As String
+
+ Public Property FechaTimbrado As DateTime
+
+ Public Property xmlBase64 As String
+ End Class
+
+
+ Public Class PADEServicioCancelacionResp
+
+ Public Property statusOk As Boolean
+
+ Public Property codigo As String
+
+ Public Property mensaje As String
+
+ Public Property procesados As Integer
+
+ Public Property cancelados As Integer
+
+
+ Public Property cancelaciones As List(Of PADECancelacion)
+ End Class
+
+
+ Public Class PADECancelacion
+
+ Public Property uuid As String
+
+ Public Property codigo As String
+
+ Public Property mensaje As String
+ End Class
+
Public Property XMLPrueba As String = ""
diff --git a/GPS/TrayectoDetalle.aspx b/GPS/TrayectoDetalle.aspx
index a10fc8071..c977aaab9 100644
--- a/GPS/TrayectoDetalle.aspx
+++ b/GPS/TrayectoDetalle.aspx
@@ -644,7 +644,10 @@
}, 250);
}
- function creaPoligono(coords, color, Geocerca, Estatus, InicioFin, CveEstatus, CveEstatusAnterior, cruzo) {
+ var geoReferenciaSeguir = '';
+ var estatusSiguiente = '';
+
+ function creaPoligono(coords, color, Geocerca, Estatus, InicioFin, CveEstatus, CveEstatusAnterior, cruzo, geocercaASeguir, estatusaSeguir) {
var polygon = new google.maps.Polygon({
paths: coords,
strokeColor: color,
@@ -656,6 +659,11 @@
polygon.setMap(map);
polygons.push(polygon);
+ if (geocercaASeguir != '') {
+ geoReferenciaSeguir = geocercaASeguir;
+ estatusSiguiente = estatusaSeguir;
+ }
+
CreaMarcadorPoligono(coords, Geocerca, Estatus, InicioFin, CveEstatus, CveEstatusAnterior, cruzo)
}
@@ -935,7 +943,7 @@
}
}
- LblETA.innerText = formatETA(duracionTotal);
+ LblETA.innerHTML = formatETA(duracionTotal) + ' Geocerca: ' + geoReferenciaSeguir + '. Estatus: ' + estatusSiguiente;
})
.catch((error) => {
alert('Error:' + error);
diff --git a/GPS/TrayectoDetalle.aspx.vb b/GPS/TrayectoDetalle.aspx.vb
index dc4fc125d..7153f6f10 100644
--- a/GPS/TrayectoDetalle.aspx.vb
+++ b/GPS/TrayectoDetalle.aspx.vb
@@ -50,6 +50,15 @@ Partial Class GPS_TrayectoDetalle
ViewState("CveEstatusActual") = value
End Set
End Property
+
+ Private Property OrdenActual As Integer
+ Get
+ Return CType(ViewState("OrdenActual"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("OrdenActual") = value
+ End Set
+ End Property
#End Region
@@ -148,6 +157,7 @@ Partial Class GPS_TrayectoDetalle
LblTitulo.Text = $"Trayecto: {RowEstatus("Trayecto")}"
LtlEstatusActual.Text = RowEstatus("Estatus").ToString()
CveEstatusActual = RowEstatus("CveEstatusActual").ToString().ToEntero()
+ OrdenActual = RowEstatus("OrdenActual").ToString().ToEntero()
If CBool(RowEstatus("EsFin")) Then
BtnTerminarTrayeto.Visible = False
@@ -158,7 +168,7 @@ Partial Class GPS_TrayectoDetalle
LtlDispositivo.Text = RowEstatus("Vehiculo").ToString()
LtlFechaI.Text = If(String.IsNullOrEmpty(RowEstatus("FechaInicio").ToString()), "No ha ingresado a la geocerca de inicio", String.Format("{0:dd/MM/yyyy HH:mm tt}", RowEstatus("FechaInicio").ToString().ToDateTime()))
- LtlFechaF.Text = If(String.IsNullOrEmpty(RowEstatus("FechaFin").ToString()), "No ha Terminado", String.Format("{0:dd/MM/yyyy HH:mm tt}", RowEstatus("FechaFin").ToString().ToDateTime()))
+ LtlFechaF.Text = If(String.IsNullOrEmpty(RowEstatus("FechaFin").ToString()), "No ha terminado", String.Format("{0:dd/MM/yyyy HH:mm tt}", RowEstatus("FechaFin").ToString().ToDateTime()))
LtlVMedia.Text = String.Format("{0:N2} KM/H", RowEstatus("VMedia"))
LtlVMax.Text = String.Format("{0:N2} KM/H", RowEstatus("VMax"))
LtlTiempo.Text = String.Format("{0}", RowEstatus("TiempoOperativo"))
@@ -214,18 +224,41 @@ Partial Class GPS_TrayectoDetalle
Dim CoordAnterior As String = ""
Dim CveEstatus As Integer = -1
Dim CveEstatusAnterior As Integer = -1
+ Dim GeoreferenciaASeguir As String = ""
+ Dim EstatusSiguiente As String = ""
+ Dim OrdenEstatus As Integer = 0
+
'GEOCERCAS
For Each Row As DataRow In DtGeocercas.Rows
count += 1
Coord = SQLToGmaps(Row("Geom").ToString, "POLYGON")
CveEstatus = Row("CveEstatusTrayecto").ToString.ToEntero
CveEstatusAnterior = Row("CveEstatusAnterior").ToString.ToEntero
+ OrdenEstatus = Row("OrdenEstatus").ToString.ToEntero
+
Dim EsInicio As Boolean = CBool(IfNull(Row("EsInicio"), 0))
Dim EsFin As Boolean = CBool(IfNull(Row("EsFin"), 0))
Dim InicioFin As Integer = If(EsInicio, 1, If(EsFin, 2, 0))
Dim Cruzo As String = IfNull(Row("Cruzo"), "0").ToString()
- RegistraScript($"creaPoligono({Coord}, '{Row("Color").ToString}', '{Row("GeoReferencia")}', '{Row("EstatusTrayecto")}',{InicioFin},{CveEstatus},{CveEstatusAnterior},{Cruzo})", count.ToString())
+ 'MARCA PARA QUE NO CALCULE EL TIEMPO DE LAS GEOCERCAS RESTANTES
+ If Not String.IsNullOrEmpty(GeoreferenciaASeguir) Then
+ Cruzo = "1"
+ End If
+
+ 'VERIFICA SI SE ACTUALIZO MANUALMENTE
+ If Cruzo = "0" Then
+ If OrdenEstatus <= OrdenActual Then
+ Cruzo = "1"
+ End If
+ End If
+
+ If Cruzo = "0" Then
+ GeoreferenciaASeguir = Row("GeoReferencia").ToString()
+ EstatusSiguiente = Row("EstatusTrayecto").ToString()
+ End If
+
+ RegistraScript($"creaPoligono({Coord}, '{Row("Color").ToString}', '{Row("GeoReferencia")}', '{Row("EstatusTrayecto")}',{InicioFin},{CveEstatus},{CveEstatusAnterior},{Cruzo},'{GeoreferenciaASeguir}','{EstatusSiguiente}')", count.ToString())
Next
End If
@@ -324,11 +357,16 @@ Partial Class GPS_TrayectoDetalle
Dim ObjGPS As New ClsGPS
Try
- If ObjGPS.GetEstatusTrayectos(-1, UsuarioActual.CveCliente) Then
- DtEstatus = ObjGPS.DtResultados.Copy()
+ Dim CveEstatusFinal As Integer = -1
+ If ObjGPS.GetTrayectosGeoReferencias(CveTrayecto) Then
+ 'TOMA LA GEOCERCA FINAL
+ Dim Row As DataRow = ObjGPS.DtResultados.FiltroPrimero($"EsFin = True")
+ If Row IsNot Nothing Then
+ CveEstatusFinal = Row("CveEstatusTrayecto").ToString().ToEntero()
+ End If
+
End If
- Dim CveEstatusFinal As Integer = DtEstatus.FiltroPrimeroValor("CveEstatusTrayecto", "EsFin = True").ToEntero()
If CveEstatusFinal > 0 Then
If ObjGPS.UpdateTrayectoEstatus(CveTrayecto, CveEstatusFinal) Then
Alert("El trayecto se finalizo correctamente", JSBtnAceptar:="RefrescarPagina();", ShowCloseButton:=False)
@@ -336,6 +374,19 @@ Partial Class GPS_TrayectoDetalle
Else
Alert("No se pudo obtener el estatus final", TipoMensaje.MsgError)
End If
+
+ 'If ObjGPS.GetEstatusTrayectos(-1, UsuarioActual.CveCliente) Then
+ ' DtEstatus = ObjGPS.DtResultados.Copy()
+ 'End If
+
+ 'Dim CveEstatusFinal As Integer = DtEstatus.FiltroPrimeroValor("CveEstatusTrayecto", "EsFin = True").ToEntero()
+ 'If CveEstatusFinal > 0 Then
+ ' If ObjGPS.UpdateTrayectoEstatus(CveTrayecto, CveEstatusFinal) Then
+ ' Alert("El trayecto se finalizo correctamente", JSBtnAceptar:="RefrescarPagina();", ShowCloseButton:=False)
+ ' End If
+ 'Else
+ ' Alert("No se pudo obtener el estatus final", TipoMensaje.MsgError)
+ 'End If
Catch ex As Exception
OnError("Ocurrió un error al actualizar el trayecto", ex)
End Try
diff --git a/GPS/Trayectos.aspx b/GPS/Trayectos.aspx
index 89eba625b..c07974719 100644
--- a/GPS/Trayectos.aspx
+++ b/GPS/Trayectos.aspx
@@ -322,6 +322,40 @@
+
+ Notificar:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Enviar Liga:
+
+
+
+
+
+
" style="display: inline-block; margin-right: -20px; width: 150px;" />
diff --git a/GPS/Trayectos.aspx.vb b/GPS/Trayectos.aspx.vb
index cfae9a0d3..e473a0319 100644
--- a/GPS/Trayectos.aspx.vb
+++ b/GPS/Trayectos.aspx.vb
@@ -113,8 +113,8 @@ Partial Class GPS_Trayectos
Dim ObjGPS As New ClsGPS
If ObjGPS.GetEstatusTrayectos(-1, UsuarioActual.CveCliente) Then
GvEstatus.DataSource = ObjGPS.DtResultados.FiltraParametros("CveCliente > 0")
- GvEstatusNuevo.DataSource = ObjGPS.DtResultados
- DdlEstatusTrayecto.DataSource = ObjGPS.DtResultados
+ GvEstatusNuevo.DataSource = ObjGPS.DtResultados.FiltraParametros("CveCliente > 0")
+ DdlEstatusTrayecto.DataSource = ObjGPS.DtResultados.FiltraParametros("CveCliente > 0")
End If
ObjGPS.Dispose()
GvEstatus.DataBind()
@@ -237,7 +237,9 @@ Partial Class GPS_Trayectos
Dim Nombre As String = TxtNombreNuevo.Text
Dim CveDispositivo As Integer = DdlDispositivoNuevo.SelectedValue.ToEntero
If CveDispositivo > 0 Then
- Dim CveTrayectoNuevo As Integer = ObjGPS.AddTrayecto(Nombre, DateTime.Now, "", CveDispositivo, UsuarioActual.CveCliente)
+ Dim CveTrayectoNuevo As Integer = ObjGPS.AddTrayecto(Nombre, DateTime.Now, "", CveDispositivo, UsuarioActual.CveCliente, EnviarNotificacion:=ChkNotificarApartirDe.Checked,
+ CorreosNotificacion:=TxtCorreNotApartidDe.Text, Intervalo:=If(ChkNotificarApartirDe.Checked, DdlIntervaloAPartirDe.SelectedValue.ToEntero(), 0),
+ EnviarLiga:=ChkEnviarLigaApartirDe.Checked)
If CveTrayectoNuevo > 0 Then
For Each Row As GridViewRow In GvEstatusNuevo.Rows
If Row.RowType = DataControlRowType.DataRow Then
@@ -413,6 +415,10 @@ Partial Class GPS_Trayectos
DivNotificaciones.Visible = ChkNotificacion.Checked
UpAgregar.Update()
End Sub
+ Protected Sub ChkNotificacionApartirDe_CheckedChanged(sender As Object, e As EventArgs)
+ DivNotificarApartirDe.Visible = ChkNotificarApartirDe.Checked
+ UpDdlTrayecto.Update()
+ End Sub
Protected Sub LnkEnviar_Click(sender As Object, e As EventArgs)
Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow)