diff --git a/App_Code/ClsVentas.vb b/App_Code/ClsVentas.vb index 60ced51bc..bb81bc959 100644 --- a/App_Code/ClsVentas.vb +++ b/App_Code/ClsVentas.vb @@ -1142,7 +1142,7 @@ Public Class ClsVentas Return Retorno End Function - Public Function UpdateCancelaVenta(CveVenta As Integer, FechaCancelacion As DateTime, SelloCancelacionSAT As String, CveEmpresa As Integer, Optional CvePAC As Integer = -1, Optional CveEstatusRefacturacion As Integer = 0, Optional EstadoCancelacion As String = "", Optional CveEstadoCancelacion As Integer = 0) As Boolean + Public Function UpdateCancelaVenta(CveVenta As Integer, FechaCancelacion As DateTime, SelloCancelacionSAT As String, CveEmpresa As Integer, Optional CvePAC As Integer = -1, Optional CveEstatusRefacturacion As Integer = 0, Optional EstadoCancelacion As String = "", Optional CveEstadoCancelacion As Integer = 0, Optional CveEstatusFactura As Integer = 5) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Vta_VentasCancelacion") @@ -1156,6 +1156,7 @@ Public Class ClsVentas .Add("@CveEstatusRefacturacion", SqlDbType.TinyInt).Value = CveEstatusRefacturacion .Add("@EstadoCancelacion", SqlDbType.VarChar).Value = EstadoCancelacion .Add("@CveEstadoCancelacion", SqlDbType.TinyInt).Value = CveEstadoCancelacion + .Add("@CveEstatusFactura", SqlDbType.Int).Value = CveEstatusFactura .Add("@Cancelada", SqlDbType.SmallInt).Direction = ParameterDirection.Output End With diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index 196c9b331..4b0bd8b38 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -5681,9 +5681,9 @@ Namespace Modelos ''' ''' ''' - Public Function CancelarFactura(RealizarDevolucionAlmacen As Integer, 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, Optional ForzarDevolucion As Boolean = False, Optional CancelacionPagos As OpcionesCancelacionPagos = OpcionesCancelacionPagos.SinPagos) As MCancelacionVentaMensaje + Public Function CancelarFactura(RealizarDevolucionAlmacen As Integer, 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, Optional ForzarDevolucion As Boolean = False, Optional CancelacionPagos As OpcionesCancelacionPagos = OpcionesCancelacionPagos.SinPagos, Optional CveEstatusFacturaAsignado As Integer = -1) As MCancelacionVentaMensaje 'Comprobante emitido con errores sin relación - Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, CveEstadoCancelacion:=CveEstadoCancelacion, CancelarBoletos:=CancelarBoletos, ForzarDevolucion:=ForzarDevolucion, CancelacionPagos:=CancelacionPagos) + Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, CveEstadoCancelacion:=CveEstadoCancelacion, CancelarBoletos:=CancelarBoletos, ForzarDevolucion:=ForzarDevolucion, CancelacionPagos:=CancelacionPagos, CveEstatusFacturaAsignado:=CveEstatusFacturaAsignado, ValidarSAT:=ValidarSAT) End Function Private Function CancelarVenta(ObjFactura As Modelos.Factura, UsuarioActual As Usuario, Optional EsRefacturacion As Boolean = False, Optional RealizarDevolucionAlmacen As Integer = 0, diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index cdeeaa7fb..f407bcc48 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -26750,96 +26750,104 @@ Partial Class Ventas RFCReceptor = Me.RFCReceptorVenta End If - Dim SWatch As New Stopwatch - SWatch.Start() - Dim Vigencia As Timbrado.AcuseCancelacionSAT = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), True) + If Not UsuarioActual.Empresa.Funcionalidad(529) = "1" Then + Dim SWatch As New Stopwatch + SWatch.Start() + Dim Vigencia As Timbrado.AcuseCancelacionSAT = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), True) - SWatch.Stop() + SWatch.Stop() - Dim SegundosRespuesta As Double = SWatch.ElapsedMilliseconds / 1000 - SegundosRespuesta = SegundosRespuesta.ToEntero + Dim SegundosRespuesta As Double = SWatch.ElapsedMilliseconds / 1000 + SegundosRespuesta = SegundosRespuesta.ToEntero - If SegundosRespuesta >= 5 Then - Alert($"Los servicios de validacion del SAT presentan lentitud en la respuesta [{ SegundosRespuesta } s].", TipoMensaje.ToastAdventencia, "") - End If + If SegundosRespuesta >= 5 Then + Alert($"Los servicios de validacion del SAT presentan lentitud en la respuesta [{ SegundosRespuesta } s].", TipoMensaje.ToastAdventencia, "") + End If - If Vigencia IsNot Nothing Then - If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then + If Vigencia IsNot Nothing Then + If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then - DivRelacionadasCancelacion.Visible = True - BtnCancelarDocumento.Visible = False - DivMotivoCancelacion.Visible = False - DivMotivoCancelacionTxt.Visible = False - DivCanRem.Visible = False - DivDevAlm.Visible = False + DivRelacionadasCancelacion.Visible = True + BtnCancelarDocumento.Visible = False + DivMotivoCancelacion.Visible = False + DivMotivoCancelacionTxt.Visible = False + DivCanRem.Visible = False + DivDevAlm.Visible = False - Dim Relacionados As Timbrado.MRespUUIDRelacionados = Timbrado.ConsultarUUIDRelacionados(UsuarioActual.Empresa, FolioFiscal, UsuarioActual.Empresa.FacturaProduccion) - If Relacionados IsNot Nothing Then - If Relacionados.Codigo = 500 Then - sbExtra.Append("El servicio de verificación de documentos relacionados no esta disponible.") - Else - sbExtra.Append(Relacionados.Mensaje) - Dim SbHijos As New StringBuilder() - Dim SbPadres As New StringBuilder() + Dim Relacionados As Timbrado.MRespUUIDRelacionados = Timbrado.ConsultarUUIDRelacionados(UsuarioActual.Empresa, FolioFiscal, UsuarioActual.Empresa.FacturaProduccion) + If Relacionados IsNot Nothing Then + If Relacionados.Codigo = 500 Then + sbExtra.Append("El servicio de verificación de documentos relacionados no esta disponible.") + Else + sbExtra.Append(Relacionados.Mensaje) + Dim SbHijos As New StringBuilder() + Dim SbPadres As New StringBuilder() - 'If Relacionados.RelacionadosHijo IsNot Nothing Then - ' For Each hijo In Relacionados.RelacionadosHijo - ' SbHijos.AppendFormat("{0};", hijo.Uuid) - ' Next - ' If SbHijos.Length > 0 Then - ' SbHijos.Remove(SbHijos.Length - 1, 1) - ' End If - 'End If - - If Relacionados.RelacionadosPadre IsNot Nothing Then - For Each padre As Timbrado.RelacionadosPadre In Relacionados.RelacionadosPadre - SbPadres.AppendFormat("{0};", padre.Uuid) - Next - If SbPadres.Length > 0 Then - SbPadres.Remove(SbPadres.Length - 1, 1) - End If - End If - - Using ObjVentas As New ClsVentas - 'If SbHijos.Length > 0 Then - ' If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbHijos.ToString(), UsuarioActual.CveEmpresa) Then - ' GvFacturasHijosCancelar.DataSource = ObjVentas.DtResultados.Copy() + 'If Relacionados.RelacionadosHijo IsNot Nothing Then + ' For Each hijo In Relacionados.RelacionadosHijo + ' SbHijos.AppendFormat("{0};", hijo.Uuid) + ' Next + ' If SbHijos.Length > 0 Then + ' SbHijos.Remove(SbHijos.Length - 1, 1) ' End If 'End If - If SbPadres.Length > 0 Then - If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbPadres.ToString(), UsuarioActual.CveEmpresa) Then - GvFacturasPadreCancelar.DataSource = ObjVentas.DtResultados.FiltraParametros($"CveVenta <> {CveVenta}") + + If Relacionados.RelacionadosPadre IsNot Nothing Then + For Each padre As Timbrado.RelacionadosPadre In Relacionados.RelacionadosPadre + SbPadres.AppendFormat("{0};", padre.Uuid) + Next + If SbPadres.Length > 0 Then + SbPadres.Remove(SbPadres.Length - 1, 1) End If End If - End Using - 'GvFacturasHijosCancelar.DataBind() - GvFacturasPadreCancelar.DataBind() + Using ObjVentas As New ClsVentas + 'If SbHijos.Length > 0 Then + ' If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbHijos.ToString(), UsuarioActual.CveEmpresa) Then + ' GvFacturasHijosCancelar.DataSource = ObjVentas.DtResultados.Copy() + ' End If + 'End If + If SbPadres.Length > 0 Then + If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbPadres.ToString(), UsuarioActual.CveEmpresa) Then + GvFacturasPadreCancelar.DataSource = ObjVentas.DtResultados.FiltraParametros($"CveVenta <> {CveVenta}") + End If + End If + + End Using + 'GvFacturasHijosCancelar.DataBind() + GvFacturasPadreCancelar.DataBind() + End If End If End If - End If - If String.IsNullOrEmpty(Vigencia.EsCancelable) Then - If UsuarioActual.Empresa.FacturaProduccion AndAlso Not String.IsNullOrEmpty(FolioFiscal) Then - Alert("No se pudo encontrar el estatus de la factura en el SAT.", TipoMensaje.MsgAdvertencia) - Exit Sub + If String.IsNullOrEmpty(Vigencia.EsCancelable) Then + If UsuarioActual.Empresa.FacturaProduccion AndAlso Not String.IsNullOrEmpty(FolioFiscal) Then + Alert("No se pudo encontrar el estatus de la factura en el SAT.", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + MostrarRemisionesCancelar() + sb.Append("No encontrado
") + sb.Append("Está seguro de cancelar el documento?.") + Else + 'GUARDA EL ESTADO DE CANCELACION + If Vigencia.EsCancelable.ToUpper() = "CANCELABLE CON ACEPTACIÓN" Then + Me.CveEstadoCancelacion = 2 + ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then + Me.CveEstadoCancelacion = 1 + End If + + sb.AppendFormat("{0}
", Vigencia.EsCancelable) + If Vigencia.EsCancelable.ToUpper() <> "NO CANCELABLE" Then + MostrarRemisionesCancelar() + sb.Append("Está seguro de cancelar el documento?.") + End If End If + + + Else MostrarRemisionesCancelar() sb.Append("No encontrado
") sb.Append("Está seguro de cancelar el documento?.") - Else - 'GUARDA EL ESTADO DE CANCELACION - If Vigencia.EsCancelable.ToUpper() = "CANCELABLE CON ACEPTACIÓN" Then - Me.CveEstadoCancelacion = 2 - ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then - Me.CveEstadoCancelacion = 1 - End If - - sb.AppendFormat("{0}
", Vigencia.EsCancelable) - If Vigencia.EsCancelable.ToUpper() <> "NO CANCELABLE" Then - MostrarRemisionesCancelar() - sb.Append("Está seguro de cancelar el documento?.") - End If End If Else MostrarRemisionesCancelar() @@ -27073,12 +27081,17 @@ Partial Class Ventas If EsRefacturacion Then + Dim ValidarSAT As Boolean = True + If UsuarioActual.Empresa.Funcionalidad(529) = "1" Then + ValidarSAT = False + End If + 'Dim msgBitacora As String = $"Motivo de refacturación: {TxtMotivoRefac.Text}" 'Dim ObjE As New ClsOIEventos() 'ObjE.AddEventoBitacora(msgBitacora, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) 'ObjE.Dispose() - resp = ObjFacturaCancelacion.CancelarPorRefacturacion(DdlMotivoRefacturacion.SelectedValue.ToEntero(), TxtMotivoRefac.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion) + resp = ObjFacturaCancelacion.CancelarPorRefacturacion(DdlMotivoRefacturacion.SelectedValue.ToEntero(), TxtMotivoRefac.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion, ValidarSAT:=ValidarSAT) strMensaje.Append(resp.Mensaje) Else Dim ListaRemisionesCancelar As New List(Of Integer) @@ -27135,7 +27148,26 @@ Partial Class Ventas End If - resp = ObjFacturaCancelacion.CancelarFactura(If(ChkDevAlm.Checked, 1, 0), ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion, ForzarDevolucion:=GenerarDevolucionAnticipada, CancelacionPagos:=CancelacionPagos) + Dim ValidarSAT As Boolean = True + Dim CveEstatusFacturaAsignado As Integer = -1 + If UsuarioActual.Empresa.Funcionalidad(529) = "1" Then + ValidarSAT = False + + Dim diasTimbrado As Decimal = DateDiff(DateInterval.Day, ObjFacturaCancelacion.FechaCP, ClsPaginas.NowADS()) + + 'CANCELACION SIN ACEPTACION + Me.CveEstadoCancelacion = 2 + 'CANCELACION CON ACEPTACION + If ObjFacturaCancelacion.Total < 1000D OrElse diasTimbrado <= 1 OrElse ObjFacturaCancelacion.Cliente.RFC.Contiene("XAXX010101000", "XEXX010101000") Then + Me.CveEstadoCancelacion = 1 + End If + + ObjFacturaCancelacion.CveEstadoCancelacion = Me.CveEstadoCancelacion + + CveEstatusFacturaAsignado = 4 + End If + + resp = ObjFacturaCancelacion.CancelarFactura(If(ChkDevAlm.Checked, 1, 0), ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion, ForzarDevolucion:=GenerarDevolucionAnticipada, CancelacionPagos:=CancelacionPagos, ValidarSAT:=ValidarSAT, CveEstatusFacturaAsignado:=CveEstatusFacturaAsignado) strMensaje.Append(resp.Mensaje) Dim DtBonificaciones As DataTable = Nothing