diff --git a/App_Code/CFDITimbre.vb b/App_Code/CFDITimbre.vb index 2ce881836..a9469f6b0 100644 --- a/App_Code/CFDITimbre.vb +++ b/App_Code/CFDITimbre.vb @@ -79,7 +79,7 @@ Public Class CFDITimbre For Each c As CFDIConceptos In Conceptos 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}) + tRetorno.Add(New CFDITraslados With {.Impuesto = imp.Impuesto, .Base = imp.Base, .Importe = imp.Importe, .TasaOCuota = imp.TasaOCuota, .TipoFactor = imp.TipoFactor, .BaseMN = imp.BaseMN, .ImporteMN = imp.ImporteMN}) End If Next Next @@ -90,7 +90,9 @@ Public Class CFDITimbre .TipoFactor = t.Key.TipoFactor, .TasaOCuota = t.Key.TasaOCuota, .Base = t.Sum(Function(tt) tt.Base), - .Importe = t.Sum(Function(tt) tt.Importe)}) _ + .Importe = t.Sum(Function(tt) tt.Importe), + .BaseMN = t.Sum(Function(tt) tt.BaseMN), + .ImporteMN = t.Sum(Function(tt) tt.ImporteMN)}) _ .OrderBy(Function(x) x.Impuesto).ToList End If @@ -342,6 +344,8 @@ Public Class CFDIConceptosImpuestos Public Property TipoFactor As String = "Tasa" Public Property TasaOCuota As Decimal = 0.00D Public Property Importe As Decimal = 0.00D ' propiedad utilizada solo para hacer ajustes, por default toma la multiplicación de base * tasa + Public Property BaseMN As Decimal = 0.00D + Public Property ImporteMN As Decimal = 0.00D 'Public ReadOnly Property Importe As Decimal ' Get ' If ImporteT = 0.00 Then Return Base * TasaOCuota Else Return ImporteT @@ -417,11 +421,14 @@ End Class Public Class CFDITraslados Public Property Impuesto As String - Public Property Tasa As Decimal = 0.000000D + 'Public Property Tasa As Decimal = 0.000000D Public Property TipoFactor As String Public Property TasaOCuota As Decimal = 0.000000D Public Property Importe As Decimal = 0.000000D Public Property Base As Decimal = 0.000000D + Public Property ImporteMN As Decimal = 0.000000D + Public Property BaseMN As Decimal = 0.000000D + Public Property EquivalenciaDR As Decimal = 0.000000D End Class @@ -458,13 +465,13 @@ Public Class CFDIComplementoPagos Dim tRetorno As New CFDIComplementoPagosTotales tRetorno.MontoTotalPagos = (From c In DocumentosRelacionados Select c.ImpPagado * TipoCambioP).Sum() - tRetorno.TotalTrasladosBaseIVA0 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0 Select c.Base * TipoCambioP).Sum() - tRetorno.TotalTrasladosBaseIVA8 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.08 Select c.Base * TipoCambioP).Sum() - tRetorno.TotalTrasladosBaseIVA16 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.16 Select c.Base * TipoCambioP).Sum() + tRetorno.TotalTrasladosBaseIVA0 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0 Select c.BaseMN * c.EquivalenciaDR).Sum() + tRetorno.TotalTrasladosBaseIVA8 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.08 Select c.BaseMN * c.EquivalenciaDR).Sum() + tRetorno.TotalTrasladosBaseIVA16 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.16 Select c.BaseMN * c.EquivalenciaDR).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() + tRetorno.TotalTrasladosImpuestoIVA0 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0 Select c.Importe * c.EquivalenciaDR).Sum() + tRetorno.TotalTrasladosImpuestoIVA8 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.08 Select c.ImporteMN * c.EquivalenciaDR).Sum() + tRetorno.TotalTrasladosImpuestoIVA16 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.16 Select c.ImporteMN * c.EquivalenciaDR).Sum() tRetorno.TotalRetencionesIEPS = (From c In Retenciones Where c.Impuesto = "003" Select c.Importe).Sum() @@ -503,7 +510,7 @@ Public Class CFDIComplementoPagos 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}) + tRetorno.Add(New CFDIRetenciones With {.Impuesto = imp.Impuesto, .Importe = imp.Importe * (1 / c.TipoCambioDR)}) End If Next @@ -528,7 +535,7 @@ Public Class CFDIComplementoPagos 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}) + tRetorno.Add(New CFDITraslados With {.Impuesto = imp.Impuesto, .Base = imp.Base, .Importe = imp.Importe, .TasaOCuota = imp.TasaOCuota, .TipoFactor = imp.TipoFactor, .BaseMN = imp.BaseMN, .ImporteMN = imp.ImporteMN, .EquivalenciaDR = c.TipoCambioDR}) End If Next Next @@ -539,7 +546,9 @@ Public Class CFDIComplementoPagos .TipoFactor = t.Key.TipoFactor, .TasaOCuota = t.Key.TasaOCuota, .Base = t.Sum(Function(tt) tt.Base), - .Importe = t.Sum(Function(tt) tt.Importe)}) _ + .Importe = t.Sum(Function(tt) tt.Importe), + .BaseMN = t.Sum(Function(tt) tt.BaseMN), + .ImporteMN = t.Sum(Function(tt) tt.ImporteMN)}) _ .OrderBy(Function(x) x.Impuesto).ToList End If diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 1297e28ae..b4a2ef02c 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -8976,17 +8976,17 @@ Public Class ClsPaginas Dim validaElementoPago = XmlDoc.DocumentElement("cfdi:Conceptos") If Version = "3.3" Then cfdVer = "http://www.sat.gob.mx/cfd/3" - namespaces.AddNamespace("pago10", "http://www.sat.gob.mx/Pagos") PagoVersion = "pago10" Else ' se considera que es la version 4.0 cfdVer = "http://www.sat.gob.mx/cfd/4" - namespaces.AddNamespace("pago20", "http://www.sat.gob.mx/Pagos20") End If namespaces.AddNamespace(Prefijo, cfdVer) namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital") namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal") namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal") + namespaces.AddNamespace("pago10", "http://www.sat.gob.mx/Pagos") + namespaces.AddNamespace("pago20", "http://www.sat.gob.mx/Pagos20") 'Datos Fiscales If Not IsNothing(validaElemento) Then diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index f9341507e..7d498dd07 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -347,7 +347,7 @@ Public Class Timbrado #Region "Variables" Dim llaveByte As Byte(), certByte As Byte() - Dim llaveBase64 As String, certBase64 As String + Dim llaveBase64 As String = "", certBase64 As String = "" Dim cfdi As New RVCFDI.GeneraCFDI() Dim complemento As String = "" Dim complementoConcepto As String = "" @@ -631,7 +631,7 @@ Public Class Timbrado #Region "Variables" Dim llaveByte As Byte(), certByte As Byte() - Dim llaveBase64 As String, certBase64 As String + Dim llaveBase64 As String = "", certBase64 As String = "" Dim objCan As New GoFac.GoCfdi() Dim complemento As String = "" Dim complementoConcepto As String = "" @@ -1107,7 +1107,7 @@ Public Class Timbrado Dim VentaFolioFiscal, VentaSerie, VentaFolio, VentaAbreviaturaSAT, VentaMetodoPago, ObjetoImpuesto As String - Dim VentaImportePago, VentaImporteSaldoInsoluto, VentaImporteSaldoAnterior, VentaTipoCambio, PorcentajeIVA, PorcentajeIEPS As Decimal + Dim VentaImportePago, VentaImporteSaldoInsoluto, VentaImporteSaldoAnterior, VentaTipoCambio, VentaTipoCambioMN, PorcentajeIVA, PorcentajeIEPS As Decimal Dim VentaNumParcialidad As Integer If dttpagos IsNot Nothing AndAlso dttpagos.Rows.Count > 0 Then @@ -1126,13 +1126,14 @@ Public Class Timbrado 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 + + '' si la moneda es igual, se omite el tipo de cambio de la venta If MonedaPago = VentaAbreviaturaSAT Then VentaTipoCambio = 1 - End If - - 'condiciones especiales para el pago en pesos, facturas en moneda extranjera - If MonedaPago = "MXN" AndAlso VentaAbreviaturaSAT <> "MXN" Then + VentaTipoCambioMN = 1 + 'condiciones especiales para el pago en pesos, facturas en moneda extranjera + ElseIf MonedaPago = "MXN" AndAlso VentaAbreviaturaSAT <> "MXN" Then + VentaTipoCambioMN = VentaTipoCambio VentaTipoCambio = 1 / VentaTipoCambio End If @@ -1145,8 +1146,8 @@ Public Class Timbrado .ImpPagado = VentaImportePago, .ImpSaldoInsoluto = VentaImporteSaldoInsoluto, .ImpSaldoAnt = VentaImporteSaldoAnterior, - .TipoCambioDR = VentaTipoCambio, - .EquivalenciaDR = VentaTipoCambio, + .TipoCambioDR = VentaTipoCambioMN, + .EquivalenciaDR = VentaTipoCambio, .NumParcialidad = VentaNumParcialidad, .ObjetoImpuesto = ObjetoImpuesto} 'If(drr("MetodoPago").ToString = "PUE", 0, drr("NumParcialidad").ToString.ToEntero)} @@ -1156,7 +1157,9 @@ Public Class Timbrado .Base = drp("Base").ToString.ToDecimal.RoundSQL, .TasaOCuota = drp("PorcentajeImpuesto").ToString().ToDecimal, .Impuesto = drp("TipoImpuesto").ToString, - .Importe = drp("Importe").ToString().ToDecimal.RoundSQL + .Importe = drp("Importe").ToString().ToDecimal.RoundSQL, + .BaseMN = (drp("Base").ToString.ToDecimal * VentaTipoCambioMN).RoundSQL, + .ImporteMN = (drp("Importe").ToString.ToDecimal * VentaTipoCambioMN).RoundSQL } ) @@ -3795,7 +3798,7 @@ Public Class Timbrado 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 + comprobante.Conceptos(i).Impuestos.Retenciones(k).TasaOCuota = imp.TasaOCuota.RoundSQL(6) k += 1 End If Next @@ -3829,11 +3832,11 @@ Public Class Timbrado 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 + comprobante.Impuestos.Traslados(y).Importe = Tras.Importe.RoundSQL(6) y += 1 Next - comprobante.Impuestos.TotalImpuestosTrasladados = ObjCFDITimbre.TotalImpuestosTrasladados.RoundSQL(6) + comprobante.Impuestos.TotalImpuestosTrasladados = ObjCFDITimbre.TotalImpuestosTrasladados.RoundSQL(2) comprobante.Impuestos.TotalImpuestosTrasladadosSpecified = True If ObjCFDITimbre.TotalImpuestosRetenidos > 0 Then @@ -4163,8 +4166,8 @@ Public Class Timbrado For Each docimp As CFDIConceptosImpuestos In doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "R") If docimp.TrasladooRetencion = "R" Then Dim Tra As New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRRetencionDR - Tra.BaseDR = docimp.Base.RoundSQL(6) - Tra.ImporteDR = docimp.Importe.RoundSQL(6) + Tra.BaseDR = docimp.Base.RoundSQL(2) + Tra.ImporteDR = docimp.Importe.RoundSQL(2) Tra.ImpuestoDR = docimp.Impuesto Tra.TipoFactorDR = docimp.TipoFactor Tra.TasaOCuotaDR = docimp.TasaOCuota.RoundSQL(6) @@ -4183,9 +4186,9 @@ Public Class Timbrado If docimp.TrasladooRetencion = "T" Then Dim Tra As New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRTrasladoDR - Tra.BaseDR = docimp.Base.RoundSQL(6) + Tra.BaseDR = docimp.BaseMN.RoundSQL(2) Tra.ImporteDRSpecified = True - Tra.ImporteDR = docimp.Importe.RoundSQL(6) + Tra.ImporteDR = docimp.ImporteMN.RoundSQL(2) Tra.ImpuestoDR = docimp.Impuesto Tra.TipoFactorDR = docimp.TipoFactor Tra.TasaOCuotaDRSpecified = True @@ -4223,7 +4226,7 @@ Public Class Timbrado ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota.RoundSQL(6) ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe.RoundSQL(6) - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).BaseP = Tra.Base.RoundSQL(6) + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).BaseP = Tra.Base.RoundSQL(2) x += 1 Next End If @@ -4322,10 +4325,9 @@ Public Class Timbrado 'si lleva material pelgroso, debe llevar embalaje ComCartaPorte.Mercancias.Mercancia(i).EmbalajeSpecified = True ComCartaPorte.Mercancias.Mercancia(i).Embalaje = CType([Enum].Parse(GetType(ProfactCartaPorte.c_TipoEmbalaje), "Item" & concep.Embalaje), ProfactCartaPorte.c_TipoEmbalaje) - + ComCartaPorte.Mercancias.Mercancia(i).DescripEmbalaje = concep.DescripEmbalaje End If - 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 @@ -5093,7 +5095,6 @@ Public Class Timbrado If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then - For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados cfdi.Pago20DoctoRelacionado(doc.IdDocumento, doc.Serie, @@ -5122,7 +5123,6 @@ Public Class Timbrado 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 @@ -5142,7 +5142,7 @@ Public Class Timbrado 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) + cfdi.Pago20TrasladoP(Tra.BaseMN, Tra.Impuesto, Tra.TipoFactor, Tra.TasaOCuota, Tra.ImporteMN) Next End If End If