diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb
index d11401ed9..a5580d3f9 100644
--- a/App_Code/Timbrado.vb
+++ b/App_Code/Timbrado.vb
@@ -713,7 +713,7 @@ Public Class Timbrado
Dim Contrato As String = "72330711-cac6-4106-8051-cbcda1aef495"
- Dim Respuesta As String = EnviarInformacionCancelacionPADESOAP("https://timbrado.pade.mx/servicio/Timbrado3.3?wsdl", UsuarioServicio, ClaveServicio, Contrato, EmisorRFC, RFCReceptor, certBase64, llaveBase64, Clave, FolioFiscal, Total, TimbraProduccion)
+ Dim Respuesta As String = EnviarInformacionCancelacionPADESOAP("https://timbrado.pade.mx/servicio/Timbrado4.0?wsdl", UsuarioServicio, ClaveServicio, Contrato, EmisorRFC, RFCReceptor, certBase64, llaveBase64, Clave, FolioFiscal, Total, TimbraProduccion, MotivoCancelacion:=CodigoSATMotivoCancelacion, FolioSustitucion:=FolioSustitucion)
If Not String.IsNullOrEmpty(Respuesta) Then
Dim result As PADEServicioCancelacionResp = Nothing
@@ -741,11 +741,14 @@ Public Class Timbrado
Else
CancelacionMensaje = result.mensaje
End If
-
+ Else
+ CancelacionMensaje = result.mensaje
End If
+ Else
+ Retorno = False
End If
Else
-
+ Retorno = False
End If
End Select
@@ -787,7 +790,8 @@ Public Class Timbrado
End Class
Private Function EnviarInformacionCancelacionPADESOAP(ByVal url As String, UsuarioServicio As String, PassServicio As String, contrato As String, rfcEmisor As String, rfcReceptor As String,
- certBase64 As String, keyBase64 As String, keyPass As String, arregloUUID As String, Total As Decimal, TimbraProduccion As Boolean) As String
+ certBase64 As String, keyBase64 As String, keyPass As String, arregloUUID As String, Total As Decimal, TimbraProduccion As Boolean,
+ Optional MotivoCancelacion As String = "", Optional FolioSustitucion As String = "") As String
Dim retorno = ""
Try
@@ -797,6 +801,9 @@ Public Class Timbrado
request.Accept = "text/xml"
request.Method = "POST"
+ 'OPCIONES DE CANCELACION
+ ''UUID|RFC_Receptor|RFC_Emisor|Total|Motivo|FolioFiscalSustituye
+
Dim XMLString As String = $"
@@ -804,7 +811,7 @@ Public Class Timbrado
{UsuarioServicio}
{PassServicio}
{rfcEmisor}
- {arregloUUID}|{rfcReceptor}|{rfcEmisor}|{Total}
+ {arregloUUID}|{rfcReceptor}|{rfcEmisor}|{Total}|{MotivoCancelacion}|{FolioSustitucion}
{certBase64}
{keyBase64}
{keyPass}
@@ -1013,7 +1020,12 @@ Public Class Timbrado
Retorno = If(Ret = "", True, False)
Case 3
- Retorno = TimbrarFacturaProFact(UsuarioActual, Ventas)
+ If UsuarioActual.Empresa.Funcionalidad(350) = "1" Then
+ Retorno = TimbrarFacturaProFactV40(UsuarioActual, Ventas)
+ Else
+ Retorno = TimbrarFacturaProFact(UsuarioActual, Ventas)
+ End If
+
'Retorno = TimbrarFacturaProFact(UsuarioActual, Ventas, TmpDTConceptos, TmpDTImpuestos, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV)
Case 4
If UsuarioActual.Empresa.Funcionalidad(350) = "1" Then
@@ -3348,6 +3360,1338 @@ Public Class Timbrado
#Region "T i m b r a d o v. 4. 0"
+ Public Function TimbrarFacturaProFactv40(Ventas As Modelos.Factura, UsuarioActual As Usuario) As String
+ Dim sw As New Diagnostics.Stopwatch
+ Dim swTiempo As New StringBuilder
+ Dim swmili As Long = 0
+ sw.Start()
+
+ Dim Retorno As String = ""
+ Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre
+ ' '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 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"
+ End If
+
+
+#Region "Valida"
+ If Not File.Exists(ArchivoCertificado) Then
+ Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
+ Return ""
+ End If
+ If Not File.Exists(ArchivoLLave) Then
+ Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
+ Return ""
+ End If
+ If UsuarioActual.Empresa.ContraseñaKey = "" Then
+ Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
+ Return ""
+ End If
+#End Region
+
+#Region "Variables"
+ Dim llaveByte As Byte(), certByte As Byte()
+ Dim llaveBase64 As String, certBase64 As String
+
+ Dim complemento As String = ""
+ Dim complementoConcepto As String = ""
+ '//Inicializamos el conector el parámetro indica el ambiente en el que se utilizará
+ '//Fasle = Ambiente de pruebas
+ '//True = Ambiente de producción
+ Dim cfdi As New Profact.TimbraCFDI40.Conector(AmbienteProductivo)
+ Dim comprobante As New Profact.TimbraCFDI40.Comprobante()
+
+ If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then
+ cfdi.EstableceCredenciales("mvpNUXmQfK8=")
+ Else
+ cfdi.EstableceCredenciales($"vSGxMFWnNRy/nDoowxqrqw==|Sia123654")
+ End If
+
+#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 ""
+ 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 ""
+
+ End Try
+ sw.Stop()
+ swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+#End Region
+
+
+#Region "Comprobante"
+
+
+ If ObjCFDITimbre.Comprobante.Serie <> "" Then comprobante.Serie = ObjCFDITimbre.Comprobante.Serie
+ comprobante.Folio = ObjCFDITimbre.Comprobante.Folio
+ comprobante.Version = "4.0"
+ comprobante.Fecha = ObjCFDITimbre.Comprobante.Fecha
+ 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)
+ If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E", "N") Then
+ If ObjCFDITimbre.Comprobante.Descuentos > 0 Then
+ comprobante.DescuentoSpecified = True
+ comprobante.Descuento = ObjCFDITimbre.Comprobante.Descuentos.RoundSQL(NumDecimalesImporte)
+ End If
+ End If
+ comprobante.Moneda = ObjCFDITimbre.Comprobante.Moneda
+ comprobante.TipoCambio = ObjCFDITimbre.Comprobante.TipoCambio.ToDecimal
+ comprobante.TipoCambioSpecified = If(ObjCFDITimbre.Comprobante.Moneda <> "XXX", True, False)
+ comprobante.Total = ObjCFDITimbre.Comprobante.Total.RoundSQL(NumDecimalesImporte)
+ comprobante.TipoDeComprobante = ObjCFDITimbre.Comprobante.TipoComprobante
+ comprobante.FormaPagoSpecified = If(ObjCFDITimbre.Comprobante.FormadePago <> "", True, False)
+ comprobante.MetodoPago = ObjCFDITimbre.Comprobante.MetodoPago
+ comprobante.MetodoPagoSpecified = If(ObjCFDITimbre.Comprobante.MetodoPago <> "", True, False)
+ comprobante.LugarExpedicion = ObjCFDITimbre.Comprobante.LugarExpedicion
+
+ If ObjCFDITimbre.CFDIRelacionados.TipoRelacion <> "" Then
+ Dim CfdiRelacionados As New Profact.TimbraCFDI40.ComprobanteCfdiRelacionados
+ CfdiRelacionados.CfdiRelacionado = New Profact.TimbraCFDI40.ComprobanteCfdiRelacionadosCfdiRelacionado(ObjCFDITimbre.CFDIRelacionados.UUID.Count - 1) {}
+ Dim i As Integer = 0
+ For Each uid As String In ObjCFDITimbre.CFDIRelacionados.UUID
+ CfdiRelacionados.CfdiRelacionado(i) = New Profact.TimbraCFDI40.ComprobanteCfdiRelacionadosCfdiRelacionado With {.UUID = uid}
+ i += 1
+ Next
+ CfdiRelacionados.TipoRelacion = ObjCFDITimbre.CFDIRelacionados.TipoRelacion
+ comprobante.CfdiRelacionados = New Profact.TimbraCFDI40.ComprobanteCfdiRelacionados() {CfdiRelacionados}
+ End If
+
+#Region "Emisor"
+ comprobante.Emisor = New Profact.TimbraCFDI40.ComprobanteEmisor()
+ comprobante.Emisor.Rfc = EmisorRFC
+ comprobante.Emisor.Nombre = UsuarioActual.Empresa.Empresa
+ comprobante.Emisor.RegimenFiscal = UsuarioActual.Empresa.CodigoRegimenFiscal
+
+#End Region
+
+#Region "Receptor"
+ comprobante.Receptor = New Profact.TimbraCFDI40.ComprobanteReceptor()
+ comprobante.Receptor.Rfc = ObjCFDITimbre.Receptor.RFC
+ comprobante.Receptor.Nombre = ObjCFDITimbre.Receptor.Nombre
+ comprobante.Receptor.UsoCFDI = ObjCFDITimbre.Receptor.UsoCFDI
+ comprobante.Receptor.RegimenFiscalReceptor = ObjCFDITimbre.Receptor.RegimenFiscalReceptor
+#End Region
+
+#End Region
+
+#Region "Conceptos"
+
+ 'Nodo conceptos, se agregan los PS
+ comprobante.Conceptos = New Profact.TimbraCFDI40.ComprobanteConcepto(ObjCFDITimbre.Conceptos.Count - 1) {}
+
+ If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then
+ Dim i As Integer = 0
+ Dim j As Integer = 0
+ Dim k As Integer = 0
+ For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos
+ comprobante.Conceptos(i) = New Profact.TimbraCFDI40.ComprobanteConcepto()
+ comprobante.Conceptos(i).Cantidad = concep.Cantidad
+
+ 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).Importe = concep.Importe.RoundSQL(NumDecimalesImporte)
+ comprobante.Conceptos(i).ClaveProdServ = concep.ClaveProdServ
+
+ If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then
+ If concep.Descuento > 0 Then
+ comprobante.Conceptos(i).Descuento = concep.Descuento
+ comprobante.Conceptos(i).DescuentoSpecified = True
+ End If
+ End If
+
+ If concep.Noidentificacion <> "" Then comprobante.Conceptos(i).NoIdentificacion = concep.Noidentificacion
+ If concep.CuentaPredial <> "" Then comprobante.Conceptos(i).CuentaPredial = New Profact.TimbraCFDI40.ComprobanteConceptoCuentaPredial() {New Profact.TimbraCFDI40.ComprobanteConceptoCuentaPredial() With {.Numero = concep.CuentaPredial}}
+ If concep.NumeroPedimento <> "" Then
+ comprobante.Conceptos(i).InformacionAduanera = New Profact.TimbraCFDI40.ComprobanteConceptoInformacionAduanera(1) {} 'solo un codigo por el momento
+ comprobante.Conceptos(i).InformacionAduanera(0) = New Profact.TimbraCFDI40.ComprobanteConceptoInformacionAduanera() With {.NumeroPedimento = concep.NumeroPedimento}
+ End If
+
+ j = 0
+ k = 0
+ 'SI NO ES FACTURA EN 0 AGREGA LOS IMPUESTOS
+ If Not ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("P", "N") AndAlso (Ventas.Total <> 0 OrElse (ObjCFDITimbre.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.TotalImpuestosTrasladados > 0)) Then
+
+ If concep.Impuestos.Count > 0 Then
+
+ comprobante.Conceptos(i).Impuestos = New Profact.TimbraCFDI40.ComprobanteConceptoImpuestos()
+ comprobante.Conceptos(i).Impuestos.Traslados = New Profact.TimbraCFDI40.ComprobanteConceptoImpuestosTraslado(concep.Impuestos.FindAll(Function(p As CFDIConceptosImpuestos) p.TrasladooRetencion = "T").Count - 1) {}
+ If concep.Impuestos.FindAll(Function(p As CFDIConceptosImpuestos) p.TrasladooRetencion <> "T").Count > 0 Then
+ comprobante.Conceptos(i).Impuestos.Retenciones = New Profact.TimbraCFDI40.ComprobanteConceptoImpuestosRetencion(concep.Impuestos.FindAll(Function(p As CFDIConceptosImpuestos) p.TrasladooRetencion <> "T").Count - 1) {}
+ End If
+
+ For Each imp As CFDIConceptosImpuestos In concep.Impuestos
+ If imp.TrasladooRetencion = "T" Then
+ comprobante.Conceptos(i).Impuestos.Traslados(j) = New Profact.TimbraCFDI40.ComprobanteConceptoImpuestosTraslado()
+ comprobante.Conceptos(i).Impuestos.Traslados(j).Base = imp.Base
+ comprobante.Conceptos(i).Impuestos.Traslados(j).Impuesto = imp.Impuesto
+ comprobante.Conceptos(i).Impuestos.Traslados(j).TipoFactor = imp.TipoFactor
+ comprobante.Conceptos(i).Impuestos.Traslados(j).Importe = imp.Importe.RoundSQL(NumDecimalesImporte)
+ comprobante.Conceptos(i).Impuestos.Traslados(j).ImporteSpecified = True
+ comprobante.Conceptos(i).Impuestos.Traslados(j).TasaOCuota = imp.TasaOCuota.FormatoNumero(6)
+ comprobante.Conceptos(i).Impuestos.Traslados(j).TasaOCuotaSpecified = True
+ j += 1
+ Else
+ comprobante.Conceptos(i).Impuestos.Retenciones(k) = New Profact.TimbraCFDI40.ComprobanteConceptoImpuestosRetencion()
+ comprobante.Conceptos(i).Impuestos.Retenciones(k).Base = imp.Base
+ comprobante.Conceptos(i).Impuestos.Retenciones(k).Impuesto = imp.Impuesto
+ comprobante.Conceptos(i).Impuestos.Retenciones(k).TipoFactor = imp.TipoFactor
+ comprobante.Conceptos(i).Impuestos.Retenciones(k).Importe = imp.Importe.RoundSQL(NumDecimalesImporte)
+ comprobante.Conceptos(i).Impuestos.Retenciones(k).TasaOCuota = imp.TasaOCuota.ToString.ToDecimal
+ k += 1
+ End If
+ Next
+
+ End If
+
+ End If
+ i += 1
+ Next
+ End If
+
+#End Region
+
+
+ Dim LXmlComplementos As New List(Of XmlElement)()
+ Dim TieneComplemento As Boolean = False
+
+ 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
+ comprobante.Impuestos = New Profact.TimbraCFDI40.ComprobanteImpuestos()
+ comprobante.Impuestos.Traslados = New Profact.TimbraCFDI40.ComprobanteImpuestosTraslado(ObjCFDITimbre.Traslados.Count - 1) {}
+
+ Dim y As Integer = 0
+
+ For Each Tras In ObjCFDITimbre.Traslados
+ comprobante.Impuestos.Traslados(y) = New Profact.TimbraCFDI40.ComprobanteImpuestosTraslado()
+ comprobante.Impuestos.Traslados(y).Impuesto = Tras.Impuesto
+ comprobante.Impuestos.Traslados(y).TipoFactor = Tras.TipoFactor
+ comprobante.Impuestos.Traslados(y).TasaOCuota = Tras.TasaOCuota.FormatoNumero(6)
+ comprobante.Impuestos.Traslados(y).Importe = Tras.Importe
+ y += 1
+ Next
+
+ comprobante.Impuestos.TotalImpuestosTrasladados = ObjCFDITimbre.TotalImpuestosTrasladados
+ comprobante.Impuestos.TotalImpuestosTrasladadosSpecified = True
+
+ If ObjCFDITimbre.TotalImpuestosRetenidos > 0 Then
+ comprobante.Impuestos.Retenciones = New Profact.TimbraCFDI40.ComprobanteImpuestosRetencion(ObjCFDITimbre.Retenciones.Count - 1) {}
+
+ Dim w As Integer = 0
+
+ For Each Ret In ObjCFDITimbre.Retenciones
+ comprobante.Impuestos.Retenciones(w) = New Profact.TimbraCFDI40.ComprobanteImpuestosRetencion()
+ comprobante.Impuestos.Retenciones(w).Impuesto = Ret.Impuesto
+ comprobante.Impuestos.Retenciones(w).Importe = Ret.Importe.ToDecimal
+ w += 1
+ Next
+
+ comprobante.Impuestos.TotalImpuestosRetenidos = ObjCFDITimbre.TotalImpuestosRetenidos
+ comprobante.Impuestos.TotalImpuestosRetenidosSpecified = True
+ End If
+ End If
+
+#End Region
+
+
+#Region " Impuestos Locales"
+
+
+ If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 Then
+ Dim Imp = New Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocales()
+ Imp.version = "1.0"
+ Imp.TotaldeRetenciones = ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe).FormatoNumero().ToDecimal
+ Imp.TotaldeTraslados = 0
+ Imp.RetencionesLocales = New Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocalesRetencionesLocales(ObjCFDITimbre.RetencionesLocales.Count - 1) {}
+ Dim i As Integer = 0
+ For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales
+ If ret.Importe > 0 Then
+ Imp.RetencionesLocales(i) = New Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocalesRetencionesLocales()
+ Imp.RetencionesLocales(i).ImpLocRetenido = ret.ImpuestoLocalRetenido
+ Imp.RetencionesLocales(i).TasadeRetencion = ret.TasaRetencion.FormatoNumero().ToDecimal
+ Imp.RetencionesLocales(i).Importe = ret.Importe.FormatoNumero().ToDecimal
+ i += 1
+ End If
+ Next
+
+ Dim nsImpLocal As New System.Xml.Serialization.XmlSerializerNamespaces()
+ nsImpLocal.Add("implocal", "http://www.sat.gob.mx/implocal")
+ Dim xmlImpLocal As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(Imp, GetType(Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocales), nsImpLocal)
+ Dim docImpLocal As New XmlDocument()
+ docImpLocal.LoadXml(xmlImpLocal)
+ LXmlComplementos.Add(docImpLocal.DocumentElement)
+ comprobante.ImpLocalSpecified = True
+ TieneComplemento = True
+ 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
+ Dim ComExt = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExterior()
+ ComExt.Version = "1.1"
+ ComExt.MotivoTrasladoSpecified = True
+ ComExt.MotivoTraslado = ObjCFDITimbre.Complementos.ComercioExterior11.MotivoTraslado
+ ComExt.TipoOperacion = ObjCFDITimbre.Complementos.ComercioExterior11.TipoOperacion
+ ComExt.ClaveDePedimentoSpecified = True
+ ComExt.ClaveDePedimento = ObjCFDITimbre.Complementos.ComercioExterior11.ClavedePedimento
+ ComExt.CertificadoOrigenSpecified = True
+ ComExt.CertificadoOrigen = ObjCFDITimbre.Complementos.ComercioExterior11.CertificadoOrigen.ToEntero
+ If ObjCFDITimbre.Complementos.ComercioExterior11.NumCertificadoOrigen <> "" Then
+ ComExt.NumCertificadoOrigen = ObjCFDITimbre.Complementos.ComercioExterior11.NumCertificadoOrigen
+ End If
+ If ObjCFDITimbre.Complementos.ComercioExterior11.NumeroExportadorConfiable <> "" Then
+ ComExt.NumeroExportadorConfiable = ObjCFDITimbre.Complementos.ComercioExterior11.NumeroExportadorConfiable
+ End If
+ ComExt.IncotermSpecified = True
+ ComExt.Incoterm = ObjCFDITimbre.Complementos.ComercioExterior11.Incoterm
+ ComExt.SubdivisionSpecified = True
+ ComExt.Subdivision = ObjCFDITimbre.Complementos.ComercioExterior11.Subdivision.ToEntero
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Observaciones <> "" Then
+ ComExt.Observaciones = ObjCFDITimbre.Complementos.ComercioExterior11.Observaciones
+ End If
+ ComExt.TipoCambioUSDSpecified = True
+ ComExt.TipoCambioUSD = ObjCFDITimbre.Complementos.ComercioExterior11.TipoCambioUSD
+ ComExt.TotalUSDSpecified = True
+ ComExt.TotalUSD = ObjCFDITimbre.Complementos.ComercioExterior11.TotalUSD
+
+ 'EMISOR
+ ComExt.Emisor = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorEmisor()
+ If EmisorRFC.Length < 12 Then
+ ComExt.Emisor.Curp = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CURP
+ End If
+ ComExt.Emisor.Domicilio = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorEmisorDomicilio
+ ComExt.Emisor.Domicilio.Calle = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Calle
+ ComExt.Emisor.Domicilio.CodigoPostal = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CP
+ ComExt.Emisor.Domicilio.ColoniaSpecified = True
+ ComExt.Emisor.Domicilio.Colonia = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Colonia
+ ComExt.Emisor.Domicilio.Estado = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Estado
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Localidad <> "" Then
+ ComExt.Emisor.Domicilio.LocalidadSpecified = False
+ ComExt.Emisor.Domicilio.Localidad = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Localidad
+ End If
+ ComExt.Emisor.Domicilio.MunicipioSpecified = True
+ ComExt.Emisor.Domicilio.Municipio = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Municipio
+ ComExt.Emisor.Domicilio.NumeroExterior = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroExterior
+ ComExt.Emisor.Domicilio.NumeroInterior = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroInterior
+ ComExt.Emisor.Domicilio.Pais = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Pais
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Referencia <> "" Then
+ ComExt.Emisor.Domicilio.Referencia = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Referencia
+ End If
+
+ 'RECEPTOR
+ ComExt.Receptor = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorReceptor
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib <> "" Then
+ ComExt.Receptor.NumRegIdTrib = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib
+ End If
+ ComExt.Receptor.Domicilio = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorReceptorDomicilio
+ ComExt.Receptor.Domicilio.Calle = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Calle
+ ComExt.Receptor.Domicilio.CodigoPostal = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.CP
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Colonia <> "" Then
+ ComExt.Receptor.Domicilio.Colonia = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Colonia
+ End If
+ ComExt.Receptor.Domicilio.Estado = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Estado
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Localidad <> "" Then
+ ComExt.Receptor.Domicilio.Localidad = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Localidad
+ End If
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Municipio <> "" Then
+ ComExt.Receptor.Domicilio.Municipio = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Municipio
+ End If
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroExterior <> "" Then
+ ComExt.Receptor.Domicilio.NumeroExterior = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroExterior
+ End If
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroInterior <> "" Then
+ ComExt.Receptor.Domicilio.NumeroInterior = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroInterior
+ End If
+ ComExt.Receptor.Domicilio.Pais = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Pais
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Referencia <> "" Then
+ ComExt.Receptor.Domicilio.Referencia = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Referencia
+ End If
+
+ 'DESTINATARIO
+ ComExt.Destinatario = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorDestinatario(0) {}
+ ComExt.Destinatario(0) = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorDestinatario()
+ ComExt.Destinatario(0).Nombre = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Nombre
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib <> "" Then
+ ComExt.Destinatario(0).NumRegIdTrib = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib
+ End If
+ ComExt.Destinatario(0).Domicilio = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorDestinatarioDomicilio(0) {}
+ ComExt.Destinatario(0).Domicilio(0) = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorDestinatarioDomicilio()
+ ComExt.Destinatario(0).Domicilio(0).Calle = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Calle
+ ComExt.Destinatario(0).Domicilio(0).CodigoPostal = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.CP
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Colonia <> "" Then
+ ComExt.Destinatario(0).Domicilio(0).Colonia = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Colonia
+ End If
+ ComExt.Destinatario(0).Domicilio(0).Estado = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Estado
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Localidad <> "" Then
+ ComExt.Destinatario(0).Domicilio(0).Localidad = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Localidad
+ End If
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Municipio <> "" Then
+ ComExt.Destinatario(0).Domicilio(0).Municipio = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Municipio
+ End If
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior <> "" Then
+ ComExt.Destinatario(0).Domicilio(0).NumeroExterior = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior
+ End If
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior <> "" Then
+ ComExt.Destinatario(0).Domicilio(0).NumeroInterior = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior
+ End If
+ ComExt.Destinatario(0).Domicilio(0).Pais = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Pais
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Referencia <> "" Then
+ ComExt.Destinatario(0).Domicilio(0).Referencia = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Referencia
+ End If
+
+ 'MERCANCIAS
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias IsNot Nothing AndAlso ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias.Count > 0 Then
+ ComExt.Mercancias = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorMercancia(ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias.Count - 1) {}
+ Dim i As Integer
+ For Each concep As CFDIComercioExterior11Mercancias In ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias
+ ComExt.Mercancias(i) = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorMercancia()
+ ComExt.Mercancias(i).NoIdentificacion = concep.NoIdentificacion
+ ComExt.Mercancias(i).FraccionArancelariaSpecified = True
+ ComExt.Mercancias(i).FraccionArancelaria = concep.FraccionArancelaria
+ ComExt.Mercancias(i).CantidadAduanaSpecified = True
+ ComExt.Mercancias(i).CantidadAduana = concep.CantidadAduana
+ ComExt.Mercancias(i).UnidadAduanaSpecified = True
+ ComExt.Mercancias(i).UnidadAduana = concep.UnidadAduana
+ ComExt.Mercancias(i).ValorUnitarioAduanaSpecified = True
+ ComExt.Mercancias(i).ValorUnitarioAduana = concep.ValorUnitarioAduana
+ ComExt.Mercancias(i).ValorDolares = concep.ValorDolares
+ If concep.DescripcionesEspecificas.Marca <> "" Then
+ ComExt.Mercancias(i).DescripcionesEspecificas = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorMercanciaDescripcionesEspecificas(0) {}
+ ComExt.Mercancias(i).DescripcionesEspecificas(0) = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorMercanciaDescripcionesEspecificas()
+ If concep.DescripcionesEspecificas.Marca <> "" Then
+ ComExt.Mercancias(i).DescripcionesEspecificas(0).Marca = concep.DescripcionesEspecificas.Marca
+ End If
+ If concep.DescripcionesEspecificas.Modelo <> "" Then
+ ComExt.Mercancias(i).DescripcionesEspecificas(0).Modelo = concep.DescripcionesEspecificas.Modelo
+ End If
+ If concep.DescripcionesEspecificas.SubModelo <> "" Then
+ ComExt.Mercancias(i).DescripcionesEspecificas(0).SubModelo = concep.DescripcionesEspecificas.SubModelo
+ End If
+ If concep.DescripcionesEspecificas.NumeroSerie <> "" Then
+ ComExt.Mercancias(i).DescripcionesEspecificas(0).NumeroSerie = concep.DescripcionesEspecificas.NumeroSerie
+ End If
+ End If
+ i += 1
+ Next
+ End If
+ Dim nsComer As New System.Xml.Serialization.XmlSerializerNamespaces()
+ nsComer.Add("cce11", "http://www.sat.gob.mx/ComercioExterior11")
+ Dim xmlComer As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComExt, GetType(Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExterior), nsComer)
+ Dim docComer As New XmlDocument()
+ docComer.LoadXml(xmlComer)
+ LXmlComplementos.Add(docComer.DocumentElement)
+ comprobante.ComercioExterior11Specified = True
+ TieneComplemento = True
+ End If
+ End If
+
+#End Region
+
+ End If
+
+#Region " Complemento Pago"
+
+ If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then
+ Dim ComPag = New Profact.TimbraCFDI40.Complementos.Pagos20.Pagos()
+
+ ComPag.Pago = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPago(0) {}
+ ComPag.Pago(0) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPago()
+ ComPag.Pago(0).FechaPago = ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss").ToDate()
+ ComPag.Pago(0).FormaDePagoP = ObjCFDITimbre.ComplementoPagos.FormaDePagoP
+ ComPag.Pago(0).MonedaP = ObjCFDITimbre.ComplementoPagos.MonedaP
+ ComPag.Pago(0).TipoCambioPSpecified = If(ObjCFDITimbre.ComplementoPagos.MonedaP = "MXN", False, True)
+ ComPag.Pago(0).TipoCambioP = ObjCFDITimbre.ComplementoPagos.TipoCambioP.ToDecimal
+ ComPag.Pago(0).Monto = ObjCFDITimbre.ComplementoPagos.Monto.ToDecimal
+ If ObjCFDITimbre.ComplementoPagos.NumOperacion <> "" Then
+ ComPag.Pago(0).NumOperacion = ObjCFDITimbre.ComplementoPagos.NumOperacion
+ End If
+ If ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaOrd <> "" Then
+ ComPag.Pago(0).RfcEmisorCtaOrd = ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaOrd
+ End If
+ If ObjCFDITimbre.ComplementoPagos.NomBancoOrdExt <> "" Then
+ ComPag.Pago(0).NomBancoOrdExt = ObjCFDITimbre.ComplementoPagos.NomBancoOrdExt
+ End If
+ If ObjCFDITimbre.ComplementoPagos.CtaOrdenante <> "" Then
+ ComPag.Pago(0).CtaOrdenante = ObjCFDITimbre.ComplementoPagos.CtaOrdenante
+ End If
+ If ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaBen <> "" Then
+ ComPag.Pago(0).RfcEmisorCtaBen = ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaBen
+ End If
+ If ObjCFDITimbre.ComplementoPagos.CtaBeneficiario <> "" Then
+ ComPag.Pago(0).CtaBeneficiario = ObjCFDITimbre.ComplementoPagos.CtaBeneficiario
+ End If
+ If ObjCFDITimbre.ComplementoPagos.TipoCadPago <> "" Then
+ ComPag.Pago(0).TipoCadPagoSpecified = True
+ ComPag.Pago(0).TipoCadPago = ObjCFDITimbre.ComplementoPagos.TipoCadPago
+ End If
+
+ If ObjCFDITimbre.ComplementoPagos.CertPago <> "" Then
+ ComPag.Pago(0).CertPago = System.Text.Encoding.Default.GetBytes(ObjCFDITimbre.ComplementoPagos.CertPago)
+ 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)
+ End If
+
+ If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then
+ ComPag.Pago(0).DoctoRelacionado = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionado(ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count - 1) {}
+ Dim i As Integer
+ For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados
+ ComPag.Pago(0).DoctoRelacionado(i) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionado()
+ ComPag.Pago(0).DoctoRelacionado(i).IdDocumento = doc.IdDocumento
+ If Not String.IsNullOrEmpty(doc.Serie) Then
+ ComPag.Pago(0).DoctoRelacionado(i).Serie = doc.Serie
+ End If
+ ComPag.Pago(0).DoctoRelacionado(i).Folio = doc.Folio
+ ComPag.Pago(0).DoctoRelacionado(i).MonedaDR = doc.MonedaDR
+ 'ComPag.Pago(0).DoctoRelacionado(i).TipoCambioDRSpecifiedP = If(doc.TipoCambioDR = 0, False, True)
+ 'ComPag.Pago(0).DoctoRelacionado(i).TipoCambioDR = doc.TipoCambioDR
+ 'ComPag.Pago(0).DoctoRelacionado(i).MetodoDePagoDR = doc.MetodoDePagoDR
+ ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString
+
+ 'ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAntSpecified = True
+ ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt.ToDecimal
+
+ ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True
+ ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado.ToDecimal
+
+ 'ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsolutoSpecified = True
+ ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto.ToDecimal
+ i += 1
+ Next
+
+ 'Estos impuestos aplicarían para anticipos
+ If ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then
+ ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {}
+ ComPag.Pago(0).ImpuestosP(0) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP()
+ 'ComPag.Pago(0).ImpuestosP(0).TotalImpuestosRetenidosSpecifiedP = True
+ 'ComPag.Pago(0).ImpuestosP(0).TotalImpuestosRetenidos = ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos.ToDecimal
+ 'ComPag.Pago(0).ImpuestosP(0).TotalImpuestosTrasladadosSpecified = True
+ 'ComPag.Pago(0).ImpuestosP(0).TotalImpuestosTrasladados = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados.ToDecimal
+
+ If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then
+ Dim x As Integer
+ ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R").Count - 1) {}
+ For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R")
+ ComPag.Pago(0).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP()
+ ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto
+ ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe
+ x += 1
+ Next
+ End If
+ If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then
+ Dim x As Integer
+ ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T").Count - 1) {}
+ For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T")
+ ComPag.Pago(0).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP()
+ ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto
+ ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor
+ ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota
+ ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe
+ x += 1
+ Next
+ End If
+
+ End If
+
+
+ Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces()
+ nsComp.Add("pago20", "http://www.sat.gob.mx/Pagos")
+ Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComPag, GetType(Profact.TimbraCFDI33.Complementos.Pagos10.Pagos), nsComp)
+ Dim docComp As New XmlDocument()
+ docComp.LoadXml(xmlComp)
+ 'comprobante.PagosSpecified = True
+ LXmlComplementos.Add(docComp.DocumentElement)
+ TieneComplemento = True
+ End If
+
+ End If
+#End Region
+
+
+#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
+
+ ''DATOS GENERALES
+ Dim Carta As CFDICartaPorte = ObjCFDITimbre.Complementos.CartaPorte
+ Dim ComCartaPorte = New ProfactCartaPorte.CartaPorte()
+ ComCartaPorte.TranspInternac = CType([Enum].Parse(GetType(ProfactCartaPorte.CartaPorteTranspInternac), Carta.TranspInternac), ProfactCartaPorte.CartaPorteTranspInternac)
+ ComCartaPorte.EntradaSalidaMercSpecified = False
+ ComCartaPorte.ViaEntradaSalidaSpecified = False
+ ComCartaPorte.TotalDistRecSpecified = False
+
+ 'UBICACIONES
+ If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then
+
+ Dim i As Integer = 0
+ ComCartaPorte.Ubicaciones = New ProfactCartaPorte.CartaPorteUbicacion(Carta.Ubicaciones.Count - 1) {}
+ For Each ubica As CFDICartaPorteUbicacion In Carta.Ubicaciones
+ 'origen
+
+ ComCartaPorte.Ubicaciones(i) = New ProfactCartaPorte.CartaPorteUbicacion
+ ComCartaPorte.Ubicaciones(i).TipoUbicacion = CType([Enum].Parse(GetType(ProfactCartaPorte.CartaPorteUbicacionTipoUbicacion), ubica.TipoUbicacion), ProfactCartaPorte.CartaPorteUbicacionTipoUbicacion)
+ ComCartaPorte.Ubicaciones(i).TipoEstacionSpecified = False
+ ComCartaPorte.Ubicaciones(i).IDUbicacion = ubica.IDUbicacion
+ ComCartaPorte.Ubicaciones(i).RFCRemitenteDestinatario = ubica.RFCRemitenteDestinatario
+ ComCartaPorte.Ubicaciones(i).NombreRemitenteDestinatario = ubica.NombreRemitenteDestinatario
+ ComCartaPorte.Ubicaciones(i).NumRegIdTrib = ubica.NumRegIdTrib
+ 'ComCartaPorte.Ubicaciones(i).ResidenciaFiscal = ubica.ResidenciaFiscal
+ 'ComCartaPorte.Ubicaciones(i).NumEstacion = ubica.NumEstacion
+ 'ComCartaPorte.Ubicaciones(i).NavegacionTrafico = ubica.NavegacionTrafico
+ ComCartaPorte.Ubicaciones(i).FechaHoraSalidaLlegada = ubica.FechaHoraSalidaLlegada.ToDate
+ ComCartaPorte.Ubicaciones(i).DistanciaRecorrida = ubica.DistanciaRecorrida
+
+ ComCartaPorte.Ubicaciones(i).Domicilio = New ProfactCartaPorte.CartaPorteUbicacionDomicilio With {.Calle = ubica.Domicilio.Calle,
+ .NumeroExterior = ubica.Domicilio.NumeroExterior,
+ .NumeroInterior = ubica.Domicilio.NumeroInterior,
+ .Colonia = ubica.Domicilio.Colonia,
+ .Localidad = ubica.Domicilio.Localidad,
+ .Referencia = ubica.Domicilio.Referencia,
+ .Municipio = ubica.Domicilio.Municipio,
+ .Estado = ubica.Domicilio.Estado,
+ .CodigoPostal = ubica.Domicilio.CP,
+ .Pais = CType([Enum].Parse(GetType(ProfactCartaPorte.c_Pais), ubica.Domicilio.Pais), ProfactCartaPorte.c_Pais)}
+
+ Next
+
+ End If
+
+ 'MERCANCIAS
+ If Carta.Mercancias IsNot Nothing Then
+ ComCartaPorte.Mercancias = New ProfactCartaPorte.CartaPorteMercancias
+ ComCartaPorte.Mercancias.PesoBrutoTotal = Carta.Mercancias.PesoBrutoTotal.ToDecimal
+ ComCartaPorte.Mercancias.PesoNetoTotal = Carta.Mercancias.PesoNetoTotal.ToDecimal
+ ComCartaPorte.Mercancias.NumTotalMercancias = Carta.Mercancias.NumTotalMercancias
+ ComCartaPorte.Mercancias.CargoPorTasacion = Carta.Mercancias.CargoporTasacion.ToDecimal
+ ' ComCartaPorte.Mercancias.UnidadPeso = Carta.Mercancias.UnidadPeso
+
+ If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then
+ Dim i As Integer = 0
+ ComCartaPorte.Mercancias.Mercancia = New ProfactCartaPorte.CartaPorteMercanciasMercancia(Carta.Mercancias.Mercancias.Count - 1) {}
+ For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias
+ ComCartaPorte.Mercancias.Mercancia(i) = New ProfactCartaPorte.CartaPorteMercanciasMercancia
+
+ If concep.BienesTransp <> "" Then
+ ComCartaPorte.Mercancias.Mercancia(i).BienesTransp = CType([Enum].Parse(GetType(ProfactCartaPorte.c_ClaveProdServCP), "Item" & concep.BienesTransp), ProfactCartaPorte.c_ClaveProdServCP)
+ End If
+
+ ComCartaPorte.Mercancias.Mercancia(i).Descripcion = concep.Descripción
+ ComCartaPorte.Mercancias.Mercancia(i).Cantidad = concep.Cantidad
+ ComCartaPorte.Mercancias.Mercancia(i).Unidad = concep.Unidad
+ ComCartaPorte.Mercancias.Mercancia(i).Dimensiones = concep.Dimensiones
+ If concep.ClaveMaterialPeligroso <> "" Then
+ ComCartaPorte.Mercancias.Mercancia(i).MaterialPeligrosoSpecified = True
+ ComCartaPorte.Mercancias.Mercancia(i).CveMaterialPeligrosoSpecified = True
+ 'si lleva material pelgroso, debe llevar embalaje
+ ComCartaPorte.Mercancias.Mercancia(i).EmbalajeSpecified = True
+ ComCartaPorte.Mercancias.Mercancia(i).Embalaje = CType([Enum].Parse(GetType(ProfactCartaPorte.c_TipoEmbalaje), "Item" & concep.Embalaje), ProfactCartaPorte.c_TipoEmbalaje)
+
+ End If
+
+ ComCartaPorte.Mercancias.Mercancia(i).DescripEmbalaje = concep.DescripEmbalaje
+ ComCartaPorte.Mercancias.Mercancia(i).PesoEnKg = concep.PesoenKg
+ ComCartaPorte.Mercancias.Mercancia(i).ValorMercanciaSpecified = False
+ ComCartaPorte.Mercancias.Mercancia(i).MonedaSpecified = False
+ ComCartaPorte.Mercancias.Mercancia(i).FraccionArancelariaSpecified = False
+ ComCartaPorte.Mercancias.Mercancia(i).UUIDComercioExt = concep.UUIDComercioExt
+
+ Dim j As Integer = 0
+ ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta = New ProfactCartaPorte.CartaPorteMercanciasMercanciaCantidadTransporta(Carta.Mercancias.Mercancias.Count - 1) {}
+ For Each transp In concep.MercanciasCantidadTransporta
+ ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j) = New ProfactCartaPorte.CartaPorteMercanciasMercanciaCantidadTransporta
+ ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).Cantidad = transp.Cantidad
+ ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).IDOrigen = transp.IDOrigen
+ ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).IDDestino = transp.IDDestino
+ 'ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(1).CvesTransporte = transp.CvesTransportes
+ Next
+
+ i += 1
+ 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
+
+ '
+ If Carta.FiguraTransporte IsNot Nothing Then
+
+ If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then
+
+
+ 'ComCartaPorte.FiguraTransporte(1). = ProfactCartaPorte.c_CveTransporte.Item02
+ ComCartaPorte.Mercancias.Autotransporte = New ProfactCartaPorte.CartaPorteMercanciasAutotransporte
+ If Carta.FiguraTransporte.AutoTransporte.PermisoSCT <> "" Then
+ ComCartaPorte.Mercancias.Autotransporte.PermSCT = CType([Enum].Parse(GetType(ProfactCartaPorte.c_TipoPermiso), Carta.FiguraTransporte.AutoTransporte.PermisoSCT), ProfactCartaPorte.c_TipoPermiso)
+ End If
+ ComCartaPorte.Mercancias.Autotransporte.NumPermisoSCT = Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT
+ 'pendiente RMF
+ 'ComCartaPorte.Mercancias.AutotransporteFederal.NombreAseg = Carta.FiguraTransporte.AutoTransporte.NombreAseg
+ 'ComCartaPorte.Mercancias.AutotransporteFederal.NumPolizaSeguro = Carta.FiguraTransporte.AutoTransporte.NumPolizaSeguro
+
+ Dim ConfigVehicular As New ProfactCartaPorte.CartaPorteMercanciasAutotransporteIdentificacionVehicular
+ ConfigVehicular.ConfigVehicular = CType([Enum].Parse(GetType(ProfactCartaPorte.c_ConfigAutotransporte), Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular), ProfactCartaPorte.c_ConfigAutotransporte)
+ ConfigVehicular.AnioModeloVM = Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM
+ ConfigVehicular.PlacaVM = Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM
+
+ ComCartaPorte.Mercancias.Autotransporte.IdentificacionVehicular = ConfigVehicular
+
+ Dim ConfigVehicularSeguros As New ProfactCartaPorte.CartaPorteMercanciasAutotransporteSeguros
+ ConfigVehicularSeguros.AseguraRespCivil = Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil
+ ConfigVehicularSeguros.PolizaRespCivil = Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil
+ ConfigVehicularSeguros.AseguraMedAmbiente = Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente
+ ConfigVehicularSeguros.PolizaMedAmbiente = Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente
+ ConfigVehicularSeguros.AseguraCarga = Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga
+ ConfigVehicularSeguros.PolizaCarga = Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga
+
+ If Carta.FiguraTransporte.AutoTransporte.PrimaSeguro > 0 Then
+ ConfigVehicularSeguros.PrimaSeguro = Carta.FiguraTransporte.AutoTransporte.PrimaSeguro
+ ConfigVehicularSeguros.PrimaSeguroSpecified = True
+ End If
+
+ If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then
+ Dim i As Integer = 0
+ ComCartaPorte.Mercancias.Autotransporte.Remolques = New ProfactCartaPorte.CartaPorteMercanciasAutotransporteRemolque(Carta.FiguraTransporte.AutoTransporte.Remolques.Count - 1) {}
+ For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques
+ ComCartaPorte.Mercancias.Autotransporte.Remolques(i) = New ProfactCartaPorte.CartaPorteMercanciasAutotransporteRemolque
+ ComCartaPorte.Mercancias.Autotransporte.Remolques(i).SubTipoRem = CType([Enum].Parse(GetType(ProfactCartaPorte.c_SubTipoRem), concep.SubTipoRemolque), ProfactCartaPorte.c_SubTipoRem)
+ ComCartaPorte.Mercancias.Autotransporte.Remolques(i).Placa = concep.Placa
+ i += 1
+ Next
+ '
+ End If
+ End If
+
+ If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then
+ Dim i As Integer = 0
+ ComCartaPorte.FiguraTransporte = New ProfactCartaPorte.CartaPorteTiposFigura(Carta.FiguraTransporte.Operadores.Count - 1) {}
+ For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores
+
+ ComCartaPorte.FiguraTransporte(i) = New ProfactCartaPorte.CartaPorteTiposFigura
+ ComCartaPorte.FiguraTransporte(i).RFCFigura = concep.RFCFigura
+ ComCartaPorte.FiguraTransporte(i).NumLicencia = concep.NumLicencia
+ ComCartaPorte.FiguraTransporte(i).NombreFigura = concep.NombreFigura
+ ComCartaPorte.FiguraTransporte(i).NumRegIdTribFigura = concep.NumRegidTribFigura
+ 'OComCartaPorte.FiguraTransporte.Operadores(i)(0) = concep.ResidenciaFiscalOperador 'falta
+
+ ComCartaPorte.FiguraTransporte(i).Domicilio = New ProfactCartaPorte.CartaPorteTiposFiguraDomicilio()
+ ComCartaPorte.FiguraTransporte(i).Domicilio.Calle = concep.Domicilio.Calle
+ ComCartaPorte.FiguraTransporte(i).Domicilio.CodigoPostal = concep.Domicilio.CP
+ ComCartaPorte.FiguraTransporte(i).Domicilio.Colonia = concep.Domicilio.Colonia
+ ComCartaPorte.FiguraTransporte(i).Domicilio.Estado = concep.Domicilio.Estado
+ ComCartaPorte.FiguraTransporte(i).Domicilio.Localidad = concep.Domicilio.Localidad
+ ComCartaPorte.FiguraTransporte(i).Domicilio.Municipio = concep.Domicilio.Municipio
+ ComCartaPorte.FiguraTransporte(i).Domicilio.NumeroExterior = concep.Domicilio.NumeroExterior
+ ComCartaPorte.FiguraTransporte(i).Domicilio.Pais = ProfactCartaPorte.c_Pais.MEX
+
+ i += 1
+ Next
+ End If
+
+ End If
+
+ Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces()
+ nsComp.Add("CartaPorte", "http://www.sat.gob.mx/CartaPorte")
+ Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComCartaPorte, GetType(ProfactCartaPorte.CartaPorte), nsComp)
+ Dim docComp As New XmlDocument()
+ docComp.LoadXml(xmlComp)
+ 'comprobante.CartaPorteSpecified = True
+ LXmlComplementos.Add(docComp.DocumentElement)
+ TieneComplemento = True
+
+ End If
+
+#End Region
+
+
+#Region " Nomina12"
+ If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then
+ Dim Nom = New Profact.TimbraCFDI33.Complementos.Nomina12.Nomina()
+ 'cfdi.Esquema.AgregarEsquema("http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd")
+ Nom.Version = ObjCFDITimbre.Nomina.Version
+ Nom.TipoNomina = ObjCFDITimbre.Nomina.TipoNomina
+ Nom.FechaPago = ObjCFDITimbre.Nomina.FechaPago
+ Nom.FechaInicialPago = ObjCFDITimbre.Nomina.FechaInicio.ToDate
+ Nom.FechaFinalPago = ObjCFDITimbre.Nomina.FechaFin.ToDate
+ Nom.NumDiasPagados = ObjCFDITimbre.Nomina.NumDiasPagados.ToString
+ Nom.TotalPercepcionesSpecified = True
+ Nom.TotalPercepciones = ObjCFDITimbre.Nomina.TotalPercepciones.ToDecimal
+ Nom.TotalDeduccionesSpecified = True
+ Nom.TotalDeducciones = ObjCFDITimbre.Nomina.TotalDeducciones.ToDecimal
+ Nom.TotalOtrosPagosSpecified = True
+ Nom.TotalOtrosPagos = ObjCFDITimbre.Nomina.TotalOtrosPagos.ToDecimal
+
+ Nom.Emisor = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaEmisor
+ Nom.Emisor.Curp = ObjCFDITimbre.Emisor.CURP
+ Nom.Emisor.RegistroPatronal = ObjCFDITimbre.Emisor.RegistroPatronal
+ Nom.Emisor.RfcPatronOrigen = ObjCFDITimbre.Emisor.RFC
+
+ If UsuarioActual.Empresa.UsaAC Then Nom.Emisor.EntidadSNCF.OrigenRecurso = "IF" : Nom.Emisor.EntidadSNCF.MontoRecursoPropio = 90
+
+ If ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0 Then
+ Dim TotalIndemnizacion As String = If(ObjCFDITimbre.Nomina.TotalIndemnizacion > 0, ObjCFDITimbre.Nomina.TotalIndemnizacion.ToString, "")
+ Dim TotalJubilacion As String = If(ObjCFDITimbre.Nomina.TotalJubilacion > 0, ObjCFDITimbre.Nomina.TotalJubilacion.ToString, "")
+ Nom.Percepciones = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepciones
+ Nom.Percepciones.TotalSueldosSpecified = True
+ Nom.Percepciones.TotalSueldos = ObjCFDITimbre.Nomina.TotalSueldos.ToDecimal
+ Nom.Percepciones.TotalSeparacionIndemnizacionSpecified = True
+ Nom.Percepciones.TotalSeparacionIndemnizacion = TotalIndemnizacion.ToDecimal
+ Nom.Percepciones.TotalJubilacionPensionRetiroSpecified = True
+ Nom.Percepciones.TotalJubilacionPensionRetiro = TotalJubilacion.ToDecimal
+ Nom.Percepciones.TotalGravado = ObjCFDITimbre.Nomina.TotalPercepcionesGravado.ToDecimal
+ Nom.Percepciones.TotalExento = ObjCFDITimbre.Nomina.TotalPercepcionesExento.ToDecimal
+ Nom.Percepciones.Percepcion = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepcionesPercepcion(ObjCFDITimbre.Nomina.Percepciones.Count - 1) {}
+ Dim i As Integer = 0
+ For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones
+ Nom.Percepciones.Percepcion(i) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepcionesPercepcion()
+ Nom.Percepciones.Percepcion(i).TipoPercepcion = percep.TipoPercepcion
+ Nom.Percepciones.Percepcion(i).Clave = percep.Clave
+ Nom.Percepciones.Percepcion(i).Concepto = percep.Concepto
+ Nom.Percepciones.Percepcion(i).ImporteGravado = Math.Round(percep.ImporteGravado, 2).ToString.ToDecimal
+ Nom.Percepciones.Percepcion(i).ImporteExento = Math.Round(percep.ImporteExento, 2).ToString.ToDecimal
+
+ If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then
+ Nom.Percepciones.Percepcion(i).HorasExtra = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepcionesPercepcionHorasExtra(ObjCFDITimbre.Nomina.HorasExtras.Count - 1) {}
+ Dim x As Integer = 0
+ For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras
+ Nom.Percepciones.Percepcion(i).HorasExtra(x) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepcionesPercepcionHorasExtra()
+ Nom.Percepciones.Percepcion(i).HorasExtra(x).Dias = HoraExtra.Dias.ToEntero
+ Nom.Percepciones.Percepcion(i).HorasExtra(x).TipoHoras = HoraExtra.TipoHoras
+ Nom.Percepciones.Percepcion(i).HorasExtra(x).HorasExtra = HoraExtra.HorasExtra.ToEntero
+ Nom.Percepciones.Percepcion(i).HorasExtra(x).ImportePagado = HoraExtra.ImportePagado.ToDecimal
+ x += 1
+ Next
+ End If
+
+ i += 1
+ Next
+ End If
+ 'cfdi.agregarNominaReceptorSubContratacion12("AAD990814BP6", "50")
+ 'cfdi.agregarNominaPercepcionesPercepcionAccionesOTitulos12("100", "200");
+ 'cfdi.agregarNominaPercepcionesSeparacionIndemnizacion12("100", "10", "1000", "100", "50");
+ 'cfdi.agregarNominaPercepcionesJubilacionPensionRetiro12("50", "100", "10", "100", "0");
+
+
+
+ If ObjCFDITimbre.Nomina.Incapacidades IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Incapacidades.Count > 0 Then
+ Nom.Incapacidades = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaIncapacidad(ObjCFDITimbre.Nomina.Incapacidades.Count - 1) {}
+ Dim i As Integer = 0
+ For Each Incap As CFDINominaIncapacidades In ObjCFDITimbre.Nomina.Incapacidades
+ Nom.Incapacidades(i) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaIncapacidad()
+ Nom.Incapacidades(i).DiasIncapacidad = Incap.DiasIncapacidad.ToEntero
+ Nom.Incapacidades(i).TipoIncapacidad = Incap.TipoIncapacidad
+ Nom.Incapacidades(i).ImporteMonetarioSpecified = True
+ Nom.Incapacidades(i).ImporteMonetario = Incap.Importe.ToDecimal
+ i += 1
+ Next
+ End If
+
+ If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then
+ Nom.Deducciones = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaDeducciones()
+ Nom.Deducciones.TotalOtrasDeduccionesSpecified = True
+ Nom.Deducciones.TotalOtrasDeducciones = Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesOtras, 2)
+ Nom.Deducciones.TotalImpuestosRetenidosSpecified = True
+ Nom.Deducciones.TotalImpuestosRetenidos = Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2)
+ Nom.Deducciones.Deduccion = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaDeduccionesDeduccion(ObjCFDITimbre.Nomina.Deducciones.Count - 1) {}
+ Dim i As Integer = 0
+ For Each deduc As CFDINominaDeducciones In ObjCFDITimbre.Nomina.Deducciones
+ Nom.Deducciones.Deduccion(i) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaDeduccionesDeduccion()
+ Nom.Deducciones.Deduccion(i).TipoDeduccion = deduc.TipoDeduccion
+ Nom.Deducciones.Deduccion(i).Clave = deduc.Clave
+ Nom.Deducciones.Deduccion(i).Concepto = deduc.Concepto
+ Nom.Deducciones.Deduccion(i).Importe = Math.Round(deduc.Importe, 2)
+ i += 1
+ 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
+ Nom.OtrosPagos = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaOtroPago(ObjCFDITimbre.Nomina.OtrosPagos.Count - 1) {}
+ Dim i As Integer = 0
+ For Each otpag As CFDINominaOtrosPagos In ObjCFDITimbre.Nomina.OtrosPagos
+ Nom.OtrosPagos(i) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaOtroPago()
+ Nom.OtrosPagos(i).TipoOtroPago = otpag.TipoOtroPago
+ Nom.OtrosPagos(i).Clave = otpag.Clave
+ Nom.OtrosPagos(i).Concepto = otpag.Concepto
+ Nom.OtrosPagos(i).Importe = otpag.Importe
+ If otpag.TipoOtroPago = "002" Then
+ Nom.OtrosPagos(i).SubsidioAlEmpleo = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaOtroPagoSubsidioAlEmpleo()
+ Nom.OtrosPagos(i).SubsidioAlEmpleo.SubsidioCausado = otpag.Importe
+ End If
+ i += 1
+ Next
+ End If
+ End If
+
+
+#Region "Receptor"
+ Nom.Receptor = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaReceptor()
+ Nom.Receptor.Curp = ObjCFDITimbre.Nomina.Receptor.CURP
+ Nom.Receptor.NumSeguridadSocial = ObjCFDITimbre.Nomina.Receptor.NSS
+ Nom.Receptor.FechaInicioRelLaboralSpecified = True
+ Nom.Receptor.FechaInicioRelLaboral = ObjCFDITimbre.Nomina.Receptor.FechaInicioContrato.ToDate
+ Nom.Receptor.Antigüedad = ObjCFDITimbre.Nomina.Receptor.Antiguedad
+ Nom.Receptor.TipoContrato = ObjCFDITimbre.Nomina.Receptor.TipoContrato
+ 'Nom.Receptor.Sindicalizado = New Profact.TimbraCFDI40.Complementos.Nomina12.NominaReceptorSindicalizado()
+ 'Nom.Receptor.Sindicalizado = ObjCFDITimbre.Nomina.Receptor.Sindicalizado
+ Nom.Receptor.TipoJornadaSpecified = True
+ Nom.Receptor.TipoJornada = ObjCFDITimbre.Nomina.Receptor.CodigoTipoJornada
+ Nom.Receptor.TipoRegimen = ObjCFDITimbre.Nomina.Receptor.CodigoRegimenContratacion
+ Nom.Receptor.NumEmpleado = ObjCFDITimbre.Nomina.Receptor.CodigoEmpleado
+ Nom.Receptor.Departamento = ObjCFDITimbre.Nomina.Receptor.Departamento
+ Nom.Receptor.Puesto = ObjCFDITimbre.Nomina.Receptor.Puesto
+ Nom.Receptor.RiesgoPuestoSpecified = True
+ Nom.Receptor.RiesgoPuesto = ObjCFDITimbre.Nomina.Receptor.CodigoRiesgoPuesto
+ Nom.Receptor.PeriodicidadPago = ObjCFDITimbre.Nomina.Receptor.TipoPeriodo
+ Nom.Receptor.BancoSpecified = True
+ Nom.Receptor.Banco = ObjCFDITimbre.Nomina.Receptor.CodigoBanco
+ Nom.Receptor.CuentaBancaria = ObjCFDITimbre.Nomina.Receptor.NumeroCuenta
+ Nom.Receptor.SalarioBaseCotAporSpecified = True
+ Nom.Receptor.SalarioBaseCotApor = ObjCFDITimbre.Nomina.Receptor.SBC.ToDecimal
+ Nom.Receptor.SalarioDiarioIntegradoSpecified = True
+ Nom.Receptor.SalarioDiarioIntegrado = ObjCFDITimbre.Nomina.Receptor.SDI.ToDecimal
+ Nom.Receptor.ClaveEntFed = ObjCFDITimbre.Nomina.Receptor.CodigoEntidadFederativa
+
+ Dim nsNom As New System.Xml.Serialization.XmlSerializerNamespaces()
+ nsNom.Add("nomina12", "http://www.sat.gob.mx/nomina12")
+ Dim xmlNom As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(Nom, GetType(Profact.TimbraCFDI33.Complementos.Nomina12.Nomina), nsNom)
+ Dim docNom As New XmlDocument()
+ docNom.LoadXml(xmlNom)
+ LXmlComplementos.Add(docNom.DocumentElement)
+ TieneComplemento = True
+
+
+ End If
+#End Region
+
+#End Region
+
+ '#Region "Detallista"
+ ' If Ventas.Cliente.AplicaDetallista Then
+ ' Dim detallista As Profact.TimbraCFDI40.Complementos.Detallista.detallista = New Profact.TimbraCFDI40.Complementos.Detallista.detallista
+ ' detallista.type = "SimpleInvoiceType"
+ ' detallista.contentVersion = "1.3.1"
+ ' detallista.documentStructureVersion = "AMC8.1"
+ ' detallista.documentStatus = Profact.TimbraCFDI40.Complementos.Detallista.detallistaDocumentStatus.ORIGINAL
+
+ ' detallista.DeliveryNote = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaDeliveryNote
+ ' detallista.DeliveryNote.referenceIdentification = New String((1)) {}
+ ' detallista.DeliveryNote.referenceIdentification(0) = "1"
+ ' detallista.DeliveryNote.ReferenceDate = New DateTime
+ ' detallista.DeliveryNote.ReferenceDate = comprobante.Fecha
+ ' detallista.DeliveryNote.ReferenceDateSpecified = True
+
+ ' detallista.requestForPaymentIdentification = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaRequestForPaymentIdentification
+ ' detallista.requestForPaymentIdentification.entityType = Profact.TimbraCFDI40.Complementos.Detallista.detallistaRequestForPaymentIdentificationEntityType.INVOICE
+
+ ' detallista.specialInstruction = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaSpecialInstruction((1)) {}
+ ' detallista.specialInstruction(0) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaSpecialInstruction
+ ' detallista.specialInstruction(0).code = Profact.TimbraCFDI40.Complementos.Detallista.detallistaSpecialInstructionCode.ZZZ
+ ' Dim TotalTexto = New String() {Ventas.TotalTC.ToString.ToDouble.Texto2Letras.ToUpper()}
+ ' Dim propertyInfo = detallista.specialInstruction(0).GetType().GetProperty("text")
+ ' propertyInfo.SetValue(detallista.specialInstruction(0), Convert.ChangeType(TotalTexto, propertyInfo.PropertyType), Nothing)
+
+ ' detallista.orderIdentification = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaOrderIdentification
+ ' detallista.orderIdentification.referenceIdentification = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaOrderIdentificationReferenceIdentification((1)) {}
+ ' detallista.orderIdentification.referenceIdentification(0) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaOrderIdentificationReferenceIdentification
+ ' detallista.orderIdentification.referenceIdentification(0).type = Profact.TimbraCFDI40.Complementos.Detallista.detallistaOrderIdentificationReferenceIdentificationType.ON
+ ' detallista.orderIdentification.referenceIdentification(0).Value = Ventas.Det_OrdenCompra
+ ' detallista.orderIdentification.ReferenceDateSpecified = True
+ ' detallista.orderIdentification.ReferenceDate = Ventas.Det_FechaOrdenCompra.ToDate()
+
+ ' detallista.AdditionalInformation = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaReferenceIdentification((1)) {}
+ ' detallista.AdditionalInformation(0) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaReferenceIdentification
+ ' detallista.AdditionalInformation(0).type = Profact.TimbraCFDI40.Complementos.Detallista.detallistaReferenceIdentificationType.ATZ
+ ' detallista.AdditionalInformation(0).Value = Ventas.Det_ContraRecibo
+
+ ' detallista.DeliveryNote = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaDeliveryNote
+ ' detallista.DeliveryNote.ReferenceDate = Ventas.Det_FechaOrdenCompra.ToDate
+ ' detallista.DeliveryNote.referenceIdentification = New String((1)) {}
+ ' detallista.DeliveryNote.referenceIdentification(0) = Ventas.Det_ContraRecibo
+
+ ' detallista.buyer = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaBuyer
+ ' detallista.buyer.gln = Ventas.Cliente.Detallista_GLNComprador
+ ' detallista.buyer.contactInformation = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaBuyerContactInformation
+ ' detallista.buyer.contactInformation.personOrDepartmentName = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaBuyerContactInformationPersonOrDepartmentName
+ ' detallista.buyer.contactInformation.personOrDepartmentName.text = Ventas.Cliente.Detallista_Departamento
+
+ ' detallista.seller = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaSeller
+ ' detallista.seller.gln = Ventas.Cliente.Detallista_GLNVendedor
+ ' detallista.seller.alternatePartyIdentification = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaSellerAlternatePartyIdentification
+ ' detallista.seller.alternatePartyIdentification.type = Profact.TimbraCFDI40.Complementos.Detallista.detallistaSellerAlternatePartyIdentificationType.SELLER_ASSIGNED_IDENTIFIER_FOR_A_PARTY
+ ' detallista.seller.alternatePartyIdentification.Value = Ventas.Cliente.Detallista_NumProveedor
+
+ ' 'detallista.shipTo = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaShipTo
+ ' 'detallista.shipTo.gln = "0000000000000"
+ ' 'detallista.shipTo.nameAndAddress = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaShipToNameAndAddress
+ ' 'detallista.shipTo.nameAndAddress.name = New String((1)) {}
+ ' 'detallista.shipTo.nameAndAddress.name(0) = Ventas.Cliente.Direccion
+ ' 'detallista.shipTo.nameAndAddress.streetAddressOne = New String((1)) {}
+ ' 'detallista.shipTo.nameAndAddress.streetAddressOne(0) = Ventas.Cliente.NoInt
+ ' 'detallista.shipTo.nameAndAddress.city = New String((1)) {}
+ ' 'detallista.shipTo.nameAndAddress.city(0) = Ventas.Cliente.Ciudad
+ ' 'detallista.shipTo.nameAndAddress.postalCode = New String((1)) {}
+ ' 'detallista.shipTo.nameAndAddress.postalCode(0) = Ventas.Cliente.CP
+
+ ' detallista.paymentTerms = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaPaymentTerms
+ ' detallista.paymentTerms.netPayment = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaPaymentTermsNetPayment
+ ' detallista.paymentTerms.netPayment.paymentTimePeriod = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriod
+ ' detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriodTimePeriodDue
+ ' detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue.timePeriod = Profact.TimbraCFDI40.Complementos.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriodTimePeriodDueTimePeriod.DAYS
+ ' detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue.value = "0"
+
+ ' detallista.paymentTerms.discountPayment = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaPaymentTermsDiscountPayment
+ ' detallista.paymentTerms.discountPayment.percentage = If(Ventas.DescuentoTC > 0 AndAlso Ventas.SubTotalTC > 0, (Ventas.DescuentoTC * 100) / Ventas.SubTotalTC, 0).ToString().FormatoNumero()
+
+ ' detallista.currency = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaCurrency((1)) {}
+ ' detallista.currency(0) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaCurrency
+ ' detallista.currency(0).currencyISOCode = If(Ventas.CveMoneda = 1, Profact.TimbraCFDI40.Complementos.Detallista.detallistaCurrencyCurrencyISOCode.MXN, Profact.TimbraCFDI40.Complementos.Detallista.detallistaCurrencyCurrencyISOCode.USD)
+ ' detallista.currency(0).currencyFunction = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaCurrencyCurrencyFunction((1)) {}
+ ' detallista.currency(0).currencyFunction(0) = Profact.TimbraCFDI40.Complementos.Detallista.detallistaCurrencyCurrencyFunction.BILLING_CURRENCY
+ ' detallista.currency(0).rateOfChangeSpecified = True
+ ' detallista.currency(0).rateOfChange = 1
+
+ ' detallista.allowanceCharge = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaAllowanceCharge(1) {}
+ ' detallista.allowanceCharge(0) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaAllowanceCharge
+ ' detallista.allowanceCharge(0).monetaryAmountOrPercentage = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentage
+ ' detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentageRate
+ ' detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate.base = Profact.TimbraCFDI40.Complementos.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentageRateBase.INVOICE_VALUE
+ ' detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate.percentage = If(Ventas.DescuentoTC > 0 AndAlso Ventas.SubTotalTC > 0, (Ventas.DescuentoTC * 100) / Ventas.SubTotalTC, 0)
+
+ ' Dim articuloCounter As Integer = 0
+ ' For Each concepto As Profact.TimbraCFDI40.ComprobanteConcepto In comprobante.Conceptos
+ ' articuloCounter = (articuloCounter + 1)
+ ' Next
+ ' detallista.lineItem = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItem((articuloCounter)) {}
+ ' Dim counter As Integer = 0
+ ' For Each concepto As Profact.TimbraCFDI40.ComprobanteConcepto In comprobante.Conceptos
+ ' detallista.lineItem(counter) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItem
+ ' detallista.lineItem(counter).type = "SimpleInvoiceLineItemType"
+ ' detallista.lineItem(counter).number = (counter + 1).ToString
+ ' detallista.lineItem(counter).tradeItemIdentification = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTradeItemIdentification
+ ' detallista.lineItem(counter).tradeItemIdentification.gtin = comprobante.Conceptos(counter).NoIdentificacion
+ ' detallista.lineItem(counter).alternateTradeItemIdentification = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentification(1) {}
+ ' detallista.lineItem(counter).alternateTradeItemIdentification(0) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentification
+ ' detallista.lineItem(counter).alternateTradeItemIdentification(0).type = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentificationType
+ ' detallista.lineItem(counter).alternateTradeItemIdentification(0).type = Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.BUYER_ASSIGNED
+ ' detallista.lineItem(counter).tradeItemDescriptionInformation = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTradeItemDescriptionInformation
+ ' If (comprobante.Conceptos(counter).Descripcion.Length > 34) Then
+ ' detallista.lineItem(counter).tradeItemDescriptionInformation.longText = comprobante.Conceptos(counter).Descripcion.Substring(0, 34)
+ ' Else
+ ' detallista.lineItem(counter).tradeItemDescriptionInformation.longText = comprobante.Conceptos(counter).Descripcion
+ ' End If
+ ' detallista.lineItem(counter).invoicedQuantity = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemInvoicedQuantity
+ ' detallista.lineItem(counter).invoicedQuantity.unitOfMeasure = comprobante.Conceptos(counter).Unidad
+ ' detallista.lineItem(counter).invoicedQuantity.Text = New String((1)) {}
+ ' detallista.lineItem(counter).invoicedQuantity.Text(0) = comprobante.Conceptos(counter).Cantidad.ToString
+
+ ' detallista.lineItem(counter).aditionalQuantity = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAditionalQuantity(1) {}
+ ' detallista.lineItem(counter).aditionalQuantity(0) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAditionalQuantity
+ ' detallista.lineItem(counter).aditionalQuantity(0).QuantityType = Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAditionalQuantityQuantityType.NUM_CONSUMER_UNITS
+ ' detallista.lineItem(counter).aditionalQuantity(0).Text = New String((1)) {}
+ ' detallista.lineItem(counter).aditionalQuantity(0).Text(0) = "1"
+
+ ' detallista.lineItem(counter).grossPrice = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemGrossPrice
+ ' detallista.lineItem(counter).grossPrice.Amount = comprobante.Conceptos(counter).ValorUnitario
+
+ ' detallista.lineItem(counter).netPrice = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemNetPrice
+ ' detallista.lineItem(counter).netPrice.Amount = comprobante.Conceptos(counter).ValorUnitario
+
+ ' detallista.lineItem(counter).AdditionalInformation = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAdditionalInformation
+ ' detallista.lineItem(counter).AdditionalInformation.referenceIdentification = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAdditionalInformationReferenceIdentification
+ ' detallista.lineItem(counter).AdditionalInformation.referenceIdentification.type = Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemAdditionalInformationReferenceIdentificationType.ON
+ ' detallista.lineItem(counter).AdditionalInformation.referenceIdentification.Value = "1587"
+ ' 'Impuestos
+ ' Dim tasa As Decimal = 0
+ ' Dim importeImp As Decimal = 0
+ ' Try
+ ' If (Not (comprobante.Impuestos.Traslados) Is Nothing) Then
+ ' For Each traslado As Profact.TimbraCFDI40.ComprobanteImpuestosTraslado In comprobante.Impuestos.Traslados
+ ' tasa = Decimal.Parse(traslado.TasaOCuota)
+ ' importeImp = (comprobante.Conceptos(counter).Importe * (tasa / 100))
+ ' Next
+ ' End If
+
+ ' Catch ex As System.Exception
+
+ ' End Try
+
+ ' detallista.lineItem(counter).tradeItemTaxInformation = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTradeItemTaxInformation(1) {}
+ ' detallista.lineItem(counter).tradeItemTaxInformation(0) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTradeItemTaxInformation
+ ' detallista.lineItem(counter).tradeItemTaxInformation(0).taxTypeDescription = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription
+ ' detallista.lineItem(counter).tradeItemTaxInformation(0).taxTypeDescription = Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.VAT
+ ' detallista.lineItem(counter).tradeItemTaxInformation(0).tradeItemTaxAmount = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTradeItemTaxInformationTradeItemTaxAmount
+ ' detallista.lineItem(counter).tradeItemTaxInformation(0).tradeItemTaxAmount.taxPercentage = tasa
+ ' detallista.lineItem(counter).tradeItemTaxInformation(0).tradeItemTaxAmount.taxAmount = importeImp
+
+ ' detallista.lineItem(counter).totalLineAmount = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTotalLineAmount
+ ' detallista.lineItem(counter).totalLineAmount.grossAmount = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTotalLineAmountGrossAmount
+ ' detallista.lineItem(counter).totalLineAmount.grossAmount.Amount = comprobante.Conceptos(counter).Importe
+ ' detallista.lineItem(counter).totalLineAmount.netAmount = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaLineItemTotalLineAmountNetAmount
+ ' detallista.lineItem(counter).totalLineAmount.netAmount.Amount = comprobante.Conceptos(counter).Importe
+ ' counter = (counter + 1)
+ ' Next
+ ' detallista.totalAmount = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaTotalAmount
+ ' detallista.totalAmount.Amount = comprobante.SubTotal
+
+ ' detallista.TotalAllowanceCharge = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaTotalAllowanceCharge(1) {}
+ ' detallista.TotalAllowanceCharge(0) = New Profact.TimbraCFDI40.Complementos.Detallista.detallistaTotalAllowanceCharge
+ ' detallista.TotalAllowanceCharge(0).allowanceOrChargeType = Profact.TimbraCFDI40.Complementos.Detallista.detallistaTotalAllowanceChargeAllowanceOrChargeType.ALLOWANCE
+ ' detallista.TotalAllowanceCharge(0).Amount = Ventas.DescuentoTC
+
+ ' Dim nombres As System.Xml.Serialization.XmlSerializerNamespaces = New System.Xml.Serialization.XmlSerializerNamespaces
+ ' nombres.Add("detallista", "http://www.sat.gob.mx/detallista")
+ ' Dim xmlDetallista As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(detallista, GetType(Profact.TimbraCFDI40.Complementos.Detallista.detallista), nombres)
+
+ ' Dim docDetallista As XmlDocument = New XmlDocument
+ ' docDetallista.LoadXml(xmlDetallista)
+ ' comprobante.DetallistaSpecified = True
+ ' LXmlComplementos.Add(docDetallista.DocumentElement)
+
+ ' TieneComplemento = True
+ ' End If
+ '#End Region
+
+ If TieneComplemento Then
+ comprobante.Complemento = New Profact.TimbraCFDI40.ComprobanteComplemento
+ comprobante.Complemento.Any = LXmlComplementos.ToArray()
+ End If
+
+ sw.Stop()
+ swTiempo.AppendFormat("Armado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+#Region "Genera XML"
+ ' Try
+ ' cfdi.GenerarXMLBase64(llaveBase64, Clave)
+ ' cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML)
+ ' Catch ex As Exception
+
+ ' End Try
+ '//Timbramos el CFDI por medio del conector y guardamos resultado
+ Dim resultadoTimbre As Profact.TimbraCFDI.ResultadoTimbre
+
+#End Region
+
+ sw.Stop()
+ swTiempo.AppendFormat("Genera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+#Region "Timbra"
+ resultadoTimbre = cfdi.TimbraCFDI(comprobante)
+#End Region
+
+ sw.Stop()
+ swTiempo.AppendFormat("Timbrado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+ 'Verifica el error
+ If resultadoTimbre.Exitoso Then
+
+ 'Dim FechaCertificacion As DateTime
+ Dim FolioFiscal As String
+
+ UUID = resultadoTimbre.FolioUUID
+ FolioFiscal = resultadoTimbre.FolioUUID
+ If FolioFiscal <> "" Then
+ resultadoTimbre.GuardaXml(RutaArchivo, NombreArchivoXML)
+
+
+ If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then
+
+ 'Actualiza Estatus Factura
+ If Ventas.CveVenta > 0 Then
+
+
+ Dim ObjVentas As New ClsVentas()
+ If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", Now, Ventas.CveVenta, CvePAC:=UsuarioActual.Empresa.CvePAC, RFCReceptor:=ObjCFDITimbre.Receptor.RFC) Then
+ Retorno = ""
+ Else
+ Retorno = "Error"
+ End If
+ ObjVentas.Dispose()
+
+
+ ''Actualiza Cliente (NumeroCuenta)
+ 'If Not UsuarioActual.CveEmpresa.Contiene(72, 80) Then
+ ' Dim Hilo2 As New System.Threading.Thread(Sub() ActualizaCliente(UsuarioActual.CveUsuario, Ventas.Cliente.NumCtaPago, Ventas.CveMetodoPago, Ventas.CveCliente))
+ ' Hilo2.Start()
+ 'End If
+
+ End If
+ End If
+
+ If Not IO.Directory.Exists($"{UsuarioActual.Empresa.Ruta}CBB\") Then IO.Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}CBB\")
+
+ Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\"
+ Dim NombreCBB As String = $"{ObjCFDITimbre.Comprobante.SerieFolio}.jpg"
+ resultadoTimbre.GuardaCodigoBidimensional(RutaCBB, NombreCBB)
+
+ 'Genero la addenda Ford
+ If Ventas.Cliente IsNot Nothing AndAlso Ventas.Cliente.Ford_GSDB <> "" Then
+
+ Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio))
+
+ Dim FolioFactura As String = ""
+ If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura
+ GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB)
+
+ End If
+
+ If ObjCFDITimbre.Comprobante.TipoComprobante = "T" Then
+ Dim ObjInv As New ClsInventarios()
+ If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then
+ Retorno = ""
+ Else
+ Retorno = "Error"
+ End If
+ ObjInv.Dispose()
+ End If
+
+ 'Pendiente. Ruta guardar archivos
+ sw.Stop()
+ swTiempo.AppendFormat("Actualizado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+ Retorno = ""
+ Else
+ Retorno = "No se pudo timbrar ante el SAT. UUID no generado."
+ End If
+
+
+ Else
+
+ If String.IsNullOrEmpty(resultadoTimbre.Detalle) Then
+ 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"
+ Else
+ Retorno = Resultados(0)("Value").ToString()
+ MensajeErrorCFDI = Resultados(0)("Value").ToString()
+ End If
+ Else
+ Retorno = resultadoTimbre.Detalle
+ MensajeErrorCFDI = resultadoTimbre.Detalle
+
+ If Retorno = "[]" Then
+ Retorno = resultadoTimbre.Descripcion
+ End If
+ If MensajeErrorCFDI = "[]" Then
+ Retorno = resultadoTimbre.Descripcion
+ End If
+
+ End If
+ Else
+ Retorno = resultadoTimbre.Detalle
+ MensajeErrorCFDI = resultadoTimbre.Detalle
+ End If
+
+ End If
+
+ 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
@@ -4033,6 +5377,739 @@ Public Class Timbrado
End If
End If
+#End Region
+ GuardaLogTimbrado(swTiempo.ToString, CvePACEspecial)
+ Return Retorno
+ End Function
+
+ Public Function TimbrarFacturaPADEv40(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()
+
+
+ '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
+ sw.Start()
+
+ Dim msgErrorGeneracion As String = If(String.IsNullOrEmpty(cfdi.Mensaje), "", cfdi.Mensaje)
+
+#Region "Timbra"
+ If ArchivoGenerado Then
+
+ Dim Respuesta As String = ""
+
+ If String.IsNullOrEmpty(msgErrorGeneracion) Then
+ Dim TokenAuth As String = $"{UsuarioServicio}:{ClaveServicio}".ToBase64Encode()
+
+ Dim payload As New JObject(
+ New JProperty("contrato", "72330711-cac6-4106-8051-cbcda1aef495"),
+ New JProperty("certBase64", certBase64),
+ New JProperty("keyBase64", llaveBase64),
+ New JProperty("keyPass", Clave),
+ New JProperty("xmlBase64", cfdi.Xml.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)
+ End If
+
+ ' Aumentamos el timeout de la operación
+ If Not String.IsNullOrEmpty(Respuesta) Then
+
+ Dim result As PADEServicioTimbradoResp = Nothing
+ Dim serializer As XmlSerializer = New XmlSerializer(GetType(PADEServicioTimbradoResp))
+
+ Try
+ Using reader As TextReader = New StringReader(Respuesta)
+ result = CType(serializer.Deserialize(reader), PADEServicioTimbradoResp)
+ End Using
+ Catch ex As Exception
+ OnError("Ocurrió un error al obtener los resultados", ex)
+ End Try
+
+ sw.Stop()
+ swTiempo.AppendFormat("Timbrado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+ If result IsNot Nothing Then
+ If result.timbradoOk Then
+ Dim FolioFiscal As String = result.UUID
+ 'GUARDA EL XML RETORNADO POR EL PAC
+ 'cfdi.EscribirXML(result.xmlBase64.ToBase64Decode(), RutaArchivo, NombreArchivoXML)
+
+ sw.Stop()
+ swTiempo.AppendFormat("Guardado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+ If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then
+
+ 'Actualiza Estatus Factura
+ If Ventas.CveVenta > 0 Then
+
+ Using ObjVentas As New ClsVentas()
+
+ If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=CvePACEspecial, RFCReceptor:=ObjCFDITimbre.Receptor.RFC) Then
+ Retorno = ""
+ Else
+ Retorno = "Error"
+ End If
+ End Using
+
+ 'Genero la addenda Ford
+ If Ventas.Cliente.Ford_GSDB <> "" Then
+
+ 'Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio))
+
+ 'Dim FolioFactura As String = ""
+ 'If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura
+ 'GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB)
+
+ End If
+
+ End If
+
+ If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then
+ Using ObjNomina2 As New ClsNominas()
+
+ If ObjNomina2.UpdateEstatusNomNominas(3, CvePACEspecial, FolioFiscal, ObjCFDITimbre.Comprobante.Fecha, ObjCFDITimbre.Comprobante.Fecha, ObjCFDITimbre.Nomina.CveNomina, 0, 0, 0, 0, 0) Then
+ Retorno = ""
+ Else
+ Retorno = "Error"
+ End If
+ End Using
+ End If
+
+ If ObjCFDITimbre.Comprobante.TipoComprobante = "T" Then
+ Using ObjInv As New ClsInventarios()
+ If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then
+ Retorno = ""
+ Else
+ Retorno = "Error"
+ End If
+ End Using
+ End If
+ End If
+
+ If Not IO.Directory.Exists($"{UsuarioActual.Empresa.Ruta}CBB\") Then IO.Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}CBB\")
+
+ Try
+ Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg"
+ Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar()
+ CBB.GenerarCBB(UsuarioActual.Empresa.RFC, ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Comprobante.Total, FolioFiscal, RutaCBB)
+ CBB = Nothing
+ Catch ex As Exception
+ OnError("Ocurrió un error al generar el QR", ex)
+ End Try
+ Retorno = ""
+ sw.Stop()
+ swTiempo.AppendFormat("Actualizado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+ Else
+ If String.IsNullOrEmpty(result.mensaje) Then
+ Retorno = Respuesta + msgErrorGeneracion
+ MensajeErrorCFDI = ""
+ Else
+ Retorno = result.mensaje
+ MensajeErrorCFDI = result.codigo
+ 'If cfdi.Xml <> "" Then cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML)
+ End If
+ End If
+ Else
+ If String.IsNullOrEmpty(Respuesta) Then
+ Retorno = "Ocurrió un error al obtener la respuesta"
+ MensajeErrorCFDI = ""
+ Else
+ Retorno = Respuesta
+ MensajeErrorCFDI = ""
+ End If
+ End If
+ Else
+ If String.IsNullOrEmpty(msgErrorGeneracion) Then
+ Retorno = "Ocurrió un error al obtener la respuesta"
+ MensajeErrorCFDI = ""
+ Else
+ Retorno = msgErrorGeneracion
+ MensajeErrorCFDI = ""
+ End If
+ End If
+ Else
+ If String.IsNullOrEmpty(msgErrorGeneracion) Then
+ Retorno = "Ocurrió un error al generar el xml"
+ MensajeErrorCFDI = ""
+ Else
+ Retorno = msgErrorGeneracion
+ MensajeErrorCFDI = ""
+ End If
+ End If
+
#End Region
GuardaLogTimbrado(swTiempo.ToString, CvePACEspecial)
Return Retorno
@@ -5436,6 +7513,12 @@ Public Class Timbrado
Dim Ret As String = TimbrarFacturaProFactv33(Ventas, UsuarioActual)
Return If(Ret = "", True, False)
+ End Function
+ Private Function TimbrarFacturaProFactV40(UsuarioActual As Usuario, Optional Ventas As Modelos.Factura = Nothing, Optional TmpDTConceptos As DataTable = Nothing, Optional TmpDTImpuestos As DataTable = Nothing, Optional TmpDTComplementos As DataTable = Nothing, Optional Ruta As String = "", Optional LstFordASN As ListBox = Nothing, Optional FordGSDBM As String = "", Optional ObjV As ClsVentas = Nothing) As Boolean
+
+ Dim Ret As String = TimbrarFacturaProFactv40(Ventas, UsuarioActual)
+ Return If(Ret = "", True, False)
+
End Function
Private Sub GeneraAddenda7Eleven(Archivo As String, TmpDTConceptos As DataTable, TmpDT7Eleven As DataTable)
Dim cfdi As String = ""