From 1e064461454ce1f85024c0defa0e0b0a6b225ad9 Mon Sep 17 00:00:00 2001 From: JPerez Date: Thu, 5 Jun 2025 12:45:31 -0700 Subject: [PATCH] --Exportar excel cotizacion, fix autorizaciones por sucursal --- Ventas/Ventas.aspx | 6 +- Ventas/Ventas.aspx.vb | 132 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 125 insertions(+), 13 deletions(-) diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index 35fc95342..97640280d 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -420,11 +420,15 @@
  • Envio De Correo
  • +
  • + Exportar a Excel +
  • + @@ -1284,7 +1288,7 @@ <%--0--%> diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index e20a44fc5..ce56f0bb7 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -14,6 +14,7 @@ Imports Extensiones Imports Microsoft.Reporting.WebForms Imports Modelos Imports Newtonsoft.Json.Linq +Imports GemBox.Spreadsheet Partial Class Ventas Inherits ClsPaginas @@ -2922,6 +2923,7 @@ Partial Class Ventas TmpDT.Columns.Add("NumeroPedimento", GetType(String)) TmpDT.Columns.Add("CodigoAlterno", GetType(String)) TmpDT.Columns.Add("PSAlterno", GetType(String)) + TmpDT.Columns.Add("NumeroParte", GetType(String)) TmpDT.Columns.Add("Costo", GetType(Decimal)) TmpDT.Columns("Costo").DefaultValue = 0D GvPS.DataSource = ObjVentas.DtResultados @@ -6385,6 +6387,18 @@ Partial Class Ventas Next End If + Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(385) + + If PuedeVerCosto AndAlso DbRowVenta("TipoDocto").ToString() = "Cot" Then + GvPS.Columns(10).Visible = True + thCosto.Visible = True + thCosto2.Visible = True + LnkExportarExcelCot.Visible = True + + UpnTools.Update() + UpPS.Update() + End If + End If End Using End If @@ -7798,7 +7812,7 @@ Partial Class Ventas Dim ValorAutorizacion As String = UsuarioActual.Empresa.Funcionalidad(595) 'solo para bdh, que se generen NC - If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then DdlSolCreditoTipoDocto.Items.Add(New ListItem("Nota de crédito", "Egs")) + If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DdlSolCreditoTipoDocto.Items.FindByValue("Egs") Is Nothing Then DdlSolCreditoTipoDocto.Items.Add(New ListItem("Nota de crédito", "Egs")) Me.Bloqueada = False 'OBLIGAR PAGO DE CONTADO SI EL CLIENTE NO PERMITE CREDITO If Not EsFilial AndAlso (Not UsuarioActual.Empresa.Funcionalidad(702).Contiene("1")) AndAlso Me.PermiteCredito = False AndAlso ((DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot") AndAlso CveVenta < 1) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot", "PA") AndAlso EsCreaApartirDe) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveVenta > 0)) Then @@ -8389,15 +8403,19 @@ Partial Class Ventas If Not CBool(ObjClie.DtResultados.FiltroPrimeroValor("InformacionCompleta")) Then Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", "Información incompleta") Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) - - BtnEmitirImprimir.Visible = False - BtnsFacturar.Visible = False - BtnGenerarRemision.Visible = False - TieneBloqueoPorCreditoVencimiento = 1 End If End If ObjClie.Dispose() + + If TieneBloqueoPorCreditoVencimiento = 1 Then + BtnEmitirImprimir.Visible = False + BtnsFacturar.Visible = False + BtnGenerarRemision.Visible = False + + UpFacturar.Update() + End If + End If @@ -9142,10 +9160,10 @@ Partial Class Ventas End If End If - If CveVenta <= 0 Then - Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(201) OrElse UsuarioActual.TienePermisoProceso(385) + Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(385) - If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso PuedeVerCosto Then + If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso PuedeVerCosto Then + If CveVenta <= 0 Then If e.Row.DBCampo("PU").ToDecimal() > 0 Then e.Row.FCLabel("LblCosto").Text = String.Format("{0:N2}", e.Row.DBCampo("Costo").ToDecimal()) e.Row.FCLabel("LblCostoPorcentaje").Text = String.Format("{0:N2} %", ((e.Row.DBCampo("PU").ToDecimal() - e.Row.DBCampo("Costo").ToDecimal()) / e.Row.DBCampo("PU").ToDecimal()) * 100D) @@ -9153,6 +9171,14 @@ Partial Class Ventas e.Row.FCLabel("LblCosto").Text = "" e.Row.FCLabel("LblCostoPorcentaje").Text = "" End If + ElseIf CveVenta > 0 Then + If e.Row.DBCampo("PU").ToDecimal() > 0 Then + e.Row.FCLabel("LblCosto").Text = String.Format("{0:N2}", e.Row.DBCampo("UltimoCosto").ToDecimal()) + e.Row.FCLabel("LblCostoPorcentaje").Text = String.Format("{0:N2} %", ((e.Row.DBCampo("PU").ToDecimal() - e.Row.DBCampo("UltimoCosto").ToDecimal()) / e.Row.DBCampo("PU").ToDecimal()) * 100D) + Else + e.Row.FCLabel("LblCosto").Text = "" + e.Row.FCLabel("LblCostoPorcentaje").Text = "" + End If End If End If @@ -18939,7 +18965,7 @@ Partial Class Ventas If UsuarioActual.CveEmpresa = 189 Then AgregarPSAutomaticamente = False - Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(201) OrElse UsuarioActual.TienePermisoProceso(385) + Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(385) Dim Costo As Decimal = 0 @@ -22596,9 +22622,9 @@ Partial Class Ventas ' HlAgregarExcel.Visible = True End If - Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(201) OrElse UsuarioActual.TienePermisoProceso(385) + Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(385) - If (CveVenta <= 0 OrElse EsCreaApartirDe) AndAlso UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso PuedeVerCosto Then + If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso PuedeVerCosto Then GvPS.Columns(10).Visible = True thCosto.Visible = True thCosto2.Visible = True @@ -38490,6 +38516,22 @@ Partial Class Ventas Exit Sub End If + 'SI ESTA BLOQUEADO Y NO ES POR INFO INCOMPLETA, DEJAR MANDAR SOLICITUD DE AUTORIZACION + If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then + Dim InformacionCompleta As Boolean = False + Dim ObjClie As New ClsClientes + If ObjClie.GetClienteInformacionCompleta(CveCliente, UsuarioActual.CveEmpresa) Then + InformacionCompleta = CBool(ObjClie.DtResultados.FiltroPrimeroValor("InformacionCompleta")) + End If + ObjClie.Dispose() + + If InformacionCompleta AndAlso TieneBloqueoPorCreditoVencimiento = 1 Then + If DdlSolCreditoTipoDocto.Items.FindByValue("Ing") Is Nothing Then + DdlSolCreditoTipoDocto.Items.Insert(0, New ListItem("Ingreso", "Ing")) + End If + End If + End If + TxtImporteSolicitud.Text = "" DdlSolCreditoTipoDocto_SelectedIndexChanged(Nothing, EventArgs.Empty) RegistraScript("$('#DivModalSolicitarCredito').modal('show')") @@ -41734,5 +41776,71 @@ Partial Class Ventas End Try End Sub + + Protected Sub LnkExportarExcelCot_Click(sender As Object, e As EventArgs) + Dim DtExcel As DataTable = (From row As GridViewRow In GvPS.Rows.Cast(Of GridViewRow) + Where row.RowType = DataControlRowType.DataRow + Select New With + { + .Codigo = row.DataKey("Codigo").Trim(), + .NumeroParte = row.DataKey("NumeroParte").Trim(), + .Descripcion = row.DataKey("PS").Trim(), + .Medida = row.DataKey("UM").Trim(), + .Cantidad = row.FCLiteral("LtlCantidad").Text.Trim().ToDecimal(), + .Precio = row.FCLiteral("LtlPU").Text.Trim().ToDecimal(), + .SubImporte = row.DataKey("TotalImporte").ToDecimal(), + .MargenUtilidad = row.FCLabel("LblCostoPorcentaje").Text.Replace("%", "").Replace(" ", "").Trim().ToDecimal(), + .UltimoCosto = row.FCLabel("LblCosto").Text.Trim().ToDecimal() + }).QueryToDataTable(True) + If DtExcel.Rows.Count < 1 Then + Alert("No hay resultados en la busqueda.", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + Dim folio = LblSerie.Text + "-" + TxtFolio.Text + + + DtExcel.TableName = folio + + + DtExcel.Columns("Codigo").ColumnName = "Código" + DtExcel.Columns("Descripcion").ColumnName = "Descripción" + DtExcel.Columns("NumeroParte").ColumnName = "Número de parte" + DtExcel.Columns("SubImporte").ColumnName = "Sub-Importe" + DtExcel.Columns("MargenUtilidad").ColumnName = "Margen de utilidad" + DtExcel.Columns("UltimoCosto").ColumnName = "Último costo" + + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As New ExcelFile() + + Dim worksheet As ExcelWorksheet = FileExcel.Worksheets.Add(DtExcel.TableName) + worksheet.InsertDataTable(DtExcel, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + worksheet.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + worksheet.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + 'CANTIDAD + worksheet.Columns(4).Style.NumberFormat = "#,##0.00" + 'PRECIO + worksheet.Columns(5).Style.NumberFormat = "$#,##0.00_);($#,##0.00)" + 'IMPORTE + worksheet.Columns(6).Style.NumberFormat = "$#,##0.00_);($#,##0.00)" + 'UTILIDAD + worksheet.Columns(7).Style.NumberFormat = "#,##0.00" + 'ULTIMO COSTO + worksheet.Columns(8).Style.NumberFormat = "$#,##0.00_);($#,##0.00)" + + Dim columnCount As Integer = worksheet.CalculateMaxUsedColumns() + For i As Integer = 0 To columnCount + worksheet.Columns(i).AutoFit(1, worksheet.Rows(0), worksheet.Rows(worksheet.Rows.Count - 1)) + Next + + FileExcel.Save(Response, $"{folio}.xlsx", SaveOptions.XlsxDefault) + End Sub End Class