public async Task <ISaida> ProcurarPeriodos(ProcurarPeriodoEntrada entrada) { // Verifica se os parâmetros para a procura foram informadas corretamente return(entrada.Invalido ? new Saida(false, entrada.Mensagens, null) : await _periodoRepositorio.Procurar(entrada)); }
public async Task <ProcurarSaida> Procurar(ProcurarPeriodoEntrada procurarEntrada) { var query = _efContext.Periodos .AsNoTracking() .Where(x => x.IdUsuario == procurarEntrada.IdUsuario) .AsQueryable(); if (!string.IsNullOrEmpty(procurarEntrada.Nome)) { query = query.Where(x => x.Nome.IndexOf(procurarEntrada.Nome, StringComparison.InvariantCultureIgnoreCase) != -1); } if (procurarEntrada.Data.HasValue) { query = query.Where(x => x.DataInicio <= procurarEntrada.Data.Value.Date && x.DataFim >= procurarEntrada.Data.Value.Date); } switch (procurarEntrada.OrdenarPor) { case PeriodoOrdenarPor.DataFim: query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.DataFim) : query.OrderByDescending(x => x.DataFim); break; case PeriodoOrdenarPor.DataInicio: query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.DataInicio) : query.OrderByDescending(x => x.DataInicio); break; case PeriodoOrdenarPor.Nome: query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.Nome) : query.OrderByDescending(x => x.Nome); break; default: query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.Id) : query.OrderByDescending(x => x.Id); break; } if (procurarEntrada.Paginar()) { var pagedList = await query.ToPagedListAsync(procurarEntrada.PaginaIndex.Value, procurarEntrada.PaginaTamanho.Value); return(new ProcurarSaida( pagedList.ToList().Select(x => new PeriodoSaida(x)), procurarEntrada.OrdenarPor.ToString(), procurarEntrada.OrdenarSentido, pagedList.TotalItemCount, pagedList.PageCount, procurarEntrada.PaginaIndex, procurarEntrada.PaginaTamanho)); } else { var totalRegistros = query.Count(); return(new ProcurarSaida( query.ToList().Select(x => new PeriodoSaida(x)), procurarEntrada.OrdenarPor.ToString(), procurarEntrada.OrdenarSentido, totalRegistros)); } }
public void Nao_Deve_Procurar_Periodos_Com_Parametros_Invalidos() { var procurarEntrada = new ProcurarPeriodoEntrada(0, "Abc", "ASC", -1, -1); _periodoServico = Substitute.For <PeriodoServico>(_periodoRepositorio, _uow); var saida = _periodoServico.ProcurarPeriodos(procurarEntrada).Result; Assert.IsTrue(!saida.Sucesso && saida.Mensagens.Any(x => x == string.Format(Mensagem.Paginacao_Pagina_Index_Invalido, -1)), string.Join(", ", saida.Mensagens)); }
public async Task <IActionResult> Procurar([FromBody, SwaggerParameter("Parâmetros utilizados para realizar a procura.", Required = true)] ProcurarPeriodoViewModel model) { var entrada = new ProcurarPeriodoEntrada( base.ObterIdUsuarioClaim(), model.Nome, model.Data, model.OrdenarPor, model.OrdenarSentido, model.PaginaIndex, model.PaginaTamanho ); return(new ApiResult(await _periodoServico.ProcurarPeriodos(entrada))); }
public void Deve_Procurar_Periodos() { var idUsuario = 1; var procurarEntrada = new ProcurarPeriodoEntrada(idUsuario, "Nome", "ASC", 1, 1); var periodo1 = new Periodo(new CadastrarPeriodoEntrada(idUsuario, "Período 1", DateTime.Now, DateTime.Now.AddDays(5))); var periodo2 = new Periodo(new CadastrarPeriodoEntrada(idUsuario, "Período 2", DateTime.Now, DateTime.Now.AddDays(5))); _periodoRepositorio.Procurar(procurarEntrada) .Returns(new ProcurarSaida(new[] { periodo1, periodo2 }, "Nome", "ASC", 2, 2, 1, 1)); _periodoServico = Substitute.For <PeriodoServico>(_periodoRepositorio, _uow); var saida = _periodoServico.ProcurarPeriodos(procurarEntrada).Result; Assert.IsTrue(saida.Sucesso && (int)saida.Retorno.GetType().GetProperty("TotalPaginas").GetValue(saida.Retorno, null) == 2, string.Join(", ", saida.Mensagens)); }
public async Task <ProcurarSaida> Procurar(ProcurarPeriodoEntrada procurarEntrada) { var query = _efContext.Periodos .AsNoTracking() .AsQueryable(); if (!string.IsNullOrEmpty(procurarEntrada.Nome)) { query = query.Where(x => x.Nome.IndexOf(procurarEntrada.Nome, StringComparison.InvariantCultureIgnoreCase) != -1); } if (procurarEntrada.Data.HasValue) { query = query.Where(x => x.DataInicio <= procurarEntrada.Data.Value.Date && x.DataFim >= procurarEntrada.Data.Value.Date); } query = query.OrderByProperty(procurarEntrada.OrdenarPor, procurarEntrada.OrdenarSentido); if (procurarEntrada.Paginar()) { var pagedList = await query.ToPagedListAsync(procurarEntrada.PaginaIndex.Value, procurarEntrada.PaginaTamanho.Value); return(new ProcurarSaida( pagedList.ToList().Select(x => new PeriodoSaida(x)), procurarEntrada.OrdenarPor, procurarEntrada.OrdenarSentido, pagedList.TotalItemCount, pagedList.PageCount, procurarEntrada.PaginaIndex, procurarEntrada.PaginaTamanho)); } else { var totalRegistros = await query.CountAsync(); return(new ProcurarSaida( (await query.ToListAsync()).Select(x => new PeriodoSaida(x)), procurarEntrada.OrdenarPor, procurarEntrada.OrdenarSentido, totalRegistros)); } }