public ActionResult Filtrar(Filtros viewModel)
        {
            var listaDeObjetos = _objetoApp.ObterTodosOsAtivos();

            //Nome
            if (!string.IsNullOrEmpty(viewModel.Nome))
                listaDeObjetos = listaDeObjetos.Where(o => o.Nome.Contains(viewModel.Nome));

            //Área de conhecimento
            if (viewModel.ListaSelectAreaDeConhecimento.Any(t => t.Selected))
                listaDeObjetos = listaDeObjetos.Where(o => o.ListaAreasDeConhecimento
                    .Any(a =>
                        viewModel.ListaSelectAreaDeConhecimento
                        .Any(area => area.Id == a.Id && area.Selected)));

            //Tipo e Categoria
            if (viewModel.ListaSelectTipo.Any(t => t.Selected))
            {
                //Tipo
                if (viewModel.ListaSelectTipo.Any(t => t.Selected))
                    listaDeObjetos = listaDeObjetos.Where(o => viewModel.ListaSelectTipo
                        .Any(tipo => tipo.Id == o.ObjetoTipo.Id && tipo.Selected));

                //Categoria
                if (viewModel.ListaSelectTipo.Any(t => t.ListaCategorias.Any(a => a.Selected)))
                {
                    var categoriasSelecionadas =
                        from helper in viewModel.ListaSelectTipo.SelectMany(t => t.ListaCategorias
                            , (tipo, categoria)
                            => new { categoria })
                        where helper.categoria.Selected
                        select new
                        {
                            Categoria = helper.categoria
                        };

                    listaDeObjetos = listaDeObjetos
                        .Where(obj => categoriasSelecionadas
                        .Any(cat => cat.Categoria.Id == obj.ObjetoCategoria.Id));
                }

                //Categoria
                //if (viewModel.ListaSelectTipo.Any(t => t.Selected && t.ListaCategorias.Any(a => a.Selected)))
                //     listaDeObjetos = listaDeObjetos.Where(o => viewModel.ListaSelectTipo
                //        .Any(tipo => tipo.Id == o.ObjetoTipo.Id));

            }

            var resultadoBusca = new ResultadoBusca
            {
                ListaObjetos = listaDeObjetos,
                Filtros = new Filtros()
            };

            //Filtro View - Área de conhecimento
            var todasAsAreasDeConhecimento = _objetoAreaDeConhecimentoApp.RecuperarUtilizadas();

            foreach (var areaDeConhecimento in todasAsAreasDeConhecimento)
            {
                var areaViewModel = new SelectFiltroAreaDeConhecimento(areaDeConhecimento);

                if (viewModel.ListaSelectAreaDeConhecimento.Any())
                {
                    if (viewModel.ListaSelectAreaDeConhecimento.Any(a => a.Id == areaViewModel.Id))
                        areaViewModel.Selected = true;
                }
                resultadoBusca.Filtros.AdicionarAreaDeConhecimento(areaViewModel);
            }

            //Filtro View Tipo e Categoria
            var todosOsTipos = _objetoTipoApp.ObterTodos();

            foreach (var tipo in todosOsTipos)
            {
                var listaDeCategoriasFiltro = Mapper.Map<IEnumerable<ObjetoCategoria>,
                    IEnumerable<SelectFiltroCategoria>>(tipo.ListaCategorias).ToList();

                var tipoViewModel = new SelectFiltroTipo(tipo, listaDeCategoriasFiltro);

                if (viewModel.ListaSelectTipo.Any())
                {
                    if (viewModel.ListaSelectTipo.Any(a => a.Id == tipoViewModel.Id && a.Selected))
                    {
                        tipoViewModel.Selected = true;

                        foreach (var categoria in tipoViewModel.ListaCategorias)
                        {
                            var categoriasSelecionadasPorFiltro =
                                from helper in viewModel.ListaSelectTipo.SelectMany(t => t.ListaCategorias
                                    , (tipoAux, categoriaAux)
                                    => new { tipoAux, categoriaAux })
                                select new
                                {
                                    TipoID = helper.tipoAux.Id
                                ,
                                    Categoria = helper.categoriaAux
                                };

                            if (categoriasSelecionadasPorFiltro.Any(csf =>
                                csf.Categoria.Id == categoria.Id
                                && csf.Categoria.Selected))
                            {
                                categoria.Selected = true;
                            }

                        }
                    }

                }

                resultadoBusca.Filtros.AdicionarTipo(tipoViewModel);
            }

            return View("Buscar", resultadoBusca);
        }
Exemple #2
0
 public void AdicionarTipo(SelectFiltroTipo selectTipo)
 {
     this.ListaSelectTipo.Add(selectTipo);
 }
        /*
        public ActionResult Index()
        {
            return View();
        }
        */
        public ActionResult Buscar(FormBusca viewModel)
        {
            var listaDeObjetos = _objetoApp.ObterTodosOsAtivos();

            if (!string.IsNullOrEmpty(viewModel.Nome))
                listaDeObjetos = listaDeObjetos.Where(o => o.Nome.Contains(viewModel.Nome));

            if (viewModel.ObjetoAreaId > 0)
                listaDeObjetos = listaDeObjetos.Where(o => o.ListaAreasDeConhecimento
                    .Any(a => a.Id == viewModel.ObjetoAreaId));

            if (viewModel.ObjetoTipoId > 0)
                listaDeObjetos = listaDeObjetos.Where(o => o.ObjetoTipoId == viewModel.ObjetoTipoId);

            var resultadoBusca = new ResultadoBusca
            {
                ListaObjetos = listaDeObjetos,
                Filtros = new Filtros()
            };

            //Filtro - Área de conhecimento
            var todasAsAreasDeConhecimento = _objetoAreaDeConhecimentoApp.RecuperarUtilizadas();

            foreach (var areaDeConhecimento in todasAsAreasDeConhecimento)
            {
                var areaViewModel = new SelectFiltroAreaDeConhecimento(areaDeConhecimento);

                if (areaViewModel.Id == viewModel.ObjetoAreaId)
                    areaViewModel.Selected = true;

                resultadoBusca.Filtros.AdicionarAreaDeConhecimento(areaViewModel);
            }

            //Filtro Tipo
            var todosOsTipos = _objetoTipoApp.ObterTodos();

            foreach (var tipo in todosOsTipos)
            {
                var listaDeCategoriasFiltro = Mapper.Map<IEnumerable<ObjetoCategoria>,
                    IEnumerable<SelectFiltroCategoria>>(tipo.ListaCategorias).ToList();

                var tipoViewModel = new SelectFiltroTipo(tipo, listaDeCategoriasFiltro);

                if (tipoViewModel.Id == viewModel.ObjetoTipoId)
                    tipoViewModel.Selected = true;

                resultadoBusca.Filtros.AdicionarTipo(tipoViewModel);
            }

            return View(resultadoBusca);
        }