QuestionarioController.java 11.7 KB
package br.com.controller;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.servlet.ServletContext;

import org.apache.jasper.tagplugins.jstl.core.ForEach;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.validator.ValidationMessage;
import br.com.dao.AutorizacaoGeracaoHashDao;
import br.com.dao.QuestionarioDao;
import br.com.model.entity.Contato;
import br.com.model.entity.EnvioEmailSemAutenticacao;
import br.com.model.entity.Questionario;
import br.com.model.utilities.Email;
import br.com.model.utilities.ManagerProperties;
import br.com.model.utilities.StringHelper;
import br.com.util.DateUtil;
import br.com.util.GeradorCodigoHash;
import br.com.util.Validacao;

@Resource
public class QuestionarioController {

  private Result result;
  private Validator validator;
  private ServletContext application;
  private String path;


  public QuestionarioController(Result result, Validator validator, ServletContext application) {

    this.result = result;
    this.validator = validator;
    this.application = application;
    this.path = this.application.getRealPath("") + "/WEB-INF/conexao.properties";
  }

  @Path("/questionario")
  public void questionario() {
    
    QuestionarioDao questionarioDao = new QuestionarioDao();
    List<Questionario> lsquestionario = new ArrayList<Questionario>();
    lsquestionario = questionarioDao.retornarListaQuestionario(path);
    
   
    int relatorioRespondido = 0;
    int planoTrabalhoAnexado = 0;
    int relatorioAnexado = 0;
    int relatorioEnviado = 0;
    
    for (Questionario questionario : lsquestionario) {
    
      if(questionario.getDataRespostaQuestionario() != null)
      {
        relatorioRespondido++;
      }
      if(questionario.isPlanoTrabalhoAnexado())
      {
        planoTrabalhoAnexado++;
      }
      if(questionario.isRelatorioAnexado())
      {
        relatorioAnexado++;
      }
      if(questionario.isFlagEnviado())
      {
        relatorioEnviado++;
      }
      
    }    
   
    result.include("totalRelatorioRespondido", relatorioRespondido);
    result.include("totalPlanoTrabalhoAnexado", planoTrabalhoAnexado);
    result.include("totalRelatorioAnexado", relatorioAnexado);
    result.include("totalRelatorioEnviado", relatorioEnviado);    
    result.include("lsquestionario", lsquestionario);
    result.include("totalSolicitacoes", lsquestionario.size());
  }

  @Path("/confirmacaoHash")
  public void confirmacaoHash() {

  }
  
  @Path("/lista-questionario")
  public void listaQuestionario() {
    listarQuestionarioComFiltro("todos", "todos","todos", "");
  }
  
  @Path("/listar-questionario")
  public void listarQuestionarioComFiltro(String statusRelatorio, String statusPlanoTrabalho, String relatorioAnexado, String nomeOrgao) {
    
    QuestionarioDao questionarioDao = new QuestionarioDao();
    List<Questionario> lsquestionario = new ArrayList<Questionario>();
    lsquestionario = questionarioDao.retornarListaQuestionarioComFiltro(path, statusRelatorio, statusPlanoTrabalho, relatorioAnexado, nomeOrgao);
    result.include("lsquestionario", lsquestionario);
    result.include("totalSolicitacoes", lsquestionario.size());   
    result.include("statusRel", statusRelatorio.equalsIgnoreCase("todos")? "" :statusRelatorio);
    result.include("relatorioAnex", relatorioAnexado.equalsIgnoreCase("todos")? "" :relatorioAnexado);
    result.include("statusPlanoTrab", statusPlanoTrabalho.equalsIgnoreCase("todos")? "" :statusPlanoTrabalho);
    result.include("nomeOrgao", nomeOrgao != null? nomeOrgao:"");
    
    this.validator.add(new ValidationMessage("", ""));
    this.validator.onErrorUsePageOf(QuestionarioController.class).listaQuestionario(); 
    
    
  }

  @Path("/salvar-questionario")
  public void questionarioSalvar(String autorizacao, String noOrgao, String nomeResponsavel,
      String cargoResponsavel, String emailDestinoOrgao, String telefoneResponsavel, String dataRecebimentoEmail) {


    AutorizacaoGeracaoHashDao autorizacaoGeracaoHashDao = new AutorizacaoGeracaoHashDao();
    String mensagemEnvio = "";
    int idAutorizacaoGeracaoHash = -1;

    idAutorizacaoGeracaoHash = autorizacaoGeracaoHashDao.verificarAutorizacaoGeracaoHash(path, autorizacao);
    if (idAutorizacaoGeracaoHash > -1) {
      String[] codigo = emailDestinoOrgao.split("@");
      String codigoHash = "";
      
      codigoHash =  codigo[0]
              + DateUtil.dataHoraAtual().toString().replace("/", "").replace(" ", "")
                  .replace(":", "");


      Questionario questionario = new Questionario();
      // BufferedReader reader = new BufferedReader(new InputStreamReader(file.getFile()));

      ManagerProperties managerProperties = new ManagerProperties();

      String dtInicioQuestionario = "";
      String dtFimQuestionario = "";
      String hashAutenticacao = null;
      Properties prop = null;

      try {
        prop =
            managerProperties.getProp(this.application.getRealPath("")
                + "/WEB-INF/respostaFormulario.properties");

        dtInicioQuestionario = prop.getProperty("dataInicio");
        dtFimQuestionario = prop.getProperty("dataFim");
        hashAutenticacao = GeradorCodigoHash.gerarHash(codigoHash);

      } catch (IOException e) {
        e.printStackTrace();
      } catch (NoSuchAlgorithmException e) {

        e.printStackTrace();
      }

      questionario.setDtInicioQuestionario(dtInicioQuestionario);
      questionario.setDtFimQuestionario(dtFimQuestionario);
      questionario.setEmailDestinoOrgao(emailDestinoOrgao);
      questionario.setHashAutenticacao(hashAutenticacao);
      questionario.setResponsavel(nomeResponsavel);
      questionario.setCargoResponsavel(cargoResponsavel);
      questionario.setTelefone(telefoneResponsavel);
      questionario.setNoOrgao(noOrgao);
      
      Validacao validate = new Validacao();
      
      questionario.setDtRecebimentoEmail(dataRecebimentoEmail);
      questionario.setIdAutorizacaoGeracaoHash(idAutorizacaoGeracaoHash);

      QuestionarioDao questionarioDao = new QuestionarioDao();
      // List<String> corpoEmail = new ArrayList<String>();
      
      int idQuestionario = questionarioDao.salvarQuestionario(path, questionario);
      
      if (idQuestionario > -1) {

        StringBuffer mensagem = new StringBuffer();

        mensagem.append("Prezado(a),</br>");
        mensagem.append("<p>Senhor(a) " + nomeResponsavel + ", " + cargoResponsavel + ", do(a) "
            + noOrgao + ", conforme solicitado, o acesso ");
        mensagem.append("ao FAD para o preenchimento de informações sobre a atual situação da ");
        mensagem
            .append("acessibilidade dos ambientes digitais do seu órgão ou entidade deverá ser ");
        mensagem.append("realizado pelo endereço " + "<a href=\"" + prop.getProperty("enderecoFad") + "\">" + prop.getProperty("enderecoFad") + "</a>"
            + " utilizando o código de ");
        mensagem.append("acesso: " + hashAutenticacao + " .</p>");

        mensagem
            .append("<p>A guarda do código de acesso, bem como as informações prestadas são de sua ");
        mensagem.append("inteira responsabilidade.</p>");

        mensagem.append("<p>O FAD poderá ser preenchido no período "
            + DateUtil.dataHoraFormatadaDiaMesAno(prop.getProperty("dataInicio")) + " a "
            + DateUtil.dataHoraFormatadaDiaMesAno(prop.getProperty("dataFim")) + ", data limite ");
        mensagem
            .append("para o envio do relatório circunstanciado (formulário de acessibilidade digital e plano de ");
        mensagem
            .append("trabalho) à Procuradoria Federal dos Direitos do Cidadão do Ministério Público Federal e ");
        mensagem.append("publicado no sítio ou portal eletrônico do órgão ou entidade.​</p>");

        mensagem
            .append("<p>Maiores informações, dúvidas e sugestões devem ser encaminhadas pelo canal ");
        mensagem.append("<a href=\"" + prop.getProperty("enderecoContato") + "\">" + prop.getProperty("enderecoContato") + "</a>.</p>");

        mensagem.append("<p>Respeitosamente,</p>");

        mensagem.append("<p>Ministério do Planejamento, Desenvolvimento e Gestão ");
        mensagem.append("Secretaria de Tecnologia da Informação ");
        mensagem.append("Departamento de Governo Digital ");
        mensagem.append("Coordenação-Geral de Padrões de Governo Digital ");
        mensagem.append(prop.getProperty("emailContato") + "</br>");

        String[] telefoneContato = prop.getProperty("telefoneContato").split(",");

        for (String numeroTelefone : telefoneContato) {
          mensagem.append(numeroTelefone + "</br>");
        }
        mensagem.append("</p>");

        Contato contato = new Contato();
        contato.setEmail(emailDestinoOrgao);
        contato
            .setAssunto("Formulário Eletrônico de Acessibilidade Digital (FAD) – Concessão de Acesso");
        contato.setMensagem(mensagem.toString());
        contato.setNome(nomeResponsavel);

        if (enviarHashPorEmail(contato)) {
          if(questionarioDao.atualizarDataRespostaQuestionario(path, idQuestionario))
          {
            mensagemEnvio = "Questionário salvo e enviado por email com suceso!";
          }
          else
          {
            mensagemEnvio = "Questionário salvo e enviado por email, mas, não foi possível atualizar a data de resposta!";
          }
          
        } else {
          mensagemEnvio = "Questionário salvo, mas não foi possível enviar email!";
        }
        result.include("mensagemEnvio", mensagemEnvio);
        this.validator.add(new ValidationMessage("", ""));
        this.validator.onErrorUsePageOf(QuestionarioController.class).confirmacaoHash();
      } else {
        mensagemEnvio = "Não foi possível salvar o questionário!";
        result.include("mensagemEnvio", mensagemEnvio);
        this.validator.add(new ValidationMessage("", ""));
        this.validator.onErrorUsePageOf(QuestionarioController.class).confirmacaoHash();
      }
    } else {
      mensagemEnvio = "É preciso autorização para gerar código Hash!";
      result.include("mensagemEnvio", mensagemEnvio);
      this.validator.add(new ValidationMessage("", ""));
      this.validator.onErrorUsePageOf(QuestionarioController.class).confirmacaoHash();
    }


  }
  
  private boolean enviarHashPorEmail(Contato contato) {

    boolean emailEnviado = false;


    String respSendEmail;

    Email email = new Email(this.application.getRealPath("") + "/WEB-INF/mail.properties");

    EnvioEmailSemAutenticacao envioEmailSemAutenticacao =
        new EnvioEmailSemAutenticacao(email.getHost(), Integer.toString(email.getPort()));


    respSendEmail =
        envioEmailSemAutenticacao.sendMailComCopia(email.getFrom(), contato.getEmail(),
            contato.getAssunto(), contato.getMensagem(), email.getAuth(), email.getAuthUser(),
            email.getAuthPass(), email.getCopiaEmailTo());


    /*
     * String respSendEmail = email.sendEmail("Contato","govbr@planejamento.gov.br",
     * contato.getNome(),contato.getEmail(),StringHelper.convertFromUTF8(contato.getAssunto()),
     * StringHelper.convertFromUTF8(contato.getMensagem()), true);
     */

    if (respSendEmail.equals("")) {
      result.include("mensagem", "Mensagem enviada com Sucesso");
      result.include("status", "success");
      emailEnviado = true;

    } else {
      result.include("mensagem", "Não foi possível enviar a mensagem! Ocorreu o problema: "
          + respSendEmail);
      result.include("status", "error");
    }

    return emailEnviado;


  }
  


}