timbrado 4.0, complementos de pago

This commit is contained in:
2022-03-07 12:59:03 -07:00
parent 9410a8f4b0
commit 0414862fcd
3 changed files with 148 additions and 74 deletions

View File

@@ -395,7 +395,8 @@ End Class
<Serializable> <Serializable>
Public Class CFDIRetenciones Public Class CFDIRetenciones
Public Property Impuesto As String Public Property Impuesto As String
Public Property Importe As Double Public Property Importe As Decimal
Public Property TasaOCuota As String
End Class End Class
@@ -439,8 +440,8 @@ Public Class CFDIComplementoPagos
Public Property FormaDePagoP As String = "" Public Property FormaDePagoP As String = ""
Public Property MonedaP As String = "" Public Property MonedaP As String = ""
Public Property NumOperacion As String = "" Public Property NumOperacion As String = ""
Public Property TipoCambioP As Double = 0 Public Property TipoCambioP As Decimal = 0
Public Property Monto As Double Public Property Monto As Decimal
Public Property RfcEmisorCtaOrd As String = "" Public Property RfcEmisorCtaOrd As String = ""
Public Property NomBancoOrdExt As String = "" Public Property NomBancoOrdExt As String = ""
Public Property CtaOrdenante As String = "" Public Property CtaOrdenante As String = ""
@@ -453,7 +454,7 @@ Public Class CFDIComplementoPagos
Public Property DocumentosRelacionados As List(Of CFDIComplementoPagosDocsRelacionados) Public Property DocumentosRelacionados As List(Of CFDIComplementoPagosDocsRelacionados)
Public Property Impuestos As List(Of CFDIConceptosImpuestos) Public Property Impuestos As List(Of CFDIConceptosImpuestos)
Public ReadOnly Property TotalImpuestosRetenidos As Double Public ReadOnly Property TotalImpuestosRetenidos As Decimal
Get Get
Return (From c In Impuestos Return (From c In Impuestos
Where c.TrasladooRetencion = "R" Where c.TrasladooRetencion = "R"
@@ -461,7 +462,7 @@ Public Class CFDIComplementoPagos
End Get End Get
End Property End Property
Public ReadOnly Property TotalImpuestosTrasladados As Double Public ReadOnly Property TotalImpuestosTrasladados As Decimal
Get Get
Return (From c In Impuestos Return (From c In Impuestos
Where c.TrasladooRetencion = "T" Where c.TrasladooRetencion = "T"
@@ -469,6 +470,20 @@ Public Class CFDIComplementoPagos
End Get End Get
End Property End Property
Public ReadOnly Property TotalImpuestosTrasladados(Impuesto As String, Tasa As Decimal, Optional Dato As String = "Base") As Decimal
Get
If Dato = "Base" Then
Return (From c In Traslados Where c.Impuesto = Impuesto And c.TasaOCuota = Tasa
Select c.Base).Sum()
Else
Return (From c In Traslados Where c.Impuesto = Impuesto And c.TasaOCuota = Tasa
Select c.Importe).Sum()
End If
End Get
End Property
Public ReadOnly Property TotalPagos As Decimal Public ReadOnly Property TotalPagos As Decimal
Get Get
Return (From c In DocumentosRelacionados Return (From c In DocumentosRelacionados
@@ -476,6 +491,8 @@ Public Class CFDIComplementoPagos
End Get End Get
End Property End Property
Sub New() Sub New()
DocumentosRelacionados = New List(Of CFDIComplementoPagosDocsRelacionados) DocumentosRelacionados = New List(Of CFDIComplementoPagosDocsRelacionados)
@@ -534,7 +551,6 @@ Public Class CFDIComplementoPagos
tRetorno = Nothing tRetorno = Nothing
Return TTraslados Return TTraslados
End Get End Get
End Property End Property
@@ -548,6 +564,7 @@ Public Class CFDIComplementoPagosDocsRelacionados
Public Property MonedaDR As String = "" Public Property MonedaDR As String = ""
Public Property MetodoDePagoDR As String = "" Public Property MetodoDePagoDR As String = ""
Public Property TipoCambioDR As Decimal Public Property TipoCambioDR As Decimal
Public Property EquivalenciaDR As Decimal = 1
Public Property NumParcialidad As Integer = 1 Public Property NumParcialidad As Integer = 1
Public Property ImpSaldoAnt As Decimal Public Property ImpSaldoAnt As Decimal
Public Property ImpPagado As Decimal Public Property ImpPagado As Decimal

View File

@@ -1091,9 +1091,9 @@ Public Class ClsBancos
End If End If
Timbre = Timbrado.PreparaTimbrePago40(RFCEmpresa, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal, Timbre = Timbrado.PreparaTimbrePago40(RFCEmpresa, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal,
RFCCliente, dr("NombreCliente").ToString, RFCCliente, dr("NombreCliente").ToString, Serie, Folio.ToString, FechaTimbrado, Cuentapago, RFCCliente, dr("NombreCliente").ToString, dr("ClienteCP").ToString, dr("CodigoRegimenFiscal").ToString, Serie, Folio.ToString, FechaTimbrado, Cuentapago,
dr("FechaDocumento").ToString.ToDate, dr("ClaveFormaPagoSAT").ToString, dr("AbreviaturaSAT").ToString, dr("VentasTotalPagado").ToString.ToDecimal, dr("FechaDocumento").ToString.ToDate, dr("ClaveFormaPagoSAT").ToString, dr("AbreviaturaSAT").ToString, dr("VentasTotalPagado").ToString.ToDecimal,
UsuarioActual.Empresa.CP.ToString, CuentaBeneficiario, dr("TipoCambioPago").ToString.ToDecimal, dttpagos, dttpagosimpuestos, CFDIRelacionado:=CFDIRelacionado, EsCancelacion:=False) UsuarioActual.Empresa.CP.ToString, CuentaBeneficiario, dr("TipoCambioPago").ToString.ToDecimal, dttpagos, dttpagosimpuestos, CFDIRelacionado:=CFDIRelacionado)
Else Else
Timbre = Timbrado.PreparaTimbrePago(RFCEmpresa, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal, Timbre = Timbrado.PreparaTimbrePago(RFCEmpresa, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal,

View File

@@ -897,8 +897,8 @@ Public Class Timbrado
Public Function PreparaTimbrePago(EmisorRFC As String, EmisorNombre As String, EmisorRegimenFiscal As String, Public Function PreparaTimbrePago(EmisorRFC As String, EmisorNombre As String, EmisorRegimenFiscal As String,
ReceptorRFC As String, ReceptorNombre As String, Serie As String, Folio As String, FechaTimbrado As DateTime, ReceptorRFC As String, ReceptorNombre As String, Serie As String, Folio As String, FechaTimbrado As DateTime,
CuentaPago As String, FechaPago As DateTime, FormaPago As String, MonedaPago As String, Monto As Double, LugarExpedicion As String, CuentaPago As String, FechaPago As DateTime, FormaPago As String, MonedaPago As String, Monto As Decimal, LugarExpedicion As String,
CuentaBeneficiario As String, TipoCambioP As Double, dttpagos As Data.DataTable, CuentaBeneficiario As String, TipoCambioP As Decimal, dttpagos As Data.DataTable,
Optional UsoCFDI As String = "P01", Optional CFDIRelacionado As String = "", Optional EsCancelacion As Boolean = False) As CFDITimbre Optional UsoCFDI As String = "P01", Optional CFDIRelacionado As String = "", Optional EsCancelacion As Boolean = False) As CFDITimbre
' validación extra para cuando es cancelación requiere el folio relacionado ' validación extra para cuando es cancelación requiere el folio relacionado
If EsCancelacion AndAlso CFDIRelacionado = "" Then If EsCancelacion AndAlso CFDIRelacionado = "" Then
@@ -956,7 +956,7 @@ Public Class Timbrado
Dim ImporteCancelacion As Decimal = 1 Dim ImporteCancelacion As Decimal = 1
Dim MonedaCancelacion As String = "MXN" Dim MonedaCancelacion As String = "MXN"
Dim TipoCambioCancelacion As Double = 1 Dim TipoCambioCancelacion As Decimal = 1
If EsCancelacion Then MonedaPago = MonedaCancelacion If EsCancelacion Then MonedaPago = MonedaCancelacion
'como registra un peso por cada fatura que se cancele, se tiene que multiplicar por el numero de facturas, para que se pueda emitir el timbre 'como registra un peso por cada fatura que se cancele, se tiene que multiplicar por el numero de facturas, para que se pueda emitir el timbre
If dttpagos IsNot Nothing AndAlso dttpagos.Rows.Count > 0 Then ImporteCancelacion = ImporteCancelacion * dttpagos.Rows.Count If dttpagos IsNot Nothing AndAlso dttpagos.Rows.Count > 0 Then ImporteCancelacion = ImporteCancelacion * dttpagos.Rows.Count
@@ -965,7 +965,7 @@ Public Class Timbrado
Timbre.ComplementoPagos.FechaPago = FechaPago Timbre.ComplementoPagos.FechaPago = FechaPago
Timbre.ComplementoPagos.FormaDePagoP = FormaPago Timbre.ComplementoPagos.FormaDePagoP = FormaPago
Timbre.ComplementoPagos.MonedaP = MonedaPago Timbre.ComplementoPagos.MonedaP = MonedaPago
Timbre.ComplementoPagos.Monto = If(EsCancelacion, ImporteCancelacion, Monto) Timbre.ComplementoPagos.Monto = If(EsCancelacion, ImporteCancelacion, Monto).RoundSQL
Timbre.ComplementoPagos.TipoCambioP = If(EsCancelacion, TipoCambioCancelacion, TipoCambioP) Timbre.ComplementoPagos.TipoCambioP = If(EsCancelacion, TipoCambioCancelacion, TipoCambioP)
@@ -1029,11 +1029,7 @@ Public Class Timbrado
Serie As String, Folio As String, FechaTimbrado As DateTime, Serie As String, Folio As String, FechaTimbrado As DateTime,
CuentaPago As String, FechaPago As DateTime, FormaPago As String, MonedaPago As String, Monto As Decimal, LugarExpedicion As String, CuentaPago As String, FechaPago As DateTime, FormaPago As String, MonedaPago As String, Monto As Decimal, LugarExpedicion As String,
CuentaBeneficiario As String, TipoCambioP As Decimal, dttpagos As Data.DataTable, dttpagosimpuestos As DataTable, CuentaBeneficiario As String, TipoCambioP As Decimal, dttpagos As Data.DataTable, dttpagosimpuestos As DataTable,
Optional UsoCFDI As String = "P01", Optional CFDIRelacionado As String = "", Optional EsCancelacion As Boolean = False) As CFDITimbre Optional UsoCFDI As String = "CP01", Optional CFDIRelacionado As String = "") As CFDITimbre
' validación extra para cuando es cancelación requiere el folio relacionado
If EsCancelacion AndAlso CFDIRelacionado = "" Then
Return Nothing
End If
Dim Timbre As New CFDITimbre Dim Timbre As New CFDITimbre
@@ -1089,8 +1085,8 @@ Public Class Timbrado
Dim ImporteCancelacion As Decimal = 1 Dim ImporteCancelacion As Decimal = 1
Dim MonedaCancelacion As String = "MXN" Dim MonedaCancelacion As String = "MXN"
Dim TipoCambioCancelacion As Double = 1 Dim TipoCambioCancelacion As Decimal = 1
If EsCancelacion Then MonedaPago = MonedaCancelacion
'como registra un peso por cada fatura que se cancele, se tiene que multiplicar por el numero de facturas, para que se pueda emitir el timbre 'como registra un peso por cada fatura que se cancele, se tiene que multiplicar por el numero de facturas, para que se pueda emitir el timbre
If dttpagos IsNot Nothing AndAlso dttpagos.Rows.Count > 0 Then ImporteCancelacion = ImporteCancelacion * dttpagos.Rows.Count If dttpagos IsNot Nothing AndAlso dttpagos.Rows.Count > 0 Then ImporteCancelacion = ImporteCancelacion * dttpagos.Rows.Count
Timbre.ComplementoPagos.CtaOrdenante = CuentaPago Timbre.ComplementoPagos.CtaOrdenante = CuentaPago
@@ -1098,8 +1094,8 @@ Public Class Timbrado
Timbre.ComplementoPagos.FechaPago = FechaPago Timbre.ComplementoPagos.FechaPago = FechaPago
Timbre.ComplementoPagos.FormaDePagoP = FormaPago Timbre.ComplementoPagos.FormaDePagoP = FormaPago
Timbre.ComplementoPagos.MonedaP = MonedaPago Timbre.ComplementoPagos.MonedaP = MonedaPago
Timbre.ComplementoPagos.Monto = If(EsCancelacion, ImporteCancelacion, Monto) Timbre.ComplementoPagos.Monto = Monto.RoundSQL
Timbre.ComplementoPagos.TipoCambioP = If(EsCancelacion, TipoCambioCancelacion, TipoCambioP) Timbre.ComplementoPagos.TipoCambioP = TipoCambioP
Dim VentaFolioFiscal, VentaSerie, VentaFolio, VentaAbreviaturaSAT, VentaMetodoPago, ObjetoImpuesto As String Dim VentaFolioFiscal, VentaSerie, VentaFolio, VentaAbreviaturaSAT, VentaMetodoPago, ObjetoImpuesto As String
@@ -1123,7 +1119,9 @@ Public Class Timbrado
PorcentajeIEPS = dr("PorcentajeIEPS").ToString.ToDecimal PorcentajeIEPS = dr("PorcentajeIEPS").ToString.ToDecimal
ObjetoImpuesto = dr("ObjetoImpuesto").ToString ObjetoImpuesto = dr("ObjetoImpuesto").ToString
' si la moneda es igual, se omite el tipo de cambio de la venta ' si la moneda es igual, se omite el tipo de cambio de la venta
If MonedaPago = VentaAbreviaturaSAT Then VentaTipoCambio = 0 If MonedaPago = VentaAbreviaturaSAT Then
VentaTipoCambio = 1
End If
'condiciones especiales para el pago en pesos, facturas en moneda extranjera 'condiciones especiales para el pago en pesos, facturas en moneda extranjera
If MonedaPago = "MXN" AndAlso VentaAbreviaturaSAT <> "MXN" Then If MonedaPago = "MXN" AndAlso VentaAbreviaturaSAT <> "MXN" Then
@@ -1136,20 +1134,21 @@ Public Class Timbrado
.Folio = VentaFolio, .Folio = VentaFolio,
.MonedaDR = VentaAbreviaturaSAT, .MonedaDR = VentaAbreviaturaSAT,
.MetodoDePagoDR = VentaMetodoPago, .MetodoDePagoDR = VentaMetodoPago,
.ImpPagado = If(EsCancelacion, 1, VentaImportePago), .ImpPagado = VentaImportePago,
.ImpSaldoInsoluto = If(EsCancelacion, VentaImporteSaldoAnterior - 1, VentaImporteSaldoInsoluto), .ImpSaldoInsoluto = VentaImporteSaldoInsoluto,
.ImpSaldoAnt = VentaImporteSaldoAnterior, .ImpSaldoAnt = VentaImporteSaldoAnterior,
.TipoCambioDR = VentaTipoCambio, .TipoCambioDR = VentaTipoCambio,
.EquivalenciaDR = VentaTipoCambio,
.NumParcialidad = VentaNumParcialidad, .NumParcialidad = VentaNumParcialidad,
.ObjetoImpuesto = OBjetoImpuesto} 'If(drr("MetodoPago").ToString = "PUE", 0, drr("NumParcialidad").ToString.ToEntero)} .ObjetoImpuesto = ObjetoImpuesto} 'If(drr("MetodoPago").ToString = "PUE", 0, drr("NumParcialidad").ToString.ToEntero)}
For Each drp As DataRow In dttpagosimpuestos.FiltraParametros(String.Format("FolioFiscal = '{0}'", VentaFolioFiscal.ToLower)).Rows For Each drp As DataRow In dttpagosimpuestos.FiltraParametros(String.Format("FolioFiscal = '{0}'", VentaFolioFiscal.ToLower)).Rows
doc.Impuestos.Add(New CFDIConceptosImpuestos With { doc.Impuestos.Add(New CFDIConceptosImpuestos With {
.TrasladooRetencion = drp("Tipo").ToString, .TrasladooRetencion = drp("Tipo").ToString,
.Base = drp("Base").ToString.ToDecimal, .Base = drp("Base").ToString.ToDecimal.RoundSQL,
.TasaOCuota = drp("PorcentajeImpuesto").ToString().ToDecimal, .TasaOCuota = drp("PorcentajeImpuesto").ToString().ToDecimal,
.Impuesto = drp("TipoImpuesto").ToString, .Impuesto = drp("TipoImpuesto").ToString,
.Importe = drp("Importe").ToString().ToDecimal .Importe = drp("Importe").ToString().ToDecimal.RoundSQL
} }
) )
@@ -1353,7 +1352,7 @@ Public Class Timbrado
For Each Ret In ObjCFDITimbre.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)) 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.ToDecimal) Msg = CFDi.ImpuestosRetencionesCfd(clbImp, Ret.Importe)
Next Next
If Not HasErrorRetenciones Then If Not HasErrorRetenciones Then
@@ -3700,6 +3699,10 @@ Public Class Timbrado
#End Region #End Region
#Region "Receptor" #Region "Receptor"
If ObjCFDITimbre.Receptor.RFC.ToUpper.Contiene("XAXX010101000", "XEXX010101000") Then 'Condición del SAT. CFDI40149
ObjCFDITimbre.Receptor.DomicilioFiscalReceptor = ObjCFDITimbre.Comprobante.LugarExpedicion
End If
comprobante.Receptor = New Profact.TimbraCFDI40.ComprobanteReceptor() comprobante.Receptor = New Profact.TimbraCFDI40.ComprobanteReceptor()
comprobante.Receptor.Rfc = ObjCFDITimbre.Receptor.RFC comprobante.Receptor.Rfc = ObjCFDITimbre.Receptor.RFC
comprobante.Receptor.Nombre = ObjCFDITimbre.Receptor.Nombre comprobante.Receptor.Nombre = ObjCFDITimbre.Receptor.Nombre
@@ -3824,7 +3827,7 @@ Public Class Timbrado
For Each Ret In ObjCFDITimbre.Retenciones For Each Ret In ObjCFDITimbre.Retenciones
comprobante.Impuestos.Retenciones(w) = New Profact.TimbraCFDI40.ComprobanteImpuestosRetencion() comprobante.Impuestos.Retenciones(w) = New Profact.TimbraCFDI40.ComprobanteImpuestosRetencion()
comprobante.Impuestos.Retenciones(w).Impuesto = Ret.Impuesto comprobante.Impuestos.Retenciones(w).Impuesto = Ret.Impuesto
comprobante.Impuestos.Retenciones(w).Importe = Ret.Importe.ToDecimal comprobante.Impuestos.Retenciones(w).Importe = Ret.Importe
w += 1 w += 1
Next Next
@@ -4048,9 +4051,9 @@ Public Class Timbrado
ComPag.Pago(0).FechaPago = ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss").ToDate() ComPag.Pago(0).FechaPago = ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss").ToDate()
ComPag.Pago(0).FormaDePagoP = ObjCFDITimbre.ComplementoPagos.FormaDePagoP ComPag.Pago(0).FormaDePagoP = ObjCFDITimbre.ComplementoPagos.FormaDePagoP
ComPag.Pago(0).MonedaP = ObjCFDITimbre.ComplementoPagos.MonedaP ComPag.Pago(0).MonedaP = ObjCFDITimbre.ComplementoPagos.MonedaP
ComPag.Pago(0).TipoCambioPSpecified = If(ObjCFDITimbre.ComplementoPagos.MonedaP = "MXN", False, True) ComPag.Pago(0).TipoCambioPSpecified = True 'If(ObjCFDITimbre.ComplementoPagos.MonedaP = "MXN", False, True)
ComPag.Pago(0).TipoCambioP = ObjCFDITimbre.ComplementoPagos.TipoCambioP.ToDecimal ComPag.Pago(0).TipoCambioP = ObjCFDITimbre.ComplementoPagos.TipoCambioP
ComPag.Pago(0).Monto = ObjCFDITimbre.ComplementoPagos.Monto.ToDecimal ComPag.Pago(0).Monto = ObjCFDITimbre.ComplementoPagos.Monto
If ObjCFDITimbre.ComplementoPagos.NumOperacion <> "" Then If ObjCFDITimbre.ComplementoPagos.NumOperacion <> "" Then
ComPag.Pago(0).NumOperacion = ObjCFDITimbre.ComplementoPagos.NumOperacion ComPag.Pago(0).NumOperacion = ObjCFDITimbre.ComplementoPagos.NumOperacion
End If End If
@@ -4085,6 +4088,29 @@ Public Class Timbrado
End If End If
If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then
Dim Totales As New Profact.TimbraCFDI40.Complementos.Pagos20.PagosTotales()
'Totales Generales
Totales.MontoTotalPagos = ObjCFDITimbre.ComplementoPagos.TotalPagos.RoundSQL
Totales.TotalTrasladosBaseIVA16 = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados("002", 0.16D, "Base")
Totales.TotalTrasladosBaseIVA16Specified = Totales.TotalTrasladosBaseIVA16 > 0
Totales.TotalTrasladosImpuestoIVA16 = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados("002", 0.16D, "Impuesto").RoundSQL
Totales.TotalTrasladosImpuestoIVA16Specified = Totales.TotalTrasladosBaseIVA16 > 0
Totales.TotalTrasladosBaseIVA8 = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados("002", 0.08D, "Base")
Totales.TotalTrasladosBaseIVA8Specified = Totales.TotalTrasladosBaseIVA8 > 0
Totales.TotalTrasladosImpuestoIVA8 = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados("002", 0.08D, "Impuesto").RoundSQL
Totales.TotalTrasladosImpuestoIVA8Specified = Totales.TotalTrasladosBaseIVA8 > 0
Totales.TotalTrasladosBaseIVA0 = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados("002", 0.00D, "Base")
Totales.TotalTrasladosBaseIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0
Totales.TotalTrasladosImpuestoIVA0 = 0
Totales.TotalTrasladosImpuestoIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0
Totales.TotalRetencionesIEPSSpecified = False
ComPag.Totales = Totales
ComPag.Pago(0).DoctoRelacionado = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionado(ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count - 1) {} ComPag.Pago(0).DoctoRelacionado = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionado(ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count - 1) {}
Dim i As Integer Dim i As Integer
For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados
@@ -4096,10 +4122,12 @@ Public Class Timbrado
ComPag.Pago(0).DoctoRelacionado(i).Folio = doc.Folio ComPag.Pago(0).DoctoRelacionado(i).Folio = doc.Folio
ComPag.Pago(0).DoctoRelacionado(i).MonedaDR = doc.MonedaDR ComPag.Pago(0).DoctoRelacionado(i).MonedaDR = doc.MonedaDR
ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt.RoundSQL
ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True
ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado.RoundSQL
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto.RoundSQL
ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDR = doc.EquivalenciaDR
ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDRSpecified = True
ComPag.Pago(0).DoctoRelacionado(i).ObjetoImpDR = doc.ObjetoImpuesto ComPag.Pago(0).DoctoRelacionado(i).ObjetoImpDR = doc.ObjetoImpuesto
If doc.Impuestos IsNot Nothing Then If doc.Impuestos IsNot Nothing Then
@@ -4116,6 +4144,9 @@ Public Class Timbrado
Tra.ImporteDRSpecified = True Tra.ImporteDRSpecified = True
Tra.ImporteDR = docimp.Importe Tra.ImporteDR = docimp.Importe
Tra.ImpuestoDR = docimp.Impuesto Tra.ImpuestoDR = docimp.Impuesto
Tra.TipoFactorDR = docimp.TipoFactor
Tra.TasaOCuotaDRSpecified = True
Tra.TasaOCuotaDR = docimp.TasaOCuota
ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.TrasladosDR(j) = Tra ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.TrasladosDR(j) = Tra
End If End If
j += 1 j += 1
@@ -4132,54 +4163,80 @@ Public Class Timbrado
Tra.BaseDR = docimp.Base Tra.BaseDR = docimp.Base
Tra.ImporteDR = docimp.Importe Tra.ImporteDR = docimp.Importe
Tra.ImpuestoDR = docimp.Impuesto Tra.ImpuestoDR = docimp.Impuesto
Tra.TipoFactorDR = docimp.TipoFactor
Tra.TasaOCuotaDR = docimp.TasaOCuota
ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.RetencionesDR(j) = Tra ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.RetencionesDR(j) = Tra
End If End If
j += 1 j += 1
Next Next
End If End If
End If End If
i += 1 i += 1
Next Next
'Estos impuestos aplicarían para anticipos If ObjCFDITimbre.ComplementoPagos.Traslados.Count > 0 Then
If ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then Dim x As Integer
ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {} ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {}
ComPag.Pago(0).ImpuestosP(0) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP() ComPag.Pago(0).ImpuestosP(0) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP()
'ComPag.Pago(0).ImpuestosP(0).TotalImpuestosRetenidosSpecifiedP = True ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((ObjCFDITimbre.ComplementoPagos.Traslados).Count - 1) {}
'ComPag.Pago(0).ImpuestosP(0).TotalImpuestosRetenidos = ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos.ToDecimal For Each Tra As CFDITraslados In (ObjCFDITimbre.ComplementoPagos.Traslados)
'ComPag.Pago(0).ImpuestosP(0).TotalImpuestosTrasladadosSpecified = True ComPag.Pago(0).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP()
'ComPag.Pago(0).ImpuestosP(0).TotalImpuestosTrasladados = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados.ToDecimal ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto
ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor
If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota
Dim x As Integer ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe
ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R").Count - 1) {} ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).BaseP = Tra.Base
For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R") x += 1
ComPag.Pago(0).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP() Next
ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto End If
ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe
x += 1
Next
End If
If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then
Dim x As Integer
ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T").Count - 1) {}
For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T")
ComPag.Pago(0).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP()
ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto
ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor
ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota
ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe
x += 1
Next
End If
If (ObjCFDITimbre.ComplementoPagos.Retenciones).Count > 0 Then
Dim x As Integer
If ComPag.Pago(0).ImpuestosP(0) Is Nothing Then ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {}
ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((ObjCFDITimbre.ComplementoPagos.Retenciones).Count - 1) {}
For Each Ret As CFDIRetenciones In ObjCFDITimbre.ComplementoPagos.Retenciones
ComPag.Pago(0).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP()
ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto
ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe
x += 1
Next
End If End If
Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces() ''Estos impuestos aplicarían para anticipos
'If ObjCFDITimbre.ComplementoPagos.tota > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then
' ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {}
' ComPag.Pago(0).ImpuestosP(0) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP()
' If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then
' Dim x As Integer
' ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T").Count - 1) {}
' For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T")
' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP()
' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto
' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor
' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota
' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe
' x += 1
' Next
' End If
' If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then
' Dim x As Integer
' ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R").Count - 1) {}
' For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R")
' ComPag.Pago(0).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP()
' ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto
' ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe
' x += 1
' Next
' End If
'End If
Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces()
nsComp.Add("pago20", "http://www.sat.gob.mx/Pagos20") nsComp.Add("pago20", "http://www.sat.gob.mx/Pagos20")
Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComPag, GetType(Profact.TimbraCFDI40.Complementos.Pagos20.Pagos), nsComp) Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComPag, GetType(Profact.TimbraCFDI40.Complementos.Pagos20.Pagos), nsComp)
Dim docComp As New XmlDocument() Dim docComp As New XmlDocument()
@@ -4820,7 +4877,6 @@ Public Class Timbrado
If FolioFiscal <> "" Then If FolioFiscal <> "" Then
resultadoTimbre.GuardaXml(RutaArchivo, NombreArchivoXML) resultadoTimbre.GuardaXml(RutaArchivo, NombreArchivoXML)
If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then
'Actualiza Estatus Factura 'Actualiza Estatus Factura
@@ -4914,6 +4970,7 @@ Public Class Timbrado
End If End If
End If End If
resultadoTimbre.GuardaXml(RutaArchivo, NombreArchivoXML)
Catch ex As Exception Catch ex As Exception
Retorno = ex.ToString() Retorno = ex.ToString()
End Try End Try
@@ -6220,7 +6277,7 @@ Public Class Timbrado
For Each Ret In ObjCFDITimbre.Retenciones For Each Ret In ObjCFDITimbre.Retenciones
comprobante.Impuestos.Retenciones(w) = New Profact.TimbraCFDI33.ComprobanteImpuestosRetencion() comprobante.Impuestos.Retenciones(w) = New Profact.TimbraCFDI33.ComprobanteImpuestosRetencion()
comprobante.Impuestos.Retenciones(w).Impuesto = Ret.Impuesto comprobante.Impuestos.Retenciones(w).Impuesto = Ret.Impuesto
comprobante.Impuestos.Retenciones(w).Importe = Ret.Importe.ToDecimal comprobante.Impuestos.Retenciones(w).Importe = Ret.Importe
w += 1 w += 1
Next Next
@@ -6444,8 +6501,8 @@ Public Class Timbrado
ComPag.Pago(0).FormaDePagoP = ObjCFDITimbre.ComplementoPagos.FormaDePagoP ComPag.Pago(0).FormaDePagoP = ObjCFDITimbre.ComplementoPagos.FormaDePagoP
ComPag.Pago(0).MonedaP = ObjCFDITimbre.ComplementoPagos.MonedaP ComPag.Pago(0).MonedaP = ObjCFDITimbre.ComplementoPagos.MonedaP
ComPag.Pago(0).TipoCambioPSpecified = If(ObjCFDITimbre.ComplementoPagos.MonedaP = "MXN", False, True) ComPag.Pago(0).TipoCambioPSpecified = If(ObjCFDITimbre.ComplementoPagos.MonedaP = "MXN", False, True)
ComPag.Pago(0).TipoCambioP = ObjCFDITimbre.ComplementoPagos.TipoCambioP.ToDecimal ComPag.Pago(0).TipoCambioP = ObjCFDITimbre.ComplementoPagos.TipoCambioP
ComPag.Pago(0).Monto = ObjCFDITimbre.ComplementoPagos.Monto.ToDecimal ComPag.Pago(0).Monto = ObjCFDITimbre.ComplementoPagos.Monto
If ObjCFDITimbre.ComplementoPagos.NumOperacion <> "" Then If ObjCFDITimbre.ComplementoPagos.NumOperacion <> "" Then
ComPag.Pago(0).NumOperacion = ObjCFDITimbre.ComplementoPagos.NumOperacion ComPag.Pago(0).NumOperacion = ObjCFDITimbre.ComplementoPagos.NumOperacion
End If End If
@@ -6511,9 +6568,9 @@ Public Class Timbrado
ComPag.Pago(0).Impuestos = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestos(0) {} 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) = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestos()
ComPag.Pago(0).Impuestos(0).TotalImpuestosRetenidosSpecified = True ComPag.Pago(0).Impuestos(0).TotalImpuestosRetenidosSpecified = True
ComPag.Pago(0).Impuestos(0).TotalImpuestosRetenidos = ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos.ToDecimal ComPag.Pago(0).Impuestos(0).TotalImpuestosRetenidos = ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos
ComPag.Pago(0).Impuestos(0).TotalImpuestosTrasladadosSpecified = True ComPag.Pago(0).Impuestos(0).TotalImpuestosTrasladadosSpecified = True
ComPag.Pago(0).Impuestos(0).TotalImpuestosTrasladados = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados.ToDecimal ComPag.Pago(0).Impuestos(0).TotalImpuestosTrasladados = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados
If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then
Dim x As Integer Dim x As Integer