É possível consultar se um estudante preencheu ou não a V Pesquisa Nacional de Perfil dos Graduandos das IFES através da API que foi disponibilizada. Para usá-la é bastante simples, basta acessar o link abaixo substituindo os seguintes parâmetros:
https://www.perfil.ufu.br/2018/backend/ifes/estudante_participacao/{codigo_acesso_ifes}/{e-MEC_IFES}/{cpf_do_discente}
codigo_acesso_ifes: O código de acesso da IFES
e-MEC_IFES: O código e-MEC da IFES disponível por consulta em: http://emec.mec.gov.br/
cpf_do_discente: O cpf do discente sem pontos ou traços
Existem duas possíveis respostas:
1º Discente não encontrado:
"data":[],"msg":{"fl_error":true,"fl_ok":false,"txt":"Estudante não Encontrado. CPF: <cpf_do_discente>, <e-MEC_IFES>, Código de Acesso: <codigo_de_acesso_ifes>"}}
OBS: Se o discente não foi encontrado nessa busca verifique se o CPF está com o 0 na frente dos números.
2º Discente encontrado:
{"data":{"identificacao":<cpf_do_discente>,"ifes":"<ifes>","dt_participacao_inicio":"2018-03-26 10:02:34","dt_participacao_fim":"2018-04-26 13:13:42","fl_participacao":true},"msg":{"fl_error":false,"fl_ok":true,"txt":""}}
No caso do discente encontrado, ele pode ter ou não preenchido a pesquisa. Se ele preencheu a pesquisa, o campo fl_participacao será true e, caso não tenha preenchido, o campo será false.
Tudo que devemos fazer então é verificar se o discente está na base de dados da Pesquisa e, se estiver, verificar se ele respondeu a pesquisa. Caso não tenha respondido, deve-se redirecioná-lo para a página do questionário. Os procedimentos a seguir foram efetuados no nosso sistema acadêmico SIGAA (versão 3.13.27):
Aqui na UFERSA nós realizamos a checagem se o discente respondeu a pesquisa por ocasião da matrícula e cada vez que ele tenta acessar a turma virtual, ou seja, o estudante precisa preencher a pesquisa para efetuar a matrícula. Esse tutorial tem como pressuposto que o seu ambiente de desenvolvimento esteja configurado e você esteja utlizando a ferramenta Eclipse:
1º Passo: Abra o eclipse e localize o arquivo MatriculaGraduacaoMBean.java
Para facilitar o processo use o atalho Crtl+Shift+r e digite MatriculaGraduacaoMBean.java
Ao fazer isso você vai abrir o arquivo onde é feita a matrícula dos discentes, que se parece com o seguinte:
2º Passo: Localize o método que é invocado quando o discente vai inciar a matrícula:
Vamos localizar agora o método que é chamado quando o discente clica para iniciar a matrícula:
Digite Crtl+o para localizar os métodos dentro de um arquivo .java e digite validarInicioSolicitacaoMatricula conforme a figura a seguir:
Clique para ir até o método. A seguir o código do método que é chamado quando o discente tenta solicitar a matrícula será exibido:
/** * Faz uma série de validações antes de dar inicio a matrícula do aluno * @throws DAOException */ private void validarInicioSolicitacaoMatricula() throws DAOException { if (getCalendarioParaMatricula() == null) clear(); if (SigaaSubsistemas.PORTAL_DISCENTE.equals(getSubSistema()) || SigaaSubsistemas.PORTAL_TURMA.equals(getSubSistema()) ){ setSubSistemaAtual(SigaaSubsistemas.PORTAL_DISCENTE); discente = getUsuarioLogado().getDiscenteAtivo(); getCurrentSession().setAttribute("nivel", discente.getNivel()); } /** * AQUI COMEÇA AS ALTERAÇÕES */ /* * VERIFICAR SE DISCENTE PREENCHEU: V Pesquisa Nacional de Perfil dos Graduandos das IFES - 2018 * sysaid: * Comentar caso a pesquisa não esteja mais sendo feita * */ if (!preencheuPesquisaDiscente(discente)){ addMensagemErro("Para continuar essa operação preencha a pesquisa discente, para preencher a pesquisa acesse </span> <a target='_blank' href='https://www.perfil.ufu.br/2018/questionario/'>https://www.perfil.ufu.br/2018/questionario/</a>."); addMensagemInformation("<span style=\"font-weight: normal\">A pesquisa de perfil socioeconômico dos graduandos das IFES é um levantamento (survey) realizado pelo Fórum de Pró-reitores de Assuntos Estudantis desde 1996 com o " + "objetivo de descrever as caraterísticas médias (sócio, econômica e culturais) dos discentes das Instituições Federais de Ensino Superior, cumprindo o papel de instrumentalizar as " + "políticas de assistência estudantil através de diagnósticos, análises, acompanhamentos e avaliações. <b> Esta edição da pesquisa será censitária, ou seja, todos os estudantes da UFERSA " + "devem responder o questionário, o que nos dará um perfil mais exato possível dos nossos graduandos </b>. Esta decisão foi tomada pelos Reitores em reunião do dia 19 de dezembro de 2017," + " durante o Fórum Pleno da ANDIFES, em Brasília."); return; }
Basicamente nós incluímos uma verificação para verificar se o discente preencheu ou não a pesquisa: if (!preencheuPesquisaDiscente(discente)){
nesse caso se o método preencheuPesquisaDiscente retornar false o sistema bloqueia a matrícula, incluindo a mensagem de erro:
addMensagemErro("Para continuar essa operação preencha a pesquisa discente, para preencher a pesquisa acesse </span> <a target='_blank' href='https://www.perfil.ufu.br/2018/questionario/'>https://www.perfil.ufu.br/2018/questionario/</a>.");
Importante: Para o SIGAA bloquear o processo é necessário incluir pelo menos uma mensagem de erro na pilha de erros.
Em seguida nós incluimos também uma mensagem de informação, explicando o motivo da pesquisa ser importante:
addMensagemInformation("<span style=\"font-weight: normal\">A pesquisa de perfil socioeconômico dos graduandos das IFES é um levantamento (survey) realizado pelo Fórum de Pró-reitores de Assuntos Estudantis desde 1996 com o " + "objetivo de descrever as caraterísticas médias (sócio, econômica e culturais) dos discentes das Instituições Federais de Ensino Superior, cumprindo o papel de instrumentalizar as " + "políticas de assistência estudantil através de diagnósticos, análises, acompanhamentos e avaliações. <b> Esta edição da pesquisa será censitária, ou seja, todos os estudantes da UFERSA " + "devem responder o questionário, o que nos dará um perfil mais exato possível dos nossos graduandos </b>. Esta decisão foi tomada pelos Reitores em reunião do dia 19 de dezembro de 2017," + " durante o Fórum Pleno da ANDIFES, em Brasília.");
3º Passo: Incluir o método preencheuPesquisaDiscente(discente)
Para que essa alteração funcione de fato é necessário implementar o método preencheuPesquisaDiscente(discente) que vai indicar se o discente preencheu ou não a pesquisa. É nesse local que vamos fazer a requisição à API da pesquisa para verificar se o discente preencheu a pesquisa.
Importante
Esse método deve ser incluído no mesmo arquivo que estamos editando (MatriculaGraduacaoMBean.java) e ele vai ser invocado para executar a chamada à API. Esse método recebe um discente e retorna true ou false. Para realizarmos a chamada à API através da linguagem Java, usamos o pacote HttpClient (versão 4.5), que pode ser baixado em: http://hc.apache.org/downloads.cgi:
Ao baixar o pacote, você irá descompactá-lo em algum local na sua máquina, acessará a pasta lib (<seu caminho>\httpcomponents-client-4.5.5\lib) e verá os seguintes arquivos:
Todas essas libs são necessárias para realizar o processo. Para incluí-las no projeto do SIGAA você deve colocá-las no projeto LIBS dos projetos dos SIGS, dentro de LIBS->app-libs.jar, conforme a figura a seguir:
Ao fazer esse processo o Eclipse deve reconhecer o HttpClient
A seguir o método completo (Obs: para funcionar, deve-se substituir {codigo_acesso_ifes}/{e-MEC_IFES} pelos dados da sua instituição)
public boolean preencheuPesquisaDiscente(DiscenteAdapter discente){ boolean acesso = true; String cpfDiscente = Formatador.getInstance().parseStringCPFCNPJ(Formatador.getInstance().formatarCPF_CNPJ(discente.getPessoa().getCpf_cnpj())); String url = "https://www.perfil.ufu.br/2018/backend/ifes/estudante_participacao/{codigo_acesso_ifes}/{e-MEC_IFES}/"+cpfDiscente; try{ //HttpClient client = HttpClientBuilder.create().build(); HttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom() .loadTrustMaterial(null, new TrustSelfSignedStrategy()) .build() ) ).build(); HttpGet request = new HttpGet(url); // add request header //request.addHeader("User-Agent", USER_AGENT); HttpResponse response = httpClient.execute(request); System.out.println("Response Code : " + response.getStatusLine().getStatusCode()); HttpEntity entity = response.getEntity(); if (entity != null) { String retSrc = EntityUtils.toString(entity); // parsing JSON JSONObject result = new JSONObject(retSrc); //Convert String to JSON Object boolean estudanteEncontrado = result.getJSONObject("msg").getBoolean("fl_ok"); if (estudanteEncontrado){ return result.getJSONObject("data").getBoolean("fl_participacao"); } } } catch (Exception e) { System.out.println(e.getMessage()); } return acesso; }
A lógica aqui é a seguinte:
Se o estudante não for encontrado na busca ele passa;
Se o estudante for encontrado na busca e respondeu ele passa;
Se o estudante for encontrado na busca e não respondeu ele bloqueia
Bloqueio em outros lugares
Caso você deseje realizar o bloqueio em outros lugares segue um exemplo usado quando o discente vai entrar na turma virtual. Localize o arquivo TurmaVirtualMBean.java no método entrar(): e inclua o seguinte código:
MatriculaGraduacaoMBean matriculaGraduacao = getMBean("matriculaGraduacao"); if (isNotEmpty(getDiscenteUsuario()) && !matriculaGraduacao.preencheuPesquisaDiscente(getDiscenteUsuario())){ addMensagemErro("Para preencher a pesquisa acesse </span> <a target='_blank' href='https://www.perfil.ufu.br/2018/questionario/'>https://www.perfil.ufu.br/2018/questionario/</a>."); addMensagemInformation("<span style=\"font-weight: normal\">A pesquisa de perfil socioeconômico dos graduandos das IFES é um levantamento (survey) realizado pelo Fórum de Pró-reitores de Assuntos Estudantis desde 1996 com o " + "objetivo de descrever as caraterísticas médias (sócio, econômica e culturais) dos discentes das Instituições Federais de Ensino Superior, cumprindo o papel de instrumentalizar as " + "políticas de assistência estudantil através de diagnósticos, análises, acompanhamentos e avaliações. <b> Esta edição da pesquisa será censitária, ou seja, todos os estudantes da UFERSA " + "devem responder o questionário, o que nos dará um perfil mais exato possível dos nossos graduandos </b>. Esta decisão foi tomada pelos Reitores em reunião do dia 19 de dezembro de 2017," + " durante o Fórum Pleno da ANDIFES, em Brasília."); return null; }
Esse código é idêntico ao anterior, modificando somente os seguintes trechos:
MatriculaGraduacaoMBean matriculaGraduacao = getMBean("matriculaGraduacao");
No trecho acima criamos uma instância do MBean matriculaGraduacao para ter acesso aos métodos e
if (isNotEmpty(getDiscenteUsuario()) && !matriculaGraduacao.preencheuPesquisaDiscente(getDiscenteUsuario())){
E nesse outro verifica-se se o usuário é discente antes de realizar o processo, visto que a turma virtual também é acessada por docentes (evita erros do tipo NullPointerException).
Esse código pode ser utilizado em outros lugares do sistema para bloquear outras operações conforme sua preferência
É isso! Caso você tenha dúvidas no processo me envie um e-mail que eu irei responder suas dúvidas.
Autor: Alexandre Ádames Alves Pontes
Analista de Tecnologia da Informação – UFERSA
Email: alexandreadames@ufersa.edu.br