Пример #1
0
        public async Task <ResultPage <PersonaDto> > BuscarAsync(OptionSearchPersonasDto dto)
        {
            var result        = new ResultPage <PersonaDto>();
            var totales       = _uow.Personas.Count();
            var totalFiltered = 0;

            #region Filtro

            Expression <Func <Persona, bool> > filter = ele => true;

            if (!string.IsNullOrWhiteSpace(dto.TextSearch))
            {
                filter = filter.And(ele => ele.Id.ToString().Contains(dto.TextSearch.ToLower()) ||
                                    ele.Nombres.ToLower().Contains(dto.TextSearch.ToLower()) ||
                                    ele.Apellidos.ToLower().Contains(dto.TextSearch.ToLower()) ||
                                    ele.Oficina.ToLower().Contains(dto.TextSearch.ToLower()));
            }

            var query = _uow.Personas.Where(filter).ProjectTo <PersonaDto>(_mapperConfig).ToListAsync();

            IList <PersonaDto> list = await query;

            totalFiltered = list.Count;

            #endregion

            #region Ordenacion

            switch (dto.OrderBy)
            {
            case PersonaOrderColumn.Codigo:
            {
                list = dto.IsAscending ? list.OrderBy(ele => ele.Id).ThenBy(ele => ele.Id).ToList()
                            : list.OrderByDescending(ele => ele.Id).ThenBy(ele => ele.Id).ToList();
            }
            break;

            case PersonaOrderColumn.Nombres:
            {
                list = dto.IsAscending ? list.OrderBy(ele => ele.Nombres).ThenBy(ele => ele.Nombres).ToList()
                            : list.OrderByDescending(ele => ele.Nombres).ThenBy(ele => ele.Nombres).ToList();
            }
            break;

            case PersonaOrderColumn.Apellidos:
            {
                list = dto.IsAscending ? list.OrderBy(ele => ele.Apellidos).ThenBy(ele => ele.Apellidos).ToList()
                           : list.OrderByDescending(ele => ele.Apellidos).ThenBy(ele => ele.Apellidos).ToList();
            }
            break;

            case PersonaOrderColumn.Oficina:
            {
                list = dto.IsAscending ? list.OrderBy(ele => ele.Oficina).ThenBy(ele => ele.Oficina).ToList()
                           : list.OrderByDescending(ele => ele.Oficina).ThenBy(ele => ele.Oficina).ToList();
            }
            break;

            case PersonaOrderColumn.Salario:
            {
                list = dto.IsAscending ? list.OrderBy(ele => ele.Salario).ThenBy(ele => ele.Salario).ToList()
                           : list.OrderByDescending(ele => ele.Salario).ThenBy(ele => ele.Salario).ToList();
            }
            break;

            case PersonaOrderColumn.Experiencia:
            {
                list = dto.IsAscending ? list.OrderBy(ele => ele.Experiencia).ThenBy(ele => ele.Experiencia).ToList()
                           : list.OrderByDescending(ele => ele.Experiencia).ThenBy(ele => ele.Experiencia).ToList();
            }
            break;

            case PersonaOrderColumn.FechaInicio:
            {
                list = dto.IsAscending ? list.OrderBy(ele => ele.FechaInicio).ThenBy(ele => ele.FechaInicio).ToList()
                           : list.OrderByDescending(ele => ele.FechaInicio).ThenBy(ele => ele.FechaInicio).ToList();
            }
            break;

            default:
            {
                list = dto.IsAscending ? list.OrderBy(ele => ele.Id).ThenBy(ele => ele.Id).ToList()
                          : list.OrderByDescending(ele => ele.Id).ThenBy(ele => ele.Id).ToList();
            }
            break;
            }


            #endregion

            #region Paginacion

            var pageIndex = dto.PageIndex;
            var pageSize  = dto.PageSize;

            if (pageIndex < 1)
            {
                pageIndex = 1;
            }
            if (pageSize < 1)
            {
                pageSize = 1;
            }

            result.PageIndex = pageIndex;
            result.PageSize  = pageSize;

            list = list.Skip((pageIndex - 1) * pageSize)
                   .Take(pageSize).ToList();

            #endregion

            result.Elements      = list.ToList();
            result.TotalElements = totales;
            result.TotalPage     = (result.TotalElements / result.PageSize) + (result.TotalElements % result.PageSize == 0 ? 0 : 1);
            result.TotalFiltered = totalFiltered;

            return(result);
        }
Пример #2
0
        public async Task <IActionResult> SearchPersonas([FromBody] JqueryDataTablesParameters param)
        {
            try
            {
                #region Paginacion y Ordenacion

                var pageIndex     = (param.Start / param.Length) + 1;
                var pageSize      = param.Length;
                var sortedColumns = param.Order;
                var colum         = sortedColumns.FirstOrDefault();
                var orderBy       = PersonaOrderColumn.Codigo;

                var orderIsAscending = true;
                if (colum != null)
                {
                    var orderByAux = (PersonaOrderColumn)colum.Column;
                    orderBy          = orderByAux;
                    orderIsAscending = colum.Dir == DTOrderDir.ASC ? true : false;
                }

                #endregion

                var optionSearch = new OptionSearchPersonasDto
                {
                    TextSearch  = param.Search?.Value,
                    PageIndex   = pageIndex,
                    IsAscending = orderIsAscending,
                    PageSize    = pageSize,
                    OrderBy     = orderBy,
                };

                HttpContext.Session.SetString(nameof(OptionSearchPersonasDto), JsonSerializer.Serialize(optionSearch));

                var res = await _service.BuscarAsync(optionSearch);

                if (res.HasErrors)
                {
                    return(null);
                }

                var list = res.Elements;

                var data = list.Select(ele => new PersonaViewModel
                {
                    Codigo      = ele.Id.ToString(),
                    Nombres     = ele.Nombres,
                    Apellidos   = ele.Apellidos,
                    Oficina     = ele.Oficina,
                    Experiencia = ele.Experiencia,
                    FechaInicio = ele.FechaInicio,
                    Salario     = ele.Salario,
                    Cargo       = ele.Cargo
                }).ToList();

                var recordsFiltered = res.TotalFiltered;
                var recordsTotal    = res.TotalElements;

                return(new JsonResult(new JqueryDataTablesResult <PersonaViewModel>
                {
                    Draw = param.Draw,
                    Data = data,
                    RecordsFiltered = recordsFiltered,
                    RecordsTotal = recordsTotal
                }));
            }
            catch (Exception e)
            {
                Console.Write(e.Message);
                return(new JsonResult(new { error = "Internal Server Error" }));
            }
        }