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

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.ResultSet;
import java.sql.SQLException;
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.OrgaoDao;
import br.com.dao.QuestionarioDao;
import br.com.model.entity.Contato;
import br.com.model.entity.EnvioEmailSemAutenticacao;
import br.com.model.entity.Orgao;
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);

		OrgaoDao orgaoDao = new OrgaoDao();
		Orgao orgao;
		List<Orgao> lsOrgao = new ArrayList<Orgao>();
		ResultSet rset = null;

		rset = orgaoDao.retornarOrgaos(path);

		try {
			while (rset.next()) {
				orgao = new Orgao();

				orgao.setIdOrgao(rset.getInt("id_orgao"));
				orgao.setNomeOrgao(rset.getString("no_orgao"));
				orgao.setIdQuestionario(rset.getInt("id_questionario"));

				lsOrgao.add(orgao);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		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("lsOrgao", lsOrgao);
		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());
		
		lsOrgao = null;
		orgao = null;
		orgaoDao = null;
	}

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

	}

	@Path("/lista-questionario")
	public void listaQuestionario() {
		listarQuestionarioComFiltro("todos", "todos", "todos", "todos", "");
	}

	@Path("/listar-questionario")
	public void listarQuestionarioComFiltro(String statusRelatorio,
			String statusPlanoTrabalho, String relatorioAnexado,
			String relatorioEnviado, String nomeOrgao) {

		QuestionarioDao questionarioDao = new QuestionarioDao();
		List<Questionario> lsquestionario = new ArrayList<Questionario>();
		lsquestionario = questionarioDao.retornarListaQuestionarioComFiltro(
				path, statusRelatorio, statusPlanoTrabalho, relatorioAnexado,
				relatorioEnviado, 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("relatorioEnv", relatorioEnviado
				.equalsIgnoreCase("todos") ? "" : relatorioEnviado);
		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 idOrgao,
			String orgaoAusente, 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();
			}

			OrgaoDao orgaoDao = new OrgaoDao();
			Orgao orgao = new Orgao();

			if (orgaoAusente == null) {
				orgao = orgaoDao.retornarOrgaoPorId(path,
						Integer.parseInt(idOrgao));
			}

			questionario.setDtInicioQuestionario(dtInicioQuestionario);
			questionario.setDtFimQuestionario(dtFimQuestionario);
			questionario.setEmailDestinoOrgao(emailDestinoOrgao);
			questionario.setHashAutenticacao(hashAutenticacao);
			questionario.setResponsavel(nomeResponsavel);
			questionario.setCargoResponsavel(cargoResponsavel);
			questionario.setTelefone(telefoneResponsavel);

			if (orgaoAusente == null) {
				questionario.setNoOrgao(orgao.getNomeOrgao());
			} else {
				if (!noOrgao.equalsIgnoreCase("")
						&& !noOrgao.equalsIgnoreCase(null)) {
					questionario.setNoOrgao(noOrgao);
				} else {
					mensagemEnvio = "Não foi possível salvar o questionário, verifique o Órgão!";
					result.include("mensagemEnvio", mensagemEnvio);
					this.validator.add(new ValidationMessage("", ""));
					this.validator.onErrorUsePageOf(
							QuestionarioController.class).confirmacaoHash();
				}

			}

			Validacao validate = new Validacao();

			questionario.setDtRecebimentoEmail(dataRecebimentoEmail);
			questionario.setIdAutorizacaoGeracaoHash(idAutorizacaoGeracaoHash);

			QuestionarioDao questionarioDao = new QuestionarioDao();
			// List<String> corpoEmail = new ArrayList<String>();

			int idQuestionario = 0;

			if (orgaoAusente == null) {
				idQuestionario = questionarioDao.salvarQuestionarioAtualizaOrgao(path,
						questionario, orgao);
			} else {
				idQuestionario = questionarioDao.salvarQuestionarioOrgao(path,
						questionario);
			}

			if (idQuestionario > -1) {

				
				StringBuffer mensagem = new StringBuffer();

				mensagem.append("Prezado(a),</br>");
				mensagem.append("<p>Senhor(a) " + nomeResponsavel + ", "
						+ cargoResponsavel + ", do(a) " + orgao.getNomeOrgao()
						+ ", 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 02/01/2017, 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 atualizar o id do questionário na tabela dos órgãos!";
				result.include("mensagemEnvio", mensagemEnvio);
				this.validator.add(new ValidationMessage("", ""));
				this.validator.onErrorUsePageOf(QuestionarioController.class)
						.confirmacaoHash();
			}

		} else {
			mensagemEnvio = "Não foi possível identificar o Órgao!";
			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;

	}

}