diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 3841c4f79..899d3d43a 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -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 diff --git a/Bin/GoCfdi.dll b/Bin/GoCfdi.dll index 37c940d76..12e6171e5 100644 Binary files a/Bin/GoCfdi.dll and b/Bin/GoCfdi.dll differ