public FiltroGenericoDtoBase <ForecastDto> Filtrar(FiltroGenericoDtoBase <ForecastDto> filtro) { List <int> idClientes = null; List <int> idServicos = null; if (!String.IsNullOrEmpty(filtro.FiltroGenerico)) { idClientes = BuscarIdClientesPorNomeCliente(filtro.FiltroGenerico); idServicos = BuscarIdServicosPorNomeServico(filtro.FiltroGenerico); } var result = _forecastRepository.Filtrar(filtro, idClientes ?? null, idServicos ?? null); var listaClientes = result.Valores.Select(f => f.IdCliente).Distinct().ToList(); var clientes = String.Join(",", listaClientes); if (!String.IsNullOrEmpty(clientes)) { var listaClientesDto = ObterClientePorIdsEAcesso(clientes); result.Valores.ForEach(f => { var cliente = listaClientesDto.ToList().Find(c => c.Id == f.IdCliente); if (cliente != null) { f.NomeCliente = cliente.Descricao; } }); } var listaServicos = result.Valores.Select(f => f.IdServico).Distinct().ToList(); var servicos = String.Join(",", listaServicos); if (!String.IsNullOrEmpty(servicos)) { var listaServicosDto = ObterServicosPorIdsEacesso(servicos); result.Valores.ForEach(f => { var servico = listaServicosDto.ToList().Find(c => c.Id == f.IdServico); if (servico != null) { f.NomeServico = servico.Descricao; } }); } if (!string.IsNullOrEmpty(filtro.FiltroGenerico) && filtro.FiltroGenerico.Any()) { result.Valores = result.Valores.Where(x => x.IdCelula.ToString().ToUpper().Equals(filtro.FiltroGenerico.ToUpper()) || (x.NomeCliente != null ? x.NomeCliente.ToUpper().Contains(filtro.FiltroGenerico.ToUpper()) : false) || (x.NomeServico != null ? x.NomeServico.ToUpper().Contains(filtro.FiltroGenerico.ToUpper()) : false) ).ToList(); } if (filtro.OrdemOrdenacao == "asc") { result.Valores = result.Valores.OrderBy(x => x.GetType().GetProperty(filtro.CampoOrdenacao).GetValue(x)).ToList(); } else if (filtro.OrdemOrdenacao == "desc") { result.Valores = result.Valores.OrderByDescending(x => x.GetType().GetProperty(filtro.CampoOrdenacao).GetValue(x)).ToList(); } else { result.Valores = result.Valores.OrderBy(x => x.IdCelula).ThenBy(x => x.NomeServico).ThenBy(y => y.NomeCliente).ToList(); } filtro.Valores = result.Valores.Skip((filtro.Pagina) * filtro.QuantidadePorPagina).Take(filtro.QuantidadePorPagina).ToList(); filtro.Valores = DefinirAlertaAniversarioDeForecasts(filtro.Valores); return(result); }