diff --git a/App_Code/ClsVentas.vb b/App_Code/ClsVentas.vb index 391461856..e864519ea 100644 --- a/App_Code/ClsVentas.vb +++ b/App_Code/ClsVentas.vb @@ -4507,11 +4507,16 @@ Public Class ClsVentas End Try Return retorno End Function - Public Function GetMetasVendedores(CveEmpresa As Integer) As Boolean + Public Function GetMetasVendedores(CveEmpresa As Integer, Optional CveSubProyecto As Integer = -1, Optional CveVendedor As Integer = -1, Optional CveMarca As Integer = -1, Optional Mes As Integer = -1, Optional Anio As Integer = -1) As Boolean Dim retorno As Boolean = False DataAdapter("PA_Vta_MetasVendedoresGet", CommandType.StoredProcedure) With SqlAdapter.SelectCommand.Parameters .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveSubProyecto", SqlDbType.Int).Value = CveSubProyecto + .Add("@CveVendedor", SqlDbType.Int).Value = CveVendedor + .Add("@CveMarca", SqlDbType.Int).Value = CveMarca + .Add("@Mes", SqlDbType.Int).Value = Mes + .Add("@Anio", SqlDbType.Int).Value = Anio End With Try SqlAdapter.Fill(Data) diff --git a/Ventas/CatMetasVendedores.aspx b/Ventas/CatMetasVendedores.aspx index 555c0f8b9..d02cb68a3 100644 --- a/Ventas/CatMetasVendedores.aspx +++ b/Ventas/CatMetasVendedores.aspx @@ -1,171 +1,261 @@ -<%@ Page Title="Catálogo de metas para vendedores" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="CatMetasVendedores.aspx.vb" Inherits="CatMetasVendedores" %> - -<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> - - - - - - - - Catálogo de metas para vendedores - - - - -
  • - Agregar Meta -
  • -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +<%@ Page Title="Catálogo de metas para vendedores" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="CatMetasVendedores.aspx.vb" Inherits="CatMetasVendedores" %> + +<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> + + + + + + + + Catálogo de metas para vendedores + + + + +
  • + Agregar Meta +
  • +
    +
    +
  • + Importar Listado +
  • +
    + + + +
    +
    +
    + + +
    +
    +
    + +
    + + +
    + +
    +
    + + + + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <%--CARGA EXCEL--%> + +
    + + diff --git a/Ventas/CatMetasVendedores.aspx.vb b/Ventas/CatMetasVendedores.aspx.vb index 5a956cdb6..db8d9ff24 100644 --- a/Ventas/CatMetasVendedores.aspx.vb +++ b/Ventas/CatMetasVendedores.aspx.vb @@ -1,7 +1,7 @@ -Imports System.Data -Imports System.Linq +Imports System.Data Imports Extensiones - +Imports GemBox.Spreadsheet + Partial Class CatMetasVendedores Inherits ClsPaginas Private Property CveMetaVendedor() As Integer 'Guardamos el ID de registro para saber cual registro Editar @@ -14,21 +14,50 @@ Partial Class CatMetasVendedores End Property Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load - If Not IsPostBack Then - CargaDatos() + If Not IsPostBack Then CargaDatosModal() + CargaCombos() + CargaDatos() End If End Sub - Private Sub CargaDatos() + Private Sub CargaDatos() + Dim Mes As Integer = -1, Anio As Integer = -1 + If Not String.IsNullOrEmpty(txtMesAnio.Text) Then + Dim FechaRef As DateTime = txtMesAnio.Text.ToDate() + Mes = FechaRef.Month + Anio = FechaRef.Year + End If + Dim ObjVentas As New ClsVentas - If ObjVentas.GetMetasVendedores(UsuarioActual.CveEmpresa) Then + If ObjVentas.GetMetasVendedores(UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyecto.SelectedValue.ToEntero(), CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveMarca:=DdlMarca.SelectedValue.ToEntero(), Mes:=Mes, Anio:=Anio) Then GvDatos.DataSource = ObjVentas.DtResultados End If ObjVentas.Dispose() GvDatos.DataBind() End Sub + Private Sub CargaCombos() + DdlSubProyecto.DataSource = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa) + DdlSubProyecto.DataBind() + DdlSubProyecto.Items.Insert(0, New ListItem("Todas", "-1")) + + DdlVendedor.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa) + DdlVendedor.DataBind() + DdlVendedor.Items.Insert(0, New ListItem("Todos", "-1")) + + Dim ObjPS As New ClsProductosServicios + If ObjPS.GetMarcas(UsuarioActual.CveEmpresa) Then + DdlMarca.DataSource = ObjPS.DtResultados + End If + ObjPS.Dispose() + + DdlMarca.DataBind() + DdlMarca.Items.Insert(0, New ListItem("Todas", "-1")) + + + End Sub + Private Sub CargaDatosModal() DdlVendedores.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa) DdlVendedores.DataBind() @@ -122,5 +151,238 @@ Partial Class CatMetasVendedores ObjVentas.Dispose() CargaDatos() UpDatos.Update() + End Sub + Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs) + CargaDatos() + UpDatos.Update() + End Sub + + Private Sub BtnDescargarFormato_Click(sender As Object, e As EventArgs) Handles BtnDescargarFormato.Click + + Dim DtExcel As New DataTable + DtExcel.TableName = "Metas" + DtExcel.Columns.Add(New DataColumn("Vendedor", GetType(String))) + DtExcel.Columns.Add(New DataColumn("Clasificación Superior", GetType(String))) + DtExcel.Columns.Add(New DataColumn("Clasificación", GetType(String))) + DtExcel.Columns.Add(New DataColumn("Marca", GetType(String))) + DtExcel.Columns.Add(New DataColumn("Mes", GetType(String))) + DtExcel.Columns.Add(New DataColumn("Año", GetType(String))) + DtExcel.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) + DtExcel.Columns.Add(New DataColumn("Importe", GetType(Decimal))) + + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As New ExcelFile() + + Dim worksheet = 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) + + Dim columnCount = worksheet.CalculateMaxUsedColumns() + For i = 0 To columnCount + worksheet.Columns(i).AutoFit(1, worksheet.Rows(0), worksheet.Rows(worksheet.Rows.Count - 1)) + Next + + worksheet.Cells.Style.Locked = False + worksheet.Cells.Style.FormulaHidden = False + + worksheet.Rows(0).Cells.Style.Locked = True + + worksheet.Protected = True + + Dim protectionSettings = worksheet.ProtectionSettings + protectionSettings.AllowDeletingColumns = False + protectionSettings.AllowDeletingRows = True + protectionSettings.AllowEditingObjects = True + protectionSettings.AllowEditingScenarios = True + protectionSettings.AllowFormattingCells = True + protectionSettings.AllowFormattingColumns = True + protectionSettings.AllowFormattingRows = True + protectionSettings.AllowInsertingColumns = False + protectionSettings.AllowInsertingRows = True + protectionSettings.AllowSelectingLockedCells = True + protectionSettings.AllowSelectingUnlockedCells = True + protectionSettings.AllowSelectingUnlockedCells = True + protectionSettings.AllowSorting = True + protectionSettings.AllowUsingAutoFilter = True + protectionSettings.AllowUsingPivotTableReports = True + protectionSettings.SetPassword(ModExtensiones.IMEI) + + FileExcel.Save(Response, "Metas.xlsx", SaveOptions.XlsxDefault) + + End Sub + + Private Sub BtnCargaExcel_Click(sender As Object, e As EventArgs) Handles BtnCargaExcel.Click + If TxtExcel.getfiles().Archivos.Count > 0 Then + Dim file As Archivo = TxtExcel.getfiles().Archivos(0) + Dim Directorio As String = AppDomain.CurrentDomain.BaseDirectory & file.patch + CargarArchivo(Directorio, file.filename) + Else + Alert("No existe el archivo. Favor de subir un archivo excel a la plataforma.", TipoMensaje.MsgError) + End If End Sub + Private Sub CargarArchivo(Ruta As String, FileName As String) + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + Dim Tipo As String = "EXCEL" + Dim dt As DataTable = Nothing + Dim ErrorArchivo = False + + Try + dt = ReadExcelFile(Ruta + FileName, True) + Catch ex As Exception + ErrorArchivo = True + OnError("Ocurrio un error al leer el archivo
    " & ex.Message, ex) + End Try + If Not ErrorArchivo AndAlso dt IsNot Nothing Then + + If Not dt.Columns(0).ColumnName = "Vendedor" Then + Alert("El nombre de la primera columna debe ser 'Vendedor'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + If Not dt.Columns(1).ColumnName = "Clasificación Superior" Then + Alert("El nombre de la segunda columna debe ser 'Clasificación Superior'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + If Not dt.Columns(2).ColumnName = "Clasificación" Then + Alert("El nombre de la tercera columna debe ser 'Clasificación'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + If Not dt.Columns(3).ColumnName = "Marca" Then + Alert("El nombre de la cuarta columna debe ser 'Marca'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + If Not dt.Columns(4).ColumnName = "Mes" Then + Alert("El nombre de la quinta columna debe ser 'Marca'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + If Not dt.Columns(5).ColumnName = "Año" Then + Alert("El nombre de la sexta columna debe ser 'Año'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + If Not dt.Columns(6).ColumnName = "Cantidad" Then + Alert("El nombre de la sexta columna debe ser 'Cantidad'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + If Not dt.Columns(7).ColumnName = "Importe" Then + Alert("El nombre de la septima columna debe ser 'Importe'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + Dim DtMarcas As DataTable = Nothing + Dim ObjMarcas As New ClsProductosServicios + If ObjMarcas.GetMarcas(UsuarioActual.CveEmpresa) Then + DtMarcas = ObjMarcas.DtResultados.Copy() + End If + ObjMarcas.Dispose() + + dt.TableName = "Datos" + Dim ProductosNoCargados As New StringBuilder() + Dim RowsCargados As Integer = 0 + Dim RowsNoCargados As Integer = 0 + Dim ObjMetas As New ClsVentas + 'ObjPS.IniciaTransacSQL() + Try + Dim DtVendedores As DataTable = GlobalDTVendedores(UsuarioActual.CveEmpresa) + Dim DtClasificaciones As DataTable = GlobalDTClasificaciones(UsuarioActual.CveEmpresa) + Dim DtClasificaciones2 As DataTable = GlobalDTClasificaciones2(UsuarioActual.CveEmpresa) + + For Each row As DataRow In dt.Rows + Dim Correcto As Boolean = False + Dim TieneError As Boolean = False + Dim CveVendedor As Integer = DtVendedores.FiltroPrimeroValor("CveVendedor", String.Format("Vendedor LIKE '%{0}%'", row("Vendedor").ToString().TrimStart().TrimEnd())).ToEntero + Dim CveClasificacion As Integer = DtClasificaciones.FiltroPrimeroValor("CveClasificacion", String.Format("Clasificacion='{0}'", row("Clasificación Superior").ToString().TrimStart().TrimEnd())).ToEntero + Dim CveClasificacion2 As Integer = DtClasificaciones2.FiltroPrimeroValor("CveClasificacion", String.Format("Clasificacion='{0}'", row("Clasificación").ToString().TrimStart().TrimEnd())).ToEntero + Dim CveMarca As Integer = DtMarcas.FiltroPrimeroValor("CveMarca", String.Format("Marca='{0}'", row("Marca").ToString().TrimStart().TrimEnd())).ToEntero + + Dim Mes As Decimal = row("Mes").ToString().ToDecimal() + Dim Anio As Decimal = row("Año").ToString().ToDecimal() + Dim Cantidad As Decimal = row("Cantidad").ToString().ToDecimal() + Dim Importe As Decimal = row("Importe").ToString().ToDecimal() + + Dim FechaRef As New DateTime(Anio, Mes, 1) + If CveVendedor > 0 AndAlso CveVendedor > 0 AndAlso CveClasificacion > 0 AndAlso CveClasificacion2 > 0 AndAlso CveMarca > 0 Then + Correcto = ObjMetas.AddMetasVendedores(CveVendedor, FechaRef, CveMarca, Cantidad, Importe, CveClasificacion2, CveClasificacion) + If Correcto Then + RowsCargados += 1 + End If + End If + + If Not Correcto Then + RowsNoCargados += 1 + End If + Next + Catch ex As Exception + OnError("Ocurrió un error al cargar los precios.", ex) + Finally + ObjMarcas.Dispose() + + Dim MensajeFinal As New StringBuilder() + If RowsNoCargados = 0 AndAlso RowsCargados > 0 Then + MensajeFinal.Append("Las metas se cargaron correctamente.

    ") + End If + If RowsCargados > 0 Then + MensajeFinal.Append("Se cargaron " & RowsCargados & " metas correctamente.") + End If + If RowsNoCargados > 0 Then + MensajeFinal.Append("No se pudieron actualizar " & RowsNoCargados & " metas.
    ") + End If + + Alert(MensajeFinal.ToString()) + + End Try + + End If + End Sub + + Private Function ReadExcelFile(ByVal flatFilePath As String, ByVal firstRowHasHeaders As Boolean) As DataTable + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + Dim excelFile As ExcelFile = ExcelFile.Load(flatFilePath) + + Dim unnamed As Integer = 0 + Dim cols As Integer + Dim columns As String() + Dim curRow As Integer = 0 + Dim curCol As Integer = 0 + Dim dataTable As DataTable = New DataTable() + Dim worksheet As ExcelWorksheet = excelFile.Worksheets(0) + + For cols = 0 To worksheet.Rows(0).AllocatedCells.Count - 1 + + If firstRowHasHeaders Then + + If worksheet.Rows(0).Cells(cols).Value IsNot Nothing Then + dataTable.Columns.Add(worksheet.Rows(0).Cells(cols).Value.ToString()) + Else + dataTable.Columns.Add("Unnamed Column " & (System.Threading.Interlocked.Increment(unnamed))) + End If + + curRow = 1 + Else + dataTable.Columns.Add("Column " & (cols + 1)) + End If + Next + + While curRow < worksheet.Rows.Count + columns = New String(cols - 1) {} + + For curCol = 0 To cols - 1 + + If worksheet.Rows(curRow).Cells(curCol).Value Is Nothing Then + columns(curCol) = "" + Else + columns(curCol) = worksheet.Rows(curRow).Cells(curCol).Value.ToString() + End If + Next + + dataTable.Rows.Add(columns) + curRow += 1 + End While + + Return dataTable + End Function End Class diff --git a/Ventas/MetasVendedores.aspx.vb b/Ventas/MetasVendedores.aspx.vb index 93278664a..984b62242 100644 --- a/Ventas/MetasVendedores.aspx.vb +++ b/Ventas/MetasVendedores.aspx.vb @@ -79,24 +79,24 @@ Partial Class MetasVendedores e.Row.FCLabel("lblRealAcumuladoPorcentaje").Text = String.Format("{0}{1}", e.Row.FCLabel("lblRealAcumuladoPorcentaje").Text, "%") 'e.Row.FCLabel("lblVarVSAAPerc").Text = String.Format("{0}{1}", e.Row.FCLabel("lblVarVSAAPerc").Text, "%") - Select Case e.Row.DataKey("Etiqueta") - Case "GrupoSuperior" - e.Row.CssClass = "GrupoSuperior" - ' e.Row.FCLabel("lblRealMes").Text = "" - ' e.Row.FCLabel("lblVtaMesAA").Text = "" - ' e.Row.FCLabel("lblObjMes").Text = "" - ' e.Row.FCLabel("lblRealAcumulado").Text = "" - ' e.Row.FCLabel("lblRealMesPorcentaje").Text = "" - ' e.Row.FCLabel("lblAAntAcumulado").Text = "" - ' e.Row.FCLabel("lblObjAcumulado").Text = "" - ' e.Row.FCLabel("lblVarVSAAPerc").Text = "" - ' e.Row.FCLabel("lblVarVSAA").Text = "" - ' e.Row.FCLabel("lblVarVSObjAcum").Text = "" - Case "Categoria" + Select Case e.Row.DBCampo("TipoFila") + Case "1" + e.Row.CssClass = "GrupoSuperior" + ' e.Row.FCLabel("lblRealMes").Text = "" + ' e.Row.FCLabel("lblVtaMesAA").Text = "" + ' e.Row.FCLabel("lblObjMes").Text = "" + ' e.Row.FCLabel("lblRealAcumulado").Text = "" + ' e.Row.FCLabel("lblRealMesPorcentaje").Text = "" + ' e.Row.FCLabel("lblAAntAcumulado").Text = "" + ' e.Row.FCLabel("lblObjAcumulado").Text = "" + ' e.Row.FCLabel("lblVarVSAAPerc").Text = "" + ' e.Row.FCLabel("lblVarVSAA").Text = "" + ' e.Row.FCLabel("lblVarVSObjAcum").Text = "" + Case "2" e.Row.CssClass = "Totales" - Case "Clasificacion" + Case "3" e.Row.CssClass = "SubTotales2" - Case "Clasificacion2" + Case "4" e.Row.CssClass = "SubTotales" End Select