From 21ef7fa334881166ba86c8c887eade04ff4f2316 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Tue, 24 Aug 2021 19:50:06 -0700 Subject: [PATCH] Generacion automatica de PDF de traslado --- Compras/PopUpVerFactura.aspx.vb | 389 +++++++++++++++++--------------- 1 file changed, 208 insertions(+), 181 deletions(-) diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb index 8ebb9c854..53ad84d4f 100644 --- a/Compras/PopUpVerFactura.aspx.vb +++ b/Compras/PopUpVerFactura.aspx.vb @@ -907,213 +907,240 @@ Partial Class PopUpVerFactura Dim Path As String = String.Format("{0}\{1}\{2}\{3}.{4}", UsuarioActual.Empresa.Ruta, Parametros("EXT").ToString, Parametros("TIPODOCTO").ToString, Parametros("FOLIO").ToString, Exten) Dim Archivo As New System.IO.FileInfo(Path) - If Archivo.Exists Then - HttpContext.Current.Response.Clear() - HttpContext.Current.Response.ClearContent() - HttpContext.Current.Response.ContentType = If(IO.Path.GetExtension(Archivo.Name) = "xml", "application/xml", "application/pdf") - HttpContext.Current.Response.AppendHeader("Content-disposition", String.Format("attachment; filename={0}", Archivo.Name)) - HttpContext.Current.Response.AddHeader("Content-Length", Archivo.Length.ToString()) - HttpContext.Current.Response.TransmitFile(Path) - 'HttpContext.Current.Response.Flush() - HttpContext.Current.Response.End() + If Archivo.Exists Then + DescargarArchivoPDFTraslado(Archivo, Path) Else - + If Exten = "pdf" Then + GeneraPDFFactura(Parametros("CVEMOVIMIENTO").ToString.ToEntero) + Archivo = New System.IO.FileInfo(Path) + If Archivo.Exists Then + DescargarArchivoPDFTraslado(Archivo, Path) + End If + End If End If Archivo = Nothing End If End Sub + Private Sub DescargarArchivoPDFTraslado(Archivo As System.IO.FileInfo, path As String) + HttpContext.Current.Response.Clear() + HttpContext.Current.Response.ClearContent() + HttpContext.Current.Response.ContentType = If(IO.Path.GetExtension(Archivo.Name) = "xml", "application/xml", "application/pdf") + HttpContext.Current.Response.AppendHeader("Content-disposition", String.Format("attachment; filename={0}", Archivo.Name)) + HttpContext.Current.Response.AddHeader("Content-Length", Archivo.Length.ToString()) + HttpContext.Current.Response.TransmitFile(path) + 'HttpContext.Current.Response.Flush() + HttpContext.Current.Response.End() + End Sub - 'Protected Sub LnkGenerarPDF_Click(sender As Object, e As EventArgs) - ' GeneraPDFFactura() - 'End Sub - 'Private Sub GeneraPDFFactura() - ' Try - ' Dim objFactura = CreaObjetosVenta() - ' PdfFactura(objFactura) - ' objFactura.Dispose() - ' Catch ex As Exception - ' OnError("Ocurrió un error al generar el PDF", ex) - ' End Try - 'End Sub + Private Sub GeneraPDFFactura(CveMovimiento As Integer) + Try + Dim objFactura = CreaObjetosTraslado(CveMovimiento) + If objFactura IsNot Nothing Then + PdfFactura(objFactura) + objFactura.Dispose() + End If + Catch ex As Exception + OnError("Ocurrió un error al generar el PDF", ex) + End Try + End Sub - 'Private Function CreaObjetosTraslado() As Modelos.Factura - ' Dim ObjFactura = New Modelos.Factura - ' ObjFactura.Version = "3.3" - ' ObjFactura.CveUsuario = UsuarioActual.CveUsuario - ' ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa - ' ObjFactura.TipoCambio = 0 - ' ObjFactura.ConvertirPesos = False - ' ObjFactura.TipoCambio = 0 - ' ObjFactura.CveMoneda = 1 - ' ObjFactura.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {ObjFactura.CveMoneda} ") - ' ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", "CveMoneda = 1") - ' ObjFactura.MonedaAbreviatura = GlobalDTMonedas.FiltroPrimeroValor("Abreviatura", $"CveMoneda = {ObjFactura.CveMoneda} ") - ' ObjFactura.TipoDocto = "Tra" - ' ObjFactura.RefDocto = "" - ' ObjFactura.Folio = Folio.ToEntero - ' ObjFactura.Serie = "Tra" - ' ObjFactura.CveMesa = -1 - ' ObjFactura.Fecha = Now - ' ObjFactura.CvePrePoliza = -1 - ' ObjFactura.FechaPago = Now - ' ObjFactura.MotivoDescuento = "" - ' ObjFactura.Observaciones = "" - ' ObjFactura.FechaEjecucion = Now - ' ObjFactura.UsuarioCreo = UsuarioActual.Usuario - ' ObjFactura.CveCondicionEntrega = -1 - ' ObjFactura.CondicionEntrega = "" - ' ObjFactura.NumeroCuenta = "" - ' ObjFactura.CondicionesPago = 0 - ' ObjFactura.FormaPago = 0 - ' ObjFactura.PedidoContrato = "" - ' ObjFactura.OrdenCompra = "" - ' ObjFactura.NumeroContrato = "" - ' ObjFactura.NumeroDescripcionContrato = "" - ' ObjFactura.DescripcionContrato = "" - ' ObjFactura.CveCorte = -1 - ' ObjFactura.TipoDocumento = "Traspaso" - ' ObjFactura.Alfa1 = "" - ' ObjFactura.Alfa2 = "" - ' ObjFactura.Alfa3 = "" - ' ObjFactura.Descuento = 0 - ' ObjFactura.Amortizacion = 0 - ' ObjFactura.CveContrato = 0 - ' ObjFactura.CveVendedor = 0 - ' ObjFactura.FechaVencimiento = Now - ' ObjFactura.TipoEstatus = 0 - ' ObjFactura.Det_OrdenCompra = "" - ' ObjFactura.Inv_CveEstatusEntrega = 0 - ' ObjFactura.FormaPago33 = "" - ' ObjFactura.MetodoPago33 = "" - ' ObjFactura.UsoCFDI = "" - ' ObjFactura.CveClienteSucursal = 0 - ' Dim CveSubProyecto As Integer = -1 - ' If GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros($"CveAlmacen = {DdlAlmacen.SelectedValue}").Rows.Count > 0 Then - ' CveSubProyecto = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros($"CveAlmacen = {DdlAlmacen.SelectedValue}").Rows(0)("CveSubProyecto").ToString.ToEntero - ' End If - ' ObjFactura.CveSubProyecto = CveSubProyecto - ' ObjFactura.CveSubProyectoCobranza = CveSubProyecto - ' ObjFactura.CveSubProyectoEjecucion = CveSubProyecto + Private Function CreaObjetosTraslado(CveMovimiento As Integer) As Modelos.Factura + Dim Folio As Integer = -1 + Dim CveAlmacen As Integer = 0 + Dim DtDetalle As DataTable = Nothing - ' ObjFactura.SubTotal = 0 - ' ObjFactura.Descuento = 0 - ' ObjFactura.Amortizacion = 0 - ' ObjFactura.IVA = 0 - ' ObjFactura.RetIVA = 0 - ' ObjFactura.RetISR = 0 - ' ObjFactura.IEPS = 0 - ' ObjFactura.Total = 0 - ' ObjFactura.RFCReceptor = "XAXX010101000" + Using ObjMovimientos As New ClsInventarios + If ObjMovimientos.GetMovimientos(CveMovimiento, -1, -1, UsuarioActual.CveEmpresa) AndAlso ObjMovimientos.DtResultados.Rows.Count = 1 Then + Folio = ObjMovimientos.Folio + CveAlmacen = ObjMovimientos.CveAlmacen + End If - ' Dim dt As DataTable = DtMovimientos.Copy + If ObjMovimientos.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then + DtDetalle = ObjMovimientos.DtResultados.Copy + End If + End Using - ' dt.Columns.Add("TotalImporte", Type.GetType("System.Double")) - ' dt.Columns.Add("Descuento", Type.GetType("System.Double")) - ' dt.Columns.Add("UM") - ' dt.Columns.Add("SATClaveUM") - ' dt.Columns.Add("SATClaveProdServ") - ' dt.Columns.Add("Noidentificacion") - ' dt.Columns.Add("CuentaPredial") - ' dt.Columns.Add("Obs") - ' dt.Columns.Add("ImporteIVA", Type.GetType("System.Double")) - ' dt.Columns.Add("PorcentajeIVA", Type.GetType("System.Double")) + If Folio > 0 AndAlso DtDetalle IsNot Nothing AndAlso DtDetalle.Rows.Count > 0 Then + Dim ObjFactura = New Modelos.Factura + ObjFactura.Version = "3.3" + ObjFactura.CveUsuario = UsuarioActual.CveUsuario + ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa + ObjFactura.TipoCambio = 0 + ObjFactura.ConvertirPesos = False + ObjFactura.TipoCambio = 0 + ObjFactura.CveMoneda = 1 + ObjFactura.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {ObjFactura.CveMoneda} ") + ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", "CveMoneda = 1") + ObjFactura.MonedaAbreviatura = GlobalDTMonedas.FiltroPrimeroValor("Abreviatura", $"CveMoneda = {ObjFactura.CveMoneda} ") + ObjFactura.TipoDocto = "Tra" + ObjFactura.RefDocto = "" + ObjFactura.Folio = Folio + ObjFactura.Serie = "Tra" + ObjFactura.CveMesa = -1 + ObjFactura.Fecha = Now + ObjFactura.CvePrePoliza = -1 + ObjFactura.FechaPago = Now + ObjFactura.MotivoDescuento = "" + ObjFactura.Observaciones = "" + ObjFactura.FechaEjecucion = Now + ObjFactura.UsuarioCreo = UsuarioActual.Usuario + ObjFactura.CveCondicionEntrega = -1 + ObjFactura.CondicionEntrega = "" + ObjFactura.NumeroCuenta = "" + ObjFactura.CondicionesPago = 0 + ObjFactura.FormaPago = 0 + ObjFactura.PedidoContrato = "" + ObjFactura.OrdenCompra = "" + ObjFactura.NumeroContrato = "" + ObjFactura.NumeroDescripcionContrato = "" + ObjFactura.DescripcionContrato = "" + ObjFactura.CveCorte = -1 + ObjFactura.TipoDocumento = "Traspaso" + ObjFactura.Alfa1 = "" + ObjFactura.Alfa2 = "" + ObjFactura.Alfa3 = "" + ObjFactura.Descuento = 0 + ObjFactura.Amortizacion = 0 + ObjFactura.CveContrato = 0 + ObjFactura.CveVendedor = 0 + ObjFactura.FechaVencimiento = Now + ObjFactura.TipoEstatus = 0 + ObjFactura.Det_OrdenCompra = "" + ObjFactura.Inv_CveEstatusEntrega = 0 + ObjFactura.FormaPago33 = "" + ObjFactura.MetodoPago33 = "" + ObjFactura.UsoCFDI = "" + ObjFactura.CveClienteSucursal = 0 + Dim CveSubProyecto As Integer = -1 + If GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros($"CveAlmacen = {CveAlmacen}").Rows.Count > 0 Then + CveSubProyecto = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros($"CveAlmacen = {CveAlmacen}").Rows(0)("CveSubProyecto").ToString.ToEntero + End If + ObjFactura.CveSubProyecto = CveSubProyecto + ObjFactura.CveSubProyectoCobranza = CveSubProyecto + ObjFactura.CveSubProyectoEjecucion = CveSubProyecto + + ObjFactura.SubTotal = 0 + ObjFactura.Descuento = 0 + ObjFactura.Amortizacion = 0 + ObjFactura.IVA = 0 + ObjFactura.RetIVA = 0 + ObjFactura.RetISR = 0 + ObjFactura.IEPS = 0 + ObjFactura.Total = 0 + ObjFactura.RFCReceptor = "XAXX010101000" - ' For Each Row As DataRow In dt.Rows - ' Row("TotalImporte") = Row("Total") - ' Row("Descuento") = 0 - ' Row("UM") = Row("UnidadMedida") - ' Row("SATClaveUM") = Row("SATClaveUnidadMedida") - ' Row("SATClaveProdServ") = Row("SATClavePS") - ' Row("Noidentificacion") = Row("Codigo") - ' Row("CuentaPredial") = "" - ' Row("Obs") = Row("Observaciones") - ' Row("ImporteIVA") = 0 - ' Row("PorcentajeIVA") = 0 - ' Next - ' 'DETALLES - ' ObjFactura.DtDetalle = dt + DtDetalle.Columns.Add("TotalImporte", Type.GetType("System.Double")) + DtDetalle.Columns.Add("Descuento", Type.GetType("System.Double")) + DtDetalle.Columns.Add("UM") + DtDetalle.Columns.Add("SATClaveUM") + DtDetalle.Columns.Add("SATClaveProdServ") + DtDetalle.Columns.Add("Noidentificacion") + DtDetalle.Columns.Add("CuentaPredial") + DtDetalle.Columns.Add("Obs") + DtDetalle.Columns.Add("ImporteIVA", Type.GetType("System.Double")) + DtDetalle.Columns.Add("PorcentajeIVA", Type.GetType("System.Double")) - ' 'SUBPROYECTO - ' ObjFactura.SetSubProyectoMatriz(Me) - ' ObjFactura.SetSubProyecto(Me) - ' ObjFactura.Inv_CveMovimiento = Me.CveMovimiento + For Each Row As DataRow In DtDetalle.Rows + Row("TotalImporte") = Row("Total") + Row("Descuento") = 0 + Row("UM") = Row("UnidadMedida") + Row("SATClaveUM") = Row("SATClaveUnidadMedida") + Row("SATClaveProdServ") = Row("SATClavePS") + Row("Noidentificacion") = Row("Codigo") + Row("CuentaPredial") = "" + Row("Obs") = Row("Observaciones") + Row("ImporteIVA") = 0 + Row("PorcentajeIVA") = 0 + Next - ' ObjFactura.Timbre = PreParaTimbreTraslado(ObjFactura) + 'DETALLES + ObjFactura.DtDetalle = DtDetalle - ' Return ObjFactura - 'End Function - 'Private Function PreParaTimbreTraslado(Obj As Modelos.Factura) As CFDITimbre - ' Dim Timbre As New CFDITimbre - ' Timbre.Comprobante.TipoComprobante = "T" - ' Timbre.Comprobante.Folio = Obj.Folio.ToString - ' Timbre.Comprobante.Serie = Obj.Serie - ' Timbre.Comprobante.Fecha = Obj.Fecha - ' Timbre.Comprobante.FormadePago = Obj.FormaPagoSAT33 - ' Timbre.Comprobante.CondicionesdePago = Obj.FormaPago33 - ' Timbre.Comprobante.MetodoPago = Obj.ClaveMetodoPagoSAT - ' Timbre.Comprobante.Subtotal = Obj.SubTotal - ' Timbre.Comprobante.Descuentos = Obj.Descuento - ' Timbre.Comprobante.Moneda = Obj.MonedaSAT - ' Timbre.Comprobante.TipoCambio = If(Obj.CveMoneda = 1, "1", Obj.TipoCambio.ToString) - ' Timbre.Comprobante.Total = Obj.Total + 'SUBPROYECTO + ObjFactura.SetSubProyectoMatriz(Me) + ObjFactura.SetSubProyecto(Me) - ' Timbre.Comprobante.LugarExpedicion = Obj.SubProyecto.CP - ' Timbre.Comprobante.Confirmacion = "" + ObjFactura.Inv_CveMovimiento = CveMovimiento - ' Timbre.Receptor.RFC = "XAXX010101000" - ' Timbre.Receptor.Nombre = UsuarioActual.Empresa.Empresa - ' Timbre.Receptor.UsoCFDI = "P01" + ObjFactura.Timbre = PreParaTimbreTraslado(ObjFactura) + Return ObjFactura + End If - ' Dim totSubTotal As Decimal = Obj.SubTotal - ' Dim totIVA As Decimal = Obj.IVA - ' Dim totRetIVA As Decimal = Obj.RetIVA - ' Dim totRetISR As Decimal = Obj.RetISR - ' Dim i As Integer = 1 + Return Nothing - ' 'DETALLES - ' Dim tPS As String = "" + End Function + Private Function PreParaTimbreTraslado(Obj As Modelos.Factura) As CFDITimbre + Dim Timbre As New CFDITimbre + Timbre.Comprobante.TipoComprobante = "T" + Timbre.Comprobante.Folio = Obj.Folio.ToString + Timbre.Comprobante.Serie = Obj.Serie + Timbre.Comprobante.Fecha = Obj.Fecha + Timbre.Comprobante.FormadePago = Obj.FormaPagoSAT33 + Timbre.Comprobante.CondicionesdePago = Obj.FormaPago33 + Timbre.Comprobante.MetodoPago = Obj.ClaveMetodoPagoSAT + Timbre.Comprobante.Subtotal = Obj.SubTotal + Timbre.Comprobante.Descuentos = Obj.Descuento + Timbre.Comprobante.Moneda = Obj.MonedaSAT + Timbre.Comprobante.TipoCambio = If(Obj.CveMoneda = 1, "1", Obj.TipoCambio.ToString) + Timbre.Comprobante.Total = Obj.Total - ' For Each drr As DataRow In Obj.DtDetalle.Rows - ' If drr("PS").ToString.Length = 1 Then - ' tPS = drr("Obs").ToString - ' Else - ' If drr("PS").ToString.Length = 0 Then - ' tPS = "" - ' Else - ' tPS = String.Format("{0} {1}", drr("PS"), drr("Obs")) - ' End If - ' End If + Timbre.Comprobante.LugarExpedicion = Obj.SubProyecto.CP + Timbre.Comprobante.Confirmacion = "" - ' 'CONDICIONANTE, ESPECIAL - ' If UsuarioActual.CveEmpresa = 15 Then drr("UM") = "" 'LES COMENTAN QUE NO DEBE IR LA ETIQUETA DE LA UNIDAD EN EL PRODUCTO + Timbre.Receptor.RFC = "XAXX010101000" + Timbre.Receptor.Nombre = UsuarioActual.Empresa.Empresa + Timbre.Receptor.UsoCFDI = "P01" - ' Dim concepto As New CFDIConceptos With {.Cantidad = drr("Cantidad").ToString.ToDecimal, - ' .Descripcion = tPS, - ' .ValorUnitario = drr("PU").ToString.ToDecimal, - ' .Importe = drr("TotalImporte").ToString.ToDecimal, - ' .Descuento = drr("Descuento").ToString.ToDecimal, - ' .Unidad = drr("UM").ToString, - ' .ClaveUnidad = drr("SATClaveUM").ToString, - ' .ClaveProdServ = drr("SATClaveProdServ").ToString, - ' .Noidentificacion = drr("Noidentificacion").ToString, - ' .CuentaPredial = drr("CuentaPredial").ToString} - ' 'VERIFICA SUMA SUBTOTALES - ' If i = Obj.DtDetalle.Rows.Count AndAlso totSubTotal <> concepto.Importe Then 'PROCESO DE AJUSTA DE DECIMALES - ' concepto.Importe = totSubTotalW - ' End If - ' totSubTotal = totSubTotal - concepto.Importe + Dim totSubTotal As Decimal = Obj.SubTotal + Dim totIVA As Decimal = Obj.IVA + Dim totRetIVA As Decimal = Obj.RetIVA + Dim totRetISR As Decimal = Obj.RetISR + Dim i As Integer = 1 - ' 'SIEMPRE ESTAMOS AGREGANDO EL IVA - ' 'concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeIVA").ToString.ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString.ToDecimal}) + 'DETALLES + Dim tPS As String = "" - ' Timbre.Conceptos.Add(concepto) - ' i += 1 - ' Next - ' Return Timbre - 'End Function + For Each drr As DataRow In Obj.DtDetalle.Rows + If drr("PS").ToString.Length = 1 Then + tPS = drr("Obs").ToString + Else + If drr("PS").ToString.Length = 0 Then + tPS = "" + Else + tPS = String.Format("{0} {1}", drr("PS"), drr("Obs")) + End If + End If + + 'CONDICIONANTE, ESPECIAL + If UsuarioActual.CveEmpresa = 15 Then drr("UM") = "" 'LES COMENTAN QUE NO DEBE IR LA ETIQUETA DE LA UNIDAD EN EL PRODUCTO + + Dim concepto As New CFDIConceptos With {.Cantidad = drr("Cantidad").ToString.ToDecimal, + .Descripcion = tPS, + .ValorUnitario = drr("PU").ToString.ToDecimal, + .Importe = drr("TotalImporte").ToString.ToDecimal, + .Descuento = drr("Descuento").ToString.ToDecimal, + .Unidad = drr("UM").ToString, + .ClaveUnidad = drr("SATClaveUM").ToString, + .ClaveProdServ = drr("SATClaveProdServ").ToString, + .Noidentificacion = drr("Noidentificacion").ToString, + .CuentaPredial = drr("CuentaPredial").ToString} + 'VERIFICA SUMA SUBTOTALES + If i = Obj.DtDetalle.Rows.Count AndAlso totSubTotal <> concepto.Importe Then 'PROCESO DE AJUSTA DE DECIMALES + concepto.Importe = totSubTotal + End If + totSubTotal = totSubTotal - concepto.Importe + + 'SIEMPRE ESTAMOS AGREGANDO EL IVA + 'concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeIVA").ToString.ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString.ToDecimal}) + + Timbre.Conceptos.Add(concepto) + i += 1 + Next + Return Timbre + End Function #End Region