diff --git a/Ashx/GenerarPDFFactura.ashx b/Ashx/GenerarPDFFactura.ashx index e1b597879..d97b1c057 100644 --- a/Ashx/GenerarPDFFactura.ashx +++ b/Ashx/GenerarPDFFactura.ashx @@ -9,22 +9,26 @@ Imports Extensiones Imports System.IO Imports Microsoft.Reporting.WebForms +Imports ADSistemaLibrary.SatXml +Imports ADSistemaLibrary.SatXml.XmlSatCFDI + Public Class GenerarPDFFactura : Implements IHttpHandler - Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable - Get - Return False - End Get + Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable + Get + Return False + End Get End Property - Public ReadOnly Property EsProduccion As Boolean - Get - If IsNothing(System.Configuration.ConfigurationManager.AppSettings("EsProduccion")) Then - Return False - Else - Return (System.Configuration.ConfigurationManager.AppSettings("EsProduccion").ToString() = "1") - End If - End Get + Public ReadOnly Property EsProduccion As Boolean + Get + Return False + 'If IsNothing(System.Configuration.ConfigurationManager.AppSettings("EsProduccion")) Then + ' Return False + 'Else + ' Return (System.Configuration.ConfigurationManager.AppSettings("EsProduccion").ToString() = "1") + 'End If + End Get End Property Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest @@ -46,96 +50,211 @@ Public Class GenerarPDFFactura : Implements IHttpHandler Dim Formato As String = "" - If datos.API_SALI Then - Formato = ModExtensiones.DirectorioBaseEmpresas + "Empresas/Grales/ReporteAPISali.rdlc" - Else - Formato = ModExtensiones.DirectorioBaseEmpresas + "Empresas/Grales/ReporteAPI.rdlc" - End If + Dim Xml = New System.Xml.XmlDocument() + Xml.LoadXml(datos.XML) + Dim ArchivoXML = $"{context.Server.MapPath("/")}/Temp/{DateTime.UtcNow.Ticks}_{datos.Factura.Serie}-{datos.Factura.Folio}.xml" + Xml.Save(ArchivoXML) - Parametros.Add(New ReportParameter("Empresa", datos.Empresa.Empresa)) - Parametros.Add(New ReportParameter("RFC", datos.Empresa.RFC)) - Parametros.Add(New ReportParameter("DomicilioExpedicion", datos.Empresa.DomicilioFiscal)) - Parametros.Add(New ReportParameter("Serie", datos.Factura.Serie)) - Parametros.Add(New ReportParameter("Folio", datos.Factura.Folio)) - Parametros.Add(New ReportParameter("Fecha", datos.Factura.Fecha)) - Parametros.Add(New ReportParameter("ClienteNombre", datos.Cliente.NombreComercial)) - Parametros.Add(New ReportParameter("ClienteDireccion", datos.Cliente.Calle + " Colonia " + datos.Cliente.Colonia + " " + datos.Cliente.Ciudad + ", " + datos.Cliente.Estado)) - Parametros.Add(New ReportParameter("ClienteLugar", datos.Cliente.Ciudad)) - Parametros.Add(New ReportParameter("ClienteRFC", datos.Cliente.RFC)) - Parametros.Add(New ReportParameter("ImporteLetra", datos.Factura.Total.Texto2Letras())) - Parametros.Add(New ReportParameter("FormaPago", datos.Factura.FormaPago)) - Parametros.Add(New ReportParameter("MetodoPago", datos.Factura.MetodoPago)) - Parametros.Add(New ReportParameter("SelloCFDI", datos.Timbrado.SelloCFDI)) - Parametros.Add(New ReportParameter("SelloSAT", datos.Timbrado.SelloSAT)) - Parametros.Add(New ReportParameter("CadenaOriginal", datos.Timbrado.CadenaOriginal)) - Parametros.Add(New ReportParameter("FolioFiscal", datos.Factura.UUID)) - Parametros.Add(New ReportParameter("SerieCertificadoSAT", datos.Timbrado.SerieCertificadoSAT)) - Parametros.Add(New ReportParameter("FechaCertificado", datos.Timbrado.FechaCertificado)) - Parametros.Add(New ReportParameter("CertificadoContribuyente", datos.Timbrado.CertificadoContribuyente)) - Parametros.Add(New ReportParameter("UsoCFDI", datos.Factura.UsoCFDI)) - Parametros.Add(New ReportParameter("Vencimiento", datos.Factura.FechaVencimiento)) - Parametros.Add(New ReportParameter("SubTotal", datos.Factura.SubTotal)) - Parametros.Add(New ReportParameter("Descuentos", datos.Factura.Descuentos)) - Parametros.Add(New ReportParameter("IVA", datos.Factura.IVA)) - Parametros.Add(New ReportParameter("IEPS", datos.Factura.IEPS)) - Parametros.Add(New ReportParameter("Total", datos.Factura.Total)) - Parametros.Add(New ReportParameter("QR", datos.Timbrado.QR)) + ImprimirbytesPDF(context, GenerarCFDi(context, ArchivoXML, datos), "Factura") - Dim DtDatos As New DataTable - DtDatos.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) - DtDatos.Columns.Add(New DataColumn("UnidadMedida", GetType(String))) - DtDatos.Columns.Add(New DataColumn("PS", GetType(String))) - DtDatos.Columns.Add(New DataColumn("PU", GetType(Decimal))) - DtDatos.Columns.Add(New DataColumn("IVA", GetType(Decimal))) - DtDatos.Columns.Add(New DataColumn("IEPS", GetType(Decimal))) - DtDatos.Columns.Add(New DataColumn("Descuento", GetType(Decimal))) - DtDatos.Columns.Add(New DataColumn("Total", GetType(Decimal))) + 'If datos.API_SALI Then + ' Dim Xml = New System.Xml.XmlDocument() + ' Xml.LoadXml(datos.XML) + ' Dim ArchivoXML = $"{context.Server.MapPath("/")}/Temp/{DateTime.UtcNow.Ticks}_{datos.Factura.Serie}-{datos.Factura.Folio}.xml" + ' Xml.Save(ArchivoXML) - Dim DtImpuestos As New DataTable - DtImpuestos.Columns.Add(New DataColumn("Impuesto", GetType(String))) - DtImpuestos.Columns.Add(New DataColumn("Tipo", GetType(String))) - DtImpuestos.Columns.Add(New DataColumn("Base", GetType(Decimal))) - DtImpuestos.Columns.Add(New DataColumn("TipoFactor", GetType(String))) - DtImpuestos.Columns.Add(New DataColumn("TasaOCuota", GetType(String))) - DtImpuestos.Columns.Add(New DataColumn("Importe", GetType(Decimal))) + ' ImprimirbytesPDF(context, GenerarCFDi(context, ArchivoXML, datos), "Factura") + 'Else + ' Formato = ModExtensiones.DirectorioBaseEmpresas + "Empresas/Grales/ReporteAPI.rdlc" - For Each PS In datos.Factura.ListaProductos - Dim Row = DtDatos.NewRow() - Row("Cantidad") = PS.Cantidad - Row("UnidadMedida") = PS.UnidadMedida - Row("PS") = PS.CodigoPS - Row("PU") = PS.PU - Row("IVA") = PS.IVA - Row("IEPS") = PS.IEPS - Row("Descuento") = PS.Descuento - Row("Total") = (PS.Cantidad * PS.PU) + PS.IVA + PS.IEPS + ' Parametros.Add(New ReportParameter("Empresa", datos.Empresa.Empresa)) + ' Parametros.Add(New ReportParameter("RFC", datos.Empresa.RFC)) + ' Parametros.Add(New ReportParameter("DomicilioExpedicion", datos.Empresa.DomicilioFiscal)) + ' Parametros.Add(New ReportParameter("Serie", datos.Factura.Serie)) + ' Parametros.Add(New ReportParameter("Folio", datos.Factura.Folio)) + ' Parametros.Add(New ReportParameter("Fecha", datos.Factura.Fecha)) + ' Parametros.Add(New ReportParameter("ClienteNombre", datos.Cliente.NombreComercial)) + ' Parametros.Add(New ReportParameter("ClienteDireccion", datos.Cliente.Calle + " Colonia " + datos.Cliente.Colonia + " " + datos.Cliente.Ciudad + ", " + datos.Cliente.Estado)) + ' Parametros.Add(New ReportParameter("ClienteLugar", datos.Cliente.Ciudad)) + ' Parametros.Add(New ReportParameter("ClienteRFC", datos.Cliente.RFC)) + ' Parametros.Add(New ReportParameter("ImporteLetra", datos.Factura.Total.Texto2Letras())) + ' Parametros.Add(New ReportParameter("FormaPago", datos.Factura.FormaPago)) + ' Parametros.Add(New ReportParameter("MetodoPago", datos.Factura.MetodoPago)) + ' Parametros.Add(New ReportParameter("SelloCFDI", datos.Timbrado.SelloCFDI)) + ' Parametros.Add(New ReportParameter("SelloSAT", datos.Timbrado.SelloSAT)) + ' Parametros.Add(New ReportParameter("CadenaOriginal", datos.Timbrado.CadenaOriginal)) + ' Parametros.Add(New ReportParameter("FolioFiscal", datos.Factura.UUID)) + ' Parametros.Add(New ReportParameter("SerieCertificadoSAT", datos.Timbrado.SerieCertificadoSAT)) + ' Parametros.Add(New ReportParameter("FechaCertificado", datos.Timbrado.FechaCertificado)) + ' Parametros.Add(New ReportParameter("CertificadoContribuyente", datos.Timbrado.CertificadoContribuyente)) + ' Parametros.Add(New ReportParameter("UsoCFDI", datos.Factura.UsoCFDI)) + ' Parametros.Add(New ReportParameter("Vencimiento", datos.Factura.FechaVencimiento)) + ' Parametros.Add(New ReportParameter("SubTotal", datos.Factura.SubTotal)) + ' Parametros.Add(New ReportParameter("Descuentos", datos.Factura.Descuentos)) + ' Parametros.Add(New ReportParameter("IVA", datos.Factura.IVA)) + ' Parametros.Add(New ReportParameter("IEPS", datos.Factura.IEPS)) + ' Parametros.Add(New ReportParameter("Total", datos.Factura.Total)) + ' Parametros.Add(New ReportParameter("QR", datos.Timbrado.QR)) - DtDatos.Rows.Add(Row) - Next + ' Dim DtDatos As New DataTable + ' DtDatos.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) + ' DtDatos.Columns.Add(New DataColumn("UnidadMedida", GetType(String))) + ' DtDatos.Columns.Add(New DataColumn("PS", GetType(String))) + ' DtDatos.Columns.Add(New DataColumn("PU", GetType(Decimal))) + ' DtDatos.Columns.Add(New DataColumn("IVA", GetType(Decimal))) + ' DtDatos.Columns.Add(New DataColumn("IEPS", GetType(Decimal))) + ' DtDatos.Columns.Add(New DataColumn("Descuento", GetType(Decimal))) + ' DtDatos.Columns.Add(New DataColumn("Total", GetType(Decimal))) - Dim RowImpuesto = DtImpuestos.NewRow() - RowImpuesto("Impuesto") = "IVA" - RowImpuesto("Tipo") = "Traslado" - RowImpuesto("Base") = datos.Factura.SubTotal - RowImpuesto("TipoFactor") = "Tasa" - RowImpuesto("TasaOCuota") = "16%" - RowImpuesto("Importe") = datos.Factura.IVA + ' Dim DtImpuestos As New DataTable + ' DtImpuestos.Columns.Add(New DataColumn("Impuesto", GetType(String))) + ' DtImpuestos.Columns.Add(New DataColumn("Tipo", GetType(String))) + ' DtImpuestos.Columns.Add(New DataColumn("Base", GetType(Decimal))) + ' DtImpuestos.Columns.Add(New DataColumn("TipoFactor", GetType(String))) + ' DtImpuestos.Columns.Add(New DataColumn("TasaOCuota", GetType(String))) + ' DtImpuestos.Columns.Add(New DataColumn("Importe", GetType(Decimal))) - DtImpuestos.Rows.Add(RowImpuesto) + ' For Each PS In datos.Factura.ListaProductos + ' Dim Row = DtDatos.NewRow() + ' Row("Cantidad") = PS.Cantidad + ' Row("UnidadMedida") = PS.UnidadMedida + ' Row("PS") = PS.CodigoPS + ' Row("PU") = PS.PU + ' Row("IVA") = PS.IVA + ' Row("IEPS") = PS.IEPS + ' Row("Descuento") = PS.Descuento + ' Row("Total") = (PS.Cantidad * PS.PU) + PS.IVA + PS.IEPS - ListaDS.Add(New ReportDataSource("DsProductos", DtDatos)) - ListaDS.Add(New ReportDataSource("DsImpuestos", DtImpuestos)) + ' DtDatos.Rows.Add(Row) + ' Next - ImprimirbytesPDF(context, StreamPDF(context, Formato, ListaDS, Parametros), "Factura") + ' Dim RowImpuesto = DtImpuestos.NewRow() + ' RowImpuesto("Impuesto") = "IVA" + ' RowImpuesto("Tipo") = "Traslado" + ' RowImpuesto("Base") = datos.Factura.SubTotal + ' RowImpuesto("TipoFactor") = "Tasa" + ' RowImpuesto("TasaOCuota") = "16%" + ' RowImpuesto("Importe") = datos.Factura.IVA + + ' DtImpuestos.Rows.Add(RowImpuesto) + + ' ListaDS.Add(New ReportDataSource("DsProductos", DtDatos)) + ' ListaDS.Add(New ReportDataSource("DsImpuestos", DtImpuestos)) + + ' ImprimirbytesPDF(context, StreamPDF(context, Formato, ListaDS, Parametros), "Factura") + 'End If + Else + retorno = "no hay datossss" End If Catch ex As Exception + retorno = ex.ToString() ex.GuardaLog(ex.ToString()) context.Response.Write(retorno) End Try End Sub + Private Function GenerarCFDi(ByVal context As HttpContext, RutaXml As String, datos As ParametroWS) As Byte() + Dim bytes As Byte() = Nothing + + Dim objxml As XmlSatCFDI = XmlSatCFDI.readXML(RutaXml) + + Dim rutaReporte As String = "\Empresas\Grales\Formatos\FacturaSALI.rdlc" + + Dim QR As ClbNegBICFDv3_2.ClsNegCBBGenerar = New ClbNegBICFDv3_2.ClsNegCBBGenerar() + Dim cQr As Byte() = QR.GenerarCBBBytes(objxml.emisor.Rfc, objxml.receptor.Rfc, objxml.comprobante.Total, objxml.complemento.UUID) + Dim parametros As List(Of ReportParameter) = New List(Of ReportParameter)() + parametros.Add(New ReportParameter("comprobante_Certificado", objxml.comprobante.Certificado)) + parametros.Add(New ReportParameter("comprobante_CondicionesDePago", objxml.comprobante.CondicionesDePago)) + parametros.Add(New ReportParameter("comprobante_Confirmacion", objxml.comprobante.Confirmacion)) + parametros.Add(New ReportParameter("comprobante_Fecha", objxml.comprobante.Fecha)) + parametros.Add(New ReportParameter("comprobante_Serie", objxml.comprobante.Serie)) + parametros.Add(New ReportParameter("comprobante_Folio", objxml.comprobante.Folio)) + parametros.Add(New ReportParameter("comprobante_Descuento", objxml.comprobante.Descuento.ToString("N2"))) + parametros.Add(New ReportParameter("comprobante_SubTotal", objxml.comprobante.SubTotal.ToString("N2"))) + parametros.Add(New ReportParameter("comprobante_Total", objxml.comprobante.Total.ToString("N2"))) + parametros.Add(New ReportParameter("comprobante_Version", objxml.comprobante.Version)) + parametros.Add(New ReportParameter("comprobante_TipoDeComprobante", objxml.comprobante.TipoDeComprobanteTexto)) + parametros.Add(New ReportParameter("comprobante_FormaPago", objxml.comprobante.FormaPagoTexto)) + parametros.Add(New ReportParameter("comprobante_LugarExpedicion", objxml.comprobante.LugarExpedicion)) + parametros.Add(New ReportParameter("comprobante_NoCertificado", objxml.comprobante.NoCertificado)) + parametros.Add(New ReportParameter("comprobante_Sello", objxml.comprobante.Sello)) + parametros.Add(New ReportParameter("comprobante_Moneda", objxml.comprobante.Moneda)) + parametros.Add(New ReportParameter("comprobante_TipoCambio", objxml.comprobante.TipoCambio.ToString("N2"))) + parametros.Add(New ReportParameter("comprobante_MetodoPago", objxml.comprobante.MetodoPagoTexto)) + parametros.Add(New ReportParameter("emisor_Rfc", objxml.emisor.Rfc)) + parametros.Add(New ReportParameter("emisor_Nombre", objxml.emisor.Nombre)) + parametros.Add(New ReportParameter("emisor_RegimenFiscal", objxml.emisor.RegimenFiscalTexto)) + parametros.Add(New ReportParameter("emisor_Direccion", datos.Empresa.DomicilioFiscal)) + parametros.Add(New ReportParameter("receptor_Rfc", objxml.receptor.Rfc)) + parametros.Add(New ReportParameter("receptor_Nombre", objxml.receptor.Nombre)) + parametros.Add(New ReportParameter("receptor_NumRegIdTrib", objxml.receptor.NumRegIdTrib)) + parametros.Add(New ReportParameter("receptor_ResidenciaFiscal", objxml.receptor.ResidenciaFiscal)) + parametros.Add(New ReportParameter("receptor_UsoCFDI", objxml.receptor.UsoCFDITexto)) + parametros.Add(New ReportParameter("complemento_FechaTimbrado", objxml.complemento.FechaTimbrado)) + parametros.Add(New ReportParameter("complemento_NoCertificadoSAT", objxml.complemento.NoCertificadoSAT)) + parametros.Add(New ReportParameter("complemento_RfcProvCertif", objxml.complemento.RfcProvCertif)) + parametros.Add(New ReportParameter("complemento_SelloCFD", objxml.complemento.SelloCFD)) + parametros.Add(New ReportParameter("complemento_SelloSAT", objxml.complemento.SelloSAT)) + parametros.Add(New ReportParameter("complemento_UUID", objxml.complemento.UUID)) + parametros.Add(New ReportParameter("complemento_CadenaOriginal", objxml.complemento.CadenaOriginal)) + + + Dim ds As New List(Of ReportDataSource) + + Dim rdsTotales As ReportDataSource = New ReportDataSource() + Dim ltotales As List(Of utilValores) = New List(Of utilValores)() + ltotales.Add(New utilValores("Subtotal", objxml.comprobante.SubTotal.ToString("N2"))) + + If objxml.comprobante.Descuento > 0 Then + ltotales.Add(New utilValores("Descuento", objxml.comprobante.Descuento.ToString("N2"))) + End If + + For Each item As CFDIImpuesto In objxml.Impuestos + + If item.Importe > 0 Then + Dim TasaOCuota As Decimal = 0 + Decimal.TryParse(item.TasaOCuota, TasaOCuota) + ltotales.Add(New utilValores($"Impuestos {item.Tipo} {item.ImpuestoTexto} {(If(item.TipoFactor = "Tasa", (TasaOCuota * 100).ToString("N4"), item.TasaOCuota))} {(If(item.TipoFactor = "Tasa", "%", ""))}", item.Importe.ToString("N2"))) + End If + Next + + ltotales.Add(New utilValores("Total", objxml.comprobante.Total.ToString("N2"))) + rdsTotales.Name = "dsTotales" + rdsTotales.Value = ltotales + ds.Add(rdsTotales) + + Dim rds2 As ReportDataSource = New ReportDataSource() + Dim limagenes As List(Of utilImage) = New List(Of utilImage)() + limagenes.Add(New utilImage(cQr)) + rds2.Name = "dsImagenes" + rds2.Value = limagenes + ds.Add(rds2) + + Dim rdsrelacionados As ReportDataSource = New ReportDataSource() + rdsrelacionados.Name = "dsRelacionados" + rdsrelacionados.Value = objxml.cFDIRelacionados + ds.Add(rdsrelacionados) + + Dim rds1 As ReportDataSource = New ReportDataSource() + rds1.Name = "dsConceptos" + rds1.Value = objxml.GetConceptosforpdf() + + ds.Add(rds1) + + Try + bytes = StreamPDF(context, rutaReporte, ds, parametros) + + System.IO.File.Delete(RutaXml) + Catch ex As Exception + + End Try + + Return bytes + + End Function + Public Function StreamPDF(ByVal context As HttpContext, RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing) As Byte() 'limpio ReportViwer Dim sw As New System.Diagnostics.Stopwatch() @@ -150,8 +269,8 @@ Public Class GenerarPDFFactura : Implements IHttpHandler If EsProduccion Then - Dim CveUsuario As Integer = 0 - Dim CveEmpresa As Integer = 0 + Dim CveUsuario As Integer = -1 + Dim CveEmpresa As Integer = -1 Dim wsreport As New WSRDLC.WebServiceSoapClient Dim params As New List(Of WSRDLC.ReportParameter) @@ -175,6 +294,7 @@ Public Class GenerarPDFFactura : Implements IHttpHandler Bytes = wsreport.StreamPDFBytes(RutaReporte, ds, params.ToArray(), NombreArchivo, Formato, CveEmpresa, CveUsuario) wsreport = Nothing params = Nothing + Else If IsNothing(MR) Then MR = New ReportViewer Try @@ -364,8 +484,10 @@ Public Class GenerarPDFFactura : Implements IHttpHandler Public Property Factura As FacturaWS Public Property Cliente As ClienteWS Public Property Empresa As EmpresaWS - Public Property Timbrado As DatosSATWS Public Property API_SALI As Boolean + Public Property Timbrado As DatosSATWS + + Public Property XML As String End Class diff --git a/Compras/Compras.aspx b/Compras/Compras.aspx index 7537d835a..8e172dfe6 100644 --- a/Compras/Compras.aspx +++ b/Compras/Compras.aspx @@ -650,7 +650,7 @@
-
+
@@ -658,7 +658,7 @@ <%----%>
-
+
@@ -1232,7 +1232,7 @@ - + @@ -2559,11 +2559,11 @@ - +

- +

@@ -3895,9 +3895,9 @@