-- pac 5
This commit is contained in:
@@ -654,6 +654,12 @@ Public Class Timbrado
|
||||
If Ret <> "" Then MensajeErrorCFDI = Ret
|
||||
Retorno = If(Ret = "", True, False)
|
||||
|
||||
Case 5
|
||||
|
||||
Dim Ret As String = TimbrarFacturaPADEv33(Ventas, UsuarioActual, CvePACEspecial)
|
||||
If Ret <> "" Then MensajeErrorCFDI = Ret
|
||||
Retorno = If(Ret = "", True, False)
|
||||
|
||||
End Select
|
||||
|
||||
|
||||
@@ -2185,6 +2191,604 @@ Public Class Timbrado
|
||||
GuardaLogTimbrado(swTiempo.ToString, CvePACEspecial)
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
Public Function TimbrarFacturaPADEv33(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
|
||||
' 'Sucursal matriz de la empresa
|
||||
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)
|
||||
Select Case CvePACEspecial
|
||||
Case 2
|
||||
UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" 'productivo
|
||||
Case 4
|
||||
'UrlServicio = "http://juancalderon-001-site1.ftempurl.com/timbrado.asmx?WSDL"
|
||||
UrlServicio = "http://alterno.gofac.com.mx/cfdi/timbrado.asmx?WSDL" ' alterno
|
||||
End Select
|
||||
|
||||
If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then
|
||||
|
||||
EmisorRFC = "AAA010101AAA"
|
||||
ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.key"
|
||||
ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.cer"
|
||||
Clave = "12345678a"
|
||||
TimbraProduccion = False
|
||||
Select Case CvePACEspecial
|
||||
Case 2
|
||||
UsuarioServicio = "fgomez"
|
||||
ClaveServicio = "12121212"
|
||||
UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" '"http://108.60.211.43/rvltimbrado/service1.asmx"
|
||||
Case 4
|
||||
UsuarioServicio = "UserTest"
|
||||
ClaveServicio = "1234567890"
|
||||
UrlServicio = "http://juancalderon-001-site1.ftempurl.com/timbrado.asmx?WSDL"
|
||||
End Select
|
||||
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.GoCfdi()
|
||||
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.saltarValidacion("bNtMuvZockPVhEjaPj0E")
|
||||
' cfdi.Decimales = 4
|
||||
#Region "Certificado"
|
||||
cfdi.CertificadoArchivo(ArchivoCertificado)
|
||||
#End Region
|
||||
|
||||
|
||||
sw.Stop()
|
||||
swTiempo.AppendFormat("Certificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
|
||||
swmili = sw.ElapsedMilliseconds
|
||||
sw.Start()
|
||||
|
||||
#Region "Comprobante"
|
||||
|
||||
cfdi.Comprobante33(
|
||||
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.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.ResidenciaFiscal, ObjCFDITimbre.Receptor.NumeroRegistroTributario, 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)
|
||||
For Each imp As CFDIConceptosImpuestos In concep.Impuestos
|
||||
If imp.TrasladooRetencion = "T" Then
|
||||
cfdi.ImpuestoConceptoTraslado(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe)
|
||||
Else
|
||||
cfdi.ImpuestoConceptoRetenido(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.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 "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 = "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 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))
|
||||
Next
|
||||
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.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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
Next
|
||||
End If
|
||||
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.MensajeError
|
||||
If Retorno = "" OrElse IsNothing(Retorno) Then
|
||||
Retorno = $"llaveBase64 ={llaveBase64} <br/>Clave ={Clave} <br/> {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()
|
||||
|
||||
#Region "Timbra"
|
||||
If ArchivoGenerado Then
|
||||
|
||||
'cfdi.TimbrarCfdi(UsuarioServicio, ClaveServicio, UrlServicio, TimbraProduccion)
|
||||
|
||||
'sw.Stop()
|
||||
'swTiempo.AppendFormat("Timbrado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
|
||||
'swmili = sw.ElapsedMilliseconds
|
||||
'sw.Start()
|
||||
''Verifica el error
|
||||
'If cfdi.CodigoError = 0 Then
|
||||
|
||||
' Dim FolioFiscal As String
|
||||
|
||||
' UUID = cfdi.UUID
|
||||
' FolioFiscal = cfdi.UUID 'obtenerAtributo(cfdi.XmlTimbrado, "TimbreFiscalDigital", "UUID") 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText
|
||||
|
||||
' If FolioFiscal <> "" Then
|
||||
|
||||
' cfdi.EscribirXML(cfdi.Xml, 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) 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, "", ("01/01/2000").ToDate, 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 b As Byte() = cfdi.QrCode($"?re={UsuarioActual.Empresa.RFC}&rr={ObjCFDITimbre.Receptor.RFC}&tt={String.Format("{0,12:F6}", ObjCFDITimbre.Comprobante.Total).Trim()}&id={FolioFiscal}")
|
||||
' File.WriteAllBytes(RutaCBB, b)
|
||||
' Catch ex As Exception
|
||||
' OnError("Ocurrió un error al generar el QR", ex)
|
||||
' End Try
|
||||
' Retorno = ""
|
||||
' Else
|
||||
' Retorno = "No se pudo timbrar ante el SAT. UUID no generado."
|
||||
' End If
|
||||
' sw.Stop()
|
||||
' swTiempo.AppendFormat("Actualizado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
|
||||
' swmili = sw.ElapsedMilliseconds
|
||||
' sw.Start()
|
||||
|
||||
'Else
|
||||
' Retorno = cfdi.MensajeError
|
||||
' MensajeErrorCFDI = cfdi.MensajeError
|
||||
' If cfdi.Xml <> "" Then cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML)
|
||||
|
||||
' End If
|
||||
End If
|
||||
|
||||
#End Region
|
||||
GuardaLogTimbrado(swTiempo.ToString, CvePACEspecial)
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
Public Sub GuardaLogTimbrado(Str As String, CvePAC As Integer)
|
||||
Dim ArchivoW As StreamWriter
|
||||
Dim strLineaTMP As String
|
||||
|
||||
Reference in New Issue
Block a user