diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb
index 1586c3425..9292e9dab 100644
--- a/App_Code/ClsPaginas.vb
+++ b/App_Code/ClsPaginas.vb
@@ -4101,26 +4101,51 @@ Public Class ClsPaginas
HttpContext.Current.Application(AppNombre) = value
End Set
End Property
- Property GlobalDTAcumGarantiasMesesTipoUso(CveEmpresa As Integer, CveMarca As Integer) As DataTable
+
+ Property GlobalDTAcumGarantiasTipoUso(CveEmpresa As Integer, CveMarca As Integer, CveTipoUso As Integer) As DataTable
Get
- Dim AppNombre As String = $"GlobalDTAcumGarantiasMesesTipoUso-{CveEmpresa}"
+ Dim AppNombre As String = $"GlobalDTAcumGarantiasTipoUso-{CveEmpresa}"
If Application(AppNombre) Is Nothing Then
Dim ObjAcumuladores As New ClsAcumuladores()
If ObjAcumuladores.GarantiasMesesGet(-1, CveEmpresa) Then Application(AppNombre) = ObjAcumuladores.DtResultados.FiltraParametros("", DistinctColumns:={"CveMarca", "CveTipoUso", "TipoUso"})
ObjAcumuladores.Dispose()
End If
- If CveMarca <> -1 Then
- Dim Str As StringBuilder = New StringBuilder()
- If CveMarca <> -1 Then Str.AppendFormat("CveMarca = {0}", CveMarca)
- Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), Str.ToString, "", DataViewRowState.CurrentRows)
- GlobalDTAcumGarantiasMesesTipoUso = Dv.ToTable
- Dv.Dispose()
- Else
- GlobalDTAcumGarantiasMesesTipoUso = DirectCast(Application(AppNombre), DataTable)
- End If
+
+ Dim filtros As New List(Of String)
+ If CveMarca <> -1 Then filtros.Add($"CveMarca = {CveMarca}")
+ If CveTipoUso <> -1 Then filtros.Add($"CveTipoUso = {CveTipoUso}")
+
+ Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), String.Join(" AND ", filtros), "", DataViewRowState.CurrentRows)
+ GlobalDTAcumGarantiasTipoUso = Dv.ToTable
+ Dv.Dispose()
+
End Get
Set(value As DataTable)
- Dim AppNombre As String = $"GlobalDTAcumGarantiasMesesTipoUso-{CveEmpresa}"
+ Dim AppNombre As String = $"GlobalDTAcumGarantiasTipoUso-{CveEmpresa}"
+ Application(AppNombre) = value
+ End Set
+ End Property
+ Property GlobalDTAcumGarantiasTipoUsoMeses(CveEmpresa As Integer, CveMarca As Integer, CveTipoUso As Integer, Mes As Integer) As DataTable
+ Get
+ Dim AppNombre As String = $"GlobalDTAcumGarantiasTipoUsoMeses-{CveEmpresa}"
+ If Application(AppNombre) Is Nothing Then
+ Dim ObjAcumuladores As New ClsAcumuladores()
+ If ObjAcumuladores.GarantiasMesesGet(-1, CveEmpresa) Then Application(AppNombre) = ObjAcumuladores.DtResultados
+ ObjAcumuladores.Dispose()
+ End If
+
+ Dim filtros As New List(Of String)
+ If CveMarca <> -1 Then filtros.Add($"CveMarca = {CveMarca}")
+ If CveTipoUso <> -1 Then filtros.Add($"CveTipoUso = {CveTipoUso}")
+ If Mes <> -1 Then filtros.Add($"Mes = {Mes}")
+
+ Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), String.Join(" AND ", filtros), "", DataViewRowState.CurrentRows)
+ GlobalDTAcumGarantiasTipoUsoMeses = Dv.ToTable
+ Dv.Dispose()
+
+ End Get
+ Set(value As DataTable)
+ Dim AppNombre As String = $"GlobalDTAcumGarantiasTipoUsoMeses-{CveEmpresa}"
Application(AppNombre) = value
End Set
End Property
@@ -8121,6 +8146,7 @@ Public Class ClsPaginas
PaginaDict.Add("/CargaCuentas.aspx".ToUpper(), -1)
PaginaDict.Add("/OI/Tareas.aspx".ToUpper(), -1)
PaginaDict.Add("/OI/RepProyectos.aspx".ToUpper(), 907)
+ 'PaginaDict.Add("/OI/GraficaGantt.aspx".ToUpper(), 371)
PaginaDict.Add("/OI/Proyecto.aspx".ToUpper(), 907)
PaginaDict.Add("/OI/Tablero.aspx".ToUpper(), 910)
PaginaDict.Add("/OI/TableroDetalle.aspx".ToUpper(), 910)
@@ -9173,9 +9199,9 @@ Public Class ClsPaginas
PaginaDict.Add("/Ventas/RepProductosServicios.aspx".ToUpper(), 352)
PaginaDict.Add("/Ventas/RepProductosServiciosDetalle.aspx".ToUpper(), 352)
PaginaDict.Add("/Ventas/RepPS.aspx".ToUpper(), 701)
- PaginaDict.Add("/Ventas/RepABT.aspx".ToUpper(), 353)
+ 'PaginaDict.Add("/Ventas/RepABT.aspx".ToUpper(), 353)
PaginaDict.Add("/Ventas/CatPromociones.aspx".ToUpper(), 123)
- PaginaDict.Add("/Ventas/Promociones.aspx".ToUpper(), 124)
+ PaginaDict.Add("/Ventas/Promociones.aspx".ToUpper(), 123)
PaginaDict.Add("/Ventas/CatFamiliaSubFamilia.aspx".ToUpper(), 372)
PaginaDict.Add("/Ventas/RepComisiones.aspx".ToUpper(), 382)
PaginaDict.Add("/Ventas/RepComisionesDetalle.aspx".ToUpper(), 382)
diff --git a/App_Code/ClsVentas.vb b/App_Code/ClsVentas.vb
index d198effdb..f01f4b90e 100644
--- a/App_Code/ClsVentas.vb
+++ b/App_Code/ClsVentas.vb
@@ -2126,24 +2126,24 @@ Public Class ClsVentas
End Function
#End Region
- Public Function GetRepABT(Ejercicio As Integer, Periodo As Integer) As Boolean
- Dim Retorno As Boolean = False
- DataAdapter("PA_VentasGetRepABT")
+ 'Public Function GetRepABT(Ejercicio As Integer, Periodo As Integer) As Boolean
+ ' Dim Retorno As Boolean = False
+ ' DataAdapter("PA_VentasGetRepABT")
- With SqlAdapter.SelectCommand.Parameters
- .Add("@Ejercicio", SqlDbType.Int).Value = Ejercicio
- .Add("@Periodo", SqlDbType.Int).Value = Periodo
- End With
+ ' With SqlAdapter.SelectCommand.Parameters
+ ' .Add("@Ejercicio", SqlDbType.Int).Value = Ejercicio
+ ' .Add("@Periodo", SqlDbType.Int).Value = Periodo
+ ' End With
- Try
- SqlAdapter.Fill(Data)
- Retorno = True
- Catch ex As Exception
- OnError("Ocurrió un error al obtener el Reporte ABT.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo)
- End Try
+ ' Try
+ ' SqlAdapter.Fill(Data)
+ ' Retorno = True
+ ' Catch ex As Exception
+ ' OnError("Ocurrió un error al obtener el Reporte ABT.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo)
+ ' End Try
- Return Retorno
- End Function
+ ' Return Retorno
+ 'End Function
#Region " PROMOCIONES "
Public Function GetPromociones(CvePromocion As Integer, Fecha As String, CveVendedor As Integer, CveCliente As Integer, Estatus As Integer, CveEmpresa As Integer,
diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb
index 8c6b98c45..d6d8c9bc3 100644
--- a/App_Code/Timbrado.vb
+++ b/App_Code/Timbrado.vb
@@ -10,8 +10,6 @@ Imports System.Xml
Imports System.Xml.Serialization
Imports Extensiones
Imports Newtonsoft.Json.Linq
-Imports Profact.TimbraCFDI33.Complementos.CartaPorte10
-Imports Profact.TimbraCFDI33.Complementos.CartaPorte20
Imports ProfactCartaPorte = Profact.TimbraCFDI33.Complementos.CartaPorte20
@@ -1218,9 +1216,6 @@ Public Class Timbrado
Dim Retorno As Boolean = False
Dim tCvePAC As Integer = UsuarioActual.Empresa.CvePAC
If CvePACEspecial <> -1 Then tCvePAC = CvePACEspecial
- If versionTimbre = VersionTimbradoEnum.PorDefectoEmpresa Then
- versionTimbre = If(UsuarioActual.Empresa.Funcionalidad(350) = "1", VersionTimbradoEnum.Version4_0, VersionTimbradoEnum.Version3_3)
- End If
'validación especial.
If Ventas.TipoDocto.Contiene("Ing", "Dev") Then
@@ -1240,48 +1235,33 @@ Public Class Timbrado
End If
Select Case tCvePAC
- Case 1
- ' Retorno = TimbrarFacturaBIInform33(UsuarioActual, Ventas, FM, TmpDTConceptos, TmpDTImpuestos, TmpDT7Eleven, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV)
- Dim Ret As String = TimbrarFacturaBIInform33(Ventas, UsuarioActual)
- Retorno = If(Ret = "", True, False)
+ 'Case 1
+ ' ' Retorno = TimbrarFacturaBIInform33(UsuarioActual, Ventas, FM, TmpDTConceptos, TmpDTImpuestos, TmpDT7Eleven, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV)
+ ' Dim Ret As String = TimbrarFacturaBIInform33(Ventas, UsuarioActual)
+ ' Retorno = If(Ret = "", True, False)
- Case 2
- 'Retorno = TimbrarFacturaRealVirtual(UsuarioActual, Ventas, TmpDTConceptos, TmpDTImpuestos, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV)
- Dim Ret As String = TimbrarFacturaRealVirtualv33(Ventas, UsuarioActual)
- If Ret <> "" Then MensajeErrorCFDI = Ret
- Retorno = If(Ret = "", True, False)
+ 'Case 2
+ ' 'Retorno = TimbrarFacturaRealVirtual(UsuarioActual, Ventas, TmpDTConceptos, TmpDTImpuestos, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV)
+ ' Dim Ret As String = TimbrarFacturaRealVirtualv33(Ventas, UsuarioActual)
+ ' If Ret <> "" Then MensajeErrorCFDI = Ret
+ ' Retorno = If(Ret = "", True, False)
Case 3
- If versionTimbre = VersionTimbradoEnum.Version4_0 Then
- Retorno = TimbrarFacturaProFactV40(UsuarioActual, Ventas)
- Else
- Retorno = TimbrarFacturaProFact(UsuarioActual, Ventas)
- End If
+
+ Retorno = TimbrarFacturaProFactV40(UsuarioActual, Ventas)
'Retorno = TimbrarFacturaProFact(UsuarioActual, Ventas, TmpDTConceptos, TmpDTImpuestos, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV)
Case 4
- If versionTimbre = VersionTimbradoEnum.Version4_0 Then
- Dim Ret As String = TimbrarFacturaGoCFDIv40(Ventas, UsuarioActual, CvePACEspecial)
- If Ret <> "" Then MensajeErrorCFDI = Ret
- Retorno = If(Ret = "", True, False)
- Else
- Dim Ret As String = TimbrarFacturaGoCFDIv33(Ventas, UsuarioActual, CvePACEspecial)
- If Ret <> "" Then MensajeErrorCFDI = Ret
- Retorno = If(Ret = "", True, False)
- End If
+ Dim Ret As String = TimbrarFacturaGoCFDIv40(Ventas, UsuarioActual, CvePACEspecial)
+ If Ret <> "" Then MensajeErrorCFDI = Ret
+ Retorno = If(Ret = "", True, False)
Case 5
- If versionTimbre = VersionTimbradoEnum.Version4_0 Then
- Dim Ret As String = TimbrarFacturaPADEv40(Ventas, UsuarioActual, CvePACEspecial)
+
+ Dim Ret As String = TimbrarFacturaPADEv40(Ventas, UsuarioActual, CvePACEspecial)
If Ret <> "" Then MensajeErrorCFDI = Ret
- Retorno = If(Ret = "", True, False)
- Else
- Dim Ret As String = TimbrarFacturaPADEv33(Ventas, UsuarioActual, CvePACEspecial)
- If Ret <> "" Then MensajeErrorCFDI = Ret
- Retorno = If(Ret = "", True, False)
- End If
- 'Dim error
+ Retorno = If(Ret = "", True, False)
End Select
@@ -1289,2307 +1269,6 @@ Public Class Timbrado
Return Retorno
End Function
- Public Function TimbrarFacturaBIInform33(Ventas As Modelos.Factura, UsuarioActual As Usuario) As String
-
-
- Dim Retorno As String = ""
-
- 'Dim SucMatriz As SubProyectoModel = Ventas.SubProyectoMatriz
- 'Dim SucEmpresa As SubProyectoModel = Ventas.SubProyecto
- 'Dim SucCliente As SucursalModel = Ventas.ClienteSucursal
- Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre
- Dim ArchivoLLave As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoKey}"
- Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoCer}"
- Dim ArchivoPFX As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoPfx}"
- 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://portalbiinform.com.mx/srvCFDi33/service1.asmx" ' Produccion
- Dim RutaArchivo As String = $"{UsuarioActual.Empresa.Ruta}XML\{Ventas.TipoDocto}\"
- Dim NombreArchivoXML As String = $"{ObjCFDITimbre.Comprobante.SerieFolio}"
- Dim TimbraProduccion As Boolean = True
-
- 'Dim sevenElevenNumProveedor = TmpDT7Eleven.Rows(0)("sevenElevenNumProveedor").ToString
- 'Dim sevenElevenFolio = TmpDT7Eleven.Rows(0)("sevenElevenFolio").ToString
- 'Dim sevenElevenTienda = TmpDT7Eleven.Rows(0)("sevenElevenTienda").ToString
- 'Dim sevenElevenFecha = TmpDT7Eleven.Rows(0)("sevenElevenFecha").ToString
-
- If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then
- UsuarioServicio = UsuarioActual.Empresa.BIUsuario
- ClaveServicio = UsuarioActual.Empresa.BIContraseña
- 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 = "http://portalmacropro.com.mx/srvCFDi33prueba/service1.asmx"
- TimbraProduccion = False
- End If
-
- Dim CFDi As New ClbNegBICFDv3_3.ClsNegEDI
- Dim ObjFemsa As New ClbNegBICFDv3_3.ClsNegAddFemsa
- Dim ObjDetallista As New ClbNegBICFDv3_3.ClsNegEDICompDet
- Dim ImpLoc As New ClbNegBICFDv3_3.ClsNegEDICompImplocal
-
- Dim Msg As String = String.Empty
- 'Nodo Comprobante
- Dim clbcomp As ClbNegBICFDv3_3.TipoDeComprobante = If(ObjCFDITimbre.Comprobante.TipoComprobante = "I", ClbNegBICFDv3_3.TipoDeComprobante.I, If(ObjCFDITimbre.Comprobante.TipoComprobante = "E", ClbNegBICFDv3_3.TipoDeComprobante.E, If(ObjCFDITimbre.Comprobante.TipoComprobante = "P", ClbNegBICFDv3_3.TipoDeComprobante.P, ClbNegBICFDv3_3.TipoDeComprobante.T)))
- Msg = CFDi.comprobantecfd(0, 0, ObjCFDITimbre.Comprobante.Serie,
- ObjCFDITimbre.Comprobante.Folio.ToString,
- ObjCFDITimbre.Comprobante.Fecha,
- ObjCFDITimbre.Comprobante.FormadePago,
- ObjCFDITimbre.Comprobante.CondicionesdePago,
- ObjCFDITimbre.Comprobante.SubTotal,
- ObjCFDITimbre.Comprobante.Descuentos,
- ObjCFDITimbre.Comprobante.TipoCambio.ToDecimal,
- ObjCFDITimbre.Comprobante.Moneda,
- ObjCFDITimbre.Comprobante.Total,
- ObjCFDITimbre.Comprobante.MetodoPago,
- clbcomp,
- ObjCFDITimbre.Comprobante.LugarExpedicion,
- ObjCFDITimbre.Comprobante.Confirmacion)
-
- If Msg = String.Empty Then
- 'Nodo emisor
- Msg = CFDi.EmisorCfd(If(UsuarioActual.Empresa.FacturaProduccion, UsuarioActual.Empresa.RFC, "AAA010101AAA"), UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal)
- If Msg = String.Empty Then
-
- 'Nodo receptor
- Msg = CFDi.ReceptorCfd(ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Receptor.Nombre, "", "", Ventas.ClaveUsoCFDI)
- If Msg = String.Empty Then
-
- 'Nodo conceptos, se agregan los PS
- Dim HasErrorConceptos As Boolean = False
-
- If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then
- For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos
- CFDi.ConceptosCfd(concep.ClaveProdServ, concep.Cantidad, concep.Unidad, concep.Noidentificacion, concep.Descripcion, concep.ValorUnitario, concep.Importe, concep.ClaveUnidad, concep.Descuento)
- For Each imp As CFDIConceptosImpuestos In concep.Impuestos
- Dim clbImp As ClbNegBICFDv3_3.Impuesto = If(imp.Impuesto = "002", ClbNegBICFDv3_3.Impuesto.IVA, If(imp.Impuesto = "003", ClbNegBICFDv3_3.Impuesto.IEPS, ClbNegBICFDv3_3.Impuesto.ISR))
- Dim clbTipo As ClbNegBICFDv3_3.TipoFactor = If(imp.TipoFactor = "Tasa", ClbNegBICFDv3_3.TipoFactor.Tasa, If(imp.TipoFactor = "Cuota", ClbNegBICFDv3_3.TipoFactor.Cuota, ClbNegBICFDv3_3.TipoFactor.Exento))
- Dim Posicion As Integer = imp.TasaOCuota.ToString.IndexOf(".")
- If imp.TrasladooRetencion = "T" Then
- CFDi.ConceptosTrasladosCfd(imp.Base, clbImp, clbTipo, imp.TasaOCuota.ToString.PadRight(imp.TasaOCuota.ToString.Length + (6 - imp.TasaOCuota.ToString.Substring(Posicion, imp.TasaOCuota.ToString.Length - 1).Length.ToEntero + 1), Convert.ToChar("0")), imp.Importe)
- Else
- CFDi.ConceptosRetencionesCfd(imp.Base, clbImp, clbTipo, imp.TasaOCuota.ToString.PadRight(imp.TasaOCuota.ToString.Length + (6 - imp.TasaOCuota.ToString.Substring(Posicion, imp.TasaOCuota.ToString.Length - 1).Length.ToEntero + 1), Convert.ToChar("0")), imp.Importe)
- End If
-
- Next
- Next
- End If
-
-
- If Not HasErrorConceptos Then
- 'Nodo Impuestos, se agrega el total de impuestos
- Msg = CFDi.ImpuestosCfd(Ventas.RetIVATC + Ventas.RetISRTC, Ventas.IVATC)
- If Msg = String.Empty Then
-
- Dim HasErrorRetenciones As Boolean = False
- 'Nodo Impuestos-retenciones
-
-
- For Each Ret In ObjCFDITimbre.Retenciones
- Dim clbImp As ClbNegBICFDv3_3.Impuesto = If(Ret.Impuesto = "002", ClbNegBICFDv3_3.Impuesto.IVA, If(Ret.Impuesto = "003", ClbNegBICFDv3_3.Impuesto.IEPS, ClbNegBICFDv3_3.Impuesto.ISR))
- Msg = CFDi.ImpuestosRetencionesCfd(clbImp, Ret.Importe)
- Next
-
- If Not HasErrorRetenciones Then
-
- 'Nodo Impuestos-traslado
- Dim HasErrorIVA As Boolean = False
- ''se acumulan los importes
- For Each Tras In ObjCFDITimbre.Traslados
- Dim Posicion As Integer = Tras.TasaOCuota.ToString.IndexOf(".")
- Dim tipfact As ClbNegBICFDv3_3.TipoFactor = If(Tras.TipoFactor = "Tasa", ClbNegBICFDv3_3.TipoFactor.Tasa, If(Tras.TipoFactor = "Cuota", ClbNegBICFDv3_3.TipoFactor.Cuota, ClbNegBICFDv3_3.TipoFactor.Exento))
- Msg = CFDi.ImpuestosTrasladosCfd(ClbNegBICFDv3_3.Impuesto.IVA, Tras.TasaOCuota.ToString.PadRight(Tras.TasaOCuota.ToString.Length + (6 - Tras.TasaOCuota.ToString.Substring(Posicion, Tras.TasaOCuota.ToString.Length - 1).Length.ToEntero + 1), Convert.ToChar("0")), Tras.Importe, tipfact)
- Next
-
-
- If Not HasErrorIVA Then
- 'Nodo Impuestos locales
- 'JJMQ 20150826: Se habilitó de nueva cuenta impuestos locales
- Dim HasErrorImpuestosLocales As Boolean = False
- Dim TieneImpuestosLocales As Boolean = False
-
-
- If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 Then
-
- For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales
- If ret.Importe > 0 Then
- Msg = ImpLoc.RetencionesLocales(ret.ImpuestoLocalRetenido, ret.TasaRetencion, ret.Importe)
- TieneImpuestosLocales = True
- End If
- Next
- End If
-
- CFDi.CompImplocal = ImpLoc
- If Msg <> String.Empty Then HasErrorImpuestosLocales = True
-
- If Not HasErrorImpuestosLocales Then
-
-
-
- 'Agrega Adenda FEMSA
- Dim HasErrorFEMSA As Boolean = False
- If Ventas.Cliente.AplicaFEMSA Then
-
- Msg = ObjFemsa.Carga(Ventas.FemsaFactura.FEMSA_Version, Ventas.ClaseDoctoSat, Ventas.FemsaFactura.FEMSA_NumSociedad, Ventas.FemsaFactura.FEMSA_NumProveedor, Ventas.FemsaFactura.FEMSA_NumPedido,
- Ventas.MonedaAbreviatura, Ventas.FemsaFactura.FEMSA_NumEntrada, Ventas.FemsaFactura.FEMSA_NumRemision, Ventas.FemsaFactura.FEMSA_NumSocio, Ventas.FemsaFactura.FEMSA_CentroCosto,
- Ventas.FemsaFactura.FEMSA_IPeriodoLiquidacion, Ventas.FemsaFactura.FEMSA_FPeriodoLiquidacion, Ventas.FemsaFactura.FEMSA_CodRetencion1, Ventas.FemsaFactura.FEMSA_CodRetencion2,
- Ventas.FemsaFactura.FEMSA_Mail)
- If Msg <> String.Empty Then HasErrorFEMSA = True
- End If
-
- If Not HasErrorFEMSA Then
- If Ventas.Cliente.AplicaFEMSA Then Msg = CFDi.AddendaFemsa(ObjFemsa)
- If Msg = String.Empty Then
- 'Agrega Complemento Detallista
- Dim HasErrorDetallista As Boolean = False
- If Ventas.Cliente.AplicaDetallista Then
- 'Desarrollar Detallista
- If Msg <> String.Empty Then HasErrorDetallista = True
- '1
- Msg = ObjDetallista._1_1R_requestForPaymentIdentification(ClbNegBICFDv3_3.CompDetEntityType.INVOICE)
- If Msg <> String.Empty Then HasErrorDetallista = True
- '2
- Dim LstInstruccionComercial As New List(Of String)
- LstInstruccionComercial.Add(Ventas.TotalTC.ToString.ToDouble.Texto2Letras.ToUpper)
- Msg = ObjDetallista._2_1O_SpecialInstruction(ClbNegBICFDv3_3.CompDetCode.ZZZ, LstInstruccionComercial)
- If Msg <> String.Empty Then HasErrorDetallista = True
- '3
- Msg = ObjDetallista._3_1R_OrderIdentification_ReferenceIdentification("ON", Ventas.Det_OrdenCompra)
- If Msg <> String.Empty Then HasErrorDetallista = True
- Msg = ObjDetallista._3_2O_OrderIdentification_ReferenceDate(Ventas.Det_FechaOrdenCompra.ToDate)
- If Msg <> String.Empty Then HasErrorDetallista = True
- '4
- Msg = ObjDetallista._4_1R_AdditionalInformation_ReferenceIdentification("DQ", Ventas.Det_ContraRecibo)
- If Msg <> String.Empty Then HasErrorDetallista = True
- '5
- Msg = ObjDetallista._5_1R_DeliveryNote_ReferenceIdentification(Ventas.Det_ContraRecibo)
- If Msg <> String.Empty Then HasErrorDetallista = True
- Msg = ObjDetallista._5_2O_DeliveryNote_ReferenceDate(Ventas.Det_FechaOrdenCompra.ToDate)
- If Msg <> String.Empty Then HasErrorDetallista = True
- '6
- Msg = ObjDetallista._6_1R_Buyer(Ventas.Cliente.Detallista_GLNComprador, Ventas.Cliente.Detallista_Departamento)
- If Msg <> String.Empty Then HasErrorDetallista = True
- '7
- Msg = ObjDetallista._7_1R_Seller(Ventas.Cliente.Detallista_GLNVendedor, "SELLER_ASSIGNED_IDENTIFIER_FOR_A_PARTY", Ventas.Cliente.Detallista_NumProveedor)
- If Msg <> String.Empty Then HasErrorDetallista = True
- '8
- Msg = ObjDetallista._8_1O_AllowanceCharge(ClbNegBICFDv3_3.CompDetNetAllowanceChargeType.ALLOWANCE_GLOBAL,
- ClbNegBICFDv3_3.CompDetNetSettlementType.OFF_INVOICE,
- "0",
- ClbNegBICFDv3_3.CompDetNetSpecialServicesType.AJ,
- ClbNegBICFDv3_3.CompDetNetMonetaryAmountOrPercentageBase.INVOICE_VALUE,
- If(Ventas.DescuentoTC > 0 AndAlso Ventas.SubTotalTC > 0, (Ventas.DescuentoTC * 100) / Ventas.SubTotalTC, 0))
- If Msg <> String.Empty Then HasErrorDetallista = True
- '9
- Dim LineNumber As Integer = 1
- If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then
- For Each Row As DataRow In Ventas.DtDetalle.Rows
- Dim PS As String = If(Row("PS").ToString.Length = 1, Row("Obs").ToString, If(Row("PS").ToString.Length = 0, "", Row("PS").ToString & " ") & Row("Obs").ToString & If(Row("Obs").ToString.Trim.Length > 0, vbLf, "")) & vbLf
- Msg = ObjDetallista._9_1R_LineItem("SimpleInvoidLineItemType",
- LineNumber,
- Row("Codigo").ToString,
- ClbNegBICFDv3_3.CompDetAlternateTradeItemIdentification.SUPPLIER_ASSIGNED,
- Row("Codigo").ToString,
- ClbNegBICFDv3_3.CompDetNetLanguage.ES,
- If((Row("Codigo").ToString & If(Row("Codigo").ToString.Length > 0, "-", "") & PS).Length > 35, (Row("Codigo").ToString & If(Row("Codigo").ToString.Length > 0, "-", "") & PS).Substring(0, 34), (Row("Codigo").ToString & If(Row("Codigo").ToString.Length > 0, "-", "") & PS)),
- If(Row("UM").ToString.ToLower = "no aplica", "NA", Row("UM").ToString),
- Row("Cantidad").ToString,
- Row("PU").ToString.ToDecimal,
- Row("PU").ToString.ToDecimal * (1 + Row("IVA").ToString.ToDecimal),
- Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal,
- (Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal) * (1 + Row("IVA").ToString.ToDecimal))
- LineNumber = LineNumber + 1
- Next
- End If
- If Msg <> String.Empty Then HasErrorDetallista = True
- '10
- Msg = ObjDetallista._10_1R_TotalAmount(Ventas.SubTotalTC)
- If Msg <> String.Empty Then HasErrorDetallista = True
- '11
- Msg = ObjDetallista._11_1R_TotalAllowanceCharge(ClbNegBICFDv3_3.CompDetNetAllowanceOrChargeType.ALLOWANCE,
- ClbNegBICFDv3_3.CompDetNetSpecialServicesType.AA,
- Ventas.DescuentoTC)
- If Msg <> String.Empty Then HasErrorDetallista = True
- End If
- If Not HasErrorDetallista Then
- If Ventas.Cliente.AplicaDetallista Then Msg = CFDi.ClomplementoDetallistaCfd(ObjDetallista)
- If Msg <> String.Empty Then HasErrorDetallista = True
- 'Timbrar
-
- 'Web Services de producción: http://biinform.com.mx/srvCFDi/service1.asmx
- 'Web Services de pruebasd: http://biinform.com.mx/srvCFDiPrueba/service1.asmx
-
-
-
-
- If Not System.IO.Directory.Exists(UsuarioActual.Empresa.Ruta & "XML\") Then System.IO.Directory.CreateDirectory(UsuarioActual.Empresa.Ruta & "XML\")
- If Not System.IO.Directory.Exists(UsuarioActual.Empresa.Ruta & "XML\" & Ventas.TipoDocto) Then System.IO.Directory.CreateDirectory(UsuarioActual.Empresa.Ruta & "XML\" & Ventas.TipoDocto)
-
- 'GENERAR TIMBRE
- CFDi.Generar(ArchivoPFX,
- UsuarioActual.Empresa.ContraseñaKey,
- ArchivoCertificado,
- $"{RutaArchivo }{NombreArchivoXML}.xml",
- UsuarioActual.Empresa.Ruta & "Certificados\",
- UsuarioServicio,
- ClaveServicio,
- UrlServicio,
- True)
-
-
- If CFDi.MsgError <> String.Empty Then
- OnError($"Ocurrió un error al generar el timbre, el mensaje del SAT fue: {CFDi.MsgError}. Emp:{UsuarioActual.CveEmpresa}. MetPag: {Ventas.ClaveMetodoPagoSAT}", New Exception(CFDi.MsgError))
- Retorno = $"Ocurrió un error al generar el timbre, el mensaje del SAT fue: {CFDi.MsgError}. Emp:{UsuarioActual.CveEmpresa}. MetPag: {Ventas.ClaveMetodoPagoSAT}"
- Else
- Dim CBB As New ClbNegBICFDv3_3.ClsNegCBBGenerar()
- Dim FechaCertificacion As DateTime
- Dim FolioFiscal, NoSerieCertificado, NoSerieCertificadoContribuyente, SelloCFDi, SelloSAT As String
-
- FolioFiscal = CFDi.Timbrado.UUDI 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText
- NoSerieCertificado = CFDi.Timbrado.NoCertificadoSAT
- FechaCertificacion = CFDi.Timbrado.FechaTimbrado
- SelloCFDi = CFDi.Timbrado.SelloCFD
- SelloSAT = CFDi.Timbrado.SelloSAT
- NoSerieCertificadoContribuyente = CFDi.Timbrado.NoCertificado
-
-
- Dim ObjVentas As New ClsVentas()
- If Not ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=1, CFDIVersion:="3.3") Then
- Retorno = "No se pudo registrar el folio fiscal"
- 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
-
-
- Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg"
- CBB.GenerarCBB(UsuarioActual.Empresa.RFC, ObjCFDITimbre.Receptor.RFC, Ventas.TotalTC, FolioFiscal, RutaCBB)
-
- ''Genero la addenda de 7-Eleven
- 'If sevenElevenNumProveedor <> "" AndAlso sevenElevenFolio <> "" AndAlso sevenElevenTienda <> "" AndAlso sevenElevenFecha <> "" AndAlso sevenElevenFecha <> "__/__/____" Then
- ' Dim RutaCadena As String = $"{Ruta}XML\{Ventas.TipoDocto}\{Ventas.SerieFolio}.xml" '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))
-
- ' GeneraAddenda7Eleven(RutaCadena, TmpDTConceptos, TmpDT7Eleven)
- 'End If
-
- '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
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Complemento Detallista"
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Complemento Detallista", New Exception)
- End If
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: AddendaFemsa"
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: AddendaFemsa", New Exception)
- End If
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: AddendaFemsa"
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: AdendaFEMSA", New Exception)
- End If
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: RetencionesLocales"
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: RetencionesLocales", New Exception)
- End If
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosTrasladoCfd"
- Me.OnError("El SAT regresó el siguieente mensaje: " & Msg & ". Objeto: ImpuestosTrasladoCfd", New Exception)
- End If
-
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosRetencionesCfd "
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosRetencionesCfd ", New Exception)
- End If
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosCfd"
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosCfd", New Exception)
- End If
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ConceptosCfd"
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ConceptosCfd", New Exception)
- End If
-
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ReceptorCfd"
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ReceptorCfd", New Exception)
- End If
-
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: EmisorCfd"
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: EmisorCfd", New Exception)
- End If
- Else
- Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Comprobante"
- Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Comprobante", New Exception)
- End If
- MensajeErrorCFDI = Retorno
- Return Retorno
- End Function
- Public Function TimbrarFacturaRealVirtualv33(Ventas As Modelos.Factura, UsuarioActual As Usuario) As String
- 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(UsuarioActual.Empresa.CvePAC = 2, UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx")
- Dim ClaveServicio As String = If(UsuarioActual.Empresa.CvePAC = 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 UsuarioActual.Empresa.CvePAC
- Case 2
- UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL"
- Case 4
- UrlServicio = "http://192.168.0.2:8080/ADSistemas/Timbrado.asmx?WSDL"
- End Select
-
- If Not 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"
-
- EmisorRFC = "ZUÑ920208KL4"
- ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key"
- ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer"
-
- Clave = "12345678a"
- TimbraProduccion = False
- Select Case UsuarioActual.Empresa.CvePAC
- 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://192.168.0.2:8080/ADSistemas/Timbrado.asmx?WSDLL"
- End Select
- 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 cfdi As New RVCFDI33.GeneraCFDI()
- Dim complemento As String = ""
- Dim complementoConcepto As String = ""
-
-#End Region
-
-#Region "Verifica"
- Try
- llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave)
- llaveBase64 = Convert.ToBase64String(llaveByte)
- Catch ex As Exception
- Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError)
- 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
-#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.agregarCertificado(ArchivoCertificado)
-#End Region
-
-
-#Region "Comprobante"
-
- cfdi.agregarComprobante33(
- 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.agregarCfdiRelacionados(ObjCFDITimbre.CFDIRelacionados.TipoRelacion)
- For Each uid As String In ObjCFDITimbre.CFDIRelacionados.UUID
- cfdi.agregarCfdiRelacionado(uid)
- Next
- End If
-#Region "Emisor"
- ' cfdi.agregarCfdiRelacionados()
- cfdi.agregarEmisor(EmisorRFC, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal)
-
-#End Region
-
-#Region "Receptor"
-
- cfdi.agregarReceptor(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.agregarConcepto(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.agregarImpuestoConceptoTraslado(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe)
- Else
- cfdi.agregarImpuestoConceptoRetenido(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe)
- End If
- Next
- If concep.CuentaPredial <> "" Then cfdi.agregarCuentaPredial(concep.CuentaPredial)
- If concep.NumeroPedimento <> "" Then cfdi.agregarInformacionAduanera(concep.NumeroPedimento)
- Next
- End If
-
-#End Region
-
- If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E") Then
-
-#Region "Impuestos"
-
- cfdi.agregarImpuestos(ObjCFDITimbre.TotalImpuestosRetenidos, ObjCFDITimbre.TotalImpuestosTrasladados)
-
-#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.agregarRetencion(Ret.Impuesto, Ret.Importe)
- Next
- End If
-
- ''se acumulan los importes
- For Each Tras In ObjCFDITimbre.Traslados
- cfdi.agregarTraslado(Tras.Impuesto, Tras.TipoFactor, Tras.TasaOCuota, Tras.Importe)
- Next
-#End Region
-
-#Region "Impuestos Locales"
-
- If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 Then
- cfdi.agregarImpuestosLocales("1.0", ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe), 0)
- For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales
- If ret.Importe > 0 Then
- cfdi.agregarRetencionesLocales(ret.ImpuestoLocalRetenido, ret.TasaRetencion, ret.Importe)
- End If
- Next
- End If
-
- If Ventas.CveComplementoTimbrado > 0 Then
-
- Select Case Ventas.CveComplementoTimbrado
- Case 5 'INE Proceso Ordinario Directivo Estatal"
- cfdi.agregarIne11("Ordinario", "Directivo Estatal", "0")
-
- cfdi.agregarEntidad(Ventas.ComplementoINE.INEEntidad, "")
- cfdi.agregarIneContabilidad(Ventas.ComplementoINE.INEIdContabilidad)
- Case 6 'INE Proceso Ordinario Ejecutivo Estatal"
- cfdi.agregarIne11("Ordinario", "Ejecutivo Estatal", "0")
-
- cfdi.agregarEntidad(Ventas.ComplementoINE.INEEntidad, "")
- cfdi.agregarIneContabilidad(Ventas.ComplementoINE.INEIdContabilidad)
- Case 7 'INE Proceso Ordinario Ejecutivo Nacional"
-
- cfdi.agregarIne11("Ordinario", "Ejecutivo Nacional", Ventas.ComplementoINE.INEIdContabilidad.ToString)
- Case 8 'INE PreCampaña
- cfdi.agregarIne11(Ventas.ComplementoINE.INETipoProceso, "", "0")
-
- cfdi.agregarEntidad(Ventas.ComplementoINE.INEEntidad, Ventas.ComplementoINE.INETipoComite)
- cfdi.agregarIneContabilidad(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.agregarComercioExterior11(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.agregarComercioExterior11Emisor(If(EmisorRFC.Length >= 12, "", ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CURP))
- cfdi.agregarComercioExterior11Domicilio(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.agregarComercioExterior11Receptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib,
- 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.agregarComercioExterior11Destinatario(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.agregarComercioExterior11Mercancia(concep.NoIdentificacion, concep.FraccionArancelaria, concep.CantidadAduana, concep.UnidadAduana, concep.ValorUnitarioAduana, concep.ValorDolares)
- If concep.DescripcionesEspecificas.Marca <> "" Then
- cfdi.agregarComercioExterior11MercanciaDescripcionesEspeciales(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.agregarPago10(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.agregarPago10DoctoRelacionado(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.agregarPago10Impuestos(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.agregarPago10Retencion(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.agregarPago10Traslado(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.agregarNomina12(ObjCFDITimbre.Nomina.Version, ObjCFDITimbre.Nomina.TipoNomina, ObjCFDITimbre.Nomina.FechaPago.ToString, ObjCFDITimbre.Nomina.FechaInicio, ObjCFDITimbre.Nomina.FechaFin, ObjCFDITimbre.Nomina.NumDiasPagados.ToString, If(ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0, ObjCFDITimbre.Nomina.TotalPercepciones.ToString, ""), If(ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0, ObjCFDITimbre.Nomina.TotalDeducciones.ToString, ""), If(ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0, ObjCFDITimbre.Nomina.TotalOtrosPagos.ToString, ""))
-
- cfdi.agregarNominaEmisor12(ObjCFDITimbre.Emisor.CURP, If(ObjCFDITimbre.Nomina.Receptor.TipoContrato = "99", "", ObjCFDITimbre.Emisor.RegistroPatronal), ObjCFDITimbre.Emisor.RFC)
-
- If UsuarioActual.Empresa.UsaAC Then cfdi.agregarNominaEmisorEntidadSNCF12("IF", "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, "")
- cfdi.agregarNominaPercepciones12(ObjCFDITimbre.Nomina.TotalSueldos.ToString, TotalIndemnizacion, TotalJubilacion, ObjCFDITimbre.Nomina.TotalPercepcionesGravado.ToString, ObjCFDITimbre.Nomina.TotalPercepcionesExento.ToString)
- For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones
- cfdi.agregarNominaPercepcionesPercepcion12(percep.TipoPercepcion, percep.Clave, percep.Concepto, Math.Round(percep.ImporteGravado, 2).ToString, Math.Round(percep.ImporteExento, 2).ToString)
- 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.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then
- For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras
- cfdi.agregarNominaPercepcionesPercepcionHorasExtra12(HoraExtra.Dias, HoraExtra.TipoHoras, HoraExtra.HorasExtra.ToString, HoraExtra.ImportePagado.ToString)
- 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.agregarNominaIncapacidadesIncapacidad12(Incap.DiasIncapacidad, Incap.TipoIncapacidad, Incap.Importe.ToString)
- Next
- End If
-
- If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then
- cfdi.agregarNominaDeducciones12(If(Not ObjCFDITimbre.Nomina.TotalDeduccionesOtras.ToString.ToDecimal > 0, "", ObjCFDITimbre.Nomina.TotalDeduccionesOtras.ToString), If(Not ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos.ToString.ToDecimal > 0, "", Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2).ToString))
- For Each deduc As CFDINominaDeducciones In ObjCFDITimbre.Nomina.Deducciones
- cfdi.agregarNominaDeduccionesDeduccion12(deduc.TipoDeduccion, deduc.Clave, deduc.Concepto, Math.Round(deduc.Importe, 2).ToString)
- 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.agregarNominaOtrosPagosOtroPago12(otpag.TipoOtroPago, otpag.Clave, otpag.Concepto, otpag.Importe.ToString)
- If otpag.TipoOtroPago = "002" Then
- cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12(otpag.Importe.ToString)
- End If
-
- Next
- End If
- End If
-
-
-#Region "Receptor"
-
- cfdi.agregarNominaReceptor12(ObjCFDITimbre.Nomina.Receptor.CURP,
- ObjCFDITimbre.Nomina.Receptor.NSS,
- ObjCFDITimbre.Nomina.Receptor.FechaInicioContrato,
- 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.ToString,
- ObjCFDITimbre.Nomina.Receptor.SDI.ToString,
- ObjCFDITimbre.Nomina.Receptor.CodigoEntidadFederativa)
-
-
- End If
-#End Region
-
-#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.GenerarXMLBase64(llaveBase64, Clave)
- cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML)
- ArchivoGenerado = True
- Catch ex As Exception
- Retorno = cfdi.MensajeError
- MensajeErrorCFDI = cfdi.MensajeError
- End Try
-
-#End Region
- sw.Stop()
- swTiempo.AppendFormat("Guardado: ({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 FechaCertificacion As DateTime
- 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
-
- File.WriteAllText(String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML), cfdi.XmlTimbrado, System.Text.UTF8Encoding.UTF8)
-
-
- If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then
-
- 'Actualiza Estatus Factura
- If Ventas.CveVenta > 0 Then
-
- Dim ObjVentas As New ClsVentas()
- If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=UsuarioActual.Empresa.CvePAC, RFCReceptor:=ObjCFDITimbre.Receptor.RFC, CFDIVersion:="3.3") Then
- Retorno = ""
- Else
- Retorno = "Error"
- End If
- ObjVentas.Dispose()
-
-
- ''Actualiza Cliente (NumeroCuenta)
- 'If Not UsuarioActual.CveEmpresa.Contiene(72, 80, 119) Then
- ' Dim Hilo2 As New System.Threading.Thread(Sub() ActualizaCliente(UsuarioActual.CveUsuario, Ventas.Cliente.NumCtaPago, Ventas.CveMetodoPago, Ventas.CveCliente))
- ' Hilo2.Start()
- 'End If
-
- '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, UsuarioActual.Empresa.CvePAC, 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\")
-
- 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
-
- 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
- End If
- End If
-
- GuardaLogTimbrado(swTiempo.ToString, UsuarioActual.Empresa.CvePAC)
-#End Region
- 'GC.Collect()
- Return Retorno
- End Function
- Public Function TimbrarFacturaGoCFDIv33(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://alterno.gofac.com.mx/cfdi/timbrado.asmx?WSDL" ' alterno
- UrlServicio = "https://cfdi.gofac.com.mx/timbrado.asmx?WSDL"
- 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"
-
- EmisorRFC = "ZUÑ920208KL4"
- ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key"
- ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.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 = "https://cfdi.gofac.com.mx/timbrado.asmx"
- 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
- cfdi.QuitarCerosDecimalDerecha = True ' no limita a 2 decimales, el atributo, de cantidad y precio unitario
-#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.ToString("0.00####"), concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario.ToString("0.00####"), 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 And (ObjCFDITimbre.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.AplicaImpuestosTraslados) 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
-
- '' si el importe de impuestos es mayor a cero o si es tasa con importe = 0, debe de ir el atributo
- If ObjCFDITimbre.AplicaImpuestosTraslados Then
- ''se acumulan los importes
- For Each Tras In ObjCFDITimbre.Traslados
- cfdi.Traslado(Tras.Impuesto, Tras.TipoFactor, Tras.TasaOCuota, Tras.Importe)
- Next
- End If
-
-#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)
- ''''destino
- 'cfdi.CartaPorteUbicacion(ubica.TipoEstacion, ubica.DistanciaRecorridaDestino)
- 'cfdi.CartaPorteDestino(ubica.Destino.IDDestino, ubica.Destino.RFCDestinatario, ubica.Destino.NombreDestinatario, ubica.Destino.NumRegIdTrib, ubica.Destino.ResidenciaFiscal, ubica.Destino.NumEstacion, ubica.Destino.NombreEstacion, ubica.Destino.NavegacionTrafico, ubica.Destino.FechaHoraProgLlegada)
- ' cfdi.CartaPorteDomicilio(ubica.Destino.Domicilio.Calle, ubica.Destino.Domicilio.NumeroExterior, ubica.Destino.Domicilio.NumeroInterior, ubica.Destino.Domicilio.Colonia, ubica.Destino.Domicilio.Localidad, ubica.Destino.Domicilio.Referencia, ubica.Destino.Domicilio.Municipio, ubica.Destino.Domicilio.Estado, ubica.Destino.Domicilio.Pais, ubica.Destino.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.MensajeError
- 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()
-
-#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()
-
- Select Case ObjCFDITimbre.Comprobante.TipoComprobante
- Case "N"
-
- Using ObjNomina2 As New ClsNominas()
-
- If ObjNomina2.UpdateEstatusNomNominas(3, CvePACEspecial, FolioFiscal, ObjCFDITimbre.Comprobante.Fecha, ("01/01/2000").ToDate, ObjCFDITimbre.Nomina.CveNomina, 0, 0, 0, 0, 0, isFiniquito:=Ventas.Timbre.IStimbreFiniquito) Then
- Retorno = ""
- Else
- Retorno = "Error"
- End If
- End Using
-
- Case "T"
-
- Dim objGrales As New ClsGenerales
- If objGrales.UpdateTimbreTimbrado(Ventas.CveTimbre, FolioFiscal, ObjCFDITimbre.Comprobante.Fecha, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, UsuarioActual.Empresa.CvePAC, "3.3") Then
- Retorno = ""
- Else
- Retorno = "Error"
- End If
- objGrales.Dispose()
-
- Using ObjInv As New ClsInventarios()
- If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then
- Retorno = ""
- Else
- Retorno = "Error"
- End If
- End Using
-
-
- Case Else
-
- '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, CFDIVersion:="3.3") 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
- End Select
-
-
- 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 bCBB As Byte() = cfdi.QrCode($"{LigaVerificacionSAT}?re={UsuarioActual.Empresa.RFC}&rr={ObjCFDITimbre.Receptor.RFC}&tt={String.Format("{0,12:F6}", ObjCFDITimbre.Comprobante.Total).Trim()}&id={FolioFiscal}&fe=ELleDg==")
- File.WriteAllBytes(RutaCBB, bCBB)
- bCBB = Nothing
- 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 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 = "rene.molina@adssistemas.mx"
- Dim ClaveServicio As String = "Facturacion2021#"
-
- Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey
- Dim EmisorRFC As String = UsuarioActual.Empresa.RFC
-
- Dim 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)
-
-
- If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then
- EmisorRFC = "ZUÑ920208KL4"
- ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key"
- ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer"
- Clave = "12345678a"
- TimbraProduccion = False
- 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()
-
-#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)
- If cfdi.Xml <> "" Then ArchivoGenerado = True
- Catch ex As Exception
- Retorno = cfdi.MensajeError
- 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.MensajeError), "", cfdi.MensajeError)
-
-#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)
- 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()
-
- Me.UUID = FolioFiscal
- 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, CFDIVersion:="3.3") 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
- Dim objGrales As New ClsGenerales
- If objGrales.UpdateTimbreTimbrado(Ventas.CveTimbre, FolioFiscal, ObjCFDITimbre.Comprobante.Fecha, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, UsuarioActual.Empresa.CvePAC, "3.3") Then
- Retorno = ""
- Else
- Retorno = "Error"
- End If
- objGrales.Dispose()
-
- 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
-
- Dim qrCode As New GoFac.QrCode()
- 'String cadenaqrCode = qrCode.GenerarCadenaQrCode(txtXml.Text)
-
- Dim bCBB As Byte() = qrCode.GenerarQrCode($"{LigaVerificacionSAT}?re={UsuarioActual.Empresa.RFC}&rr={ObjCFDITimbre.Receptor.RFC}&tt={String.Format("{0,12:F6}", ObjCFDITimbre.Comprobante.Total).Trim()}&id={FolioFiscal}&fe=ELleDg==")
- File.WriteAllBytes(RutaCBB, bCBB)
- bCBB = 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
- End Function
Private Function EnviarInformacionPADE(url As String, payload As String, tokenAuth As String) As String
Dim Retorno As String = ""
@@ -3873,11 +1552,13 @@ Public Class Timbrado
For Each Tras In ObjCFDITimbre.Traslados
comprobante.Impuestos.Traslados(y) = New Profact.TimbraCFDI40.ComprobanteImpuestosTraslado()
- comprobante.Impuestos.Traslados(y).Base = Tras.Base
+ comprobante.Impuestos.Traslados(y).Base = Tras.Base.RoundSQL(NumDecimalesImporte)
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.RoundSQL(6)
+ comprobante.Impuestos.Traslados(y).TasaOCuotaSpecified = True
+ comprobante.Impuestos.Traslados(y).Importe = Tras.Importe.RoundSQL(NumDecimalesImporte)
+ comprobante.Impuestos.Traslados(y).ImporteSpecified = True
y += 1
Next
@@ -5876,1292 +3557,7 @@ Public Class Timbrado
ArchivoW.Close()
ArchivoW.Dispose()
End Sub
- Public Function TimbrarFacturaProFactv33(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.TimbraCFDI33.Conector(AmbienteProductivo)
- Dim comprobante As New Profact.TimbraCFDI33.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 = "3.3"
- 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.TimbraCFDI33.ComprobanteCfdiRelacionados
- CfdiRelacionados.CfdiRelacionado = New Profact.TimbraCFDI33.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.TimbraCFDI33.ComprobanteCfdiRelacionadosCfdiRelacionado With {.UUID = uid}
- i += 1
- Next
- CfdiRelacionados.TipoRelacion = ObjCFDITimbre.CFDIRelacionados.TipoRelacion
- comprobante.CfdiRelacionados = CfdiRelacionados
- End If
-
-#Region "Emisor"
- comprobante.Emisor = New Profact.TimbraCFDI33.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.TimbraCFDI33.ComprobanteReceptor()
- comprobante.Receptor.Rfc = ObjCFDITimbre.Receptor.RFC
- comprobante.Receptor.Nombre = ObjCFDITimbre.Receptor.Nombre
- comprobante.Receptor.UsoCFDI = ObjCFDITimbre.Receptor.UsoCFDI
-
-#End Region
-
-#End Region
-
-#Region "Conceptos"
-
- 'Nodo conceptos, se agregan los PS
- comprobante.Conceptos = New Profact.TimbraCFDI33.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.TimbraCFDI33.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.TimbraCFDI33.ComprobanteConceptoCuentaPredial() With {.Numero = concep.CuentaPredial}
- If concep.NumeroPedimento <> "" Then
- comprobante.Conceptos(i).InformacionAduanera = New Profact.TimbraCFDI33.ComprobanteConceptoInformacionAduanera(1) {} 'solo un codigo por el momento
- comprobante.Conceptos(i).InformacionAduanera(0) = New Profact.TimbraCFDI33.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.TimbraCFDI33.ComprobanteConceptoImpuestos()
- comprobante.Conceptos(i).Impuestos.Traslados = New Profact.TimbraCFDI33.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.TimbraCFDI33.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.TimbraCFDI33.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.TimbraCFDI33.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.TimbraCFDI33.ComprobanteImpuestos()
- comprobante.Impuestos.Traslados = New Profact.TimbraCFDI33.ComprobanteImpuestosTraslado(ObjCFDITimbre.Traslados.Count - 1) {}
-
- Dim y As Integer = 0
-
- For Each Tras In ObjCFDITimbre.Traslados
- comprobante.Impuestos.Traslados(y) = New Profact.TimbraCFDI33.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.TimbraCFDI33.ComprobanteImpuestosRetencion(ObjCFDITimbre.Retenciones.Count - 1) {}
-
- Dim w As Integer = 0
-
- For Each Ret In ObjCFDITimbre.Retenciones
- comprobante.Impuestos.Retenciones(w) = New Profact.TimbraCFDI33.ComprobanteImpuestosRetencion()
- comprobante.Impuestos.Retenciones(w).Impuesto = Ret.Impuesto
- comprobante.Impuestos.Retenciones(w).Importe = Ret.Importe
- 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.TimbraCFDI33.Complementos.Pagos10.Pagos()
- ComPag.Pago = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPago(0) {}
- ComPag.Pago(0) = New Profact.TimbraCFDI33.Complementos.Pagos10.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
- ComPag.Pago(0).Monto = ObjCFDITimbre.ComplementoPagos.Monto
- 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).ToString
- End If
- If ObjCFDITimbre.ComplementoPagos.CadPago <> "" Then
- ComPag.Pago(0).CadPago = ObjCFDITimbre.ComplementoPagos.CadPago
- End If
- If ObjCFDITimbre.ComplementoPagos.SelloPago <> "" Then
- ComPag.Pago(0).SelloPago = System.Text.Encoding.Default.GetBytes(ObjCFDITimbre.ComplementoPagos.SelloPago).ToString
- End If
-
- If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then
- ComPag.Pago(0).DoctoRelacionado = New Profact.TimbraCFDI33.Complementos.Pagos10.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.TimbraCFDI33.Complementos.Pagos10.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).TipoCambioDRSpecified = 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
-
- ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True
- ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado
-
- ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsolutoSpecified = True
- ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto
- i += 1
- Next
-
- 'Estos impuestos aplicarían para anticipos
- If ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then
- ComPag.Pago(0).Impuestos = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestos(0) {}
- ComPag.Pago(0).Impuestos(0) = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestos()
- ComPag.Pago(0).Impuestos(0).TotalImpuestosRetenidosSpecified = True
- ComPag.Pago(0).Impuestos(0).TotalImpuestosRetenidos = ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos
- ComPag.Pago(0).Impuestos(0).TotalImpuestosTrasladadosSpecified = True
- ComPag.Pago(0).Impuestos(0).TotalImpuestosTrasladados = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados
-
- If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then
- Dim x As Integer
- ComPag.Pago(0).Impuestos(0).Retenciones = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestosRetencion((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).Impuestos(0).Retenciones(x) = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestosRetencion()
- ComPag.Pago(0).Impuestos(0).Retenciones(x).Impuesto = Ret.Impuesto
- ComPag.Pago(0).Impuestos(0).Retenciones(x).Importe = 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).Impuestos(0).Traslados = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestosTraslado((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).Impuestos(0).Traslados(x) = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestosTraslado()
- ComPag.Pago(0).Impuestos(0).Traslados(x).Impuesto = Tra.Impuesto
- ComPag.Pago(0).Impuestos(0).Traslados(x).TipoFactor = Tra.TipoFactor
- ComPag.Pago(0).Impuestos(0).Traslados(x).TasaOCuota = Tra.TasaOCuota.ToString
- ComPag.Pago(0).Impuestos(0).Traslados(x).Importe = Tra.Importe
- x += 1
- Next
- End If
-
- End If
-
-
- Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces()
- nsComp.Add("pago10", "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 = concep.BienesTransp
- 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 = concep.Embalaje
-
- End If
-
- If concep.DescripEmbalaje <> "" Then 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
- If concep.UUIDComercioExt <> "" Then 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
-
-
- '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.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallista = New Profact.TimbraCFDI33.Complementos.Detallista.detallista
- ' detallista.type = "SimpleInvoiceType"
- ' detallista.contentVersion = "1.3.1"
- ' detallista.documentStructureVersion = "AMC8.1"
- ' detallista.documentStatus = Profact.TimbraCFDI33.Complementos.Detallista.detallistaDocumentStatus.ORIGINAL
-
- ' detallista.DeliveryNote = New Profact.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaRequestForPaymentIdentification
- ' detallista.requestForPaymentIdentification.entityType = Profact.TimbraCFDI33.Complementos.Detallista.detallistaRequestForPaymentIdentificationEntityType.INVOICE
-
- ' detallista.specialInstruction = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaSpecialInstruction((1)) {}
- ' detallista.specialInstruction(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaSpecialInstruction
- ' detallista.specialInstruction(0).code = Profact.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaOrderIdentification
- ' detallista.orderIdentification.referenceIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaOrderIdentificationReferenceIdentification((1)) {}
- ' detallista.orderIdentification.referenceIdentification(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaOrderIdentificationReferenceIdentification
- ' detallista.orderIdentification.referenceIdentification(0).type = Profact.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaReferenceIdentification((1)) {}
- ' detallista.AdditionalInformation(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaReferenceIdentification
- ' detallista.AdditionalInformation(0).type = Profact.TimbraCFDI33.Complementos.Detallista.detallistaReferenceIdentificationType.ATZ
- ' detallista.AdditionalInformation(0).Value = Ventas.Det_ContraRecibo
-
- ' detallista.DeliveryNote = New Profact.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaBuyer
- ' detallista.buyer.gln = Ventas.Cliente.Detallista_GLNComprador
- ' detallista.buyer.contactInformation = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaBuyerContactInformation
- ' detallista.buyer.contactInformation.personOrDepartmentName = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaBuyerContactInformationPersonOrDepartmentName
- ' detallista.buyer.contactInformation.personOrDepartmentName.text = Ventas.Cliente.Detallista_Departamento
-
- ' detallista.seller = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaSeller
- ' detallista.seller.gln = Ventas.Cliente.Detallista_GLNVendedor
- ' detallista.seller.alternatePartyIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaSellerAlternatePartyIdentification
- ' detallista.seller.alternatePartyIdentification.type = Profact.TimbraCFDI33.Complementos.Detallista.detallistaSellerAlternatePartyIdentificationType.SELLER_ASSIGNED_IDENTIFIER_FOR_A_PARTY
- ' detallista.seller.alternatePartyIdentification.Value = Ventas.Cliente.Detallista_NumProveedor
-
- ' 'detallista.shipTo = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaShipTo
- ' 'detallista.shipTo.gln = "0000000000000"
- ' 'detallista.shipTo.nameAndAddress = New Profact.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTerms
- ' detallista.paymentTerms.netPayment = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTermsNetPayment
- ' detallista.paymentTerms.netPayment.paymentTimePeriod = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriod
- ' detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriodTimePeriodDue
- ' detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue.timePeriod = Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriodTimePeriodDueTimePeriod.DAYS
- ' detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue.value = "0"
-
- ' detallista.paymentTerms.discountPayment = New Profact.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaCurrency((1)) {}
- ' detallista.currency(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrency
- ' detallista.currency(0).currencyISOCode = If(Ventas.CveMoneda = 1, Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrencyCurrencyISOCode.MXN, Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrencyCurrencyISOCode.USD)
- ' detallista.currency(0).currencyFunction = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrencyCurrencyFunction((1)) {}
- ' detallista.currency(0).currencyFunction(0) = Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrencyCurrencyFunction.BILLING_CURRENCY
- ' detallista.currency(0).rateOfChangeSpecified = True
- ' detallista.currency(0).rateOfChange = 1
-
- ' detallista.allowanceCharge = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaAllowanceCharge(1) {}
- ' detallista.allowanceCharge(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaAllowanceCharge
- ' detallista.allowanceCharge(0).monetaryAmountOrPercentage = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentage
- ' detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentageRate
- ' detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate.base = Profact.TimbraCFDI33.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.TimbraCFDI33.ComprobanteConcepto In comprobante.Conceptos
- ' articuloCounter = (articuloCounter + 1)
- ' Next
- ' detallista.lineItem = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItem((articuloCounter)) {}
- ' Dim counter As Integer = 0
- ' For Each concepto As Profact.TimbraCFDI33.ComprobanteConcepto In comprobante.Conceptos
- ' detallista.lineItem(counter) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItem
- ' detallista.lineItem(counter).type = "SimpleInvoiceLineItemType"
- ' detallista.lineItem(counter).number = (counter + 1).ToString
- ' detallista.lineItem(counter).tradeItemIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemIdentification
- ' detallista.lineItem(counter).tradeItemIdentification.gtin = comprobante.Conceptos(counter).NoIdentificacion
- ' detallista.lineItem(counter).alternateTradeItemIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentification(1) {}
- ' detallista.lineItem(counter).alternateTradeItemIdentification(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentification
- ' detallista.lineItem(counter).alternateTradeItemIdentification(0).type = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentificationType
- ' detallista.lineItem(counter).alternateTradeItemIdentification(0).type = Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.BUYER_ASSIGNED
- ' detallista.lineItem(counter).tradeItemDescriptionInformation = New Profact.TimbraCFDI33.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.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAditionalQuantity(1) {}
- ' detallista.lineItem(counter).aditionalQuantity(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAditionalQuantity
- ' detallista.lineItem(counter).aditionalQuantity(0).QuantityType = Profact.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaLineItemGrossPrice
- ' detallista.lineItem(counter).grossPrice.Amount = comprobante.Conceptos(counter).ValorUnitario
-
- ' detallista.lineItem(counter).netPrice = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemNetPrice
- ' detallista.lineItem(counter).netPrice.Amount = comprobante.Conceptos(counter).ValorUnitario
-
- ' detallista.lineItem(counter).AdditionalInformation = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAdditionalInformation
- ' detallista.lineItem(counter).AdditionalInformation.referenceIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAdditionalInformationReferenceIdentification
- ' detallista.lineItem(counter).AdditionalInformation.referenceIdentification.type = Profact.TimbraCFDI33.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.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemTaxInformation(1) {}
- ' detallista.lineItem(counter).tradeItemTaxInformation(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemTaxInformation
- ' detallista.lineItem(counter).tradeItemTaxInformation(0).taxTypeDescription = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription
- ' detallista.lineItem(counter).tradeItemTaxInformation(0).taxTypeDescription = Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.VAT
- ' detallista.lineItem(counter).tradeItemTaxInformation(0).tradeItemTaxAmount = New Profact.TimbraCFDI33.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.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTotalLineAmount
- ' detallista.lineItem(counter).totalLineAmount.grossAmount = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTotalLineAmountGrossAmount
- ' detallista.lineItem(counter).totalLineAmount.grossAmount.Amount = comprobante.Conceptos(counter).Importe
- ' detallista.lineItem(counter).totalLineAmount.netAmount = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTotalLineAmountNetAmount
- ' detallista.lineItem(counter).totalLineAmount.netAmount.Amount = comprobante.Conceptos(counter).Importe
- ' counter = (counter + 1)
- ' Next
- ' detallista.totalAmount = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaTotalAmount
- ' detallista.totalAmount.Amount = comprobante.SubTotal
-
- ' detallista.TotalAllowanceCharge = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaTotalAllowanceCharge(1) {}
- ' detallista.TotalAllowanceCharge(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaTotalAllowanceCharge
- ' detallista.TotalAllowanceCharge(0).allowanceOrChargeType = Profact.TimbraCFDI33.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.TimbraCFDI33.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.TimbraCFDI33.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, CFDIVersion:="3.3") 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
- End If
- Else
- Retorno = resultadoTimbre.Detalle
- MensajeErrorCFDI = resultadoTimbre.Detalle
- End If
-
- End If
-
- GuardaLogTimbrado(swTiempo.ToString, UsuarioActual.Empresa.CvePAC)
- Return Retorno
- End Function
#Region "F U N C I O N E S"
Private Function obtenerAtributo(cadena_xml As String, nodo As String, nombre_atributo As String) As String
@@ -7186,12 +3582,7 @@ Public Class Timbrado
Return ""
End Try
End Function
- Private Function TimbrarFacturaProFact(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 = 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)
diff --git a/Ashx/E119.ashx b/Ashx/E119.ashx
index 86dfc5f45..e7e3a11f0 100644
--- a/Ashx/E119.ashx
+++ b/Ashx/E119.ashx
@@ -100,18 +100,18 @@ Public Class E119 : Implements IHttpHandler
Try
Dim Metodo = If(context.Request("Metodo") = Nothing, "", context.Request("Metodo").ToString())
'OBTENER EXISTENCIAS
- If Metodo = "BASF_POG40" Then
- context.Response.ContentType = "application/json"
- Dim Auth = ValidarSolicitud(context)
+ 'If Metodo = "BASF_POG40" Then
+ ' context.Response.ContentType = "application/json"
+ ' Dim Auth = ValidarSolicitud(context)
- If Auth.IsSucces Then
- retorno = ConsultaDatos(context)
- Else
- context.Response.StatusCode = Auth.StatusCode
- retorno = JsonConvert.SerializeObject(Auth.ErrorMessage)
- End If
+ ' If Auth.IsSucces Then
+ ' retorno = ConsultaDatos(context)
+ ' Else
+ ' context.Response.StatusCode = Auth.StatusCode
+ ' retorno = JsonConvert.SerializeObject(Auth.ErrorMessage)
+ ' End If
- End If
+ 'End If
context.Response.Write(retorno)
diff --git a/Bancos/IE.aspx.vb b/Bancos/IE.aspx.vb
index aff25f863..4067c7eb5 100644
--- a/Bancos/IE.aspx.vb
+++ b/Bancos/IE.aspx.vb
@@ -4778,7 +4778,8 @@ Partial Class Bancos_IE
filemove = fileItem.filename
Next
- If ObjEventoBitacora.AddEventoBitacora(TxtEventoDescripcion.Text.Trim, String.Format("{0}", FileExtension), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveIE:=CveIE) Then
+
+ If ObjEventoBitacora.AddEventoBitacora(TxtEventoDescripcion.Text.Trim, String.Format(".{0}", FileExtension), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveIE:=CveIE) Then
If filemove <> "" Then
filemove.FilesMove(String.Format("OI{0}", ObjEventoBitacora.CveEvento.ToString), String.Format("{0}OI", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False)
End If
diff --git a/Bancos/RepEgresosSinComprobante.aspx b/Bancos/RepEgresosSinComprobante.aspx
index 7091a53bf..54ffdee63 100644
--- a/Bancos/RepEgresosSinComprobante.aspx
+++ b/Bancos/RepEgresosSinComprobante.aspx
@@ -13,14 +13,11 @@