--cambio a stimul

-- verificación en cancelaciones
This commit is contained in:
2023-09-27 07:14:24 -07:00
parent 2f0d3775ec
commit e3072dbaf2
3 changed files with 40 additions and 299 deletions

View File

@@ -4426,7 +4426,7 @@ Public Class ClsPaginas
End Sub End Sub
Private Shared Function GetCurrentPageViewState() As System.Web.UI.StateBag Private Shared Function GetCurrentPageViewState() As System.Web.UI.StateBag
Dim page As Page = TryCast(HttpContext.Current.CurrentHandler, Page) Dim page As Page = TryCast(HttpContext.Current.CurrentHandler, Page)
Dim viewStateProp = page?.[GetType]().GetProperty("ViewState", Reflection.BindingFlags.FlattenHierarchy Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic) Dim viewStateProp As Reflection.PropertyInfo = page?.[GetType]().GetProperty("ViewState", Reflection.BindingFlags.FlattenHierarchy Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
Return CType(viewStateProp?.GetValue(page), System.Web.UI.StateBag) Return CType(viewStateProp?.GetValue(page), System.Web.UI.StateBag)
End Function End Function
Public Shared Sub Alert(Mensaje As String, Optional pOpcion As TipoMensaje = TipoMensaje.MsgInformacion, Optional JSBtnAceptar As String = "", Optional timeout As Integer = 5, Optional ShowCloseButton As Boolean = True, Optional TextoConfirmacion As String = "", Optional TextoSegundoBoton As String = "", Optional JSBtn2 As String = "") Public Shared Sub Alert(Mensaje As String, Optional pOpcion As TipoMensaje = TipoMensaje.MsgInformacion, Optional JSBtnAceptar As String = "", Optional timeout As Integer = 5, Optional ShowCloseButton As Boolean = True, Optional TextoConfirmacion As String = "", Optional TextoSegundoBoton As String = "", Optional JSBtn2 As String = "")
@@ -4521,11 +4521,11 @@ Public Class ClsPaginas
End Sub End Sub
Public Sub NotificacionesPendientes(Nota As String) Public Sub NotificacionesPendientes(Nota As String)
'incremento el contador de alertas 'incremento el contador de alertas
Dim Type = Master.GetType Dim Type As System.Type = Master.GetType
Dim Prop = Type.GetProperty("countNotificaciones") Dim Prop As Reflection.PropertyInfo = Type.GetProperty("countNotificaciones")
Prop.SetValue(Master, 1 + CInt(Prop.GetValue(Master))) Prop.SetValue(Master, 1 + CInt(Prop.GetValue(Master)))
'end incremento contador de alertas 'end incremento contador de alertas
Dim ltl = DirectCast(Master.FindControl("LtlMNotificaciones"), Literal) Dim ltl As Literal = DirectCast(Master.FindControl("LtlMNotificaciones"), Literal)
ltl.Text = String.Format(" {0} {1}", ltl.Text, Nota) ltl.Text = String.Format(" {0} {1}", ltl.Text, Nota)
End Sub End Sub
Public Sub Confirmacion(Mensaje As String, Tipo As String, FuncionOK As String, FuncionCancel As String) Public Sub Confirmacion(Mensaje As String, Tipo As String, FuncionOK As String, FuncionCancel As String)
@@ -4628,7 +4628,7 @@ Public Class ClsPaginas
lrds.Add(rds) lrds.Add(rds)
ImprimirPDF(RutaReporte, lrds, Parametros, NombreArchivo, Formato, MR, Content_Disposition) ImprimirPDF(RutaReporte, lrds, Parametros, NombreArchivo, Formato, MR, Content_Disposition)
End Sub End Sub
Public Sub ImprimirPDFStimulsoft(RutaReporte As String, DtDatos As DataTable, Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "Datos", Optional Content_Disposition As String = "attachment") Public Sub ImprimirPDFStimul(RutaReporte As String, DtDatos As DataTable, Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "Datos", Optional Content_Disposition As String = "attachment")
Dim lrds As New List(Of ReportDataSource) Dim lrds As New List(Of ReportDataSource)
Dim rds As New ReportDataSource Dim rds As New ReportDataSource
rds.Name = RDSName rds.Name = RDSName
@@ -4638,7 +4638,7 @@ Public Class ClsPaginas
If Formato.ToLower() = "excel" Then If Formato.ToLower() = "excel" Then
Extension = "xlsx" Extension = "xlsx"
End If End If
ImprimirbytesPDF(StreamBytesStimulsoft("Facturas", RutaReporte, lrds, Parametros, NombreArchivo:=NombreArchivo, Formato:=Formato), NombreArchivo, Formato, Content_Disposition:=Content_Disposition, Extension:=Extension) ImprimirbytesPDF(StreamBytesStimul("Facturas", RutaReporte, lrds, Parametros, NombreArchivo:=NombreArchivo, Formato:=Formato), NombreArchivo, Formato, Content_Disposition:=Content_Disposition, Extension:=Extension)
End Sub End Sub
Public Sub ImprimirPDFMultiDS(RutaReporte As String, lrds As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "DataSet1", Optional MR As ReportViewer = Nothing) Public Sub ImprimirPDFMultiDS(RutaReporte As String, lrds As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "DataSet1", Optional MR As ReportViewer = Nothing)
ImprimirPDF(RutaReporte, lrds, Parametros, NombreArchivo, Formato, MR) ImprimirPDF(RutaReporte, lrds, Parametros, NombreArchivo, Formato, MR)
@@ -5110,7 +5110,7 @@ Public Class ClsPaginas
#End Region #End Region
#Region "IMPRIMIR FACTURA" #Region "IMPRIMIR FACTURA"
Public Function PdfFactura(ByRef Vta As Modelos.Factura, Optional AplicaPagare As String = "0", Optional Guardar As Boolean = True, Optional SubReportData As Modelos.MSubReportData = Nothing, Optional UsarStimulsoft As Boolean = False) As Byte() Public Function PdfFactura(ByRef Vta As Modelos.Factura, Optional AplicaPagare As String = "0", Optional Guardar As Boolean = True, Optional SubReportData As Modelos.MSubReportData = Nothing, Optional UsarStimul As Boolean = False) As Byte()
Dim retorno As Byte() = Nothing Dim retorno As Byte() = Nothing
' Dim ObjVentas As New ClsVentas ' Dim ObjVentas As New ClsVentas
'DATOS GENERALES 'DATOS GENERALES
@@ -5947,7 +5947,7 @@ Public Class ClsPaginas
lrds.Add(rds3) lrds.Add(rds3)
Dim rds4 As New ReportDataSource With {.Name = "DataSet4", .Value = If(Vta.DtDocumentosRelacionados IsNot Nothing, Vta.DtDocumentosRelacionados, New DataTable)} ' sino esta creado el objeto, lo creamos, para que no truene el reporte Dim rds4 As New ReportDataSource With {.Name = "DataSet4", .Value = If(Vta.DtDocumentosRelacionados IsNot Nothing, Vta.DtDocumentosRelacionados, New DataTable)} ' sino esta creado el objeto, lo creamos, para que no truene el reporte
lrds.Add(rds4) lrds.Add(rds4)
If UsuarioActual.Empresa.Funcionalidad(707) = "1" OrElse UsarStimulsoft Then If UsuarioActual.Empresa.Funcionalidad(707) = "1" OrElse UsarStimul Then
If Vta.Cliente.CodigoRegimenFiscal.ToString.Length > 0 Then If Vta.Cliente.CodigoRegimenFiscal.ToString.Length > 0 Then
params.Add(New ReportParameter("ClienteRegimenFiscal", $"{Vta.Cliente.CodigoRegimenFiscal}-{Vta.Cliente.RegimenFiscal}")) params.Add(New ReportParameter("ClienteRegimenFiscal", $"{Vta.Cliente.CodigoRegimenFiscal}-{Vta.Cliente.RegimenFiscal}"))
End If End If
@@ -5993,11 +5993,11 @@ Public Class ClsPaginas
If UsuarioActual.Empresa.Funcionalidad(707) = "1" Then If UsuarioActual.Empresa.Funcionalidad(707) = "1" Then
Dim ArchivoStimulsfot As New System.IO.FileInfo(RutaFormato.Replace(".rdlc", ".mrt")) Dim ArchivoStimulsfot As New System.IO.FileInfo(RutaFormato.Replace(".rdlc", ".mrt"))
If ArchivoStimulsfot.Exists Then If ArchivoStimulsfot.Exists Then
UsarStimulsoft = True UsarStimul = True
params.Add(New ReportParameter("RegimenFiscalEmpresa", String.Format("{0} - {1}", UsuarioActual.Empresa.CodigoRegimenFiscal, UsuarioActual.Empresa.RegimenFiscal))) params.Add(New ReportParameter("RegimenFiscalEmpresa", String.Format("{0} - {1}", UsuarioActual.Empresa.CodigoRegimenFiscal, UsuarioActual.Empresa.RegimenFiscal)))
End If End If
End If End If
If Not UsarStimulsoft Then If Not UsarStimul Then
Dim Archivo As New System.IO.FileInfo(RutaFormato) Dim Archivo As New System.IO.FileInfo(RutaFormato)
If Archivo.Exists Then If Archivo.Exists Then
@@ -6029,7 +6029,7 @@ Public Class ClsPaginas
End If End If
Else Else
RutaFormato = RutaFormato.Replace(".rdlc", ".mrt") RutaFormato = RutaFormato.Replace(".rdlc", ".mrt")
retorno = StreamBytesStimulsoft("Facturas", RutaFormato, lrds, params, NombreArchivo:=NombreArchivo, Formato:="PDF") retorno = StreamBytesStimul("Facturas", RutaFormato, lrds, params, NombreArchivo:=NombreArchivo, Formato:="PDF")
If UsuarioActual.Empresa.Funcionalidad(707) = "1" Then If UsuarioActual.Empresa.Funcionalidad(707) = "1" Then
Dim ArchivoPDF As New System.IO.FileInfo(String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, Vta.TipoDocto, Vta.SerieFolio)) Dim ArchivoPDF As New System.IO.FileInfo(String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, Vta.TipoDocto, Vta.SerieFolio))
If Guardar Then If Guardar Then
@@ -6057,7 +6057,7 @@ Public Class ClsPaginas
End Try End Try
Return retorno Return retorno
End Function End Function
Protected Function StreamBytesStimulsoft(Opcion As String, RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional NombreDataSource As String = "Datos") As Byte() Protected Function StreamBytesStimul(Opcion As String, RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional NombreDataSource As String = "Datos") As Byte()
'limpio ReportViwer 'limpio ReportViwer
Dim sw As Stopwatch = Stopwatch.StartNew() Dim sw As Stopwatch = Stopwatch.StartNew()
@@ -6119,12 +6119,12 @@ Public Class ClsPaginas
New JProperty("parametros", paramsArray), New JProperty("parametros", paramsArray),
New JProperty("dataSource", dataSourceArray) New JProperty("dataSource", dataSourceArray)
) )
Dim data = New StringContent(payload.ToString(), Encoding.UTF8, "application/json") Dim data As New StringContent(payload.ToString(), Encoding.UTF8, "application/json")
Using httpClient = New HttpClient() Using httpClient As New HttpClient()
Using request = New HttpRequestMessage(HttpMethod.Post, Url) Using request As New HttpRequestMessage(HttpMethod.Post, Url)
'request.Headers.Add("ADSToken", Encripta(String.Format("CVEEMPRESA={0}&TICKS={1}&CVEUSUARIO=100", CveEmpresa, DateTime.UtcNow.Ticks))) 'request.Headers.Add("ADSToken", Encripta(String.Format("CVEEMPRESA={0}&TICKS={1}&CVEUSUARIO=100", CveEmpresa, DateTime.UtcNow.Ticks)))
request.Content = New StringContent(payload.ToString(), Encoding.UTF8, "application/json") request.Content = New StringContent(payload.ToString(), Encoding.UTF8, "application/json")
Dim response = httpClient.SendAsync(request).Result Dim response As HttpResponseMessage = httpClient.SendAsync(request).Result
If response.StatusCode = Net.HttpStatusCode.OK Then If response.StatusCode = Net.HttpStatusCode.OK Then
Bytes = response.Content.ReadAsByteArrayAsync().Result Bytes = response.Content.ReadAsByteArrayAsync().Result
End If End If

View File

@@ -7115,7 +7115,7 @@ Namespace Modelos
Public Property CvePAC As Integer Public Property CvePAC As Integer
Public Property CveAnticipo As Integer Public Property CveAnticipo As Integer
Public Property RemisionesLista As List(Of Integer) Public Property RemisionesLista As List(Of Integer)
Public Property CveAlmacen As Integer Public Property CveAlmacen As Integer = -1
Public Property GenerarSalidaAlmacen As Boolean = False Public Property GenerarSalidaAlmacen As Boolean = False
Public Property CveConceptoMovimiento As Integer Public Property CveConceptoMovimiento As Integer
Public Property MovimientoObservaciones As String Public Property MovimientoObservaciones As String
@@ -7323,7 +7323,7 @@ Namespace Modelos
Public Property TipoCambioDolares As Decimal Public Property TipoCambioDolares As Decimal
Public Property ConvertirPesos As Boolean Public Property ConvertirPesos As Boolean
Public Property ConvertirDolares As Boolean Public Property ConvertirDolares As Boolean
Public Property FormaPago As Integer Public Property FormaPago As Integer = 0
Public ReadOnly Property FormaPagoText As String Public ReadOnly Property FormaPagoText As String
Get Get
@@ -7338,7 +7338,7 @@ Namespace Modelos
End Get End Get
End Property End Property
Public Property CondicionesPago As Integer Public Property CondicionesPago As Integer = 0 ' 0 - Contado, 1 - Credito (CHECAR)
Public ReadOnly Property CondicionesPagoText As String Public ReadOnly Property CondicionesPagoText As String
Get Get
@@ -7589,10 +7589,10 @@ Namespace Modelos
Public Property NumeroContrato As String = "" Public Property NumeroContrato As String = ""
Public Property PedidoContrato As String = "" Public Property PedidoContrato As String = ""
Public Property OrdenCompra As String = "" Public Property OrdenCompra As String = ""
Public Property CveMetodoPago As Integer Public Property CveMetodoPago As Integer = 0
Public Property MetodoPago As String = "" Public Property MetodoPago As String = ""
Public Property ClaveMetodoPagoSAT As String = "" Public Property ClaveMetodoPagoSAT As String = ""
Public Property CveMetodoPago33 As Integer Public Property CveMetodoPago33 As Integer = 1
Public Property MetodoPago33 As String = "" Public Property MetodoPago33 As String = ""
Public Property CveFormaPago33 As Integer Public Property CveFormaPago33 As Integer
Public Property MetodoPagoSAT33 As String = "" Public Property MetodoPagoSAT33 As String = ""

View File

@@ -252,255 +252,6 @@ Public Class Timbrado
MsgCancelacion.AppendFormat("CvePAC:{0}", CvePACCancelacion) MsgCancelacion.AppendFormat("CvePAC:{0}", CvePACCancelacion)
Select Case CvePACCancelacion Select Case CvePACCancelacion
Case 1
MsgCancelacion.AppendFormat("1.1")
Try
Dim CFDi As New ClbNegBICFDv3_2.ClsNegEDI
Dim Respuesta As New ClbNegBICFDv3_2.ClsNegRespuesta
Respuesta = CFDi.CancelaCFdi(Empresa.BIUsuario, Empresa.BIContraseña, Empresa.Ruta & "Certificados\" & Empresa.ArchivoPfx, Empresa.ContraseñaKey, Empresa.RFC, FolioFiscal, "http://portalbiinform.com.mx/srvCFDi/service1.asmx")
If Respuesta IsNot Nothing AndAlso Respuesta.SelloSAT <> "" Then
Dim xml64 As String = ""
Dim myXml As String = Respuesta.SelloSAT
Dim resp As XElement = XElement.Parse(myXml)
For Each elem As XElement In resp.Descendants
If elem.Name = "xmlBase64" Then xml64 = elem.Value
Next
'If Respuesta.UUDI.Contiene("0", "201", "202") Then
Dim xmlDoc As New System.Xml.XmlDocument()
xmlDoc.LoadXml(If(xml64 = "", Respuesta.SelloSAT, Encoding.UTF8.GetString(Convert.FromBase64String(xml64))))
Dim AcuseChild = xmlDoc.ChildNodes.Cast(Of XmlNode).Where(Function(a) a.Name.Equals("Acuse", StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault()
Dim FoliosChild = AcuseChild.ChildNodes.Cast(Of XmlNode).Where(Function(a) a.LocalName.Equals("Folios", StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault()
Dim SignatureChild = AcuseChild.ChildNodes.Cast(Of XmlNode).Where(Function(a) a.LocalName.Equals("Signature", StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault()
Dim prefixFol As String = FoliosChild.Prefix
If prefixFol <> "" Then prefixFol = $"{prefixFol}:" 'se le agregan los ":" si tiene prefijo
CancelacionState = xmlDoc.GetElementsByTagName($"{prefixFol}EstatusUUID")(0).InnerText.ToEntero
'verificación basada en el resultado del xml.
If CancelacionState.Contiene(201, 202) Then
Dim prefixSig = SignatureChild.Prefix
If prefixSig <> "" Then prefixSig = $"{prefixSig}:" 'se le agregan los ":" si tiene prefijo
Dim SignatureValue = xmlDoc.GetElementsByTagName($"{prefixSig}SignatureValue")
CancelacionAcuse = If(SignatureValue.Count < 1, SignatureValue(0).InnerText, SignatureValue(0).InnerText)
Try
CancelacionFecha = AcuseChild.Attributes("Fecha").Value.ToDate
Catch ex As Exception
CancelacionFecha = xmlDoc.GetElementsByTagName("CancelaCFDResult")(0).Attributes("Fecha").Value.ToDate
End Try
Retorno.Verificado = True
Retorno.CancelacionFecha = CancelacionFecha
Retorno.CancelacionAcuse = CancelacionAcuse
End If
'End If
Else
Me.GuardaLog(CFDi.MsgError)
End If
Respuesta = Nothing
CFDi = Nothing
Catch ex As Exception
GuardaLog($"{ex.Message}")
End Try
Case 2
MsgCancelacion.AppendFormat("2.1")
Dim ArchivoLLave As String = $"{Empresa.Ruta}Certificados\{Empresa.ArchivoKey}"
Dim ArchivoCertificado As String = $"{Empresa.Ruta}Certificados\{Empresa.ArchivoCer}"
Dim UsuarioServicio As String = If(CvePACCancelacion = 2, Empresa.RFC, "rene.molina@adsistemas.mx")
Dim ClaveServicio As String = If(CvePACCancelacion = 2, Empresa.RFC.ToLower, "rene2018")
Dim Clave As String = Empresa.ContraseñaKey
Dim UrlServicio As String = "" ' Produccion
Select Case CvePACCancelacion
Case 2
UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL"
Case 4
UrlServicio = "http://192.168.0.2:8080/ADSistemas/Timbrado.asmx?WSDL"
End Select
If Not Empresa.FacturaProduccion Then
ArchivoLLave = $"{Empresa.Ruta}Certificados\CSD01_AAA010101AAA.key"
ArchivoCertificado = $"{Empresa.Ruta}Certificados\CSD01_AAA010101AAA.cer"
Select Case CvePACCancelacion
Case 2
UsuarioServicio = "fgomez"
ClaveServicio = "12121212"
UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL"
Case 4
UsuarioServicio = "UserTest"
ClaveServicio = "1234567890"
UrlServicio = "http://192.168.0.2:8080/ADSistemas/Timbrado.asmx?WSDL"
End Select
End If
#Region "Valida"
If Not File.Exists(ArchivoCertificado) Then
Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
Retorno.Verificado = False
End If
If Not File.Exists(ArchivoLLave) Then
Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
Retorno.Verificado = False
End If
If Empresa.ContraseñaKey = "" Then
Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
Retorno.Verificado = False
End If
#End Region
#Region "Variables"
Dim llaveByte As Byte(), certByte As Byte()
Dim llaveBase64 As String = "", certBase64 As String = ""
Dim cfdi As New RVCFDI.GeneraCFDI()
Dim complemento As String = ""
Dim complementoConcepto As String = ""
#End Region
#Region "Verifica"
Try
llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave)
llaveBase64 = Convert.ToBase64String(llaveByte)
Catch ex As Exception
Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError)
Retorno.Verificado = False
End Try
Try
certByte = System.IO.File.ReadAllBytes(ArchivoCertificado)
certBase64 = Convert.ToBase64String(certByte)
Catch ex As Exception
Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError)
Retorno.Verificado = False
End Try
#End Region
Dim base64 As String
Dim ObjCancelacion As New RVCancelacion.Cancelacion()
Dim xmlCancelacion As String = ObjCancelacion.crearXMLCancelacion(certBase64, llaveBase64, Clave, FolioFiscal)
If (ObjCancelacion.MensajeDeError = "") Then
base64 = CodificarABase64(xmlCancelacion)
Dim objWS As RVCFDI.WSGeneraCFDI.Service = Nothing
Dim objAuthSoapHD As RVCFDI.WSGeneraCFDI.AuthSoapHd
Dim objResponse As RVCFDI.WSGeneraCFDI.StructCfd
Dim objCancel As RVCFDI.WSGeneraCFDI.StructCancel
Try
'Variables de consumo de servicio web
objWS = New RVCFDI.WSGeneraCFDI.Service()
objAuthSoapHD = New RVCFDI.WSGeneraCFDI.AuthSoapHd()
'creacion de Autorizacion de cabecera Soap
objCancel = New RVCFDI.WSGeneraCFDI.StructCancel()
'Configura el servicio
objWS.Url = UrlServicio
objAuthSoapHD.strPassword = ClaveServicio
objAuthSoapHD.strUserName = UsuarioServicio
'Coloca la cabecera
objWS.AuthSoapHdValue = objAuthSoapHD
'Obtiene el resultado
objCancel = objWS.CancelTicket(base64)
'Valida la respuesta
''Codigos del SAT
''201 - El folio se ha cancelado con éxito.
''202 - El CFDI ya había sido cancelado previamente.
''203 - UUID no corresponde al emisor.
''204 - El CFDI no aplica para cancelación.
''205 - El UUID no existe o no ha sido procesado por el SAT.
''402 - El Contribuyente no se encuentra el la LCO o la validez de obligaciones se reporta como negativa.
CancelacionState = objCancel.state
CancelacionMensaje = objCancel.Descripcion
If objCancel.state.Contiene(0, 201, 202) Then
CancelacionFecha = Now
Select Case CvePACCancelacion
Case 2
Dim solicitud As New WSRVConsultas.Service1SoapClient
Dim resp As New WSRVConsultas.resp_Acuse()
resp = solicitud.ConsultarAcuseCancelacion(RFCEmisor, UsuarioServicio, ClaveServicio, FolioFiscal, CancelacionFecha.ToShortDateString)
CancelacionMensaje = objCancel.Descripcion
If (resp.Estado = 0) Then
Dim xmlDoc As New System.Xml.XmlDocument()
xmlDoc.LoadXml(Encoding.UTF8.GetString(Convert.FromBase64String(resp.Xml)))
Dim xpath As String = "Acuse/Folios"
Dim nodes As XmlNodeList = xmlDoc.SelectNodes(xpath)
CancelacionState = xmlDoc.GetElementsByTagName("EstatusUUID")(0).InnerText.ToEntero
xpath = "Acuse/Signature"
nodes = xmlDoc.SelectNodes(xpath)
CancelacionAcuse = xmlDoc.GetElementsByTagName("SignatureValue")(0).InnerText
CancelacionFecha = xmlDoc.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate
Retorno.Verificado = True
Retorno.CancelacionFecha = CancelacionFecha
Retorno.CancelacionAcuse = CancelacionAcuse
Else
CancelacionAcuse = resp.MensajeDeError
Retorno.Verificado = True
Retorno.CancelacionFecha = CancelacionFecha
Retorno.CancelacionAcuse = CancelacionAcuse
End If
solicitud = Nothing
Case 4
Dim solicitud As New WSGF.Service1SoapClient
Dim resp As New WSGF.StructXml()
resp = solicitud.GetAcuse(RFCEmisor, UsuarioServicio, ClaveServicio, FolioFiscal)
CancelacionMensaje = objCancel.Descripcion
If (resp.Estado = 0) Then
Dim xmlDoc As New System.Xml.XmlDocument()
xmlDoc.LoadXml(Encoding.UTF8.GetString(Convert.FromBase64String(resp.CfdiB64)))
Dim xpath As String = "Acuse/Folios"
Dim nodes As XmlNodeList = xmlDoc.SelectNodes(xpath)
CancelacionState = xmlDoc.GetElementsByTagName("EstatusUUID")(0).InnerText.ToEntero
xpath = "Acuse/Signature"
nodes = xmlDoc.SelectNodes(xpath)
CancelacionAcuse = xmlDoc.GetElementsByTagName("SignatureValue")(0).InnerText
CancelacionFecha = xmlDoc.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate
Retorno.Verificado = True
Retorno.CancelacionFecha = CancelacionFecha
Retorno.CancelacionAcuse = CancelacionAcuse
Else
CancelacionAcuse = resp.Descripcion
Retorno.Verificado = True
Retorno.CancelacionAcuse = CancelacionAcuse
End If
solicitud = Nothing
End Select
End If
Catch ex As Exception
CancelacionMensaje += $" | ex: {ex}"
Retorno.Verificado = False
End Try
'Libera memoria
objWS.Dispose()
objResponse = Nothing
objAuthSoapHD = Nothing
GC.Collect()
End If
Case 3 Case 3
MsgCancelacion.AppendFormat("3.1") MsgCancelacion.AppendFormat("3.1")
@@ -522,7 +273,6 @@ Public Class Timbrado
AmbienteProductivo = False AmbienteProductivo = False
End If End If
#Region "Valida" #Region "Valida"
If Not File.Exists(ArchivoCertificado) Then If Not File.Exists(ArchivoCertificado) Then
Alert("El archivo de certificado no existe", TipoMensaje.MsgError) Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
@@ -537,7 +287,6 @@ Public Class Timbrado
Retorno.Verificado = False Retorno.Verificado = False
End If End If
#End Region #End Region
Dim conector As New Profact.TimbraCFDI40.Conector(AmbienteProductivo) Dim conector As New Profact.TimbraCFDI40.Conector(AmbienteProductivo)
If Not AmbienteProductivo Then If Not AmbienteProductivo Then
@@ -545,16 +294,17 @@ Public Class Timbrado
Else Else
conector.EstableceCredenciales("vSGxMFWnNRy/nDoowxqrqw==|Sia123654") conector.EstableceCredenciales("vSGxMFWnNRy/nDoowxqrqw==|Sia123654")
End If End If
MsgCancelacion.AppendFormat("-3.2")
Dim resultadoCancelacion As Profact.TimbraCFDI.ResultadoCancelacion
resultadoCancelacion = conector.CancelaCFDI40(RFCEmisor, FolioFiscal, CodigoSATMotivoCancelacion, FolioSustitucion)
CancelacionFecha = Now
Dim resp As Profact.TimbraCFDI.ResultadoConsulta Dim resp As Profact.TimbraCFDI.ResultadoConsulta
MsgCancelacion.AppendFormat("-3.2")
Dim resultadoCancelacion As Profact.TimbraCFDI.ResultadoCancelacionAck
resultadoCancelacion = conector.CancelaCFDIAck40(RFCEmisor, FolioFiscal, CodigoSATMotivoCancelacion, FolioSustitucion)
CancelacionFecha = Now
resp = conector.ObtieneCFDI(RFCEmisor, FolioFiscal) resp = conector.ObtieneCFDI(RFCEmisor, FolioFiscal)
MsgCancelacion.AppendFormat("-3.3") MsgCancelacion.AppendFormat("-3.3")
'VERIFICA SI SE CANCELO O FUE CANCELADO PREVIAMENTE (CODIGO DE ERROR "330279") 'VERIFICA SI SE CANCELO O FUE CANCELADO PREVIAMENTE (CODIGO DE ERROR "330279")
If resultadoCancelacion.Exitoso OrElse resultadoCancelacion.NumeroError.Contiene("202", "330279") Then If resultadoCancelacion.Exitoso OrElse resultadoCancelacion.NumeroError.Contiene("202", "330279", "330280") Then
MsgCancelacion.AppendFormat("-3.4") MsgCancelacion.AppendFormat("-3.4")
CancelacionMensaje = resultadoCancelacion.Descripcion CancelacionMensaje = resultadoCancelacion.Descripcion
Retorno.CancelacionFecha = CancelacionFecha Retorno.CancelacionFecha = CancelacionFecha
@@ -563,7 +313,7 @@ Public Class Timbrado
MsgCancelacion.AppendFormat("-3.4.1") MsgCancelacion.AppendFormat("-3.4.1")
Try Try
xmlDoc.LoadXml(Encoding.UTF8.GetString(Convert.FromBase64String(resp.Xml))) xmlDoc.LoadXml(Encoding.UTF8.GetString(Convert.FromBase64String(resultadoCancelacion.Xml)))
Catch ex As Exception Catch ex As Exception
If resp.NumeroError.ToEntero() > 0 Then If resp.NumeroError.ToEntero() > 0 Then
CancelacionMensaje = resp.Descripcion CancelacionMensaje = resp.Descripcion
@@ -592,13 +342,11 @@ Public Class Timbrado
Else Else
Retorno.Verificado = False Retorno.Verificado = False
End If End If
Else Else
MsgCancelacion.AppendFormat("-3.5") MsgCancelacion.AppendFormat("-3.5")
CancelacionAcuse = resp.NumeroError CancelacionAcuse = resp.NumeroError
CancelacionMensaje = resultadoCancelacion.Descripcion CancelacionMensaje = resultadoCancelacion.Descripcion
Retorno.Verificado = True Retorno.Verificado = False
End If End If
Case 4 Case 4
@@ -610,7 +358,6 @@ Public Class Timbrado
Dim Clave As String = Empresa.ContraseñaKey Dim Clave As String = Empresa.ContraseñaKey
Dim UrlServicio As String = "" ' Produccion Dim UrlServicio As String = "" ' Produccion
'UrlServicio = "http://alterno.gofac.com.mx/cfdi/timbrado.asmx?WSDL" ' alterno
UrlServicio = "https://cfdi.gofac.com.mx/timbrado.asmx?WSDL" UrlServicio = "https://cfdi.gofac.com.mx/timbrado.asmx?WSDL"
If Not Empresa.FacturaProduccion Then If Not Empresa.FacturaProduccion Then
@@ -620,9 +367,7 @@ Public Class Timbrado
UsuarioServicio = "UserTest" UsuarioServicio = "UserTest"
ClaveServicio = "1234567890" ClaveServicio = "1234567890"
'UrlServicio = "http://juancalderon-001-site6.ftempurl.com/cancelacion.asmx?WSDL" 'UrlServicio = "http://juancalderon-001-site6.ftempurl.com/cancelacion.asmx?WSDL"
End If End If
#Region "Valida" #Region "Valida"
If Not File.Exists(ArchivoCertificado) Then If Not File.Exists(ArchivoCertificado) Then
Alert("El archivo de certificado no existe", TipoMensaje.MsgError) Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
@@ -644,8 +389,6 @@ Public Class Timbrado
Dim objCan As New GoFac.GoCfdi() Dim objCan As New GoFac.GoCfdi()
Dim complemento As String = "" Dim complemento As String = ""
Dim complementoConcepto As String = "" Dim complementoConcepto As String = ""
#End Region #End Region
#Region "Verifica" #Region "Verifica"
@@ -656,8 +399,6 @@ Public Class Timbrado
Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError) Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError)
Retorno.Verificado = False Retorno.Verificado = False
End Try End Try
Try Try
certByte = System.IO.File.ReadAllBytes(ArchivoCertificado) certByte = System.IO.File.ReadAllBytes(ArchivoCertificado)
certBase64 = Convert.ToBase64String(certByte) certBase64 = Convert.ToBase64String(certByte)
@@ -759,7 +500,7 @@ Public Class Timbrado
If result IsNot Nothing Then If result IsNot Nothing Then
If result.statusOk Then If result.statusOk Then
Dim cancelacion = result.cancelaciones.First() Dim cancelacion As PADECancelacion = result.cancelaciones.First()
If cancelacion IsNot Nothing Then If cancelacion IsNot Nothing Then
'EN PROCESO, CANCELABLE SIN ACEPTACION,CANCEALDO PREVIAMENTE 'EN PROCESO, CANCELABLE SIN ACEPTACION,CANCEALDO PREVIAMENTE
If cancelacion.codigo.Contiene("96", "201", "202") Then If cancelacion.codigo.Contiene("96", "201", "202") Then
@@ -1549,7 +1290,7 @@ Public Class Timbrado
Dim y As Integer = 0 Dim y As Integer = 0
For Each Tras In ObjCFDITimbre.Traslados For Each Tras As CFDITraslados In ObjCFDITimbre.Traslados
comprobante.Impuestos.Traslados(y) = New Profact.TimbraCFDI40.ComprobanteImpuestosTraslado() comprobante.Impuestos.Traslados(y) = New Profact.TimbraCFDI40.ComprobanteImpuestosTraslado()
comprobante.Impuestos.Traslados(y).Base = Tras.Base.RoundSQL(NumDecimalesImporte) comprobante.Impuestos.Traslados(y).Base = Tras.Base.RoundSQL(NumDecimalesImporte)
comprobante.Impuestos.Traslados(y).Impuesto = Tras.Impuesto comprobante.Impuestos.Traslados(y).Impuesto = Tras.Impuesto
@@ -1588,7 +1329,7 @@ Public Class Timbrado
If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 Then If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 Then
Dim Imp = New Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocales() Dim Imp As New Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocales()
Imp.version = "1.0" Imp.version = "1.0"
Imp.TotaldeRetenciones = ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe).FormatoNumero().ToDecimal Imp.TotaldeRetenciones = ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe).FormatoNumero().ToDecimal
Imp.TotaldeTraslados = 0 Imp.TotaldeTraslados = 0
@@ -2064,7 +1805,7 @@ Public Class Timbrado
Dim j As Integer = 0 Dim j As Integer = 0
ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta = New ProfactCartaPorte.CartaPorteMercanciasMercanciaCantidadTransporta(Carta.Mercancias.Mercancias.Count - 1) {} ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta = New ProfactCartaPorte.CartaPorteMercanciasMercanciaCantidadTransporta(Carta.Mercancias.Mercancias.Count - 1) {}
For Each transp In concep.MercanciasCantidadTransporta For Each transp As CFDICartaPorteMercanciaTransporta In concep.MercanciasCantidadTransporta
ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j) = New ProfactCartaPorte.CartaPorteMercanciasMercanciaCantidadTransporta ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j) = New ProfactCartaPorte.CartaPorteMercanciasMercanciaCantidadTransporta
ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).Cantidad = transp.Cantidad ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).Cantidad = transp.Cantidad
ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).IDOrigen = transp.IDOrigen ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).IDOrigen = transp.IDOrigen
@@ -2484,7 +2225,7 @@ Public Class Timbrado
If Not String.IsNullOrEmpty(resultadoTimbre.Detalle) Then If Not String.IsNullOrEmpty(resultadoTimbre.Detalle) Then
Try Try
Dim Resultados = Newtonsoft.Json.Linq.JArray.Parse(resultadoTimbre.Detalle) Dim Resultados As JArray = Newtonsoft.Json.Linq.JArray.Parse(resultadoTimbre.Detalle)
If Resultados.Count > 0 Then If Resultados.Count > 0 Then
If resultadoTimbre.Descripcion.Contains("RFC del receptor no existe") Then If resultadoTimbre.Descripcion.Contains("RFC del receptor no existe") Then
@@ -2620,13 +2361,13 @@ Public Class Timbrado
If ObjCFDITimbre.Retenciones.Sum(Function(x) x.Importe) > 0 Then If ObjCFDITimbre.Retenciones.Sum(Function(x) x.Importe) > 0 Then
''se acumulan los importes ''se acumulan los importes
For Each Ret In ObjCFDITimbre.Retenciones For Each Ret As CFDIRetenciones In ObjCFDITimbre.Retenciones
cfdi.Retencion(Ret.Impuesto, Ret.Importe) cfdi.Retencion(Ret.Impuesto, Ret.Importe)
Next Next
End If End If
''se acumulan los importes ''se acumulan los importes
For Each Tras In ObjCFDITimbre.Traslados For Each Tras As CFDITraslados In ObjCFDITimbre.Traslados
cfdi.Traslado(Tras.Base, Tras.Impuesto, Tras.TipoFactor, Tras.TasaOCuota, Tras.Importe) cfdi.Traslado(Tras.Base, Tras.Impuesto, Tras.TipoFactor, Tras.TasaOCuota, Tras.Importe)
Next Next
#End Region #End Region
@@ -2791,7 +2532,7 @@ Public Class Timbrado
For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias
If concep.ValorMercancia <= 0 Then concep.Moneda = "" If concep.ValorMercancia <= 0 Then concep.Moneda = ""
cfdi.CartaPorteMercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), If(concep.ClaveMaterialPeligroso <> "", concep.DescripEmbalaje, ""), concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt) cfdi.CartaPorteMercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), If(concep.ClaveMaterialPeligroso <> "", concep.DescripEmbalaje, ""), concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt)
For Each transp In concep.MercanciasCantidadTransporta For Each transp As CFDICartaPorteMercanciaTransporta In concep.MercanciasCantidadTransporta
cfdi.CartaPorteCantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes) cfdi.CartaPorteCantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes)
Next Next
Next Next
@@ -3380,11 +3121,11 @@ Public Class Timbrado
#Region "Timbra" #Region "Timbra"
If RespGeneracionXML = "" Then If RespGeneracionXML = "" Then
'OBTENER EL XML DE LA VARIABLE PRIVADA "_xml" YA QUE NO ES ACCESIBLE POR MEDIO DE LA PROPIEDAD "XML" ANTES DE TIMBRAR 'OBTENER EL XML DE LA VARIABLE PRIVADA "_xml" YA QUE NO ES ACCESIBLE POR MEDIO DE LA PROPIEDAD "XML" ANTES DE TIMBRAR
Dim valorXML = "" Dim valorXML As String = ""
Try Try
Dim tipo = GetType(GoFac.Cfdi4) Dim tipo As Type = GetType(GoFac.Cfdi4)
Dim info = tipo.GetField("_xml", BindingFlags.NonPublic Or BindingFlags.Instance) Dim info As FieldInfo = tipo.GetField("_xml", BindingFlags.NonPublic Or BindingFlags.Instance)
valorXML = info?.GetValue(cfdi).ToString() valorXML = info?.GetValue(cfdi).ToString()
Catch ex As Exception Catch ex As Exception
valorXML = "" valorXML = ""