/*
* Sistema de Ouvidoria: um canal através do qual os usuários
* podem encaminhar suas reclamações, elogios e sugestões.
*
* Copyright (C) 2011 SERPRO
*
* Este programa é software livre; você pode redistribuí-lo e/ou
* modificá-lo sob os termos da Licença Pública Geral GNU, conforme
* publicada pela Free Software Foundation; tanto a versão 2 da
* Licença como (a seu critério) qualquer versão mais nova.
*
* Este programa é distribuído na expectativa de ser útil, mas SEM
* QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM
* PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais
* detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU,
* sob o título "LICENCA.txt", junto com esse programa. Se não,
* acesse o Portal do Software Público Brasileiro no endereço
* http://www.softwarepublico.gov.br/ ou escreva para a Fundação do
* Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston,
* MA 02111-1301, USA.
*
* Contatos através do seguinte endereço internet:
* http://www.serpro.gov.br/sistemaouvidoria/
*/
package br.gov.serpro.ouvidoria.controller.andamento;
import java.util.List;
import org.hibernate.criterion.Expression;
import br.gov.serpro.ouvidoria.dao.Dao;
import br.gov.serpro.ouvidoria.dao.DaoException;
import br.gov.serpro.ouvidoria.dao.DaoFactory;
import br.gov.serpro.ouvidoria.model.AcionadorFuncionario;
import br.gov.serpro.ouvidoria.model.AcionadorPessoaFisica;
import br.gov.serpro.ouvidoria.model.AcionadorPessoaJuridica;
import br.gov.serpro.ouvidoria.model.Acionamento;
import br.gov.serpro.ouvidoria.model.Orgao;
import br.gov.serpro.ouvidoria.model.ParametrosGerais;
import br.gov.serpro.ouvidoria.model.TipoAcionador;
import br.gov.serpro.ouvidoria.util.Utilitario;
/**
* CtrlRecuperarCodigoAcesso
*
* Objetivo: Recuperar Código de Acesso
*
* @author SERPRO
* @version $Revision: 1.1.2.3 $, $Date: 2011/10/18 17:55:13 $
* @version 0.1, Date: 2004/12/03
*/
public class RecuperarCodigoAcessoCtrl {
private Dao acionamentoDao;
private Dao parametrosGeraisDao;
private final static int PROTOCOLO_ESTA_BLOQUEADO = 1;
private final static int PROTOCOLO_FOI_BLOQUEADO = 2;
private final static int ACIONADOR_ANONIMO = 3;
private final static int PERGUNTA_NAO_CADASTRADA = 4;
private final static int ENVIO_EMAIL = 5;
private final static int CAMPO_VALIDACAO = 6;
private final static int RESPOSTA_INCORRETA = 7;
private final static int ALERTA_BLOQUEIO_PROTOCOLO = 8;
public final static int RESPOSTA_CORRETA = 9;
private final static int ERRO_ENVIO_EMAIL = 10;
public RecuperarCodigoAcessoCtrl(final DaoFactory daoFactory) {
acionamentoDao = daoFactory.create(Acionamento.class);
parametrosGeraisDao = daoFactory.create(ParametrosGerais.class);
}
// formaRecuperacao = 1: Email
// formaRecuperacao = 2: Tela
public int recuperarCodigoAcesso(Orgao orgao, Integer numeroProtocolo,
Integer formaRecuperacao) throws DaoException {
boolean protocoloBloqueado = this
.checarProtocoloBloqueado(numeroProtocolo);
if (protocoloBloqueado) {
return PROTOCOLO_ESTA_BLOQUEADO;
}
boolean acionadorAnonimo = this.checarAcionadorAnonimo(numeroProtocolo);
if (acionadorAnonimo) {
return ACIONADOR_ANONIMO;
}
if (formaRecuperacao.intValue() == 1) {
if (this.enviarCodigoAcessoViaEmail(orgao, numeroProtocolo))
return ENVIO_EMAIL;
return ERRO_ENVIO_EMAIL;
}
if (formaRecuperacao.intValue() == 2) {
String pergunta = this.getPergunta(numeroProtocolo);
if (pergunta == null || pergunta.trim().length() == 0) {
return PERGUNTA_NAO_CADASTRADA;
}
return CAMPO_VALIDACAO;
}
return 0;
}
public int recuperarCodigoAcessoSubmit(Orgao orgao,
Integer numeroProtocolo, String respostaUsuario,
String campoObrigatorio) throws DaoException {
if (this.validarResposta(numeroProtocolo, respostaUsuario)) {
return RESPOSTA_CORRETA;
}
int valorRetorno = RESPOSTA_INCORRETA;
Integer tempoBloqueio;
boolean existeBloqueio;
Acionamento acionamento = this.getAcionamento(numeroProtocolo);
// incrementa o número de tentativas
acionamento.getAcionador().getInformacoesConsultaAcionamento()
.incrementarNumeroTentativasPergunta();
// tentativas na tela:
int numeroTentativas = acionamento.getAcionador()
.getInformacoesConsultaAcionamento()
.getNumeroTentativasPergunta().intValue();
// número limite:
int numeroTentativasOrgao = 9999;
if (orgao.getConfiguracoes().getQtdeTentativasPossiveisPergunta() != null) {
numeroTentativasOrgao = orgao.getConfiguracoes()
.getQtdeTentativasPossiveisPergunta().intValue();
}
existeBloqueio = false;
if (orgao.getConfiguracoes().getExisteBloqueioProtocoloPelaPergunta() != null) {
existeBloqueio = orgao.getConfiguracoes()
.getExisteBloqueioProtocoloPelaPergunta().booleanValue();
}
if (existeBloqueio) {
tempoBloqueio = orgao.getConfiguracoes()
.getTempoBloqueioProtocoloPelaPergunta();
if (numeroTentativas >= numeroTentativasOrgao) {
acionamento.bloquearProtocolo(tempoBloqueio);
valorRetorno = PROTOCOLO_FOI_BLOQUEADO;
numeroTentativas = 0;
} else if (numeroTentativas == (numeroTentativasOrgao - 1)) {
valorRetorno = ALERTA_BLOQUEIO_PROTOCOLO;
} else {
valorRetorno = RESPOSTA_INCORRETA;
}
}
acionamento.getAcionador().getInformacoesConsultaAcionamento()
.setNumeroTentativasPergunta(new Integer(numeroTentativas));
acionamentoDao.save(acionamento);
return valorRetorno;
}
public Acionamento getAcionamento(Integer numeroProtocolo)
throws DaoException {
Object[] criteria = new Object[1];
criteria[0] = Expression.eq("numeroProtocolo", numeroProtocolo);
List acionamento = acionamentoDao.find(criteria);
if (!acionamento.isEmpty())
return (Acionamento) acionamento.get(0);
return null;
}
public boolean checarProtocoloBloqueado(Integer numeroProtocolo)
throws DaoException {
return this.getAcionamento(numeroProtocolo).checarProtocoloBloqueado();
}
public boolean checarAcionadorAnonimo(Integer numeroProtocolo)
throws DaoException {
Acionamento acionamento = this.getAcionamento(numeroProtocolo);
return acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.ANONIMO);
}
public boolean enviarCodigoAcessoViaEmail(Orgao orgao,
Integer numeroProtocolo) throws DaoException {
Acionamento acionamento = this.getAcionamento(numeroProtocolo);
String codigoAcesso = this.getCodigoAcesso(numeroProtocolo);
String lsServidorSMTP = "";
String lsDe = "";
String lsPara = "";
String lsAssunto = "";
String lsTopo = "";
String lsNome = "";
String lsTexto = "";
List listaParametrosGerais = parametrosGeraisDao.list();
if (listaParametrosGerais != null)
lsServidorSMTP = ((ParametrosGerais) listaParametrosGerais
.get(0)).getServidorSMTP();
lsDe = orgao.getConfiguracoes().getRemetenteEmail();
lsPara = acionamento.getAcionador().getEmail();
lsAssunto = "Ouvidoria " + orgao.getDescricao();
// Recupera o nome do acionador
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.PESSOA_JURIDICA)) {
lsNome = ((AcionadorPessoaJuridica) (acionamento.getAcionador()))
.getNomeContato();
}
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.PESSOA_FISICA)
|| acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.FUNCIONARIO)) {
lsNome = ((AcionadorPessoaFisica) (acionamento.getAcionador()))
.getNome();
}
// Monta o cabeçalho do email
if (acionamento.getAcionador().getSexo().equals("F")) {
lsTopo = "Prezada";
if (acionamento.getAcionador().checarAcionadorAnonimo()) {
lsNome = "cidadã";
}
} else if (acionamento.getAcionador().getSexo().equals("M")){
lsTopo = "Prezado";
if (acionamento.getAcionador().checarAcionadorAnonimo()) {
lsNome = "cidadão";
}
} else{
lsTopo = "Prezado(a)";
if (acionamento.getAcionador().checarAcionadorAnonimo()) {
lsNome = "cidadão";
}
}
lsTexto = "<p>"
+ lsTopo
+ " <b>"
+ lsNome
+ "</b>,<br><br>"
+ "Estamos enviando o código de acesso e número de protocolo "
+ "para consulta da resposta do seu acionamento.<br><br>"
+ "Protocolo:<b>"+ numeroProtocolo +"</b><br><br>"
+ "Código de acesso: <b>" + codigoAcesso + "</b><br><br>"
+ "Atenciosamente,<br><br>" + "Ouvidoria - <b>"
+ orgao.getDescricao() + "</b><br>"
+ orgao.getConfiguracoes().getUrlSuporteUsuario();
lsTexto = lsTexto + "</b></p>";
return Utilitario.enviarEmail(lsServidorSMTP, lsDe, lsPara, "", "",
lsAssunto, lsTexto);
}
public boolean enviarProtocoloViaEmail(Orgao orgao,
Integer numeroProtocolo) throws DaoException {
Acionamento acionamento = this.getAcionamento(numeroProtocolo);
String lsServidorSMTP = "";
String lsDe = "";
String lsPara = "";
String lsAssunto = "";
String lsTopo = "";
String lsNome = "";
String lsTexto = "";
List listaParametrosGerais = parametrosGeraisDao.list();
if (listaParametrosGerais != null)
lsServidorSMTP = ((ParametrosGerais) listaParametrosGerais
.get(0)).getServidorSMTP();
lsDe = orgao.getConfiguracoes().getRemetenteEmail();
lsPara = acionamento.getAcionador().getEmail();
lsAssunto = "Ouvidoria " + orgao.getDescricao();
// Recupera o nome do acionador
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.PESSOA_JURIDICA)) {
lsNome = ((AcionadorPessoaJuridica) (acionamento.getAcionador()))
.getNomeContato();
}
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.PESSOA_FISICA)
|| acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.FUNCIONARIO)) {
lsNome = ((AcionadorPessoaFisica) (acionamento.getAcionador()))
.getNome();
}
// Monta o cabeçalho do email
if (acionamento.getAcionador().getSexo().equals("F")) {
lsTopo = "Prezada";
if (acionamento.getAcionador().checarAcionadorAnonimo()) {
lsNome = "cidadã";
}
} else {
lsTopo = "Prezado";
if (acionamento.getAcionador().checarAcionadorAnonimo()) {
lsNome = "cidadão";
}
}
lsTexto = "<p>"
+ lsTopo
+ " <b>"
+ lsNome
+ "</b>,<br><br>"
+ "Estamos enviando o número de Protocolo "
+ "para consulta da resposta do seu acionamento.<br><br>"
+ "Protocolo: <b>" + numeroProtocolo + "</b><br><br>"
+ "Atenciosamente,<br><br>" + "Ouvidoria - <b>"
+ orgao.getDescricao() + "</b><br>"
+ orgao.getConfiguracoes().getUrlSuporteUsuario();
lsTexto = lsTexto + "</b></p>";
return Utilitario.enviarEmail(lsServidorSMTP, lsDe, lsPara, "", "",
lsAssunto, lsTexto);
}
public String getCodigoAcesso(Integer numeroProtocolo) throws DaoException {
Acionamento acionamento = this.getAcionamento(numeroProtocolo);
return acionamento.getAcionador().getInformacoesConsultaAcionamento()
.getCodigoAcesso();
}
public String getPergunta(Integer numeroProtocolo) throws DaoException {
Acionamento acionamento = this.getAcionamento(numeroProtocolo);
return acionamento.getAcionador().getInformacoesConsultaAcionamento()
.getPergunta();
}
public String getCampoValidacao(Integer numeroProtocolo)
throws DaoException {
Acionamento acionamento = this.getAcionamento(numeroProtocolo);
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.FUNCIONARIO)) {
return "Matricula";
}
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.PESSOA_FISICA)) {
return "CPF";
}
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.PESSOA_JURIDICA)) {
return "CNPJ";
}
return null;
}
public boolean validarCampoObrigatorio(Integer numeroProtocolo,
String campoObrigatorioTela) throws DaoException {
String campoObrigatorio;
Acionamento acionamento = this.getAcionamento(numeroProtocolo);
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.FUNCIONARIO)) {
campoObrigatorio = ((AcionadorFuncionario) (acionamento
.getAcionador())).getMatricula();
if (campoObrigatorioTela.equals(campoObrigatorio)) {
return true;
}
}
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.PESSOA_FISICA)) {
campoObrigatorio = ((AcionadorPessoaFisica) (acionamento
.getAcionador())).getCpf();
if (campoObrigatorioTela.equals(campoObrigatorio)) {
return true;
}
}
if (acionamento.getAcionador().getTipoAcionador().equals(
TipoAcionador.PESSOA_JURIDICA)) {
campoObrigatorio = ((AcionadorPessoaJuridica) (acionamento
.getAcionador())).getCnpj();
if (campoObrigatorioTela.equals(campoObrigatorio)) {
return true;
}
}
return false;
}
public boolean validarResposta(Integer numeroProtocolo,
String respostaUsuario) throws DaoException {
Acionamento acionamento = this.getAcionamento(numeroProtocolo);
if (respostaUsuario.equalsIgnoreCase(acionamento.getAcionador()
.getInformacoesConsultaAcionamento().getResposta())) {
return true;
}
return false;
}
}