diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb
index 4a327d03f..7b40ba2cb 100644
--- a/App_Code/Timbrado.vb
+++ b/App_Code/Timbrado.vb
@@ -10,6 +10,7 @@ Imports System.Data
Imports System.Xml.Serialization
Imports System.Net
Imports ProfactCartaPorte = Profact.TimbraCFDI33.Complementos.CartaPorte20
+Imports System.Reflection
Public Class Timbrado
@@ -1078,10 +1079,17 @@ Public Class Timbrado
Case 5
+ If UsuarioActual.Empresa.Funcionalidad(350) = "1" Then
+ Dim Ret As String = TimbrarFacturaPADEv40(Ventas, UsuarioActual, CvePACEspecial)
+ If Ret <> "" Then MensajeErrorCFDI = Ret
+ Retorno = If(Ret = "", True, False)
+ Else
+ Dim Ret As String = TimbrarFacturaPADEv33(Ventas, UsuarioActual, CvePACEspecial)
+ If Ret <> "" Then MensajeErrorCFDI = Ret
+ Retorno = If(Ret = "", True, False)
+ End If
+
- Dim Ret As String = TimbrarFacturaPADEv33(Ventas, UsuarioActual, CvePACEspecial)
- If Ret <> "" Then MensajeErrorCFDI = Ret
- Retorno = If(Ret = "", True, False)
End Select
@@ -3409,36 +3417,30 @@ Public Class Timbrado
' 'Sucursal matriz de la empresa
Dim ArchivoLLave As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoKey}"
Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoCer}"
- Dim UsuarioServicio As String = UsuarioActual.Empresa.RFC
- Dim ClaveServicio As String = UsuarioActual.Empresa.RFC.ToLower
+
Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey
Dim EmisorRFC As String = UsuarioActual.Empresa.RFC
- Dim UrlServicio As String = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" ' Produccion
+ Dim EmisorNombre As String = UsuarioActual.Empresa.Empresa
+
Dim RutaArchivo As String = $"{UsuarioActual.Empresa.Ruta}XML\{Ventas.TipoDocto}\"
Dim NombreArchivoXML As String = $"{ObjCFDITimbre.Comprobante.SerieFolio}"
+
Dim SubTotal As Decimal = 0
Dim AmbienteProductivo As Boolean = True
Dim NumDecimalesImporte As Integer = 2
+
If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo)
If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then
AmbienteProductivo = False
- UsuarioServicio = "fgomez"
- ClaveServicio = "12121212"
Clave = "12345678a"
-
- 'EmisorRFC = "AAA010101AAA"
- 'ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.key"
- 'ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.cer"
-
- EmisorRFC = "ZUÑ920208KL4"
- ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key"
- ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer"
-
- UrlServicio = "https://pruebas.timbracfdi33.mx/Timbrado.asmx"
+ EmisorRFC = "IIA040805DZ4"
+ EmisorNombre = "INDISTRIA ILUMINADORA DE ALMACENES SA DE CV"
+ ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\publicKey.key"
+ ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\publicCer.cer"
+ UsuarioActual.Empresa.CodigoRegimenFiscal = "601"
End If
-
#Region "Valida"
If Not File.Exists(ArchivoCertificado) Then
Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
@@ -3525,6 +3527,7 @@ Public Class Timbrado
comprobante.MetodoPago = ObjCFDITimbre.Comprobante.MetodoPago
comprobante.MetodoPagoSpecified = If(ObjCFDITimbre.Comprobante.MetodoPago <> "", True, False)
comprobante.LugarExpedicion = ObjCFDITimbre.Comprobante.LugarExpedicion
+ comprobante.Exportacion = ObjCFDITimbre.Comprobante.Exportacion
If ObjCFDITimbre.CFDIRelacionados.TipoRelacion <> "" Then
Dim CfdiRelacionados As New Profact.TimbraCFDI40.ComprobanteCfdiRelacionados
@@ -3541,7 +3544,7 @@ Public Class Timbrado
#Region "Emisor"
comprobante.Emisor = New Profact.TimbraCFDI40.ComprobanteEmisor()
comprobante.Emisor.Rfc = EmisorRFC
- comprobante.Emisor.Nombre = UsuarioActual.Empresa.Empresa
+ comprobante.Emisor.Nombre = EmisorNombre
comprobante.Emisor.RegimenFiscal = UsuarioActual.Empresa.CodigoRegimenFiscal
#End Region
@@ -3552,6 +3555,7 @@ Public Class Timbrado
comprobante.Receptor.Nombre = ObjCFDITimbre.Receptor.Nombre
comprobante.Receptor.UsoCFDI = ObjCFDITimbre.Receptor.UsoCFDI
comprobante.Receptor.RegimenFiscalReceptor = ObjCFDITimbre.Receptor.RegimenFiscalReceptor
+ comprobante.Receptor.DomicilioFiscalReceptor = ObjCFDITimbre.Receptor.DomicilioFiscalReceptor
#End Region
#End Region
@@ -3572,9 +3576,10 @@ Public Class Timbrado
If concep.Unidad <> "" Then comprobante.Conceptos(i).Unidad = concep.Unidad
comprobante.Conceptos(i).ClaveUnidad = concep.ClaveUnidad
comprobante.Conceptos(i).Descripcion = concep.Descripcion
- comprobante.Conceptos(i).ValorUnitario = concep.ValorUnitario
+ comprobante.Conceptos(i).ValorUnitario = concep.ValorUnitario.RoundSQL(6)
comprobante.Conceptos(i).Importe = concep.Importe.RoundSQL(NumDecimalesImporte)
comprobante.Conceptos(i).ClaveProdServ = concep.ClaveProdServ
+ comprobante.Conceptos(i).ObjetoImp = concep.ObjetoImpuesto
If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then
If concep.Descuento > 0 Then
@@ -3650,6 +3655,7 @@ Public Class Timbrado
For Each Tras In ObjCFDITimbre.Traslados
comprobante.Impuestos.Traslados(y) = New Profact.TimbraCFDI40.ComprobanteImpuestosTraslado()
+ comprobante.Impuestos.Traslados(y).Base = Tras.Base
comprobante.Impuestos.Traslados(y).Impuesto = Tras.Impuesto
comprobante.Impuestos.Traslados(y).TipoFactor = Tras.TipoFactor
comprobante.Impuestos.Traslados(y).TasaOCuota = Tras.TasaOCuota.FormatoNumero(6)
@@ -3919,13 +3925,13 @@ Public Class Timbrado
End If
If ObjCFDITimbre.ComplementoPagos.CertPago <> "" Then
- ComPag.Pago(0).CertPago = System.Text.Encoding.Default.GetBytes(ObjCFDITimbre.ComplementoPagos.CertPago)
+ ComPag.Pago(0).CertPago = System.Text.Encoding.Default.GetBytes(ObjCFDITimbre.ComplementoPagos.CertPago).ToString()
End If
If ObjCFDITimbre.ComplementoPagos.CadPago <> "" Then
ComPag.Pago(0).CadPago = ObjCFDITimbre.ComplementoPagos.CadPago
End If
If ObjCFDITimbre.ComplementoPagos.SelloPago <> "" Then
- ComPag.Pago(0).SelloPago = System.Text.Encoding.Default.GetBytes(ObjCFDITimbre.ComplementoPagos.SelloPago)
+ ComPag.Pago(0).SelloPago = System.Text.Encoding.Default.GetBytes(ObjCFDITimbre.ComplementoPagos.SelloPago).ToString()
End If
If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then
@@ -4602,7 +4608,7 @@ Public Class Timbrado
' End Try
'//Timbramos el CFDI por medio del conector y guardamos resultado
- Dim resultadoTimbre As Profact.TimbraCFDI.ResultadoTimbre
+ Dim resultadoTimbre As Profact.TimbraCFDI.ResultadoTimbre = Nothing
#End Region
@@ -4697,29 +4703,38 @@ Public Class Timbrado
Else
- If String.IsNullOrEmpty(resultadoTimbre.Detalle) Then
- Dim Resultados = Newtonsoft.Json.Linq.JArray.Parse(resultadoTimbre.Detalle)
+ If Not String.IsNullOrEmpty(resultadoTimbre.Detalle) Then
+ Try
+ Dim Resultados = Newtonsoft.Json.Linq.JArray.Parse(resultadoTimbre.Detalle)
- If Resultados.Count > 0 Then
- If resultadoTimbre.Descripcion.Contains("RFC del receptor no existe") Then
- Retorno = $"El RFC { Resultados(0)("Value").ToString() } no existe en las bases de datos publicadas por el SAT, corrobore este dato con su cliente"
- MensajeErrorCFDI = $"El RFC { Resultados(0)("Value").ToString() } no existe en las bases de datos publicadas por el SAT, corrobore este dato con su cliente"
+ If Resultados.Count > 0 Then
+ If resultadoTimbre.Descripcion.Contains("RFC del receptor no existe") Then
+ Retorno = $"El RFC { Resultados(0)("Value").ToString() } no existe en las bases de datos publicadas por el SAT, corrobore este dato con su cliente"
+ MensajeErrorCFDI = $"El RFC { Resultados(0)("Value").ToString() } no existe en las bases de datos publicadas por el SAT, corrobore este dato con su cliente"
+ Else
+ Dim sbMsg As New StringBuilder
+ For Each msg In Resultados
+ sbMsg.AppendFormat("{0}.
", msg("Value"))
+ Next
+ Retorno = sbMsg.ToString()
+ MensajeErrorCFDI = Retorno
+ End If
Else
- Retorno = Resultados(0)("Value").ToString()
- MensajeErrorCFDI = Resultados(0)("Value").ToString()
- End If
- Else
- Retorno = resultadoTimbre.Detalle
- MensajeErrorCFDI = resultadoTimbre.Detalle
+ Retorno = resultadoTimbre.Detalle
+ MensajeErrorCFDI = resultadoTimbre.Detalle
- If Retorno = "[]" Then
- Retorno = resultadoTimbre.Descripcion
+ If Retorno = "[]" Then
+ Retorno = resultadoTimbre.Descripcion
+ End If
+ If MensajeErrorCFDI = "[]" Then
+ Retorno = resultadoTimbre.Descripcion
+ End If
+
End If
- If MensajeErrorCFDI = "[]" Then
- Retorno = resultadoTimbre.Descripcion
- End If
+ Catch ex As Exception
+ Retorno = ex.ToString()
+ End Try
- End If
Else
Retorno = resultadoTimbre.Detalle
MensajeErrorCFDI = resultadoTimbre.Detalle
@@ -4730,107 +4745,17 @@ Public Class Timbrado
GuardaLogTimbrado(swTiempo.ToString, UsuarioActual.Empresa.CvePAC)
Return Retorno
End Function
- Public Function TimbrarFacturaGoCFDIv40(Ventas As Modelos.Factura, UsuarioActual As Usuario, Optional CvePACEspecial As Integer = -1) As String
- If CvePACEspecial = -1 Then
- CvePACEspecial = UsuarioActual.Empresa.CvePAC
- End If
- Dim sw As New Diagnostics.Stopwatch
- Dim swmili As Long = 0
- Dim swTiempo As New StringBuilder
- sw.Start()
+
+ Private Function GenerarXMLGoCFDIv40(ByRef cfdi As GoFac.Cfdi4, EmisorRFC As String, ArchivoCertificado As String, llaveBase64 As String, Clave As String, Ventas As Modelos.Factura, UsuarioActual As Usuario, Optional CvePACEspecial As Integer = -1) As String
Dim Retorno As String = ""
- Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre
-
- Dim ArchivoLLave As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoKey)
- Dim ArchivoCertificado As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoCer)
- Dim UsuarioServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx")
- Dim ClaveServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC.ToLower, "rene2018")
- Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey
- Dim EmisorRFC As String = UsuarioActual.Empresa.RFC
- Dim UrlServicio As String = "" ' Produccion
- Dim RutaArchivo As String = String.Format("{0}XML\{1}\", UsuarioActual.Empresa.Ruta, Ventas.TipoDocto)
- Dim NombreArchivoXML As String = ObjCFDITimbre.Comprobante.SerieFolio
- Dim SubTotal As Decimal = 0
- Dim TimbraProduccion As Boolean = True
- If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo)
-
- UrlServicio = "https://cfdi.gofac.com.mx/timbrado.asmx?WSDL"
-
- If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then
-
- EmisorRFC = "EKU9003173C9"
- UsuarioActual.Empresa.Empresa = "ESCUELA KEMPER URGATE SA DE CV"
- ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\EKU9003173C9.key"
- ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\EKU9003173C9.cer"
-
- Clave = "12345678a"
- TimbraProduccion = False
- UsuarioServicio = "UserTest"
- ClaveServicio = "1234567890"
-
- End If
-
-#Region "Valida"
- If Not File.Exists(ArchivoCertificado) Then
- Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
- Return "El archivo de certificado no existe"
- End If
- If Not File.Exists(ArchivoLLave) Then
- Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
- Return "El archivo de llave privada no existe"
- End If
- If UsuarioActual.Empresa.ContraseñaKey = "" Then
- Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
- Return "La clave no puede ser vacía"
- End If
-#End Region
-
-#Region "Variables"
- Dim llaveByte As Byte(), certByte As Byte()
- Dim llaveBase64 As String, certBase64 As String
- Dim cfdi As New GoFac.Cfdi4
- 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)
- Return "Error al leer la llave privada"
- 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)
- Return "Error al leer el certificado"
-
- End Try
-#End Region
-
-
- sw.Stop()
- swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
- swmili = sw.ElapsedMilliseconds
- sw.Start()
-
+ MensajeErrorCFDI = ""
'cfdi.QuitarCerosDecimalDerecha = True ' no limita a 2 decimales, el atributo, de cantidad y precio unitario
#Region "Certificado"
cfdi.CertArchivo(ArchivoCertificado)
#End Region
-
- sw.Stop()
- swTiempo.AppendFormat("Certificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
- swmili = sw.ElapsedMilliseconds
- sw.Start()
+ Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre
#Region "Comprobante"
@@ -5279,15 +5204,14 @@ Public Class Timbrado
End If
#End Region
- sw.Stop()
- swTiempo.AppendFormat("Armado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
- swmili = sw.ElapsedMilliseconds
- sw.Start()
#Region "Genera XML"
Dim ArchivoGenerado As Boolean = False
Try
cfdi.GenerarXmlB64(llaveBase64, Clave)
ArchivoGenerado = True
+ If ArchivoGenerado Then
+ Retorno = ""
+ End If
Catch ex As Exception
Retorno = cfdi.Mensaje
If Retorno = "" OrElse IsNothing(Retorno) Then
@@ -5296,14 +5220,115 @@ Public Class Timbrado
MensajeErrorCFDI = Retorno
End Try
+ If Not String.IsNullOrEmpty(MensajeErrorCFDI) Then
+ Retorno = MensajeErrorCFDI
+ End If
+
#End Region
+
+ Return Retorno
+ End Function
+
+ Public Function TimbrarFacturaGoCFDIv40(Ventas As Modelos.Factura, UsuarioActual As Usuario, Optional CvePACEspecial As Integer = -1) As String
+ If CvePACEspecial = -1 Then
+ CvePACEspecial = UsuarioActual.Empresa.CvePAC
+ End If
+ Dim sw As New Diagnostics.Stopwatch
+ Dim swmili As Long = 0
+ Dim swTiempo As New StringBuilder
+ sw.Start()
+ Dim Retorno As String = ""
+ Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre
+
+ Dim ArchivoLLave As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoKey)
+ Dim ArchivoCertificado As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoCer)
+ Dim UsuarioServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx")
+ Dim ClaveServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC.ToLower, "rene2018")
+ Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey
+ Dim EmisorRFC As String = UsuarioActual.Empresa.RFC
+ Dim UrlServicio As String = "" ' Produccion
+ Dim RutaArchivo As String = String.Format("{0}XML\{1}\", UsuarioActual.Empresa.Ruta, Ventas.TipoDocto)
+ Dim NombreArchivoXML As String = ObjCFDITimbre.Comprobante.SerieFolio
+ Dim SubTotal As Decimal = 0
+ Dim TimbraProduccion As Boolean = True
+ If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo)
+
+ UrlServicio = "https://cfdi.gofac.com.mx/timbrado.asmx?WSDL"
+
+ If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then
+
+ EmisorRFC = "EKU9003173C9"
+ UsuarioActual.Empresa.Empresa = "ESCUELA KEMPER URGATE SA DE CV"
+ ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\EKU9003173C9.key"
+ ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\EKU9003173C9.cer"
+
+ Clave = "12345678a"
+ TimbraProduccion = False
+ UsuarioServicio = "UserTest"
+ ClaveServicio = "1234567890"
+
+ End If
+
+#Region "Valida"
+ If Not File.Exists(ArchivoCertificado) Then
+ Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
+ Return "El archivo de certificado no existe"
+ End If
+ If Not File.Exists(ArchivoLLave) Then
+ Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
+ Return "El archivo de llave privada no existe"
+ End If
+ If UsuarioActual.Empresa.ContraseñaKey = "" Then
+ Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
+ Return "La clave no puede ser vacía"
+ End If
+#End Region
+
+#Region "Variables"
+ Dim llaveByte As Byte(), certByte As Byte()
+ Dim llaveBase64 As String, certBase64 As String
+ Dim cfdi As New GoFac.Cfdi4
+ 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)
+ Return "Error al leer la llave privada"
+ 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)
+ Return "Error al leer el certificado"
+
+ End Try
+#End Region
+
+
+ sw.Stop()
+ swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+
+ Dim RespGeneracionXML As String = GenerarXMLGoCFDIv40(cfdi, EmisorRFC, ArchivoCertificado, llaveBase64, Clave, Ventas, UsuarioActual, CvePACEspecial)
+
sw.Stop()
swTiempo.AppendFormat("Genera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
swmili = sw.ElapsedMilliseconds
sw.Start()
#Region "Timbra"
- If ArchivoGenerado Then
+ If RespGeneracionXML = "" Then
cfdi.TimbrarCfdi(UsuarioServicio, ClaveServicio, TimbraProduccion)
@@ -5437,18 +5462,19 @@ Public Class Timbrado
Dim ArchivoLLave As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoKey)
Dim ArchivoCertificado As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoCer)
- Dim UsuarioServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx")
- Dim ClaveServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC.ToLower, "rene2018")
+
+ Dim UsuarioServicio As String = "rene.molina@adssistemas.mx"
+ Dim ClaveServicio As String = "Facturacion2021#"
+
Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey
Dim EmisorRFC As String = UsuarioActual.Empresa.RFC
- Dim UrlServicio As String = "" ' Produccion
+
Dim RutaArchivo As String = String.Format("{0}XML\{1}\", UsuarioActual.Empresa.Ruta, Ventas.TipoDocto)
Dim NombreArchivoXML As String = ObjCFDITimbre.Comprobante.SerieFolio
Dim SubTotal As Decimal = 0
Dim TimbraProduccion As Boolean = True
If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo)
- UrlServicio = "https://cfdi.gofac.com.mx/timbrado.asmx?WSDL"
If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then
@@ -5459,9 +5485,6 @@ Public Class Timbrado
Clave = "12345678a"
TimbraProduccion = False
- UsuarioServicio = "UserTest"
- ClaveServicio = "1234567890"
-
End If
#Region "Valida"
@@ -5514,483 +5537,8 @@ Public Class Timbrado
swmili = sw.ElapsedMilliseconds
sw.Start()
+ Dim RespGeneracionXML As String = GenerarXMLGoCFDIv40(cfdi, EmisorRFC, ArchivoCertificado, llaveBase64, Clave, Ventas, UsuarioActual, CvePACEspecial)
- 'cfdi.QuitarCerosDecimalDerecha = True ' no limita a 2 decimales, el atributo, de cantidad y precio unitario
-#Region "Certificado"
- cfdi.CertArchivo(ArchivoCertificado)
-#End Region
-
-
- sw.Stop()
- swTiempo.AppendFormat("Certificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
- swmili = sw.ElapsedMilliseconds
- sw.Start()
-
-#Region "Comprobante"
-
- cfdi.Comprobante(
- ObjCFDITimbre.Comprobante.Serie,
- ObjCFDITimbre.Comprobante.Folio,
- ObjCFDITimbre.Comprobante.Fecha.ToString("yyyy-MM-ddTHH:mm:ss"),
- ObjCFDITimbre.Comprobante.FormadePago,
- ObjCFDITimbre.Comprobante.CondicionesdePago,
- ObjCFDITimbre.Comprobante.SubTotal,
- ObjCFDITimbre.Comprobante.Descuentos,
- ObjCFDITimbre.Comprobante.Moneda,
- ObjCFDITimbre.Comprobante.TipoCambio.ToString,
- ObjCFDITimbre.Comprobante.Total,
- ObjCFDITimbre.Comprobante.TipoComprobante,
- ObjCFDITimbre.Comprobante.Exportacion,
- ObjCFDITimbre.Comprobante.MetodoPago,
- ObjCFDITimbre.Comprobante.LugarExpedicion,
- ObjCFDITimbre.Comprobante.Confirmacion)
-
- If ObjCFDITimbre.CFDIRelacionados.TipoRelacion <> "" Then
- cfdi.CfdiRelacionados(ObjCFDITimbre.CFDIRelacionados.TipoRelacion)
- For Each uid As String In ObjCFDITimbre.CFDIRelacionados.UUID
- cfdi.CfdiRelacionado(uid)
- Next
- End If
-#Region "Emisor"
- ' cfdi.agregarCfdiRelacionados()
- cfdi.Emisor(EmisorRFC, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal, "")
-
-#End Region
-
-#Region "Receptor"
-
- cfdi.Receptor(ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Receptor.Nombre, ObjCFDITimbre.Receptor.DomicilioFiscalReceptor, ObjCFDITimbre.Receptor.ResidenciaFiscal, ObjCFDITimbre.Receptor.NumeroRegistroTributario, ObjCFDITimbre.Receptor.RegimenFiscalReceptor, ObjCFDITimbre.Receptor.UsoCFDI)
-
-#End Region
-
-#End Region
-
-#Region "Conceptos"
-
- 'Nodo conceptos, se agregan los PS
-
- If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then
- For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos
- cfdi.Concepto(concep.ClaveProdServ, concep.Noidentificacion, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario, concep.Importe, concep.Descuento, concep.ObjetoImpuesto)
- For Each imp As CFDIConceptosImpuestos In concep.Impuestos
- If imp.TrasladooRetencion = "T" Then
- cfdi.ConceptoTraslado(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe)
- Else
- cfdi.ConceptoRetencion(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe)
- End If
- Next
- If concep.CuentaPredial <> "" Then cfdi.CuentaPredial(concep.CuentaPredial)
- If concep.NumeroPedimento <> "" Then cfdi.InformacionAduanera(concep.NumeroPedimento)
- Next
- End If
-
-#End Region
-
- If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E") Then
-
-#Region "Impuestos"
- 'SI NO ES FACTURA EN 0 AGREGA LOS IMPUESTOS
- If Ventas.Total <> 0 OrElse (ObjCFDITimbre.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.TotalImpuestosTrasladados > 0) Then
- cfdi.Impuestos(ObjCFDITimbre.TotalImpuestosRetenidos, ObjCFDITimbre.TotalImpuestosTrasladados)
- End If
-#End Region
-#Region " Traslados y Retenciones"
-
-
- If ObjCFDITimbre.Retenciones.Sum(Function(x) x.Importe) > 0 Then
- ''se acumulan los importes
- For Each Ret In ObjCFDITimbre.Retenciones
- cfdi.Retencion(Ret.Impuesto, Ret.Importe)
- Next
- End If
-
- ''se acumulan los importes
- For Each Tras In ObjCFDITimbre.Traslados
- cfdi.Traslado(Tras.Base, Tras.Impuesto, Tras.TipoFactor, Tras.TasaOCuota, Tras.Importe)
- Next
-#End Region
-
-#Region "Impuestos Locales"
-
- If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 OrElse ObjCFDITimbre.TrasladosLocales.Sum(Function(x) x.Importe) > 0 Then
-
- cfdi.ImpuestosLocales(ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe), ObjCFDITimbre.TrasladosLocales.Sum(Function(x) x.Importe))
-
- For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales
- If ret.Importe > 0 Then
- cfdi.RetencionLocal(ret.ImpuestoLocalRetenido, ret.TasaRetencion, ret.Importe)
- End If
- Next
-
- For Each ret As CFDITrasladosLocales In ObjCFDITimbre.TrasladosLocales
- If ret.Importe > 0 Then
- cfdi.TrasladoLocal(ret.ImpuestoLocalTraslado, ret.TasaTraslado, ret.Importe)
- End If
- Next
- End If
-
- 'If Ventas.CveComplementoTimbrado > 0 Then
-
- ' Select Case Ventas.CveComplementoTimbrado
- ' Case 5 'INE Proceso Ordinario Directivo Estatal"
- ' cfdi.Ine11("Ordinario", "Directivo Estatal", "0")
-
- ' cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, "")
- ' cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad)
- ' Case 6 'INE Proceso Ordinario Ejecutivo Estatal"
- ' cfdi.Ine11("Ordinario", "Ejecutivo Estatal", "0")
-
- ' cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, "")
- ' cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad)
- ' Case 7 'INE Proceso Ordinario Ejecutivo Nacional"
-
- ' cfdi.Ine11("Ordinario", "Ejecutivo Nacional", Ventas.ComplementoINE.INEIdContabilidad.ToString)
- ' Case 8 'INE PreCampaña
- ' cfdi.Ine11(Ventas.ComplementoINE.INETipoProceso, "", "0")
-
- ' cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, Ventas.ComplementoINE.INETipoComite)
- ' cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad)
- ' End Select
-
- 'End If
-
-
-
-#End Region
-
-
-#Region "Comercio Exterior"
-
- 'If Ventas.Cliente.AplicaComercioExterior And ObjCFDITimbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto Then
- ' If ObjCFDITimbre.Complementos.ComercioExterior11 IsNot Nothing Then
-
- ' 'DATOS GENERALES
- ' cfdi.ComercioExterior11(ObjCFDITimbre.Complementos.ComercioExterior11.MotivoTraslado,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.TipoOperacion,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.ClavedePedimento,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.CertificadoOrigen,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.NumCertificadoOrigen,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.NumeroExportadorConfiable,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Incoterm,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Subdivision,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Observaciones,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.TipoCambioUSD,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.TotalUSD)
- ' 'EMISOR
- ' cfdi.ComercioExterior11Emisor(If(EmisorRFC.Length >= 12, "", ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CURP))
- ' cfdi.ComercioExterior11Domicilio(ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Calle,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroExterior,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroInterior,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Colonia,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Localidad,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Referencia,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Municipio,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Estado,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Pais,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CP)
- ' 'RECEPTOR
- ' cfdi.ComercioExterior11Receptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib)
- ' cfdi.ComercioExterior11DomicilioReceptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Calle,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroExterior,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroInterior,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Colonia,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Localidad,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Referencia,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Municipio,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Estado,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Pais,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.CP)
- ' cfdi.ComercioExterior11Destinatario(ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Nombre,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Calle,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Colonia,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Localidad,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Referencia,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Municipio,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Estado,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Pais,
- ' ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.CP)
- ' 'MERCANCIAS
- ' If ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias IsNot Nothing AndAlso ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias.Count > 0 Then
- ' For Each concep As CFDIComercioExterior11Mercancias In ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias
- ' cfdi.ComercioExterior11Mercancia(concep.NoIdentificacion, concep.FraccionArancelaria, concep.CantidadAduana, concep.UnidadAduana, concep.ValorUnitarioAduana, concep.ValorDolares)
- ' If concep.DescripcionesEspecificas.Marca <> "" Then
- ' cfdi.ComercioExterior11MercanciaDescripcionesEspeciales(concep.DescripcionesEspecificas.Marca,
- ' concep.DescripcionesEspecificas.Modelo,
- ' concep.DescripcionesEspecificas.SubModelo,
- ' concep.DescripcionesEspecificas.NumeroSerie)
- ' End If
- ' Next
-
- ' End If
-
-
- ' End If
- 'End If
-
-#End Region
-
-
- End If
-
-
-
-#Region "C O M P L E M E N T O C A R T A P O R T E"
-
-
- If ObjCFDITimbre.Complementos.CartaPorte IsNot Nothing Then
-
- Dim Carta As CFDICartaPorte = ObjCFDITimbre.Complementos.CartaPorte
-
- ''DATOS GENERALES
- cfdi.CartaPorte(Carta.TranspInternac, Carta.EntradaSalidaMercancia, "", Carta.ViaEntradaSalida, Carta.TotalDistanciaRecorrida)
-
- 'UBICACIONES
- If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then
- For Each ubica As CFDICartaPorteUbicacion In Carta.Ubicaciones
- 'origen
- cfdi.CartaPorteUbicacion(ubica.TipoUbicacion, ubica.IDUbicacion, ubica.RFCRemitenteDestinatario, ubica.NombreRemitenteDestinatario, ubica.NumRegIdTrib, ubica.ResidenciaFiscal, ubica.NumEstacion, ubica.NombreEstacion, ubica.NavegacionTrafico, ubica.FechaHoraSalidaLlegada, ubica.TipoEstacion, ubica.DistanciaRecorrida)
- 'cfdi.CartaPorteOrigen(ubica.Origen.IDOrigen, ubica.Origen.RFCRemitente, ubica.Origen.NombreRemitente, ubica.NumRegIdTrib, ubica.Origen.ResidenciaFiscal, ubica.Origen.NumEstacion, ubica.Origen.NombreEstacion, ubica.Origen.NavegacionTrafico, ubica.Origen.FechaHoraSalida)
- cfdi.CartaPorteDomicilio(ubica.Domicilio.Calle, ubica.Domicilio.NumeroExterior, ubica.Domicilio.NumeroInterior, ubica.Domicilio.Colonia, ubica.Domicilio.Localidad, ubica.Domicilio.Referencia, ubica.Domicilio.Municipio, ubica.Domicilio.Estado, ubica.Domicilio.Pais, ubica.Domicilio.CP)
- Next
-
- End If
-
- 'MERCANCIAS
- If Carta.Mercancias IsNot Nothing Then
- cfdi.CartaPorteMercancias(Carta.Mercancias.PesoBrutoTotal, Carta.Mercancias.UnidadPeso, Carta.Mercancias.PesoNetoTotal, Carta.Mercancias.NumTotalMercancias, Carta.Mercancias.CargoporTasacion)
- If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then
- For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias
- 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
- cfdi.CartaPorteCantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes)
- Next
- Next
- End If
- End If
- '
- If Carta.FiguraTransporte IsNot Nothing Then
-
- If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then
-
- cfdi.CartaPorteAutotransporte(Carta.FiguraTransporte.AutoTransporte.PermisoSCT, Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT)
-
- cfdi.CartaPorteIdentificacionVehicular(Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM, Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM)
-
- cfdi.CartaPorteSeguros(Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil,
- Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente,
- Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga,
- Carta.FiguraTransporte.AutoTransporte.PrimaSeguro)
-
- If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then
- For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques
- cfdi.CartaPorteRemolque(concep.SubTipoRemolque, concep.Placa)
- Next
-
- End If
- End If
-
- If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then
- For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores
- cfdi.CartaPorteTiposFigura(concep.TipoFigura, concep.RFCFigura, concep.NumLicencia, concep.NombreFigura, concep.NumRegidTribFigura, If(concep.ResidenciaFiscalFigura <> "MEX", concep.ResidenciaFiscalFigura, ""))
- If concep.TipoFigura.Contiene("02", "03") Then ' “02”- Propietario o “03” -Arrendador
- cfdi.CartaPortePartesTransporte("PT01")
- cfdi.CartaPortePartesTransporteDomicilio(concep.Domicilio.Calle, concep.Domicilio.NumeroExterior, concep.Domicilio.NumeroInterior, concep.Domicilio.Colonia, concep.Domicilio.Localidad, concep.Domicilio.Referencia, concep.Domicilio.Municipio, concep.Domicilio.Estado, concep.Domicilio.Pais, concep.Domicilio.CP)
- End If
- Next
- End If
-
- End If
-
- End If
-
-
-#End Region
-
-
-#Region "Complemento Pago"
-
- If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then
-
- cfdi.Pago(ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss"),
- ObjCFDITimbre.ComplementoPagos.FormaDePagoP,
- ObjCFDITimbre.ComplementoPagos.MonedaP,
- ObjCFDITimbre.ComplementoPagos.TipoCambioP,
- ObjCFDITimbre.ComplementoPagos.Monto,
- ObjCFDITimbre.ComplementoPagos.NumOperacion,
- ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaOrd,
- ObjCFDITimbre.ComplementoPagos.NomBancoOrdExt,
- ObjCFDITimbre.ComplementoPagos.CtaOrdenante,
- ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaBen,
- ObjCFDITimbre.ComplementoPagos.CtaBeneficiario,
- ObjCFDITimbre.ComplementoPagos.TipoCadPago,
- ObjCFDITimbre.ComplementoPagos.CertPago,
- ObjCFDITimbre.ComplementoPagos.CadPago,
- ObjCFDITimbre.ComplementoPagos.SelloPago)
-
-
- If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then
-
-
- For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados
- cfdi.PagoDoctoRelacionado(doc.IdDocumento,
- doc.Serie,
- doc.Folio,
- doc.MonedaDR,
- doc.TipoCambioDR,
- doc.MetodoDePagoDR,
- doc.NumParcialidad,
- doc.ImpSaldoAnt,
- doc.ImpPagado,
- doc.ImpSaldoInsoluto)
-
- Next
-
- 'Estos impuestos aplicarían para anticipos
- If ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then
-
- cfdi.PagoImpuestos(ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos, ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados)
- If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then
- For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R")
- cfdi.PagoRetencion(Ret.Impuesto, Ret.Importe)
- Next
- End If
- If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then
- For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T")
- cfdi.PagoTraslado(Tra.Impuesto, Tra.TipoFactor, Tra.TasaOCuota, Tra.Importe)
- Next
- End If
-
- End If
-
-
-
- End If
-
- End If
-#End Region
-
-
-
-#Region "Nomina12"
- If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then
-
- 'cfdi.Esquema.AgregarEsquema("http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd")
- cfdi.Nomina12(ObjCFDITimbre.Nomina.TipoNomina, ObjCFDITimbre.Nomina.FechaPago.ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.FechaInicio.ToDate().ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.FechaFin.ToDate().ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.NumDiasPagados, If(ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0, ObjCFDITimbre.Nomina.TotalPercepciones, 0), If(ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0, ObjCFDITimbre.Nomina.TotalDeducciones, 0), If(ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0, ObjCFDITimbre.Nomina.TotalOtrosPagos, 0))
-
- cfdi.Nomina12Emisor(ObjCFDITimbre.Emisor.CURP, If(ObjCFDITimbre.Nomina.Receptor.TipoContrato.Contiene("09", "10", "99"), "", ObjCFDITimbre.Emisor.RegistroPatronal), ObjCFDITimbre.Emisor.RFC)
-
- If UsuarioActual.Empresa.UsaAC Then cfdi.Nomina12EntidadSNCF("IF", 90)
-
-
-#Region "Receptor"
-
- cfdi.Nomina12Receptor(ObjCFDITimbre.Nomina.Receptor.CURP,
- ObjCFDITimbre.Nomina.Receptor.NSS,
- ObjCFDITimbre.Nomina.Receptor.FechaInicioContrato.ToDate().ToString("yyyy-MM-dd"),
- ObjCFDITimbre.Nomina.Receptor.Antiguedad,
- ObjCFDITimbre.Nomina.Receptor.TipoContrato,
- ObjCFDITimbre.Nomina.Receptor.Sindicalizado,
- ObjCFDITimbre.Nomina.Receptor.CodigoTipoJornada,
- ObjCFDITimbre.Nomina.Receptor.CodigoRegimenContratacion,
- ObjCFDITimbre.Nomina.Receptor.CodigoEmpleado,
- ObjCFDITimbre.Nomina.Receptor.Departamento,
- ObjCFDITimbre.Nomina.Receptor.Puesto,
- ObjCFDITimbre.Nomina.Receptor.CodigoRiesgoPuesto,
- If(ObjCFDITimbre.Nomina.TipoNomina = "E", "99", ObjCFDITimbre.Nomina.Receptor.TipoPeriodo),
- ObjCFDITimbre.Nomina.Receptor.CodigoBanco,
- ObjCFDITimbre.Nomina.Receptor.NumeroCuenta,
- ObjCFDITimbre.Nomina.Receptor.SBC,
- ObjCFDITimbre.Nomina.Receptor.SDI,
- ObjCFDITimbre.Nomina.Receptor.CodigoEntidadFederativa)
- 'cfdi.Nomina12SubContratacion("", "0")
- 'cfdi.agregarNominaPercepcionesPercepcionAccionesOTitulos12("100", "200");
- 'cfdi.agregarNominaPercepcionesSeparacionIndemnizacion12("100", "10", "1000", "100", "50");
- 'cfdi.agregarNominaPercepcionesJubilacionPensionRetiro12("50", "100", "10", "100", "0");
-
-
- End If
-#End Region
- If ObjCFDITimbre.Nomina IsNot Nothing Then
- 'If cfdi.Nomina12SeparacionIndemnizacion Then
- If ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0 Then
- cfdi.Nomina12Percepciones(ObjCFDITimbre.Nomina.TotalSueldos, ObjCFDITimbre.Nomina.TotalIndemnizacion, ObjCFDITimbre.Nomina.TotalJubilacion, ObjCFDITimbre.Nomina.TotalPercepcionesGravado, ObjCFDITimbre.Nomina.TotalPercepcionesExento)
- For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones
- cfdi.Nomina12Percepcion(percep.TipoPercepcion, percep.Clave, percep.Concepto, Math.Round(percep.ImporteGravado, 2), Math.Round(percep.ImporteExento, 2))
- If percep.TipoPercepcion.ToEntero() = 19 Then
-
- If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then
- For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras
- cfdi.Nomina12HorasExtra(HoraExtra.Dias.ToEntero, HoraExtra.TipoHoras, HoraExtra.HorasExtra, HoraExtra.ImportePagado)
- Next
- End If
- End If
- Next
- End If
-
- If ObjCFDITimbre.IStimbreFiniquito Then
- 'ObjCFDITimbre.Nomina.
- Dim UltimoSueldoOrdinario As Double = ObjCFDITimbre.Nomina.UltimoSueldoOrdinario.ToString().ToDouble()
- Dim TotalIndemnizacion As Double = ObjCFDITimbre.Nomina.TotalIndemnizacion
- Dim t1 As Double = If(UltimoSueldoOrdinario < TotalIndemnizacion, UltimoSueldoOrdinario, TotalIndemnizacion)
- Dim t2 As Double = If(UltimoSueldoOrdinario < TotalIndemnizacion, TotalIndemnizacion, UltimoSueldoOrdinario)
- cfdi.Nomina12SeparacionIndemnizacion(TotalIndemnizacion, ObjCFDITimbre.Nomina.Antiguedad, UltimoSueldoOrdinario, t1, t2 - t1)
-
- End If
- 'deducciones al final
- If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then
- cfdi.Nomina12Deducciones(ObjCFDITimbre.Nomina.TotalDeduccionesOtras, Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2))
- For Each deduc As CFDINominaDeducciones In ObjCFDITimbre.Nomina.Deducciones
- cfdi.Nomina12Deduccion(deduc.TipoDeduccion, deduc.Clave, deduc.Concepto, Math.Round(deduc.Importe, 2))
- Next
- End If
- If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing Then
- ' cfdi.agregarNominaOtrosPagosOtroPago12("002", "002", "Subsidio", "10.00");
- ' cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12("10.00");
- If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0 Then
- For Each otpag As CFDINominaOtrosPagos In ObjCFDITimbre.Nomina.OtrosPagos
- cfdi.Nomina12OtroPago(otpag.TipoOtroPago, otpag.Clave, otpag.Concepto, otpag.Importe)
- If otpag.TipoOtroPago = "002" Then
- cfdi.Nomina12SubsidioAlEmpleo(otpag.Subsidiocausado)
- End If
-
- If otpag.TipoOtroPago = "004" AndAlso otpag.Importe > 0 Then
- If otpag.ejercicio > 0 Then
- cfdi.CompensacionSaldosAFavor(otpag.SaldoAFavor, otpag.ejercicio, otpag.RemanenteSalFav) 'otpag.SaldoAFavor
- End If
- End If
-
- Next
- End If
- End If
- If ObjCFDITimbre.Nomina.Incapacidades IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Incapacidades.Count > 0 Then
- For Each Incap As CFDINominaIncapacidades In ObjCFDITimbre.Nomina.Incapacidades
- cfdi.Nomina12Incapacidad(Incap.DiasIncapacidad.ToEntero, Incap.TipoIncapacidad, Incap.Importe)
- Next
- End If
- End If
-#End Region
-
- sw.Stop()
- swTiempo.AppendFormat("Armado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
- swmili = sw.ElapsedMilliseconds
- sw.Start()
-#Region "Genera XML"
- Dim ArchivoGenerado As Boolean = False
- Try
- cfdi.GenerarXmlB64(llaveBase64, Clave)
- ArchivoGenerado = True
- Catch ex As Exception
- Retorno = cfdi.Mensaje
- If Retorno = "" OrElse IsNothing(Retorno) Then
- Retorno = $"llaveBase64 ={llaveBase64}
Clave ={Clave}
{ex.ToString()}"
- End If
- MensajeErrorCFDI = Retorno
- End Try
-
-#End Region
sw.Stop()
swTiempo.AppendFormat("Genera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
swmili = sw.ElapsedMilliseconds
@@ -5999,7 +5547,18 @@ Public Class Timbrado
Dim msgErrorGeneracion As String = If(String.IsNullOrEmpty(cfdi.Mensaje), "", cfdi.Mensaje)
#Region "Timbra"
- If ArchivoGenerado 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
+ Dim valorXML = ""
+ Try
+
+ Dim tipo = GetType(GoFac.Cfdi4)
+ Dim info = tipo.GetField("_xml", BindingFlags.NonPublic Or BindingFlags.Instance)
+ valorXML = info?.GetValue(cfdi).ToString()
+ Catch ex As Exception
+ valorXML = ""
+ OnError("Ocurrió un error al generar el xml", ex)
+ End Try
Dim Respuesta As String = ""
@@ -6011,12 +5570,11 @@ Public Class Timbrado
New JProperty("certBase64", certBase64),
New JProperty("keyBase64", llaveBase64),
New JProperty("keyPass", Clave),
- New JProperty("xmlBase64", cfdi.Xml.ToBase64Encode()),
+ New JProperty("xmlBase64", valorXML.ToString().ToBase64Encode()),
New JProperty("prueba", (Not TimbraProduccion).ToString().ToLower),
New JProperty("opciones", New String(0) {""})
)
- 'Respuesta = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado/timbrarConCSD", payload.ToString(), TokenAuth)
- Respuesta = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado/timbrarConCSD", payload.ToString(), TokenAuth)
+ Respuesta = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado40/timbrarConCSD", payload.ToString(), TokenAuth)
End If
' Aumentamos el timeout de la operación
@@ -6042,7 +5600,13 @@ Public Class Timbrado
If result.timbradoOk Then
Dim FolioFiscal As String = result.UUID
'GUARDA EL XML RETORNADO POR EL PAC
- 'cfdi.EscribirXML(result.xmlBase64.ToBase64Decode(), RutaArchivo, NombreArchivoXML)
+ Try
+ Dim xdoc As New XmlDocument()
+ xdoc.LoadXml(result.xmlBase64.ToBase64Decode())
+ xdoc.Save(RutaArchivo & NombreArchivoXML & ".xml")
+ Catch ex As Exception
+ OnError("Ocurrió un error al guardar el xml", ex)
+ End Try
sw.Stop()
swTiempo.AppendFormat("Guardado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
@@ -6157,7 +5721,6 @@ Public Class Timbrado
End Function
#End Region
-
Public Class PADEServicioTimbradoResp
@@ -6313,7 +5876,7 @@ Public Class Timbrado
comprobante.FormaPago = ObjCFDITimbre.Comprobante.FormadePago
If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E", "N") Then comprobante.CondicionesDePago = ObjCFDITimbre.Comprobante.CondicionesdePago
- comprobante.SubTotal = ObjCFDITimbre.Comprobante.Subtotal.RoundSQL(NumDecimalesImporte)
+ comprobante.SubTotal = ObjCFDITimbre.Comprobante.SubTotal.RoundSQL(NumDecimalesImporte)
If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E", "N") Then
If ObjCFDITimbre.Comprobante.Descuentos > 0 Then
comprobante.DescuentoSpecified = True
diff --git a/Bin/Profact.TimbraCFDI.dll b/Bin/Profact.TimbraCFDI.dll
index 5bf77d18a..b1c756dcf 100644
Binary files a/Bin/Profact.TimbraCFDI.dll and b/Bin/Profact.TimbraCFDI.dll differ