-- al cancelar. que tenga doble validación al confirmar, y retorna un nuevo tipo de dato.

This commit is contained in:
2022-02-24 10:32:24 -07:00
parent ef087d5d1c
commit c9b9b513fe
5 changed files with 104 additions and 48 deletions

View File

@@ -3345,7 +3345,9 @@ Public Class ClsVentas
'SOLO SI ESTA CANCELADA ANTE SAT EN SIG SE INTENTARA CANCELAR DE NUEVO CONTRA EL SAT
If CveEstatus = 5 Then
If ObjCancelacion.CFDICancelar(Usuario.Empresa, FolioFiscal, Total, RFCReceptor, Usuario.Empresa.RFC) Then
Dim Resp As RespuestaCancelacionSAT = ObjCancelacion.CFDICancelar(Usuario.Empresa, FolioFiscal, Total, RFCReceptor, Usuario.Empresa.RFC)
If Resp.Verificado Then
If Not ObjVentas.UpdateEstatusFactura(5, FolioFiscal, ObjCancelacion.CancelacionAcuse, Now, PCveVenta.ToEntero, -1, CvePAC:=Usuario.Empresa.CvePAC) Then
CveVentasError.Add(PCveVenta.ToEntero)
End If

View File

@@ -4909,7 +4909,8 @@ Namespace Modelos
'SI NO SE PUDO OBTENER DEL SERVICIO, UTILIZA EL METODO DE CANCELACION PARA OBTENER EL ACUSE
If CancelacionAcuse = "" Then
If ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, TotalT, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion, CveSATMotivoCancelacion:=CveSATMotivoCancelacion, FolioSustitucion:=FolioSustitucion) Then
Dim Resp As RespuestaCancelacionSAT = ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, TotalT, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion, CveSATMotivoCancelacion:=CveSATMotivoCancelacion, FolioSustitucion:=FolioSustitucion)
If Resp.Verificado Then
'GENERAMOS EL ACUSE Y MANDAMOS MAIL DE CON EL ACUSE DE CANCELACIÓN
If RequiereAceptacion Then
CancelacionFecha = Now.Date
@@ -4988,15 +4989,18 @@ Namespace Modelos
If Not ObtenerAcuse Then
If ContinuarCancelacion Then
If ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, TotalT, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion:=CvePACCancelacion, ValidaFactura:=ValidarSAT, CveSATMotivoCancelacion:=CveSATMotivoCancelacion, FolioSustitucion:=FolioSustitucion) Then
Dim Resp As RespuestaCancelacionSAT = ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, TotalT, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion:=CvePACCancelacion, ValidaFactura:=ValidarSAT, CveSATMotivoCancelacion:=CveSATMotivoCancelacion, FolioSustitucion:=FolioSustitucion)
If Resp.Verificado Then
'GENERAMOS EL ACUSE Y MANDAMOS MAIL DE CON EL ACUSE DE CANCELACIÓN
If RequiereAceptacion Then
CancelacionFecha = Now.Date
CveEstatus = 20
Else
CancelacionFecha = ObjCancelacion.CancelacionFecha
CveEstatus = 5
End If
'If Resp.cve Then
' CancelacionFecha = Now.Date
' CveEstatus = 20
'Else
' CancelacionFecha = ObjCancelacion.CancelacionFecha
' CveEstatus = 5
'End If
CveEstatus = Resp.CveEstatus
CancelacionFecha = Resp.CancelacionFecha
CancelacionAcuse = ObjCancelacion.CancelacionAcuse
Else
Retorno.Mensaje = "Los servicios de cancelación del SAT no se encuentran disponibles o presentan time out. Intente de nuevo en unos minutos.<br/>Origen del error: WebService www.sat.gob.mx"
@@ -5098,7 +5102,7 @@ Namespace Modelos
If Not AplicaRefacturacionConPagos AndAlso ((((ObjFactura.Saldo > 0 AndAlso (CveEstatus > 0 AndAlso Not CveEstatus.Contiene(20, 23))) OrElse (ObjFactura.Total = 0 AndAlso UsuarioActual.CveEmpresa.Contiene(72) AndAlso ObjFactura.TipoDocto.Contiene("Ing"))) AndAlso CveEstatus.Contiene(4, 5)) OrElse (CvePlantillaPoliza = 7 AndAlso (CveEstatus > 0 AndAlso Not CveEstatus.Contiene(20, 23)))) Then
'CUANDO SE CANCELA, LA PÓLIZA DEBE DE SER DE DIARIO
CvePrePoliza = ObjConta.AddPrePolizas("Modelos/CancelarDocumento", CvePlantillaPoliza, ObjFactura.Total, ObjFactura.Total, ObjFactura.CveMoneda, Now, ObjFactura.Cliente.Nombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoPoliza:=3)
CvePrePoliza = ObjConta.AddPrePolizas("Modelos/CancelarDocumento", CvePlantillaPoliza, ObjFactura.Total, ObjFactura.Total, ObjFactura.CveMoneda, CancelacionFecha, ObjFactura.Cliente.Nombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoPoliza:=3)
ObjFactura.CvePrePoliza = CvePrePoliza
If ObjFactura.CvePrePoliza <= 0 Then
@@ -6128,7 +6132,9 @@ Namespace Modelos
ErrorCancelar = True
End If
If ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, Total, RFCReceptor, UsuarioActual.Empresa.RFC) Then
Dim Resp As RespuestaCancelacionSAT = ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, Total, RFCReceptor, UsuarioActual.Empresa.RFC)
If Resp.Verificado Then
'falta verificar traer el acuse y reenviarlo
If UsuarioActual.Empresa.UsaAC Then
Dim Pol As Modelos.RetornoPolizaConta = GenerarPolizaAC(Me, ObjAC, True)

View File

@@ -111,7 +111,8 @@ Public Class Timbrado
End If
solicitud = Nothing
Else
If CFDICancelar(UsuarioActual.Empresa, FolioFiscal, TotalT, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion, CveSATMotivoCancelacion:=CveSATMotivoCancelacion, FolioSustitucion:=FolioSustitucion) Then
Dim Resp As RespuestaCancelacionSAT = CFDICancelar(UsuarioActual.Empresa, FolioFiscal, TotalT, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion, CveSATMotivoCancelacion:=CveSATMotivoCancelacion, FolioSustitucion:=FolioSustitucion)
If Resp.Verificado Then
'GENERAMOS EL ACUSE Y MANDAMOS MAIL DE CON EL ACUSE DE CANCELACIÓN
CancelacionFecha = Me.CancelacionFecha
CancelacionAcuse = Me.CancelacionAcuse
@@ -206,8 +207,8 @@ Public Class Timbrado
Return Retorno
End Function
Public Function CFDICancelar(Empresa As Empresa, FolioFiscal As String, Total As Decimal, RFCReceptor As String, RFCEmisor As String, Optional CvePACCancelacion As Integer = 2, Optional ValidaFactura As Boolean = True, Optional CveSATMotivoCancelacion As Integer = -1, Optional FolioSustitucion As String = "") As Boolean
Dim Retorno As Boolean = False
Public Function CFDICancelar(Empresa As Empresa, FolioFiscal As String, Total As Decimal, RFCReceptor As String, RFCEmisor As String, Optional CvePACCancelacion As Integer = 2, Optional ValidaFactura As Boolean = True, Optional CveSATMotivoCancelacion As Integer = -1, Optional FolioSustitucion As String = "") As RespuestaCancelacionSAT
Dim Retorno As New RespuestaCancelacionSAT
Dim MsgCancelacion As New StringBuilder
If CvePACCancelacion = 3 Then
@@ -219,10 +220,14 @@ Public Class Timbrado
Dim Vigencia = VerificarVigenciaSAT(FolioFiscal, RFCEmisor, RFCReceptor, Total.ToString(), True)
If Vigencia IsNot Nothing Then
If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
Return False
Retorno.Estado = "NO CANCELABLE"
Retorno.Verificado = False
Return Retorno
End If
Else
Return False
Retorno.Estado = "NO VALIDADO"
Retorno.Verificado = False
Return Retorno
End If
End If
End If
@@ -277,7 +282,10 @@ Public Class Timbrado
Catch ex As Exception
CancelacionFecha = xmlDoc.GetElementsByTagName("CancelaCFDResult")(0).Attributes("Fecha").Value.ToDate
End Try
Retorno = True
Retorno.Verificado = True
Retorno.CancelacionFecha = CancelacionFecha
Retorno.CancelacionAcuse = CancelacionAcuse
End If
'End If
@@ -324,15 +332,15 @@ Public Class Timbrado
#Region "Valida"
If Not File.Exists(ArchivoCertificado) Then
Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End If
If Not File.Exists(ArchivoLLave) Then
Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End If
If Empresa.ContraseñaKey = "" Then
Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End If
#End Region
@@ -351,7 +359,7 @@ Public Class Timbrado
llaveBase64 = Convert.ToBase64String(llaveByte)
Catch ex As Exception
Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End Try
@@ -360,8 +368,7 @@ Public Class Timbrado
certBase64 = Convert.ToBase64String(certByte)
Catch ex As Exception
Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End Try
#End Region
@@ -430,10 +437,14 @@ Public Class Timbrado
CancelacionAcuse = xmlDoc.GetElementsByTagName("SignatureValue")(0).InnerText
CancelacionFecha = xmlDoc.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate
Retorno = True
Retorno.Verificado = True
Retorno.CancelacionFecha = CancelacionFecha
Retorno.CancelacionAcuse = CancelacionAcuse
Else
CancelacionAcuse = resp.MensajeDeError
Retorno = False
Retorno.Verificado = True
Retorno.CancelacionFecha = CancelacionFecha
Retorno.CancelacionAcuse = CancelacionAcuse
End If
solicitud = Nothing
Case 4
@@ -456,10 +467,13 @@ Public Class Timbrado
CancelacionAcuse = xmlDoc.GetElementsByTagName("SignatureValue")(0).InnerText
CancelacionFecha = xmlDoc.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate
Retorno = True
Retorno.Verificado = True
Retorno.CancelacionFecha = CancelacionFecha
Retorno.CancelacionAcuse = CancelacionAcuse
Else
CancelacionAcuse = resp.Descripcion
Retorno = False
Retorno.Verificado = True
Retorno.CancelacionAcuse = CancelacionAcuse
End If
solicitud = Nothing
End Select
@@ -468,7 +482,7 @@ Public Class Timbrado
End If
Catch ex As Exception
CancelacionMensaje += $" | ex: {ex}"
Retorno = False
Retorno.Verificado = False
End Try
'Libera memoria
@@ -503,15 +517,15 @@ Public Class Timbrado
#Region "Valida"
If Not File.Exists(ArchivoCertificado) Then
Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End If
If Not File.Exists(ArchivoLLave) Then
Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End If
If Empresa.ContraseñaKey = "" Then
Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End If
#End Region
@@ -561,16 +575,19 @@ Public Class Timbrado
MsgCancelacion.AppendFormat("-3.4.3")
CancelacionAcuse = xmlDoc.GetElementsByTagName("SignatureValue")(0).InnerText
CancelacionFecha = xmlDoc.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate
Retorno.CancelacionAcuse = CancelacionAcuse
Retorno.CancelacionFecha = CancelacionFecha
Else
CancelacionFecha = Now
End If
Retorno.Verificado = True
Retorno = True
Else
MsgCancelacion.AppendFormat("-3.5")
CancelacionAcuse = resp.NumeroError
CancelacionMensaje = resultadoCancelacion.Descripcion
Retorno = False
Retorno.Verificado = True
End If
Case 4
@@ -599,15 +616,15 @@ Public Class Timbrado
#Region "Valida"
If Not File.Exists(ArchivoCertificado) Then
Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End If
If Not File.Exists(ArchivoLLave) Then
Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End If
If Empresa.ContraseñaKey = "" Then
Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End If
#End Region
@@ -627,7 +644,7 @@ Public Class Timbrado
llaveBase64 = Convert.ToBase64String(llaveByte)
Catch ex As Exception
Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End Try
@@ -636,8 +653,7 @@ Public Class Timbrado
certBase64 = Convert.ToBase64String(certByte)
Catch ex As Exception
Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End Try
#End Region
objCan.CancelacionCfdi = True
@@ -662,7 +678,9 @@ Public Class Timbrado
CancelacionAcuse = xmlDoc.GetElementsByTagName("SignatureValue")(0).InnerText
CancelacionFecha = xmlDoc.DocumentElement.Attributes("Fecha").Value.ToDate
Retorno = True
Retorno.Verificado = True
Retorno.CancelacionAcuse = CancelacionAcuse
Retorno.CancelacionFecha = CancelacionFecha
MsgCancelacion.AppendFormat("4.5.2-")
End If
@@ -671,7 +689,6 @@ Public Class Timbrado
Case 5
CancelacionAcuse = ""
Retorno = False
MsgCancelacion.AppendFormat("5.1-")
Dim TimbraProduccion As Boolean = True
@@ -700,7 +717,7 @@ Public Class Timbrado
llaveBase64 = Convert.ToBase64String(llaveByte)
Catch ex As Exception
Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End Try
Try
@@ -708,7 +725,7 @@ Public Class Timbrado
certBase64 = Convert.ToBase64String(certByte)
Catch ex As Exception
Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError)
Return False
Retorno.Verificado = False
End Try
Dim Contrato As String = "72330711-cac6-4106-8051-cbcda1aef495"
@@ -734,8 +751,11 @@ Public Class Timbrado
'EN PROCESO, CANCELABLE SIN ACEPTACION,CANCEALDO PREVIAMENTE
If cancelacion.codigo.Contiene("96", "201", "202") Then
CancelacionFecha = Now
Retorno = True
CancelacionAcuse = result.acuseCancelBase64
Retorno.Verificado = True
Retorno.CancelacionAcuse = CancelacionAcuse
Retorno.CancelacionFecha = CancelacionFecha
End If
CancelacionMensaje = cancelacion.mensaje
Else
@@ -749,8 +769,25 @@ Public Class Timbrado
End If
End Select
'valida que si se halla cancelado
Dim VigenciaExtra = VerificarVigenciaSAT(FolioFiscal, RFCEmisor, RFCReceptor, Total.ToString(), True)
If Retorno.Verificado AndAlso VigenciaExtra IsNot Nothing Then
If VigenciaExtra.Estado.ToUpper = "VIGENTE" AndAlso Not VigenciaExtra.EstatusCancelacion.ToUpper.Contiene("EN PROCESO") Then
Retorno.Estado = "VIGENTE"
Retorno.CveEstatus = 23
End If
If VigenciaExtra.Estado.ToUpper = "VIGENTE" AndAlso VigenciaExtra.EstatusCancelacion.ToUpper.Contiene("EN PROCESO") Then
Retorno.Estado = "EN PROCESO"
Retorno.CveEstatus = 20
End If
If VigenciaExtra.Estado.ToUpper = "CANCELADO" Then
Retorno.Estado = "CANCELADO"
Retorno.CveEstatus = 5
End If
If Not Retorno Then
End If
If Not Retorno.Verificado Then
GuardaLog($"****** Error al cancelar factura ****** Estatus: {CancelacionState} | Mensaje: {CancelacionMensaje} | Mensaje SAT: {MsgCancelacion.ToString} ")
End If

View File

@@ -67,8 +67,9 @@ Public Class WsSIGWeb
'SOLO SI ESTA CANCELADA ANTE SAT EN SIG SE INTENTARA CANCELAR DE NUEVO CONTRA EL SAT
If CveEstatus = 5 Then
If ObjCancelacion.CFDICancelar(Usuario.Empresa, FolioFiscal, Total, RFCReceptor, Usuario.Empresa.RFC) Then
If ObjVentas.UpdateEstatusFactura(5, FolioFiscal, ObjCancelacion.CancelacionAcuse, Now, PCveVenta.ToEntero, -1, CvePAC:=Usuario.Empresa.CvePAC) Then
Dim Resp As RespuestaCancelacionSAT = ObjCancelacion.CFDICancelar(Usuario.Empresa, FolioFiscal, Total, RFCReceptor, Usuario.Empresa.RFC)
If Resp.Verificado Then
If ObjVentas.UpdateEstatusFactura(5, FolioFiscal, ObjCancelacion.CancelacionAcuse, Resp.CancelacionFecha, PCveVenta.ToEntero, -1, CvePAC:=Usuario.Empresa.CvePAC) Then
Retorno = True
Else
MensajeError = $"Ocurrió un error al actualizar la cancelación la CveVenta {PCveVenta}"

View File

@@ -147,6 +147,16 @@ Namespace Extensiones
End If
End Function
Public Class RespuestaCancelacionSAT
Public Property Verificado As Boolean = False
Public Property CveEstatus As Integer = 0
Public Property Estado As String = ""
Public Property EstatusCancelacion As String = ""
Public Property CancelacionFecha As Date
Public Property CancelacionAcuse As String = ""
End Class
#Region "Log"
<Runtime.CompilerServices.Extension()>