Cambios en PDF Sali

This commit is contained in:
2020-08-20 17:02:24 -07:00
parent 718567694c
commit 24ade88469

View File

@@ -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