public IActionResult Busca(string input)
        {
            string idUser = HttpContext.Session.GetString("Id");

            if (idUser != null)
            {
                ResultadoBusca resultado = new ResultadoBusca();
                resultado.ValorPesquisa = input;

                var eleicoesInscrito = _db.UsuarioEleicoes
                                       .Where(ue => ue.CodUsuario.ToString().Equals(idUser))
                                       .Select(ue => ue.CodEleicao)
                                       .ToList();
                var eleicoesDisponiveis = _db.Eleicoes
                                          .Where(e => !eleicoesInscrito.Contains(e.CodEleicao) &&
                                                 e.Titulo.ToUpper().Contains(input.ToUpper()) &&
                                                 !e.Status.Equals("F"))
                                          .ToList();
                resultado.Eleicoes = eleicoesDisponiveis;

                return(View(resultado));
            }

            return(RedirectToAction("Login", "Home"));
        }
        private async Task ExtrairDadosPorCategoria(string urlGridCategoria,
                                                    string nomeCategoria,
                                                    List <ResultadoBusca> resultados)
        {
            var paginaCategoria = await _browsingContext.OpenAsync(urlGridCategoria);

            var produtos = paginaCategoria.QuerySelectorAll(_template.SeletorGridProdutos);

            foreach (var produtoGrid in produtos)
            {
                //var eleLinkProduto = produtoGrid.QuerySelector(_template.SeletorLinkProduto);
                var urlProduto = produtoGrid.GetAttribute("href");

                try
                {
                    var paginaProduto = await _browsingContext.OpenAsync(urlProduto);

                    var nomeProduto = paginaProduto.QuerySelector(_template.SeletorNome).GetAttribute("content");

                    var roupa = new ResultadoBusca();
                    roupa.Origem     = _template.Nome;
                    roupa.UrlProduto = urlProduto;
                    roupa.Nome       = nomeProduto;
                    roupa.Categoria  = nomeCategoria;
                    roupa.Descricao  = paginaProduto.QuerySelector(_template.SeletorDescricao).GetAttribute("content");
                    roupa.UrlImagem  = paginaProduto.QuerySelector(_template.SeletorUrlImagem).GetAttribute("content");
                    roupa.Preco      = _helper.TratamentoPreco(paginaProduto.QuerySelector(_template.SeletorPreco).InnerHtml.Trim());

                    roupa.Tamanhos = new List <string>();
                    var elesTamanho = paginaProduto.QuerySelectorAll(_template.SeletorTamanhos);
                    foreach (var tamanho in elesTamanho)
                    {
                        roupa.Tamanhos.Add(string.IsNullOrWhiteSpace(tamanho.InnerHtml) ? "" : tamanho.InnerHtml.Trim());
                    }

                    resultados.Add(roupa);
                    _logger.LogInformation("Produto {nomeProduto} da categoria {nomeCategoria} extraido do página: {urlProduto}",
                                           nomeProduto, nomeCategoria, urlProduto);
                }
                catch (System.Exception ex)
                {
                    var msgErro = ex.Message;
                    _logger.LogError("Produto da página {urlProduto} e categoria {nomeCategoria} não foi extraido. Erro: {msgErro}",
                                     urlProduto, nomeCategoria, msgErro);
                }
            }

            if (PossuiMaisPaginas(paginaCategoria))
            {
                var urlProximaPagina = _helper.UrlProximaPagina(urlGridCategoria, _template.QueryStringPaginacao);
                await ExtrairDadosPorCategoria(urlProximaPagina, nomeCategoria, resultados);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Executa a busca de arquivos, baseado nos filtros preenchidos
        /// </summary>
        /// <param name="pagina">Número da página que conterá os resultados da busca</param>
        private void ExecutaBusca(int pagina = 1)
        {
            FiltroBusca    filtro    = this.ViewState[ConstantesGlobais.FILTRO_BUSCA] != null ? (FiltroBusca)this.ViewState[ConstantesGlobais.FILTRO_BUSCA] : new FiltroBusca();
            int            inicio    = ((pagina - 1) * RESULTADOS_POR_PAGINA) + 1;
            ResultadoBusca resultado = GerenciamentoArquivo.BuscaArquivosDfe(filtro, inicio, RESULTADOS_POR_PAGINA);
            List <Arquivo> arquivos  = (resultado != null && resultado.Resultados != null) ? (List <Arquivo>)resultado.Resultados : new List <Arquivo>();
            List <int>     paginas   = new List <int>();

            if (arquivos.Count > 0)
            {
                int quantidadePaginas = (int)Math.Ceiling((double)resultado.Quantidade / (double)RESULTADOS_POR_PAGINA);

                for (int i = 1; i <= quantidadePaginas; i++)
                {
                    paginas.Add(i);
                }

                this.DivAcoes.Visible = true;

                this.pagina = 0;

                this.RptResultadoBusca.Visible    = true;
                this.RptResultadoBusca.DataSource = arquivos.OrderByDescending(a => a.DataEmissao).ToList();
                this.RptResultadoBusca.DataBind();

                this.RptPaginacao.Visible    = quantidadePaginas > 1;
                this.RptPaginacao.DataSource = paginas;
                this.RptPaginacao.DataBind();
            }
            else
            {
                this.DivMensagem.Visible             = true;
                this.DivMensagem.Attributes["class"] = ConstantesGlobais.CLASSE_MENSAGEM_ERRO;
                this.LblMensagem.Text          = MENSAGEM_ERRO_BUSCA_NENHUM_RESULTADO;
                this.DivAcoes.Visible          = false;
                this.RptResultadoBusca.Visible = false;
                this.RptPaginacao.Visible      = false;
                return;
            }
        }