-- complemento de pago Revisión B

This commit is contained in:
2024-02-08 22:45:05 -07:00
parent d7fb2b0c0d
commit 7bd655bedc
2 changed files with 106 additions and 116 deletions

View File

@@ -654,134 +654,131 @@ Public Class Timbrado
Return retorno
End Function
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,
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,
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
'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,
' 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,
' 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
' 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.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.Comprobante.LugarExpedicion = LugarExpedicion
' Timbre.Emisor.RegimenFiscal = EmisorRegimenFiscal
' Timbre.Emisor.Nombre = EmisorNombre
' Timbre.Emisor.RFC = EmisorRFC
Timbre.Emisor.RegimenFiscal = EmisorRegimenFiscal
Timbre.Emisor.Nombre = EmisorNombre
Timbre.Emisor.RFC = EmisorRFC
' Timbre.Receptor.RFC = ReceptorRFC
' Timbre.Receptor.Nombre = ReceptorNombre
' Timbre.Receptor.UsoCFDI = UsoCFDI
Timbre.Receptor.RFC = ReceptorRFC
Timbre.Receptor.Nombre = ReceptorNombre
Timbre.Receptor.UsoCFDI = UsoCFDI
' If CFDIRelacionado <> "-1" And CFDIRelacionado <> "" Then
' Timbre.CFDIRelacionados.TipoRelacion = "04"
' Timbre.CFDIRelacionados.UUID.Add(CFDIRelacionado)
' End If
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 = ""}
' Timbre.Conceptos.Add(concepto)
'detalles
' Select Case FormaPago
' Case "01"
' CuentaPago = ""
' CuentaBeneficiario = ""
' End Select
Dim concepto As New CFDIConceptos With {.Cantidad = 1,
.Descripcion = "Pago",
.ValorUnitario = 0,
.Importe = 0,
.Unidad = "",
.ClaveUnidad = "ACT",
.ClaveProdServ = "84111506",
.Noidentificacion = ""}
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 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
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).RoundSQL
Timbre.ComplementoPagos.TipoCambioP = If(EsCancelacion, TipoCambioCancelacion, TipoCambioP)
' Dim ImporteCancelacion As Decimal = 1
' Dim MonedaCancelacion As String = "MXN"
' 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
' 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).RoundSQL
' Timbre.ComplementoPagos.TipoCambioP = If(EsCancelacion, TipoCambioCancelacion, TipoCambioP)
Dim VentaFolioFiscal, VentaSerie, VentaFolio, VentaAbreviaturaSAT, VentaMetodoPago As String
Dim VentaImportePago, VentaImporteSaldoInsoluto, VentaImporteSaldoAnterior, VentaTipoCambio, PorcentajeIVA, PorcentajeIEPS As Decimal
Dim VentaNumParcialidad As Integer
' Dim VentaFolioFiscal, VentaSerie, VentaFolio, VentaAbreviaturaSAT, VentaMetodoPago 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
' 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
' si la moneda es igual, se omite el tipo de cambio de la venta
If MonedaPago = VentaAbreviaturaSAT Then VentaTipoCambio = 0
' 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
' ' 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
' '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} 'If(drr("MetodoPago").ToString = "PUE", 0, drr("NumParcialidad").ToString.ToEntero)}
Timbre.ComplementoPagos.DocumentosRelacionados.Add(doc)
' ' 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} 'If(drr("MetodoPago").ToString = "PUE", 0, drr("NumParcialidad").ToString.ToEntero)}
' 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"})
' 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"})
' If PorcentajeIEPS > 0 Then Timbre.ComplementoPagos.Impuestos.Add(New CFDIConceptosImpuestos With {.Base = VentaImportePago * PorcentajeIEPS, .TasaOCuota = PorcentajeIEPS, .Impuesto = "003"})
'Next
' 'Next
Return Timbre
' Return Timbre
End Function
'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,
@@ -2732,8 +2729,8 @@ Public Class Timbrado
doc.ImpPagado,
doc.ImpSaldoInsoluto,
doc.ObjetoImpuesto)
If doc.Impuestos IsNot Nothing Then
If doc.Impuestos IsNot Nothing Then
''retenciones
If (doc.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then
Dim j As Integer = 0
@@ -2744,7 +2741,6 @@ Public Class Timbrado
j += 1
Next
End If
''traslados
If (doc.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then
Dim j As Integer = 0
@@ -2756,7 +2752,6 @@ Public Class Timbrado
Next
End If
End If
Next
If (docp.Retenciones).Count > 0 Then
@@ -2974,8 +2969,6 @@ Public Class Timbrado
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)
@@ -2986,13 +2979,11 @@ Public Class Timbrado
End Try
#End Region
sw.Stop()
swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
swmili = sw.ElapsedMilliseconds
sw.Start()
Dim RespGeneracionXML As String = GenerarXMLGoCFDIv40(cfdi, EmisorRFC, ArchivoCertificado, llaveBase64, Clave, Ventas, UsuarioActual, CvePACEspecial)
sw.Stop()
@@ -3012,7 +3003,6 @@ Public Class Timbrado
'Verifica el error
If cfdi.Mensaje = "" Then
Dim SelloCfdi As String
UUID = cfdi.CfdiInfo.UUID
SelloCfdi = cfdi.CfdiInfo.SelloCfdi

Binary file not shown.