Option Explicit On Option Strict On Imports System.Data Imports ADSNetLibrary.Helpers Imports Extensiones Imports Extensiones.ModExtensiones Partial Class Boletos Inherits ClsPaginas #Region "Propiedades" Private Property AsientoSeleccionado As String Get Return ViewState("AsientoSeleccionado").ToString() End Get Set(value As String) ViewState("AsientoSeleccionado") = value End Set End Property Private Property Importe As Decimal Get Return If(IsNothing(ViewState("Importe")), 0, ViewState("Importe")).ToString().ToDecimal() End Get Set(value As Decimal) ViewState("Importe") = value End Set End Property Private Property CveViaje As Integer Get Return ViewState("CveViaje").ToString().ToEntero End Get Set(value As Integer) ViewState("CveViaje") = value End Set End Property Private Property Contrato As DataTable Get Return CType(ViewState("Contrato"), DataTable) End Get Set(value As DataTable) ViewState("Contrato") = value End Set End Property Private Property DtDestinos As DataTable Get Return CType(ViewState("DtDestinos"), DataTable) End Get Set(value As DataTable) ViewState("DtDestinos") = value End Set End Property Private Property DtPasajeros As DataTable Get Return CType(ViewState("DtPasajeros"), DataTable) End Get Set(value As DataTable) ViewState("DtPasajeros") = value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Not IsPostBack Then If Request.QueryString("CveViaje") Is Nothing And UsuarioActual.CveVendedor <> Nothing And UsuarioActual.CveVendedor <> -1 Then Response.Redirect("/Transportes/RepViajes.aspx") End If AsientoSeleccionado = "" CveViaje = Request.QueryString("CveViaje").ToEntero If CveViaje > 0 Then CargaDatos() End If End If End Sub Private Sub CargaDatos() Dim ObjContratos As New ClsContratos Dim ObjViaje As New ClsTransportes If ObjContratos.GetContratos(CveViaje, UsuarioActual.CveEmpresa) Then Contrato = ObjContratos.DtResultados If ObjContratos.DtResultados IsNot Nothing AndAlso ObjContratos.DtResultados.Rows.Count > 0 Then TxtRuta.Text = Contrato.Rows(0)("SubProyecto").ToString TxtFecha.Text = Contrato.Rows(0)("FechaInicial").ToString.ToDate.ToShortDateString DtPasajeros = New DataTable DtPasajeros.Columns.Add("Numero", GetType(Integer)) DtPasajeros.Columns.Add("Nombre", GetType(String)) DtPasajeros.Columns.Add("Visa", GetType(String)) DtPasajeros.Columns.Add("Sexo", GetType(String)) DtPasajeros.Columns.Add("CveSexo", GetType(Integer)) DtPasajeros.Columns.Add("Celular", GetType(String)) DtPasajeros.Columns.Add("Observaciones", GetType(String)) DtPasajeros.Columns.Add("Partida", GetType(String)) DtPasajeros.Columns.Add("Destino", GetType(String)) DtPasajeros.Columns.Add("CveDestinoOrigen", GetType(Integer)) DtPasajeros.Columns.Add("CveDestinoFinal", GetType(Integer)) DtPasajeros.Columns.Add("Asiento", GetType(String)) DtPasajeros.Columns.Add("Importe", GetType(Decimal)) InicializaCombos() 'Boletos Vendidos Dim dt As DataTable If ObjViaje.GetViajesPasajeros(CveViaje, Estatus:=1) Then 'Poner párametro para estatus y cancelado de viajes dt = ObjViaje.DtResultados Dim cph As ContentPlaceHolder = CType(Me.Master.FindControl("C"), ContentPlaceHolder) For Each dr As DataRow In dt.Rows Dim lnk As LinkButton = CType(cph.FindControl($"A{dr("Asiento")}"), LinkButton) If lnk IsNot Nothing Then lnk.Enabled = False lnk.CssClass = "nodisponible" lnk.ToolTip = dr("Nombre").ToString End If Next End If End If Else ObjContratos.Dispose() ObjViaje.Dispose() Response.Redirect($"~/Transportes/RepContratos.aspx") End If ObjContratos.Dispose() ObjViaje.Dispose() 'Boletos Vendidos End Sub Protected Sub InicializaCombos() Dim CveSubProyecto As Integer = Contrato.Rows(0)("CveSubProyecto").ToString.ToEntero 'Lista Destinos''carga específicos Dim ObjDestinos As New ClsTransportes() If ObjDestinos.GetDestinosTarifas(CveSubProyecto, -1, -1) Then If ObjDestinos.DtResultados.Rows.Count > 0 Then DtDestinos = ObjDestinos.DtResultados DdlPartida.DataSource = DtDestinos.FiltraParametros("", DistinctColumns:={"CveDestinoOrigen", "Partida"}) DdlPartida.DataBind() DdlPartida.Items.Insert(0, New ListItem("Seleccione Partida", "-1")) 'DdlDestino.DataSource = DtDestinos 'DdlDestino.DataBind() 'DdlDestino.Items.Insert(0, New ListItem("Seleccione Destino", "-1")) End If End If 'If ObjDestinos.GetDestinos(CveSubProyecto:=CveSubProyecto) Then ' If ObjDestinos.DtResultados.Rows.Count > 0 Then ' DdlPartida.DataSource = ObjDestinos.DtResultados ' DdlPartida.DataBind() ' DdlPartida.Items.Insert(0, New ListItem("Seleccione Partida", "-1")) ' DdlDestino.DataSource = ObjDestinos.DtResultados ' DdlDestino.DataBind() ' DdlDestino.Items.Insert(0, New ListItem("Seleccione Destino", "-1")) ' End If 'End If ObjDestinos.Dispose() End Sub Protected Sub CotizarTarifa() If DdlDestino.SelectedValue <> "-1" And DdlPartida.SelectedValue <> "-1" Then Dim ImporteR As Decimal = 0 Dim ObjDestinos As New ClsTransportes() Dim CveSubProyecto As Integer = Contrato.Rows(0)("CveSubProyecto").ToString.ToEntero If ObjDestinos.GetDestinosTarifas(CveSubProyecto, DdlPartida.SelectedValue.ToEntero, DdlDestino.SelectedValue.ToEntero) Then ImporteR = ObjDestinos.DtResultados.FiltroPrimeroValor("Importe").ToDecimal.RoundSQL End If If ImporteR > 0 Then ViewState("Importe") = ImporteR LbCostos.Text = $"El precio de su boleto es ${ImporteR.FormatoNumero}" LbCostos.Visible = True BtnAgregarPasajero.Visible = True Else ViewState("Importe") = 0 BtnAgregarPasajero.Visible = False LbCostos.Visible = False Alert("No se encontro una tarifa para estos destinos", TipoMensaje.MsgAdvertencia) End If ObjDestinos.Dispose() End If End Sub Protected Sub OnLinkButtonClick(sender As Object, e As EventArgs) 'quitamos la selección anterior, en caso de existir. If AsientoSeleccionado <> "" Then Dim cph As ContentPlaceHolder = CType(Me.Master.FindControl("C"), ContentPlaceHolder) Dim lnk As LinkButton = CType(cph.FindControl(AsientoSeleccionado), LinkButton) lnk.CssClass = "disponible" End If Dim linkButton As LinkButton = DirectCast(sender, LinkButton) Dim buttonID As String = linkButton.ID linkButton.CssClass += " activo" AsientoSeleccionado = buttonID UpPanel.Update() End Sub Protected Sub FinalizarVenta(sender As Object, e As EventArgs) Dim SbAlert As New StringBuilder() Dim Retorno As New Modelos.Factura.MMensajeFactura() Dim ObjTransporte As New ClsTransportes() ObjTransporte.IniciaTransacSQL() Dim TieneError As Boolean = False Try For Each dr As DataRow In DtPasajeros.Rows Dim Nombre, Visa, Celular, Obs, Asiento As String Dim Sexo As Boolean Dim Importe As Decimal = 0 Dim CveDestinoOrigen, CveDestinoFinal As Integer CveDestinoOrigen = dr("CveDestinoOrigen").ToString.ToEntero CveDestinoFinal = dr("CveDestinoFinal").ToString.ToEntero Importe = dr("Importe").ToString.ToDecimal Asiento = dr("Asiento").ToString Nombre = dr("Nombre").ToString Visa = dr("Visa").ToString Celular = dr("Celular").ToString Sexo = dr("CveSexo").ToString.ToBool Obs = dr("Observaciones").ToString If ObjTransporte.AddViajesPasajeros(CveViaje, CveDestinoOrigen, CveDestinoFinal, Importe, Asiento.ToEntero, Nombre, Visa, Celular, Sexo, Obs, UsuarioActual.CveUsuario, UsuarioActual.CveVendedor) > 1 Then ObjTransporte.Commit() End If Next DtPasajeros.Clear() If Not TieneError Then Retorno = CrearRemision(ObjTransporte) End If If Retorno IsNot Nothing Then TieneError = Retorno.TieneError If Not TieneError Then If Retorno.CveVenta > 0 AndAlso Not Retorno.TieneError Then SbAlert.AppendFormat("{0}", Retorno.Mensajes(Retorno.Mensajes.Count - 1)) Else TieneError = True SbAlert.Append("Ocurrió un error al generar la factura") End If If Retorno.Mensajes IsNot Nothing AndAlso Retorno.Mensajes.Count > 0 Then For Each Mensaje As String In Retorno.Mensajes SbAlert.AppendFormat("{0}
", Mensaje) Next Else TieneError = True End If End If Else TieneError = True SbAlert.Append("Ocurrió un error al generar la factura") End If If SbAlert.Length = 0 Then SbAlert.Append("Ocurrió un error al generar la factura") End If Catch ex As Exception TieneError = True SbAlert.Append("Ocurrió un error al generar la factura." + ex.ToString()) GuardaLog(ex.ToString()) Finally If TieneError Then ObjTransporte.RollBack() ObjTransporte.Dispose() Else SbAlert.Append("El boleto se genero correctamente") ObjTransporte.Dispose() DdlPartida.SelectedValueExist("-1") DdlDestino.SelectedValueExist("-1") AsientoSeleccionado = "" CargaDatos() End If Alert(SbAlert.ToString(), If(TieneError, TipoMensaje.MsgError, TipoMensaje.MsgInformacion), ShowCloseButton:=False) End Try UpPanel.Update() End Sub Protected Sub DdlPartida_SelectedIndexChanged(sender As Object, e As EventArgs) DdlDestino.DataSource = DtDestinos.FiltraParametros($"CveDestinoOrigen = {DdlPartida.SelectedValue}") DdlDestino.DataBind() DdlDestino.Items.Insert(0, New ListItem("Seleccione Destino", "-1")) End Sub Protected Sub DdlDestino_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlDestino.SelectedIndexChanged CotizarTarifa() End Sub Private Sub GeneraPasajeros(Cantidad As Integer) DtPasajeros.Clear() For i As Integer = 1 To Cantidad Dim Dr1 As DataRow = DtPasajeros.NewRow Dr1("Numero") = i 'asiento DtPasajeros.Rows.Add(Dr1) Next GvB.DataSource = DtPasajeros GvB.DataBind() End Sub Protected Sub AgregarPasajero(sender As Object, e As EventArgs) If AsientoSeleccionado = "" Then Alert("No se ha seleccionado el asiento.") Exit Sub End If If Me.Importe <= 0 Then Alert("No hay un importe asignado.") Exit Sub End If Dim Dr1 As DataRow = DtPasajeros.NewRow Dr1("Asiento") = AsientoSeleccionado.Replace("A", "") Dr1("Nombre") = TxtNombre.Text.Trim Dr1("Visa") = TxtVisa.Text.Trim Dr1("Sexo") = RblSexo.SelectedItem Dr1("CveSexo") = RblSexo.SelectedValue.ToBool Dr1("Celular") = TxtCelular.Text.Trim Dr1("Observaciones") = TxtObservaciones.Text.Trim Dr1("Partida") = DdlPartida.SelectedItem Dr1("Destino") = DdlDestino.SelectedItem Dr1("CveDestinoOrigen") = DdlPartida.SelectedValue.ToEntero Dr1("CveDestinoFinal") = DdlDestino.SelectedValue.ToEntero Dr1("Importe") = Me.Importe 'Reiniciamos Datos' DtPasajeros.Rows.Add(Dr1) AsientoSeleccionado = "" TxtNombre.Text = "" TxtVisa.Text = "" TxtCelular.Text = "" TxtCelular.Text = "" TxtObservaciones.Text = "" GvB.DataSource = DtPasajeros GvB.DataBind() 'identifico los asientos seleccionados para la venta Dim cph As ContentPlaceHolder = CType(Me.Master.FindControl("C"), ContentPlaceHolder) For Each dr As DataRow In DtPasajeros.Rows Dim lnk As LinkButton = CType(cph.FindControl($"A{dr("Asiento")}"), LinkButton) If lnk IsNot Nothing Then lnk.Enabled = False lnk.CssClass = "seleccionado" lnk.ToolTip = dr("Nombre").ToString End If Next BtnGuardar.Visible = True UpPanel.Update() End Sub Private Function CrearRemision(ByRef objTrans As ClsTransportes) As Modelos.Factura.MMensajeFactura Dim Retorno As Modelos.Factura.MMensajeFactura = Nothing Dim CveCliente As Integer = 1154164 Dim CveMoneda As Integer = 2 Dim CveSubProyecto As Integer = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto").ToEntero() If CveCliente <= 0 Then Retorno.Mensajes.Add("No se pudo cargar el cliente") Return Retorno End If If CveSubProyecto <= 0 Then Retorno.Mensajes.Add("No se pudo cargar el subproyecto") Return Retorno End If Dim ObjFactura = Modelos.Factura.CrearVentaNueva(UsuarioActual, CveSubProyecto, CveCliente, CveMoneda, "Rem") Dim CvePSBoleto As Integer = 912720 For Each Dr As DataRow In DtPasajeros.Rows Dim Obs = Dr("Nombre").ToString Dim Importe = Dr("Importe").ToString.ToDecimal() If Importe <= 0 Then Retorno.Mensajes.Add("El importe debe ser mayor a 0") Return Retorno End If ObjFactura.AgregarPS(CvePSBoleto, 1, Importe, 0, Obs, CveSubProyecto:=CveSubProyecto, PorcentajeIVA:=0) Next ObjFactura.CalculaTotales() Try Retorno = ObjFactura.EmitirFactura(False, Transac:=objTrans.IniciaTransacSQL()) Catch ex As Exception Retorno = Nothing GuardaLog(ex.ToString()) End Try If ObjFactura IsNot Nothing Then ObjFactura.Dispose() End If Return Retorno End Function 'Protected Sub TimerActualizar_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles timerActualizar.Tick ' ScriptManager.RegisterStartupScript(Me, Me.GetType(), "ActualizarTiempo", "actualizarTiempo();", True) ' UpTimer.Update() 'End Sub End Class