-- complemento de pago Revisión B
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
BIN
Bin/GoCfdi.dll
BIN
Bin/GoCfdi.dll
Binary file not shown.
Reference in New Issue
Block a user