--FIX. Forzar cancelacion de factura
This commit is contained in:
@@ -1142,7 +1142,7 @@ Public Class ClsVentas
|
|||||||
|
|
||||||
Return Retorno
|
Return Retorno
|
||||||
End Function
|
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
|
Dim Retorno As Boolean = False
|
||||||
|
|
||||||
DataAdapter("PA_Vta_VentasCancelacion")
|
DataAdapter("PA_Vta_VentasCancelacion")
|
||||||
@@ -1156,6 +1156,7 @@ Public Class ClsVentas
|
|||||||
.Add("@CveEstatusRefacturacion", SqlDbType.TinyInt).Value = CveEstatusRefacturacion
|
.Add("@CveEstatusRefacturacion", SqlDbType.TinyInt).Value = CveEstatusRefacturacion
|
||||||
.Add("@EstadoCancelacion", SqlDbType.VarChar).Value = EstadoCancelacion
|
.Add("@EstadoCancelacion", SqlDbType.VarChar).Value = EstadoCancelacion
|
||||||
.Add("@CveEstadoCancelacion", SqlDbType.TinyInt).Value = CveEstadoCancelacion
|
.Add("@CveEstadoCancelacion", SqlDbType.TinyInt).Value = CveEstadoCancelacion
|
||||||
|
.Add("@CveEstatusFactura", SqlDbType.Int).Value = CveEstatusFactura
|
||||||
.Add("@Cancelada", SqlDbType.SmallInt).Direction = ParameterDirection.Output
|
.Add("@Cancelada", SqlDbType.SmallInt).Direction = ParameterDirection.Output
|
||||||
End With
|
End With
|
||||||
|
|
||||||
|
|||||||
@@ -5681,9 +5681,9 @@ Namespace Modelos
|
|||||||
''' <param name="RealizarDevolucionAlmacen"></param>
|
''' <param name="RealizarDevolucionAlmacen"></param>
|
||||||
''' <param name="ListaRemisionesCancelar"></param>
|
''' <param name="ListaRemisionesCancelar"></param>
|
||||||
''' <returns></returns>
|
''' <returns></returns>
|
||||||
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
|
'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
|
End Function
|
||||||
|
|
||||||
Private Function CancelarVenta(ObjFactura As Modelos.Factura, UsuarioActual As Usuario, Optional EsRefacturacion As Boolean = False, Optional RealizarDevolucionAlmacen As Integer = 0,
|
Private Function CancelarVenta(ObjFactura As Modelos.Factura, UsuarioActual As Usuario, Optional EsRefacturacion As Boolean = False, Optional RealizarDevolucionAlmacen As Integer = 0,
|
||||||
|
|||||||
@@ -26750,96 +26750,104 @@ Partial Class Ventas
|
|||||||
RFCReceptor = Me.RFCReceptorVenta
|
RFCReceptor = Me.RFCReceptorVenta
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Dim SWatch As New Stopwatch
|
If Not UsuarioActual.Empresa.Funcionalidad(529) = "1" Then
|
||||||
SWatch.Start()
|
Dim SWatch As New Stopwatch
|
||||||
Dim Vigencia As Timbrado.AcuseCancelacionSAT = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), True)
|
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
|
Dim SegundosRespuesta As Double = SWatch.ElapsedMilliseconds / 1000
|
||||||
SegundosRespuesta = SegundosRespuesta.ToEntero
|
SegundosRespuesta = SegundosRespuesta.ToEntero
|
||||||
|
|
||||||
If SegundosRespuesta >= 5 Then
|
If SegundosRespuesta >= 5 Then
|
||||||
Alert($"Los servicios de validacion del SAT presentan lentitud en la respuesta [{ SegundosRespuesta } s].", TipoMensaje.ToastAdventencia, "")
|
Alert($"Los servicios de validacion del SAT presentan lentitud en la respuesta [{ SegundosRespuesta } s].", TipoMensaje.ToastAdventencia, "")
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If Vigencia IsNot Nothing Then
|
If Vigencia IsNot Nothing Then
|
||||||
If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
|
If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
|
||||||
|
|
||||||
DivRelacionadasCancelacion.Visible = True
|
DivRelacionadasCancelacion.Visible = True
|
||||||
BtnCancelarDocumento.Visible = False
|
BtnCancelarDocumento.Visible = False
|
||||||
DivMotivoCancelacion.Visible = False
|
DivMotivoCancelacion.Visible = False
|
||||||
DivMotivoCancelacionTxt.Visible = False
|
DivMotivoCancelacionTxt.Visible = False
|
||||||
DivCanRem.Visible = False
|
DivCanRem.Visible = False
|
||||||
DivDevAlm.Visible = False
|
DivDevAlm.Visible = False
|
||||||
|
|
||||||
Dim Relacionados As Timbrado.MRespUUIDRelacionados = Timbrado.ConsultarUUIDRelacionados(UsuarioActual.Empresa, FolioFiscal, UsuarioActual.Empresa.FacturaProduccion)
|
Dim Relacionados As Timbrado.MRespUUIDRelacionados = Timbrado.ConsultarUUIDRelacionados(UsuarioActual.Empresa, FolioFiscal, UsuarioActual.Empresa.FacturaProduccion)
|
||||||
If Relacionados IsNot Nothing Then
|
If Relacionados IsNot Nothing Then
|
||||||
If Relacionados.Codigo = 500 Then
|
If Relacionados.Codigo = 500 Then
|
||||||
sbExtra.Append("El servicio de verificación de documentos relacionados no esta disponible.")
|
sbExtra.Append("El servicio de verificación de documentos relacionados no esta disponible.")
|
||||||
Else
|
Else
|
||||||
sbExtra.Append(Relacionados.Mensaje)
|
sbExtra.Append(Relacionados.Mensaje)
|
||||||
Dim SbHijos As New StringBuilder()
|
Dim SbHijos As New StringBuilder()
|
||||||
Dim SbPadres As New StringBuilder()
|
Dim SbPadres As New StringBuilder()
|
||||||
|
|
||||||
'If Relacionados.RelacionadosHijo IsNot Nothing Then
|
'If Relacionados.RelacionadosHijo IsNot Nothing Then
|
||||||
' For Each hijo In Relacionados.RelacionadosHijo
|
' For Each hijo In Relacionados.RelacionadosHijo
|
||||||
' SbHijos.AppendFormat("{0};", hijo.Uuid)
|
' SbHijos.AppendFormat("{0};", hijo.Uuid)
|
||||||
' Next
|
' Next
|
||||||
' If SbHijos.Length > 0 Then
|
' If SbHijos.Length > 0 Then
|
||||||
' SbHijos.Remove(SbHijos.Length - 1, 1)
|
' 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()
|
|
||||||
' End If
|
' End If
|
||||||
'End If
|
'End If
|
||||||
If SbPadres.Length > 0 Then
|
|
||||||
If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbPadres.ToString(), UsuarioActual.CveEmpresa) Then
|
If Relacionados.RelacionadosPadre IsNot Nothing Then
|
||||||
GvFacturasPadreCancelar.DataSource = ObjVentas.DtResultados.FiltraParametros($"CveVenta <> {CveVenta}")
|
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 If
|
End If
|
||||||
|
|
||||||
End Using
|
Using ObjVentas As New ClsVentas
|
||||||
'GvFacturasHijosCancelar.DataBind()
|
'If SbHijos.Length > 0 Then
|
||||||
GvFacturasPadreCancelar.DataBind()
|
' 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
|
End If
|
||||||
End If
|
|
||||||
|
|
||||||
If String.IsNullOrEmpty(Vigencia.EsCancelable) Then
|
If String.IsNullOrEmpty(Vigencia.EsCancelable) Then
|
||||||
If UsuarioActual.Empresa.FacturaProduccion AndAlso Not String.IsNullOrEmpty(FolioFiscal) 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)
|
Alert("No se pudo encontrar el estatus de la factura en el SAT.", TipoMensaje.MsgAdvertencia)
|
||||||
Exit Sub
|
Exit Sub
|
||||||
|
End If
|
||||||
|
MostrarRemisionesCancelar()
|
||||||
|
sb.Append("<b>No encontrado</b> <br/>")
|
||||||
|
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("<b>{0}</b> <br/>", Vigencia.EsCancelable)
|
||||||
|
If Vigencia.EsCancelable.ToUpper() <> "NO CANCELABLE" Then
|
||||||
|
MostrarRemisionesCancelar()
|
||||||
|
sb.Append("Está seguro de cancelar el documento?.")
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
Else
|
||||||
MostrarRemisionesCancelar()
|
MostrarRemisionesCancelar()
|
||||||
sb.Append("<b>No encontrado</b> <br/>")
|
sb.Append("<b>No encontrado</b> <br/>")
|
||||||
sb.Append("Está seguro de cancelar el documento?.")
|
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("<b>{0}</b> <br/>", Vigencia.EsCancelable)
|
|
||||||
If Vigencia.EsCancelable.ToUpper() <> "NO CANCELABLE" Then
|
|
||||||
MostrarRemisionesCancelar()
|
|
||||||
sb.Append("Está seguro de cancelar el documento?.")
|
|
||||||
End If
|
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
MostrarRemisionesCancelar()
|
MostrarRemisionesCancelar()
|
||||||
@@ -27073,12 +27081,17 @@ Partial Class Ventas
|
|||||||
|
|
||||||
If EsRefacturacion Then
|
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 msgBitacora As String = $"Motivo de refacturación: {TxtMotivoRefac.Text}"
|
||||||
'Dim ObjE As New ClsOIEventos()
|
'Dim ObjE As New ClsOIEventos()
|
||||||
'ObjE.AddEventoBitacora(msgBitacora, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta)
|
'ObjE.AddEventoBitacora(msgBitacora, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta)
|
||||||
'ObjE.Dispose()
|
'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)
|
strMensaje.Append(resp.Mensaje)
|
||||||
Else
|
Else
|
||||||
Dim ListaRemisionesCancelar As New List(Of Integer)
|
Dim ListaRemisionesCancelar As New List(Of Integer)
|
||||||
@@ -27135,7 +27148,26 @@ Partial Class Ventas
|
|||||||
|
|
||||||
End If
|
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)
|
strMensaje.Append(resp.Mensaje)
|
||||||
Dim DtBonificaciones As DataTable = Nothing
|
Dim DtBonificaciones As DataTable = Nothing
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user