Beispiel #1
0
        /// <summary>
        /// Metodo que recibe desde la vista todos los parametros necesarios para la obtención de los registros a mostrar, filtrarlos y paginados.
        /// A partir del parámetro id (sin incluirlo), los parámetros siguientes son opcionales y dependientes del caso de uso.
        /// </summary>
        /// <param name="sidx">Campo por el cual se ordenan los registros</param>
        /// <param name="sord">Dirección de ordenamiento (Ascendente/Descendente)</param>
        /// <param name="page">Número de página a mostrar</param>
        /// <param name="rows">Cantidad de registros por página</param>
        /// <param name="id">Valor de filtrado por ID</param>
        /// <returns>Objeto JSON que representa la matriz de datos a ser mostrados en la grilla</returns>
        public JsonResult ProcesarBusqueda(string sidx, string sord, int page, int rows, string filtroProceso, string filtroGradoAnio)
        {
            // Construyo la funcion de ordenamiento
            Func <DocumentoRequeridoModel, IComparable> funcOrden =
                /****************************** INICIO AREA EDITABLE ******************************/
                sidx == "Proceso" ? x => x.Proceso :
                sidx == "Grado/Año" ? x => x.GradoAnio :
                /******************************** FIN AREA EDITABLE *******************************/
                (Func <DocumentoRequeridoModel, IComparable>)(x => x.Id);

            // Obtengo los registros filtrados segun los criterios ingresados
            /****************************** INICIO AREA EDITABLE ******************************/
            ProcesoEnum proc;

            ProcesoEnum.TryParse(filtroProceso, out proc);

            var registros = Rule.DocumentoRequeridoDireccionDeNivelByFiltros(proc, int.Parse(filtroGradoAnio));

            /******************************** FIN AREA EDITABLE *******************************/

            // Ordeno los registros
            if (sord == "asc")
            {
                registros = registros.OrderBy(funcOrden).ToList();
            }
            else
            {
                registros = registros.OrderByDescending(funcOrden).ToList();
            }

            // Selecciono los registros segun el numero de pagina y cantidad de registros por pagina
            int totalRegistros = registros.Count();
            int totalPages     = (int)Math.Ceiling((decimal)totalRegistros / (decimal)rows);

            registros = registros.Skip((page - 1) * rows).Take(rows).ToList();

            // Construyo el json con los valores que se mostraran en la grilla
            var jsonData = new
            {
                total   = totalPages,
                page    = page,
                records = totalRegistros,
                rows    = from a in registros
                          select new
                {
                    cell = new string[] {
                        a.Id.ToString(),
                        // Respetar el orden en que se mostrarán las columnas
                        /****************************** INICIO AREA EDITABLE ******************************/
                a.Documento.Nombre,
                a.Documento.Descripcion,
                a.Proceso.ToString(),
                a.GradoAnio
                        /******************************** FIN AREA EDITABLE *******************************/
                    }
                }
            };

            return(Json(jsonData, JsonRequestBehavior.AllowGet));
        }