-- timbrado complementos de pago.

This commit is contained in:
2022-03-05 14:08:14 -07:00
parent 15629a9358
commit 4f51b06bb8
4 changed files with 315 additions and 30 deletions

View File

@@ -469,6 +469,13 @@ Public Class CFDIComplementoPagos
End Get End Get
End Property End Property
Public ReadOnly Property TotalPagos As Decimal
Get
Return (From c In DocumentosRelacionados
Select c.ImpPagado).Sum()
End Get
End Property
Sub New() Sub New()
DocumentosRelacionados = New List(Of CFDIComplementoPagosDocsRelacionados) DocumentosRelacionados = New List(Of CFDIComplementoPagosDocsRelacionados)
@@ -476,6 +483,61 @@ Public Class CFDIComplementoPagos
End Sub End Sub
Public ReadOnly Property Retenciones As List(Of CFDIRetenciones)
Get
Dim tRetorno As New List(Of CFDIRetenciones)
Dim TRetenciones As New List(Of CFDIRetenciones)
For Each c As CFDIComplementoPagosDocsRelacionados In DocumentosRelacionados
For Each imp As CFDIConceptosImpuestos In c.Impuestos
If imp.TrasladooRetencion = "R" Then
tRetorno.Add(New CFDIRetenciones With {.Impuesto = imp.Impuesto, .Importe = imp.Importe})
End If
Next
Next
If tRetorno.Count > 0 Then
TRetenciones = tRetorno.GroupBy(Function(t) New With {Key t.Impuesto}) _
.Select(Function(t) New CFDIRetenciones With {.Impuesto = t.Key.Impuesto,
.Importe = t.Sum(Function(tt) tt.Importe)}) _
.OrderBy(Function(x) x.Impuesto).ToList
End If
tRetorno = Nothing
Return TRetenciones
End Get
End Property
Public ReadOnly Property Traslados As List(Of CFDITraslados)
Get
Dim tRetorno As New List(Of CFDITraslados)
Dim TTraslados As New List(Of CFDITraslados)
For Each c As CFDIComplementoPagosDocsRelacionados In DocumentosRelacionados
For Each imp As CFDIConceptosImpuestos In c.Impuestos
If imp.TrasladooRetencion = "T" Then
tRetorno.Add(New CFDITraslados With {.Impuesto = imp.Impuesto, .Base = imp.Base, .Importe = imp.Importe, .TasaOCuota = imp.TasaOCuota, .TipoFactor = imp.TipoFactor})
End If
Next
Next
'ya generado todos los registros posibles, los agrupo y los sumo
If tRetorno.Count > 0 Then
TTraslados = tRetorno.GroupBy(Function(t) New With {Key t.TipoFactor, Key t.Impuesto, Key t.TasaOCuota}) _
.Select(Function(t) New CFDITraslados With {.Impuesto = t.Key.Impuesto,
.TipoFactor = t.Key.TipoFactor,
.TasaOCuota = t.Key.TasaOCuota,
.Base = t.Sum(Function(tt) tt.Base),
.Importe = t.Sum(Function(tt) tt.Importe)}) _
.OrderBy(Function(x) x.Impuesto).ToList
End If
tRetorno = Nothing
Return TTraslados
End Get
End Property
End Class End Class
<Serializable> <Serializable>
@@ -487,9 +549,14 @@ Public Class CFDIComplementoPagosDocsRelacionados
Public Property MetodoDePagoDR As String = "" Public Property MetodoDePagoDR As String = ""
Public Property TipoCambioDR As Decimal Public Property TipoCambioDR As Decimal
Public Property NumParcialidad As Integer = 1 Public Property NumParcialidad As Integer = 1
Public Property ImpSaldoAnt As Double Public Property ImpSaldoAnt As Decimal
Public Property ImpPagado As Double Public Property ImpPagado As Decimal
Public Property ImpSaldoInsoluto As Double Public Property ImpSaldoInsoluto As Decimal
Public Property ObjetoImpuesto As String = "01"
Public Property Impuestos As List(Of CFDIConceptosImpuestos)
Sub New()
Impuestos = New List(Of CFDIConceptosImpuestos)
End Sub
End Class End Class

View File

@@ -953,6 +953,7 @@ Public Class ClsBancos
Dim Estatus As Integer = 1 Dim Estatus As Integer = 1
Dim dttpagos As DataTable = Nothing Dim dttpagos As DataTable = Nothing
Dim dttpagosimpuestos As DataTable = Nothing
Dim dr As Data.DataRow = Nothing Dim dr As Data.DataRow = Nothing
If GetComplementoPagosRep(-1, Now.AddYears(-5), Now, If(CvePrePoliza > 0, -1, CveIE), CveVenta, If(EsRegeneracion, 2, 1), UsuarioActual.CveEmpresa, CvePrePoliza:=CvePrePoliza) Then If GetComplementoPagosRep(-1, Now.AddYears(-5), Now, If(CvePrePoliza > 0, -1, CveIE), CveVenta, If(EsRegeneracion, 2, 1), UsuarioActual.CveEmpresa, CvePrePoliza:=CvePrePoliza) Then
@@ -996,7 +997,6 @@ Public Class ClsBancos
'ReceptorRFC = drr("RFC").ToString 'ReceptorRFC = drr("RFC").ToString
'ReceptorNombre = drr("NombreCliente").ToString 'ReceptorNombre = drr("NombreCliente").ToString
Folio = FActual Folio = FActual
ComplementoSerieFolio = $"{Serie}-{Folio}" ComplementoSerieFolio = $"{Serie}-{Folio}"
@@ -1084,12 +1084,25 @@ Public Class ClsBancos
Dim Timbre As CFDITimbre = Nothing Dim Timbre As CFDITimbre = Nothing
Dim Timbrado As New Timbrado Dim Timbrado As New Timbrado
If UsuarioActual.Empresa.Funcionalidad(350) = "1" Then
If GetComplementoPagosImpuestos(CveIE, UsuarioActual.CveEmpresa) Then
dttpagosimpuestos = DtResultados
End If
Timbre = Timbrado.PreparaTimbrePago(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,
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)
Else
Timbre = Timbrado.PreparaTimbrePago(RFCEmpresa, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal,
RFCCliente, dr("NombreCliente").ToString, Serie, Folio.ToString, FechaTimbrado, Cuentapago, RFCCliente, dr("NombreCliente").ToString, Serie, Folio.ToString, FechaTimbrado, Cuentapago,
dr("FechaDocumento").ToString.ToDate, dr("ClaveFormaPagoSAT").ToString, dr("AbreviaturaSAT").ToString, dr("VentasTotalPagado").ToString.ToDouble, dr("FechaDocumento").ToString.ToDate, dr("ClaveFormaPagoSAT").ToString, dr("AbreviaturaSAT").ToString, dr("VentasTotalPagado").ToString.ToDecimal,
UsuarioActual.Empresa.CP.ToString, CuentaBeneficiario, dr("TipoCambioPago").ToString.ToDouble, dttpagos, CFDIRelacionado:=CFDIRelacionado, EsCancelacion:=False) UsuarioActual.Empresa.CP.ToString, CuentaBeneficiario, dr("TipoCambioPago").ToString.ToDecimal, dttpagos, CFDIRelacionado:=CFDIRelacionado, EsCancelacion:=False)
End If
''PREPARA PARA CANCELACION POR SUSTITUCION DE COMPLEMENTO DE PAGO ''PREPARA PARA CANCELACION POR SUSTITUCION DE COMPLEMENTO DE PAGO
'If CFDIRelacionado <> "-1" And CFDIRelacionado <> "" Then 'If CFDIRelacionado <> "-1" And CFDIRelacionado <> "" Then
@@ -1365,6 +1378,26 @@ Public Class ClsBancos
Return Retorno Return Retorno
End Function End Function
Public Function GetComplementoPagosImpuestos(CveIE As Integer, CveEmpresa As Integer) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Banc_ComplementoPagoImpuestosGet")
With SqlAdapter.SelectCommand.Parameters
.Add("@CveIE", SqlDbType.Int).Value = CveIE
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
End With
Try
SqlAdapter.Fill(Data)
Retorno = True
Catch ex As Exception
OnError("Ocurrió un error al obtener informacion de complementos de pago en impuestos.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
End Try
Return Retorno
End Function
Public Function GetComplementoPagos(CveComplementoPago As Integer, CveIE As Integer, CveVenta As Integer, CveEmpresa As Integer) As Boolean Public Function GetComplementoPagos(CveComplementoPago As Integer, CveIE As Integer, CveVenta As Integer, CveEmpresa As Integer) As Boolean
Dim Retorno As Boolean = False Dim Retorno As Boolean = False

View File

@@ -686,7 +686,7 @@ Namespace Modelos
Return Not ErrorPrePolizas Return Not ErrorPrePolizas
End Function End Function
Public Function EmitirFactura(Optional Timbrar As Boolean = True, Optional Transac As SqlClient.SqlTransaction = Nothing, Optional ObjContPaqTransac As ClsContPAQi = Nothing) As MMensajeFactura Public Function EmitirFactura(Optional Timbrar As Boolean = True, Optional Transac As SqlClient.SqlTransaction = Nothing, Optional ObjContPaqTransac As ClsContPAQi = Nothing, Optional Modulo As String = "Modelos/GuardarVentaM") As MMensajeFactura
Dim Retorno As New MMensajeFactura() Dim Retorno As New MMensajeFactura()
If Me.Version = "3.3" AndAlso Not Me.TipoDocto.Contiene("Ped", "PeC") Then If Me.Version = "3.3" AndAlso Not Me.TipoDocto.Contiene("Ped", "PeC") Then
@@ -782,7 +782,7 @@ Namespace Modelos
Next Next
End If End If
GuardarVenta(Me, ObjVentas, ObjConta, ObjInventario, ObjContr, DtDetalle, Me.CveNCaVincular, ObjContPaq, ObjBancos, ObjOS, ObjEventos, ObjCGame, ObjClientes, ObjAcum:=ObjAcum, Resp:=Retorno) GuardarVenta(Me, ObjVentas, ObjConta, ObjInventario, ObjContr, DtDetalle, Me.CveNCaVincular, ObjContPaq, ObjBancos, ObjOS, ObjEventos, ObjCGame, ObjClientes, ObjAcum:=ObjAcum, Resp:=Retorno, Modulo:=Modulo)
'SI ES REFACTURACION 'SI ES REFACTURACION
Dim ObjNC As List(Of Object) = Nothing Dim ObjNC As List(Of Object) = Nothing
@@ -1453,10 +1453,10 @@ Namespace Modelos
End If End If
End Sub End Sub
Public Sub GuardarVenta(ByRef factura As Modelos.Factura, ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, ByRef ObjInventario As ClsInventarios, ByRef ObjContr As ClsContratos, ByRef TmpDTDetalle As DataTable, CveNCaVincular As Integer, ByRef objContPaqi As ClsContPAQi, Optional ByRef ObjBancos As ClsBancos = Nothing, Optional ByRef ObjOS As ClsOS = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing, ByRef Optional ObjCGame As ClsCGame = Nothing, ByRef Optional ObjCliente As ClsClientes = Nothing, Optional EsNotaCredito As Boolean = False, Optional ObjAcum As ClsAcumuladores = Nothing, ByRef Optional Resp As MMensajeFactura = Nothing) Public Sub GuardarVenta(ByRef factura As Modelos.Factura, ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, ByRef ObjInventario As ClsInventarios, ByRef ObjContr As ClsContratos, ByRef TmpDTDetalle As DataTable, CveNCaVincular As Integer, ByRef objContPaqi As ClsContPAQi, Optional ByRef ObjBancos As ClsBancos = Nothing, Optional ByRef ObjOS As ClsOS = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing, ByRef Optional ObjCGame As ClsCGame = Nothing, ByRef Optional ObjCliente As ClsClientes = Nothing, Optional EsNotaCredito As Boolean = False, Optional ObjAcum As ClsAcumuladores = Nothing, ByRef Optional Resp As MMensajeFactura = Nothing, Optional Modulo As String = "Modelos/GuardarVentaM")
Dim Msgok As New StringBuilder Dim Msgok As New StringBuilder
factura.CvePrePoliza = ObjConta.AddPrePolizas("Modelos/GuardarVentaM", factura.CvePlantillaPoliza, factura.TotalTC, factura.TotalTC, factura.CveMoneda, factura.Fecha, If(factura.CveEmpresaCRM > 0, factura.EmpresaCRM, factura.Cliente.Nombre), factura.CveUsuario, factura.CveEmpresa) factura.CvePrePoliza = ObjConta.AddPrePolizas(Modulo, factura.CvePlantillaPoliza, factura.TotalTC, factura.TotalTC, factura.CveMoneda, factura.Fecha, If(factura.CveEmpresaCRM > 0, factura.EmpresaCRM, factura.Cliente.Nombre), factura.CveUsuario, factura.CveEmpresa)
Dim RFCReceptor As String = "" Dim RFCReceptor As String = ""

View File

@@ -1017,6 +1017,156 @@ Public Class Timbrado
If PorcentajeIEPS > 0 Then Timbre.ComplementoPagos.Impuestos.Add(New CFDIConceptosImpuestos With {.Base = VentaImportePago * PorcentajeIEPS, .TasaOCuota = PorcentajeIEPS, .Impuesto = "003"}) If PorcentajeIEPS > 0 Then Timbre.ComplementoPagos.Impuestos.Add(New CFDIConceptosImpuestos With {.Base = VentaImportePago * PorcentajeIEPS, .TasaOCuota = PorcentajeIEPS, .Impuesto = "003"})
'Next
Return Timbre
End Function
Public Function PreparaTimbrePago40(EmisorRFC As String, EmisorNombre As String, EmisorRegimenFiscal As String,
ReceptorRFC As String, ReceptorNombre As String, ReceptorDomicilioFiscal As String, ReceptorRegimenFiscal 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 Decimal, LugarExpedicion As String,
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
' 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
Timbre.Comprobante.TipoComprobante = "P"
Timbre.Comprobante.Folio = Folio
Timbre.Comprobante.Serie = Serie
Timbre.Comprobante.Fecha = FechaTimbrado
Timbre.Comprobante.FormadePago = ""
Timbre.Comprobante.CondicionesdePago = ""
Timbre.Comprobante.MetodoPago = ""
Timbre.Comprobante.SubTotal = 0
Timbre.Comprobante.Descuentos = 0
Timbre.Comprobante.Moneda = "XXX"
Timbre.Comprobante.TipoCambio = ""
Timbre.Comprobante.Total = 0
Timbre.Comprobante.LugarExpedicion = LugarExpedicion
Timbre.Emisor.RegimenFiscal = EmisorRegimenFiscal
Timbre.Emisor.Nombre = EmisorNombre
Timbre.Emisor.RFC = EmisorRFC
Timbre.Receptor.RFC = ReceptorRFC
Timbre.Receptor.Nombre = ReceptorNombre
Timbre.Receptor.DomicilioFiscalReceptor = ReceptorDomicilioFiscal
Timbre.Receptor.RegimenFiscalReceptor = ReceptorRegimenFiscal
Timbre.Receptor.UsoCFDI = UsoCFDI
If CFDIRelacionado <> "-1" And CFDIRelacionado <> "" Then
Timbre.CFDIRelacionados.TipoRelacion = "04"
Timbre.CFDIRelacionados.UUID.Add(CFDIRelacionado)
End If
'detalles
Dim concepto As New CFDIConceptos With {.Cantidad = 1,
.Descripcion = "Pago",
.ValorUnitario = 0,
.Importe = 0,
.Unidad = "",
.ClaveUnidad = "ACT",
.ClaveProdServ = "84111506",
.Noidentificacion = "",
.ObjetoImpuesto = "01"}
Timbre.Conceptos.Add(concepto)
Select Case FormaPago
Case "01"
CuentaPago = ""
CuentaBeneficiario = ""
End Select
Dim ImporteCancelacion As Decimal = 1
Dim MonedaCancelacion As String = "MXN"
Dim TipoCambioCancelacion As Double = 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
If dttpagos IsNot Nothing AndAlso dttpagos.Rows.Count > 0 Then ImporteCancelacion = ImporteCancelacion * dttpagos.Rows.Count
Timbre.ComplementoPagos.CtaOrdenante = CuentaPago
Timbre.ComplementoPagos.CtaBeneficiario = CuentaBeneficiario
Timbre.ComplementoPagos.FechaPago = FechaPago
Timbre.ComplementoPagos.FormaDePagoP = FormaPago
Timbre.ComplementoPagos.MonedaP = MonedaPago
Timbre.ComplementoPagos.Monto = If(EsCancelacion, ImporteCancelacion, Monto)
Timbre.ComplementoPagos.TipoCambioP = If(EsCancelacion, TipoCambioCancelacion, TipoCambioP)
Dim VentaFolioFiscal, VentaSerie, VentaFolio, VentaAbreviaturaSAT, VentaMetodoPago, ObjetoImpuesto As String
Dim VentaImportePago, VentaImporteSaldoInsoluto, VentaImporteSaldoAnterior, VentaTipoCambio, PorcentajeIVA, PorcentajeIEPS As Decimal
Dim VentaNumParcialidad As Integer
If dttpagos IsNot Nothing AndAlso dttpagos.Rows.Count > 0 Then
For Each dr As Data.DataRow In dttpagos.Rows
VentaFolioFiscal = dr("FolioFiscal").ToString
VentaSerie = dr("VentaSerie").ToString
VentaFolio = dr("VentaFolio").ToString
VentaAbreviaturaSAT = dr("VentaAbreviaturaSAT").ToString
VentaMetodoPago = dr("MetodoPago").ToString
VentaImportePago = dr("VentaImportePagado").ToString.ToDecimal
VentaImporteSaldoInsoluto = dr("ImpSaldoInsoluto").ToString.ToDecimal
VentaImporteSaldoAnterior = dr("ImpSaldoAnterior").ToString.ToDecimal
VentaTipoCambio = dr("TipoCambio").ToString.ToDecimal
VentaNumParcialidad = dr("NumParcialidad").ToString.ToEntero
PorcentajeIVA = dr("PorcentajeIVA").ToString.ToDecimal
PorcentajeIEPS = dr("PorcentajeIEPS").ToString.ToDecimal
ObjetoImpuesto = dr("ObjetoImpuesto").ToString
' si la moneda es igual, se omite el tipo de cambio de la venta
If MonedaPago = VentaAbreviaturaSAT Then VentaTipoCambio = 0
'condiciones especiales para el pago en pesos, facturas en moneda extranjera
If MonedaPago = "MXN" AndAlso VentaAbreviaturaSAT <> "MXN" Then
VentaTipoCambio = 1 / VentaTipoCambio
End If
' For Each drr As Data.DataRow In DtFacturasPagadas.Rows
Dim doc As New CFDIComplementoPagosDocsRelacionados With {.IdDocumento = VentaFolioFiscal,
.Serie = VentaSerie,
.Folio = VentaFolio,
.MonedaDR = VentaAbreviaturaSAT,
.MetodoDePagoDR = VentaMetodoPago,
.ImpPagado = If(EsCancelacion, 1, VentaImportePago),
.ImpSaldoInsoluto = If(EsCancelacion, VentaImporteSaldoAnterior - 1, VentaImporteSaldoInsoluto),
.ImpSaldoAnt = VentaImporteSaldoAnterior,
.TipoCambioDR = VentaTipoCambio,
.NumParcialidad = VentaNumParcialidad,
.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
doc.Impuestos.Add(New CFDIConceptosImpuestos With {
.TrasladooRetencion = drp("Tipo").ToString,
.Base = drp("Base").ToString.ToDecimal,
.TasaOCuota = drp("PorcentajeImpuesto").ToString().ToDecimal,
.Impuesto = drp("TipoImpuesto").ToString,
.Importe = drp("Importe").ToString().ToDecimal
}
)
Next
Timbre.ComplementoPagos.DocumentosRelacionados.Add(doc)
Next
End If
'If drr("IVA").ToString.ToDouble > 0 Then
'If PorcentajeIVA > 0 Then Timbre.ComplementoPagos.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = VentaImportePago * PorcentajeIVA, .TasaOCuota = PorcentajeIVA, .Impuesto = "002"})
'Timbre.ComplementoPagos.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = 0, .TasaOCuota = 0, .Impuesto = "002"})
'If PorcentajeIEPS > 0 Then Timbre.ComplementoPagos.Impuestos.Add(New CFDIConceptosImpuestos With {.Base = VentaImportePago * PorcentajeIEPS, .TasaOCuota = PorcentajeIEPS, .Impuesto = "003"})
'Next 'Next
Return Timbre Return Timbre
@@ -3939,19 +4089,52 @@ Public Class Timbrado
End If End If
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).TipoCambioDRSpecifiedP = If(doc.TipoCambioDR = 0, False, True)
'ComPag.Pago(0).DoctoRelacionado(i).TipoCambioDR = doc.TipoCambioDR
'ComPag.Pago(0).DoctoRelacionado(i).MetodoDePagoDR = doc.MetodoDePagoDR
ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt
'ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAntSpecified = True
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt.ToDecimal
ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True
ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado.ToDecimal ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto
ComPag.Pago(0).DoctoRelacionado(i).ObjetoImpDR = doc.ObjetoImpuesto
If doc.Impuestos IsNot Nothing Then
ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDR
''traslados
If (doc.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then
Dim j As Integer = 0
For Each docimp As CFDIConceptosImpuestos In doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "T")
ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.TrasladosDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRTrasladoDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "T").Count - 1) {}
If docimp.TrasladooRetencion = "T" Then
Dim Tra As New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRTrasladoDR
Tra.BaseDR = docimp.Base
Tra.ImporteDRSpecified = True
Tra.ImporteDR = docimp.Importe
Tra.ImpuestoDR = docimp.Impuesto
ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.TrasladosDR(j) = Tra
End If
j += 1
Next
End If
''retenciones
If (doc.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then
Dim j As Integer = 0
For Each docimp As CFDIConceptosImpuestos In doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "R")
ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.RetencionesDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRRetencionDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "R").Count - 1) {}
If docimp.TrasladooRetencion = "R" Then
Dim Tra As New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRRetencionDR
Tra.BaseDR = docimp.Base
Tra.ImporteDR = docimp.Importe
Tra.ImpuestoDR = docimp.Impuesto
ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.RetencionesDR(j) = Tra
End If
j += 1
Next
End If
End If
'ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsolutoSpecified = True
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto.ToDecimal
i += 1 i += 1
Next Next
@@ -3991,8 +4174,8 @@ Public Class Timbrado
Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces() Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces()
nsComp.Add("pago20", "http://www.sat.gob.mx/Pagos") nsComp.Add("pago20", "http://www.sat.gob.mx/Pagos20")
Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComPag, GetType(Profact.TimbraCFDI33.Complementos.Pagos10.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()
docComp.LoadXml(xmlComp) docComp.LoadXml(xmlComp)
'comprobante.PagosSpecified = True 'comprobante.PagosSpecified = True
@@ -5119,8 +5302,9 @@ Public Class Timbrado
#Region "Complemento Pago" #Region "Complemento Pago"
If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then
cfdi.Pago20Totales(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ObjCFDITimbre.ComplementoPagos.TotalPagos)
cfdi.Pago(ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss"), cfdi.Pago20(ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss"),
ObjCFDITimbre.ComplementoPagos.FormaDePagoP, ObjCFDITimbre.ComplementoPagos.FormaDePagoP,
ObjCFDITimbre.ComplementoPagos.MonedaP, ObjCFDITimbre.ComplementoPagos.MonedaP,
ObjCFDITimbre.ComplementoPagos.TipoCambioP, ObjCFDITimbre.ComplementoPagos.TipoCambioP,
@@ -5141,16 +5325,17 @@ Public Class Timbrado
For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados
cfdi.PagoDoctoRelacionado(doc.IdDocumento, cfdi.Pago20DoctoRelacionado(doc.IdDocumento,
doc.Serie, doc.Serie,
doc.Folio, doc.Folio,
doc.MonedaDR, doc.MonedaDR,
doc.TipoCambioDR, doc.TipoCambioDR,
doc.MetodoDePagoDR,
doc.NumParcialidad, doc.NumParcialidad,
doc.ImpSaldoAnt, doc.ImpSaldoAnt,
doc.ImpPagado, doc.ImpPagado,
doc.ImpSaldoInsoluto) doc.ImpSaldoInsoluto,
doc.ObjetoImpuesto)
'falta impuestos
Next Next
@@ -6748,13 +6933,13 @@ Public Class Timbrado
ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAntSpecified = True ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAntSpecified = True
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt.ToDecimal ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt
ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True
ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado.ToDecimal ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsolutoSpecified = True ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsolutoSpecified = True
ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto.ToDecimal ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto
i += 1 i += 1
Next Next