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);
        }