diff --git a/App_Code/ClsTransportes.vb b/App_Code/ClsTransportes.vb index a5e09b0c2..f286123d7 100644 --- a/App_Code/ClsTransportes.vb +++ b/App_Code/ClsTransportes.vb @@ -204,9 +204,28 @@ Public Class ClsTransportes Return Retorno - End Function -#End Region + End Function + Public Function GetRemisionBoleto(CveViajePasajero As Integer, CveEmpresa As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_Trans_ViajesPasajerosVentaGet") + With SqlAdapter.SelectCommand.Parameters + .Add("@CveViajePasajero", SqlDbType.Int).Value = CveViajePasajero + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + End With + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener la remisión del boleto.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + + End Function + +#End Region + #Region "Destinos" Public Function GetDestinos(Optional CveRuta As Integer = 0) As Boolean Dim Retorno As Boolean = False diff --git a/App_Code/ClsVentas.vb b/App_Code/ClsVentas.vb index dec991bdb..8234a17ad 100644 --- a/App_Code/ClsVentas.vb +++ b/App_Code/ClsVentas.vb @@ -880,6 +880,25 @@ Public Class ClsVentas Return Retorno End Function + + Public Function UpdateBoletosVenta(CveVenta As Integer, CveEmpresa As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_Vta_VentasBoletosUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveVenta", SqlDbType.Int).Value = CveVenta + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al cancelar los boletos de la venta.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function Public Function UpdateEstatusFactura(Estatus As Integer, FolioFiscal As String, SelloSAT As String, FechaCancelacion As DateTime, CveVenta As Integer, Optional IdPolizaCancelacion As Integer = -1, Optional CvePAC As Integer = -1, Optional CveEstatusRefacturacion As Integer = 0, Optional CveUsuarioCambiaEstatus As Integer = -1, Optional FechaCambioEstatus As String = "-1", Optional RFCReceptor As String = "-1", @@ -1428,7 +1447,7 @@ Public Class ClsVentas Optional CveContratoDetalle As Integer = -1, Optional PorcentajeIVA As Decimal = 0, Optional IEPS As Decimal = -1, Optional PorcentajeIEPS As Double = 0, Optional CvePromocionDetalle As Integer = -1, Optional CveMovimientoDetallePedido As Integer = -1, Optional ImporteRetIVA As Decimal = 0, Optional PorcentajeRetIVA As Double = 0, Optional ImporteRetISR As Decimal = 0, Optional PorcentajeRetISR As Decimal = 0, Optional CuentaPredial As String = "", Optional CvePrecioLista As Integer = -1, Optional CveActivoFijo As Integer = -1, - Optional NumTurnos As Decimal = 0D, Optional EstatusAlmacen As Integer = 0, Optional CantidadConversion As Decimal = 0) As Boolean + Optional NumTurnos As Decimal = 0D, Optional EstatusAlmacen As Integer = 0, Optional CantidadConversion As Decimal = 0, Optional CveViajePasajero As Integer = -1) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_VentasDetalleAdd") @@ -1463,6 +1482,7 @@ Public Class ClsVentas .Add("@NumTurnos", SqlDbType.Decimal).Value = NumTurnos .Add("@EstatusAlmacen", SqlDbType.Int).Value = EstatusAlmacen .Add("@CantidadConversion", SqlDbType.Decimal).Value = CantidadConversion + .Add("@CveViajePasajero", SqlDbType.Int).Value = CveViajePasajero End With Try diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index d87eb3840..6c308b52f 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -1445,6 +1445,9 @@ Namespace Modelos TmpDT.Columns.Add("NumTurnos", GetType(Decimal)) TmpDT.Columns("NumTurnos").DefaultValue = 0 + TmpDT.Columns.Add("CveViajePasajero", GetType(Integer)) + TmpDT.Columns("CveViajePasajero").DefaultValue = -1 + Return TmpDT End Function @@ -1452,7 +1455,8 @@ Namespace Modelos Optional CveUM As Integer = -1, Optional CveProyecto As Integer = -1, Optional Proyecto As String = "", Optional CveSubProyecto As Integer = -1, Optional SubProyecto As String = "", Optional PorcentajeIVA As Decimal = -1, - Optional CuentaPredial As String = "", Optional CveVentaDetallePadre As Integer = -1, Optional CveVentaDetalleRemision As Integer = -1) As Boolean + Optional CuentaPredial As String = "", Optional CveVentaDetallePadre As Integer = -1, + Optional CveVentaDetalleRemision As Integer = -1, Optional CveViajePasajero As Integer = -1) As Boolean If Not CvePS > 0 Then Alert("Ocurrió un error al cargar la información del producto a agregar. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgError) @@ -1649,6 +1653,7 @@ Namespace Modelos Row("AFValorInicial") = 0 Row("NumTurnos") = 0 + Row("CveViajePasajero") = CveViajePasajero Me.DtDetalle.Rows.Add(Row) @@ -2202,6 +2207,14 @@ Namespace Modelos 'Se agregan los PS For Each Row As DataRow In TmpDTDetalle.Rows + + Dim CveViajePasajero As Integer = -1 + + 'VERIFICA QUE EXISTA LA COLUMNA + If TmpDTDetalle.Columns("CveViajePasajero") IsNot Nothing Then + CveViajePasajero = Row("CveViajePasajero").ToString().ToEntero() + End If + If Not ObjVentas.AddVentaDetalle(ObjVentas.CveVenta, Row("CvePS").ToString.ToEntero, Row("Cantidad").ToString.ToDecimal, Row("CveUM").ToString.ToEntero, Row("PU").ToString.ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)), Row("ImporteIVA").ToString.ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)), Math.Round((Row("Total").ToString.ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)) * (1 + Row("PorcentajeIVA").ToString.ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)))), 6), Row("Obs").ToString, Row("Descuento").ToString.ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)), Row("TipoDescuento").ToString.ToEntero, Row("CveSubProyecto").ToString.ToEntero, Row("CvePresupuestoIngreso").ToString.ToEntero, @@ -2210,7 +2223,7 @@ Namespace Modelos IEPS:=Row("ImporteIEPS").ToString.ToDecimal, CveMovimientoDetallePedido:=Row("CveMovimientoDetallePedido").ToString.ToEntero, ImporteRetIVA:=Row("ImporteRetIVA").ToString.ToDecimal, ImporteRetISR:=Row("ImporteRetISR").ToString.ToDecimal, PorcentajeIEPS:=Row("PorcentajeIEPS").ToString.ToDecimal, PorcentajeRetIVA:=Row("PorcentajeRetIVA").ToString.ToDouble, PorcentajeRetISR:=Row("PorcentajeRetISR").ToString.ToDecimal, CuentaPredial:=Row("CuentaPredial").ToString, - PorcentajeIVA:=Row("PorcentajeIVA").ToString.ToDecimal) Then + PorcentajeIVA:=Row("PorcentajeIVA").ToString.ToDecimal, CveViajePasajero:=CveViajePasajero) Then ErrorList.Add("Ocurrió un error al agregar un Producto o Servicio a la factura.
Revise su factura y cualquier detalle comuníquese a Soporte Técnico") Exit For Else @@ -5209,6 +5222,14 @@ Namespace Modelos End If End Function + + Public Function CancelarBoleto(CveViajePasajero As Integer) As Boolean + Dim TieneError As Boolean = False + + Return Not TieneError + End Function + + Private Shared Function DecodeBase64(ByVal strXMLCodificado As String) As String Try Dim decbuff As Byte() = Convert.FromBase64String(strXMLCodificado) @@ -5246,8 +5267,8 @@ Namespace Modelos ''' Cancela la factura para poder realizar la refacturacion ''' ''' - Public Function CancelarPorRefacturacion(CveMotivoCancelacion As Integer, Motivo As String, Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = False, Optional CveEstadoCancelacion As Integer = 0, Optional CveEstatusFacturaAsignado As Integer = -1) As MCancelacionVentaMensaje - Return CancelarVenta(Me, Me.UsuarioActual, EsRefacturacion:=True, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, FolioSustitucion:=FolioSustitucion, ValidarSAT:=ValidarSAT, CveEstadoCancelacion:=CveEstadoCancelacion, CveEstatusFacturaAsignado:=CveEstatusFacturaAsignado) + Public Function CancelarPorRefacturacion(CveMotivoCancelacion As Integer, Motivo As String, Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = False, Optional CveEstadoCancelacion As Integer = 0) As MCancelacionVentaMensaje + Return CancelarVenta(Me, Me.UsuarioActual, EsRefacturacion:=True, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, FolioSustitucion:=FolioSustitucion, ValidarSAT:=ValidarSAT, CveEstadoCancelacion:=CveEstadoCancelacion) End Function ''' ''' Cancela la factura y realiza las operaciones correspondientes @@ -5255,15 +5276,15 @@ Namespace Modelos ''' ''' ''' - Public Function CancelarFactura(RealizarDevolucionAlmacen As Boolean, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveMotivoCancelacion As Integer = -1, Optional Motivo As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0) As MCancelacionVentaMensaje + Public Function CancelarFactura(RealizarDevolucionAlmacen As Boolean, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveMotivoCancelacion As Integer = -1, Optional Motivo As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0, Optional CancelarBoletos As Boolean = False) As MCancelacionVentaMensaje 'Comprobante emitido con errores sin relación - Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, CveEstadoCancelacion:=CveEstadoCancelacion) + Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, CveEstadoCancelacion:=CveEstadoCancelacion, CancelarBoletos:=CancelarBoletos) End Function Private Function CancelarVenta(ObjFactura As Modelos.Factura, UsuarioActual As Usuario, Optional EsRefacturacion As Boolean = False, Optional RealizarDevolucionAlmacen As Boolean = False, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveEstatusFacturaAsignado As Integer = -1, Optional FechaCancelacion As String = "-1", Optional AcuseCancelacion As String = "", Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "", - Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0) As MCancelacionVentaMensaje + Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0, Optional CancelarBoletos As Boolean = False) As MCancelacionVentaMensaje Dim Retorno As New MCancelacionVentaMensaje() Dim ErrorList As New List(Of String) @@ -6434,6 +6455,13 @@ Namespace Modelos End If End If + If CancelarBoletos Then + If Not ObjVentas.UpdateBoletosVenta(CveVenta, UsuarioActual.CveEmpresa) Then + ErrorCancelar = True + MensajeError = "Ocurrió un error al cancelar los boletos." + End If + End If + If CancelarRemisiones Then If SeCancelaRemisionProceso Then @@ -8055,7 +8083,7 @@ Namespace Modelos Public Property Giro As String Public Property CvePrecioLista As Integer Public Property EnviarFactura As String - Public Property CveSucursal As Integer + Public Property CveSubProyecto As Integer Public Property RetIVA As Decimal Public Property RetISR As Decimal Public Property IEPS As Decimal diff --git a/Transportes/Boletos.aspx.vb b/Transportes/Boletos.aspx.vb index 74451e011..24d302887 100644 --- a/Transportes/Boletos.aspx.vb +++ b/Transportes/Boletos.aspx.vb @@ -67,6 +67,20 @@ Partial Class Boletos End If End Sub + Private Sub CreaDTPasajeros() + DtPasajeros = New DataTable + DtPasajeros.Columns.Add("CveViajePasajero", GetType(Integer)) + DtPasajeros.Columns.Add("Numero", GetType(Integer)) + DtPasajeros.Columns.Add("Nombre", GetType(String)) + DtPasajeros.Columns.Add("Visa", GetType(String)) + DtPasajeros.Columns.Add("Asiento", GetType(String)) + DtPasajeros.Columns.Add("Celular", GetType(String)) + DtPasajeros.Columns.Add("Importe", GetType(Decimal)) + DtPasajeros.Columns.Add("Observaciones", GetType(String)) + + End Sub + + Private Sub CargaDatos() Dim ObjContratos As New ClsContratos Dim ObjViaje As New ClsTransportes @@ -76,15 +90,8 @@ Partial Class Boletos If ObjContratos.DtResultados IsNot Nothing AndAlso ObjContratos.DtResultados.Rows.Count > 0 Then TxtRuta.Text = Contrato.Rows(0)("Ruta").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("Asiento", GetType(String)) - DtPasajeros.Columns.Add("Celular", GetType(String)) - DtPasajeros.Columns.Add("Importe", GetType(Decimal)) - DtPasajeros.Columns.Add("Observaciones", GetType(String)) + CreaDTPasajeros() InicializaCombos() 'Boletos Vendidos @@ -199,10 +206,14 @@ Partial Class Boletos Importe = dr("Importe").ToString.ToDecimal '.Text, TxtVisa.Text, TxtCelular.Text, CBool(RblSexo.SelectedValue), TxtObservaciones.Text - If Not ObjTransporte.AddViajesPasajeros(CveViaje, DdlPartida.SelectedValue.ToEntero, DdlDestino.SelectedValue.ToEntero, Importe, Asiento.ToEntero, Nombre, Visa, Celular, Sexo, Obs, UsuarioActual.CveUsuario, UsuarioActual.CveVendedor) > 1 Then + Dim CveViajePasajero = ObjTransporte.AddViajesPasajeros(CveViaje, DdlPartida.SelectedValue.ToEntero, DdlDestino.SelectedValue.ToEntero, Importe, Asiento.ToEntero, Nombre, Visa, Celular, Sexo, Obs, UsuarioActual.CveUsuario, UsuarioActual.CveVendedor) + If CveViajePasajero < 1 Then TieneError = True SbAlert.Append("Ocurrió un error al generar el viaje") + Exit For End If + + dr("CveViajePasajero") = CveViajePasajero Next If Not TieneError Then @@ -329,11 +340,11 @@ Partial Class Boletos End Sub Private Function CrearRemision(ByRef objTrans As ClsTransportes) As Modelos.Factura.MMensajeFactura - Dim Retorno As Modelos.Factura.MMensajeFactura = Nothing + Dim Retorno As New Modelos.Factura.MMensajeFactura Dim CveCliente As Integer = 1154164 Dim CveMoneda As Integer = 2 - Dim CveSubProyecto As Integer = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto").ToEntero() + Dim CveSubProyecto As Integer = -1 If CveCliente <= 0 Then Retorno.Mensajes.Add("No se pudo cargar el cliente") @@ -345,34 +356,46 @@ Partial Class Boletos 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 + If EsProduccion Then + CvePSBoleto = 986337 + CveCliente = 1172306 + 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 + Dim ObjFactura = Modelos.Factura.CrearVentaNueva(UsuarioActual, CveSubProyecto, CveCliente, CveMoneda, "Rem") If ObjFactura IsNot Nothing Then - ObjFactura.Dispose() + CveSubProyecto = ObjFactura.Cliente.CveSubProyecto + + 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, CveViajePasajero:=Dr("CveViajePasajero").ToString().ToEntero()) + 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 + Else + Retorno.Mensajes.Add("No se pudo generar la factura") End If + Return Retorno End Function End Class diff --git a/Transportes/RepBoletos.aspx.vb b/Transportes/RepBoletos.aspx.vb index 8ade27feb..1baf1c79d 100644 --- a/Transportes/RepBoletos.aspx.vb +++ b/Transportes/RepBoletos.aspx.vb @@ -1,5 +1,6 @@ Option Explicit On Option Strict On + Imports System.Data Imports ADSNetLibrary.Helpers Imports ADSNetLibrary.SIGAPI.Helpers @@ -32,16 +33,10 @@ Partial Class ListadoBoletos CveViaje = Request.QueryString("CveViaje").ToEntero Ruta = IfNull(Request("Ruta"), "").ToString LblViaje.Text = Ruta - - InicializaCombos() CargaDatos() End If End Sub - Private Sub InicializaCombos() - - End Sub - Private Sub CargaDatos() Dim ObjTransportes As New ClsTransportes If ObjTransportes.GetViajesPasajeros(CveViaje) Then @@ -86,22 +81,58 @@ Partial Class ListadoBoletos Dim Estatus As String = GvRow.DataKey("Estatus") Dim cambiarEstatus As Boolean = Not Estatus.ToBool Dim ObjTransportes As New ClsTransportes - ObjTransportes.IniciaTransacSQL() - Try - If ObjTransportes.UpdateViajesPasajeros(CveViajePasajero.ToEntero, Activar:=cambiarEstatus, Estatus:=cambiarEstatus) Then - If Not cambiarEstatus Then - Alert($"El boleto ha sido cancelado correctamente.") - Else - Alert($"El boleto ha sido reactivado correctamente.") - End If - End If - ObjTransportes.Commit() - Catch ex As Exception - ObjTransportes.RollBack() - Alert($"No se pudo cambiar el estatus del boleto {ex}", TipoMensaje.MsgError) + + Dim TieneError As Boolean = False + Try + Dim DtRem As DataTable = Nothing + If ObjTransportes.GetRemisionBoleto(CveViajePasajero.ToEntero, UsuarioActual.CveEmpresa) Then + DtRem = ObjTransportes.DtResultados.Copy() + End If + + If DtRem IsNot Nothing Then + If DtRem.Rows.Count > 0 Then + Dim CveVenta As Integer = DtRem.Rows(0)("CveVenta").ToString().ToEntero() + If CveVenta > 0 Then + Dim ObjRem As New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) + + If ObjRem.DtDetalle.Rows.Count > 0 Then + 'SI SOLO TIENE UNA PARTIDA CANCELAR LA REMISION + If ObjRem.DtDetalle.Rows.Count = 1 Then + Dim RespCancelacion = ObjRem.CancelarFactura(False, ValidarSAT:=False, CancelarBoletos:=True) + If RespCancelacion IsNot Nothing Then + TieneError = RespCancelacion.HuboError + Else + TieneError = True + End If + Else + TieneError = Not ObjRem.CancelarBoleto(CveViajePasajero.ToEntero) + End If + Else + TieneError = True + End If + + End If + Else + 'SI NO TIENE VENTA, SOLO CANCELAR EL BOLETO + If Not ObjTransportes.UpdateViajesPasajeros(CveViajePasajero.ToEntero, Activar:=cambiarEstatus, Estatus:=cambiarEstatus) Then + TieneError = True + End If + End If + + End If + + Catch ex As Exception + TieneError = True + GuardaLog(ex.ToString()) Finally + If TieneError Then + Alert($"El boleto ha sido cancelado correctamente.") + Else + Alert($"Ocurrió un error al cancelar el boleto.") + End If ObjTransportes.Dispose() CargaDatos() End Try End Sub + End Class \ No newline at end of file