From 523b27d4b26766c48d4209dea9a7a64ab72f6433 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Mon, 21 Dec 2020 10:54:19 -0700 Subject: [PATCH] Funcionalidad de verificacion ante el sat --- App_Code/Modelos.vb | 116 ++++++++++++++++++++++++------------------- App_Code/Timbrado.vb | 16 +++--- 2 files changed, 75 insertions(+), 57 deletions(-) diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index 1dead2777..732c68020 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -4407,63 +4407,79 @@ Namespace Modelos If ObjFactura.FolioFiscal <> "" Then If ObjFactura.TipoDocto.Contiene("Ing", "Ant", "Dev", "Egs") Then - Dim Vigencia = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), UsuarioActual.Empresa.FacturaProduccion) + 'VERIFICA SI DEBE VALIDAR ANTE EL SAT + If Not (UsuarioActual.Empresa.Funcionalidad(529) = "1") Then - If Vigencia IsNot Nothing Then - If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then - Retorno.Mensaje = "Esta factura no es cancelable." + Dim Vigencia = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), UsuarioActual.Empresa.FacturaProduccion) + + If Vigencia IsNot Nothing Then + If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then + Retorno.Mensaje = "Esta factura no es cancelable." + Retorno.TipoMensaje = TipoMensaje.MsgAdvertencia + + Return Retorno + End If + If Vigencia.Estado.ToUpper().Contains("CANCELADO") Then + ContinuarCancelacion = False + ObtenerAcuse = True + Dim solicitud = New WSGF.Service1SoapClient() + Dim acuse = solicitud.GetAcuse(UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx", "rene2018", FolioFiscal) + + If acuse.Estado = 0 Then + Dim xmlAcuse = New System.Xml.XmlDocument() + xmlAcuse.LoadXml(DecodeBase64(acuse.CfdiB64)) + CancelacionAcuse = xmlAcuse.GetElementsByTagName("SignatureValue")(0).InnerText + CancelacionFecha = xmlAcuse.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate() + CveEstatus = 5 + Else + CancelacionFecha = Now.Date + CancelacionAcuse = "" + CveEstatus = 5 + End If + + ElseIf Vigencia.Estado.ToUpper().Contains("VIGENTE") Then + + If Vigencia.EstatusCancelacion.ToUpper() = "EN PROCESO" Then + CveEstatus = 20 + ContinuarCancelacion = False + ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE CON ACEPTACIÓN" Then + CveEstatus = 20 + ContinuarCancelacion = True + RequiereAceptacion = True + ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then + ContinuarCancelacion = True + CveEstatus = 5 + End If + + Else + If Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then + ContinuarCancelacion = True + CveEstatus = 5 + Else + CveEstatus = 20 + ContinuarCancelacion = False + CancelacionFecha = Now.Date + CancelacionAcuse = "" + End If + End If + Else + Retorno.Mensaje = "SAT - No se pudo verificar el estatus de la factura." Retorno.TipoMensaje = TipoMensaje.MsgAdvertencia Return Retorno End If - If Vigencia.Estado.ToUpper().Contains("CANCELADO") Then - ContinuarCancelacion = False - ObtenerAcuse = True - Dim solicitud = New WSGF.Service1SoapClient() - Dim acuse = solicitud.GetAcuse(UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx", "rene2018", FolioFiscal) - - If acuse.Estado = 0 Then - Dim xmlAcuse = New System.Xml.XmlDocument() - xmlAcuse.LoadXml(DecodeBase64(acuse.CfdiB64)) - CancelacionAcuse = xmlAcuse.GetElementsByTagName("SignatureValue")(0).InnerText - CancelacionFecha = xmlAcuse.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate() - CveEstatus = 5 - Else - CancelacionFecha = Now.Date - CancelacionAcuse = "" - CveEstatus = 5 - End If - - ElseIf Vigencia.Estado.ToUpper().Contains("VIGENTE") Then - - If Vigencia.EstatusCancelacion.ToUpper() = "EN PROCESO" Then - CveEstatus = 20 - ContinuarCancelacion = False - ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE CON ACEPTACIÓN" Then - CveEstatus = 20 - ContinuarCancelacion = True - RequiereAceptacion = True - ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then - ContinuarCancelacion = True - CveEstatus = 5 - End If - - Else - If Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then - ContinuarCancelacion = True - CveEstatus = 5 - Else - CveEstatus = 20 - ContinuarCancelacion = False - CancelacionFecha = Now.Date - CancelacionAcuse = "" - End If - End If Else - Retorno.Mensaje = "SAT - No se pudo verificar el estatus de la factura." - Retorno.TipoMensaje = TipoMensaje.MsgAdvertencia + ObtenerAcuse = False + ContinuarCancelacion = True + CancelacionFecha = Now.Date + CancelacionAcuse = "" + + Dim diasTimbrado As Decimal = DateDiff(DateInterval.Day, ObjFactura.FechaCP, Now) + + If ObjFactura.Total < 5000D OrElse diasTimbrado <= 3 OrElse ObjFactura.Cliente.RFC.Contiene("XAXX010101000", "XEXX010101000") Then + RequiereAceptacion = False + End If - Return Retorno End If If Not ObtenerAcuse Then diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index e4cda96bc..d4788ee22 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -59,18 +59,20 @@ Public Class Timbrado 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) As Boolean Dim Retorno As Boolean = False Dim MsgCancelacion As New StringBuilder - If ValidaFactura Then - Dim Vigencia = VerificarVigenciaSAT(FolioFiscal, RFCEmisor, RFCReceptor, Total.ToString(), True) - If Vigencia IsNot Nothing Then - If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then + + If Not (Empresa.Funcionalidad(529) = "1") Then + If ValidaFactura Then + Dim Vigencia = VerificarVigenciaSAT(FolioFiscal, RFCEmisor, RFCReceptor, Total.ToString(), True) + If Vigencia IsNot Nothing Then + If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then + Return False + End If + Else Return False End If - Else - Return False End If End If - MsgCancelacion.AppendFormat("CvePAC:{0}", CvePACCancelacion) Select Case CvePACCancelacion