From b2db474fef2e372a4b024300dcf8f9c489185645 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 7 Mar 2022 18:40:36 -0700 Subject: [PATCH] -- timbrado complementos de pago pac 4 --- App_Code/CFDITimbre.vb | 56 +++++++++++++++++------------ App_Code/Timbrado.vb | 81 +++++++++++++++++++++++++++++------------- 2 files changed, 89 insertions(+), 48 deletions(-) diff --git a/App_Code/CFDITimbre.vb b/App_Code/CFDITimbre.vb index 68164a131..85197ff2d 100644 --- a/App_Code/CFDITimbre.vb +++ b/App_Code/CFDITimbre.vb @@ -453,6 +453,22 @@ Public Class CFDIComplementoPagos Public Property SelloPago As String = "" Public Property DocumentosRelacionados As List(Of CFDIComplementoPagosDocsRelacionados) Public Property Impuestos As List(Of CFDIConceptosImpuestos) + Public ReadOnly Property Totales As CFDIComplementoPagosTotales + Get + Dim tRetorno As New CFDIComplementoPagosTotales + tRetorno.MontoTotalPagos = (From c In DocumentosRelacionados Select c.ImpPagado).Sum() + + tRetorno.TotalTrasladosBaseIVA0 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0 Select c.Base).Sum() + tRetorno.TotalTrasladosBaseIVA8 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.08 Select c.Base).Sum() + tRetorno.TotalTrasladosBaseIVA16 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.16 Select c.Base).Sum() + + tRetorno.TotalTrasladosImpuestoIVA0 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0 Select c.Importe).Sum() + tRetorno.TotalTrasladosImpuestoIVA8 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.08 Select c.Importe).Sum() + tRetorno.TotalTrasladosImpuestoIVA16 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.16 Select c.Importe).Sum() + + Return tRetorno + End Get + End Property Public ReadOnly Property TotalImpuestosRetenidos As Decimal Get @@ -470,29 +486,6 @@ Public Class CFDIComplementoPagos End Get 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 - Get - Return (From c In DocumentosRelacionados - Select c.ImpPagado).Sum() - End Get - End Property - - - Sub New() DocumentosRelacionados = New List(Of CFDIComplementoPagosDocsRelacionados) @@ -577,6 +570,23 @@ Public Class CFDIComplementoPagosDocsRelacionados End Class + +Public Class CFDIComplementoPagosTotales + Public Property MontoTotalPagos As Decimal = 0 + Public Property TotalTrasladosBaseIVA16 As Decimal = 0 + Public Property TotalTrasladosImpuestoIVA16 As Decimal = 0 + Public Property TotalTrasladosBaseIVA8 As Decimal = 0 + Public Property TotalTrasladosImpuestoIVA8 As Decimal = 0 + Public Property TotalTrasladosBaseIVA0 As Decimal = 0 + Public Property TotalTrasladosImpuestoIVA0 As Decimal = 0 + Public Property TotalTrasladosBaseExento As Decimal = 0 + Public Property TotalRetencionesIVA As Decimal = 0 + Public Property TotalRetencionesISR As Decimal = 0 + Public Property TotalRetencionesIEPS As Decimal = 0 + +End Class + + Public Class CFDIComercioExterior11 Public Property MotivoTraslado As String diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 7e6a090c2..028059683 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -4090,19 +4090,20 @@ Public Class Timbrado 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.MontoTotalPagos = ObjCFDITimbre.ComplementoPagos.Totales.MontoTotalPagos + + Totales.TotalTrasladosBaseIVA16 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA16 Totales.TotalTrasladosBaseIVA16Specified = Totales.TotalTrasladosBaseIVA16 > 0 - Totales.TotalTrasladosImpuestoIVA16 = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados("002", 0.16D, "Impuesto").RoundSQL + Totales.TotalTrasladosImpuestoIVA16 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosImpuestoIVA16.RoundSQL Totales.TotalTrasladosImpuestoIVA16Specified = Totales.TotalTrasladosBaseIVA16 > 0 - Totales.TotalTrasladosBaseIVA8 = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados("002", 0.08D, "Base") + Totales.TotalTrasladosBaseIVA8 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA8 Totales.TotalTrasladosBaseIVA8Specified = Totales.TotalTrasladosBaseIVA8 > 0 - Totales.TotalTrasladosImpuestoIVA8 = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados("002", 0.08D, "Impuesto").RoundSQL + Totales.TotalTrasladosImpuestoIVA8 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA8.RoundSQL Totales.TotalTrasladosImpuestoIVA8Specified = Totales.TotalTrasladosBaseIVA8 > 0 - Totales.TotalTrasladosBaseIVA0 = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados("002", 0.00D, "Base") + Totales.TotalTrasladosBaseIVA0 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA0 Totales.TotalTrasladosBaseIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0 Totales.TotalTrasladosImpuestoIVA0 = 0 Totales.TotalTrasladosImpuestoIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0 @@ -5029,6 +5030,9 @@ Public Class Timbrado #End Region #Region "Receptor" + If ObjCFDITimbre.Receptor.RFC.ToUpper.Contiene("XAXX010101000", "XEXX010101000") Then 'Condición del SAT. CFDI40149 + ObjCFDITimbre.Receptor.DomicilioFiscalReceptor = ObjCFDITimbre.Comprobante.LugarExpedicion + End If cfdi.Receptor(ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Receptor.Nombre, ObjCFDITimbre.Receptor.DomicilioFiscalReceptor, ObjCFDITimbre.Receptor.ResidenciaFiscal, ObjCFDITimbre.Receptor.NumeroRegistroTributario, ObjCFDITimbre.Receptor.RegimenFiscalReceptor, ObjCFDITimbre.Receptor.UsoCFDI) @@ -5284,7 +5288,18 @@ Public Class Timbrado #Region "Complemento Pago" If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then - cfdi.Pago20Totales(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ObjCFDITimbre.ComplementoPagos.TotalPagos) + + cfdi.Pago20Totales(ObjCFDITimbre.ComplementoPagos.Totales.TotalRetencionesIVA, + ObjCFDITimbre.ComplementoPagos.Totales.TotalRetencionesISR, + ObjCFDITimbre.ComplementoPagos.Totales.TotalRetencionesIEPS, + ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA16, + ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosImpuestoIVA16, + ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA8, + ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosImpuestoIVA8, + ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA0, + ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosImpuestoIVA0, + ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseExento, + ObjCFDITimbre.ComplementoPagos.Totales.MontoTotalPagos) cfdi.Pago20(ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss"), ObjCFDITimbre.ComplementoPagos.FormaDePagoP, @@ -5317,31 +5332,47 @@ Public Class Timbrado doc.ImpPagado, doc.ImpSaldoInsoluto, doc.ObjetoImpuesto) - 'falta impuestos + If doc.Impuestos IsNot Nothing Then + + ''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") + + If docimp.TrasladooRetencion = "T" Then + cfdi.Pago20TrasladoDR(docimp.Base, docimp.Impuesto, docimp.TipoFactor, docimp.TasaOCuota, docimp.Importe) + 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") + If docimp.TrasladooRetencion = "R" Then + cfdi.Pago20RetencionDR(docimp.Base, docimp.Impuesto, docimp.TipoFactor, docimp.TasaOCuota, docimp.Importe) + End If + j += 1 + Next + End If + End If 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 + If ObjCFDITimbre.ComplementoPagos.Traslados.Count > 0 Then + For Each Tra As CFDITraslados In (ObjCFDITimbre.ComplementoPagos.Traslados) + cfdi.Pago20TrasladoP(Tra.Base, Tra.Impuesto, Tra.TipoFactor, Tra.TasaOCuota, Tra.Importe) + Next End If - - + If (ObjCFDITimbre.ComplementoPagos.Retenciones).Count > 0 Then + For Each Ret As CFDIRetenciones In ObjCFDITimbre.ComplementoPagos.Retenciones + cfdi.Pago20RetencionP(Ret.Impuesto, Ret.Importe) + Next + End If End If - End If #End Region