-- al cancelar. que tenga doble validación al confirmar, y retorna un nuevo tipo de dato.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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()>
|
||||
|
||||
Reference in New Issue
Block a user