/*
* 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.agendador;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import br.gov.serpro.ouvidoria.controller.AcionamentoCtrl;
import br.gov.serpro.ouvidoria.controller.gerencial.administracao.OrgaoCtrl;
import br.gov.serpro.ouvidoria.controller.gerencial.administracao.ParametrosGeraisCtrl;
import br.gov.serpro.ouvidoria.dao.DaoException;
import br.gov.serpro.ouvidoria.dao.DaoFactory;
import br.gov.serpro.ouvidoria.dao.hibernate.HibernateDaoFactory;
import br.gov.serpro.ouvidoria.model.Acionamento;
import br.gov.serpro.ouvidoria.model.ConfiguracoesOrgao;
import br.gov.serpro.ouvidoria.model.EstadoAcionamento;
import br.gov.serpro.ouvidoria.model.Funcionario;
import br.gov.serpro.ouvidoria.model.Orgao;
import br.gov.serpro.ouvidoria.model.ParametrosGerais;
import br.gov.serpro.ouvidoria.util.Constants;
import br.gov.serpro.ouvidoria.util.Utilitario;
/**
* <p>
* This is just a simple job that gets fired off many times by example 1
* </p>
*
* @author Bill Kratzer
*/
public class EnviarAlertaJob implements Job {
private static Log _log = LogFactory.getLog(EnviarAlertaJob.class);
public static final String ID_ORGAO = "idOrgao";
public static final String URL = "url";
final DaoFactory daoFactory = new HibernateDaoFactory();
protected String url;
/**
* Quartz requires a public empty constructor so that the scheduler can
* instantiate the class whenever it needs.
*/
public EnviarAlertaJob() {
}
/**
* <p>
* Called by the <code>{@link org.quartz.Scheduler}</code> when a
* <code>{@link org.quartz.Trigger}</code> fires that is associated with the
* <code>Job</code>.
* </p>
*
* @throws JobExecutionException
* if there is an exception while executing the job.
*/
public void execute(JobExecutionContext context)
throws JobExecutionException {
String jobName = context.getJobDetail().getFullName();
_log.info("\n\nExecutando JOB: " + jobName + " em " + new Date()
+ "\n\n");
try {
JobDataMap data = context.getJobDetail().getJobDataMap();
String id = data.getString(ID_ORGAO);
url = data.getString(URL);
OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);
Orgao orgao = orgaoCtrl.get(id);
this.enviarAlertaViaEmail(orgao, EstadoAcionamento.PENDENTE);
_log.info("\nEnviadas Notificacoes sobre Acionamentos Pendentes - "
+ new Date() + "\n");
this.enviarAlertaViaEmail(orgao, EstadoAcionamento.ATRASO);
_log.info("\nEnviadas Notificacoes sobre Acionamentos em Atraso - enviado "
+ new Date() + "\n");
this.enviarAlertaViaEmail(orgao, EstadoAcionamento.CRITICO);
_log.info("\nEnviadas Notificacoes sobre Acionamentos em Atraso Crítico - enviado "
+ new Date() + "\n");
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean enviarAlertaViaEmail(Orgao orgao, EstadoAcionamento estado)
throws DaoException {
AcionamentoCtrl acionamentoCtrl = new AcionamentoCtrl(daoFactory);
ParametrosGeraisCtrl parametrosCtrl = new ParametrosGeraisCtrl(
daoFactory);
String lsServidorSMTP = "";
String lsDe = "";
String lsPara = "";
String lsAssunto = "";
String lsTexto = "";
String lsTextoParametrizado = "";
List listaParametrosGerais = parametrosCtrl.list();
ConfiguracoesOrgao configuracoes = orgao.getConfiguracoes();
if (listaParametrosGerais != null) {
lsServidorSMTP = ((ParametrosGerais) listaParametrosGerais.get(0))
.getServidorSMTP();
}
lsDe = orgao.getConfiguracoes().getRemetenteEmail();
lsAssunto = "Ouvidoria - " + orgao.getDescricao();
Iterator listaAcionamentos = acionamentoCtrl
.listaAcionamentosPorEstado(estado.getId()).iterator();
/* Dados do acionamento */
Acionamento acionamento = null;
String enderecoUrlAcionamento = null;
String estadoAcionamento = null;
Timestamp dataAcionamento = null;
Integer numeroProtocolo = null;
String assunto = null;
SimpleDateFormat data = null;
String dataFormatada = null;
String nomeFuncionarioResponsavel = null;
String nomeOrgao = null;
Funcionario funcionario = null;
// Recupera o nome do acionador
while (listaAcionamentos.hasNext()) {
acionamento = (Acionamento) listaAcionamentos.next();
funcionario = acionamento.getFuncionario();
enderecoUrlAcionamento = urlDetalhamento(acionamento, orgao);
estadoAcionamento = acionamento.getEstadoAcionamento()
.getDescricao();
dataAcionamento = acionamento.getDataAcionamento();
numeroProtocolo = acionamento.getNumeroProtocolo();
assunto = acionamento.getMensagem().getAssunto().getDescricao();
data = new SimpleDateFormat("dd/MM/yyyy");
dataFormatada = data.format(dataAcionamento);
nomeFuncionarioResponsavel = funcionario.getNome();
lsPara = funcionario.getEmail();
nomeOrgao = orgao.getDescricao();
if (lsPara != null && !lsPara.equals("")) {
lsAssunto = "Ouvidoria - Notificação de Mensagem - Protocolo: "
+ numeroProtocolo + " - Situação: " + estadoAcionamento;
if (estado.getId() == EstadoAcionamento.PENDENTE.getId()) {
lsTextoParametrizado = configuracoes
.getTextoNotificacaoPendencia();
} else if (estado.getId().equals(
EstadoAcionamento.ATRASO.getId())) {
lsTextoParametrizado = configuracoes
.getTextoNotificacaoPendencia();
} else if (estado.getId().equals(
EstadoAcionamento.CRITICO.getId())) {
lsTextoParametrizado = configuracoes
.getTextoNotificacaoPendencia();
}
lsTexto = null;
lsTexto = "<p>" + nomeFuncionarioResponsavel + "</b>,<br><br>"
+ "<b>" + lsTextoParametrizado + "</b>"
+ "<br><br><br>";
lsTexto = lsTexto + "</p>";
lsTexto += "<table cellpadding='3' cellspacing='2' width='80%' border='0' bgcolor='#A9A9A9'>";
lsTexto += "<tr style=' color: #0000FF; font-family:Verdana; font-size:10pt; font-weight:bold ;'>";
lsTexto += " <td bgcolor='#DCDCDC'>Status</td>";
lsTexto += " <td bgcolor='#DCDCDC'>Assunto </td>";
lsTexto += " <td bgcolor='#DCDCDC'>Número </td>";
lsTexto += " <td bgcolor='#DCDCDC'>Data Acionamento</td>";
lsTexto += " <td bgcolor='#DCDCDC'>Responsável </td>";
lsTexto += "</tr>";
lsTexto += "<tr style=' color: #0000FF; font-family:Verdana; font-size:10pt; font-weight:bold ;text-decoration: none;'>";
lsTexto += " <td bgcolor='#FFFFFF'>";
lsTexto += "<a href='" + enderecoUrlAcionamento
+ "' target='_blank'>" + estadoAcionamento + "</a>";
lsTexto += " </td>";
lsTexto += " <td bgcolor='#FFFFFF'>" + " <a href='"
+ enderecoUrlAcionamento + "' target='_blank'>"
+ assunto + "</a></td>";
lsTexto += " <td bgcolor='#FFFFFF'>" + " <a href='"
+ urlDetalhamento(acionamento, orgao)
+ "' target='_blank'>" + numeroProtocolo + "</a>"
+ " </td>";
lsTexto += " <td bgcolor='#FFFFFF'>" + " <a href='"
+ enderecoUrlAcionamento + "' target='_blank'>"
+ dataFormatada + "</a>" + " </td>";
lsTexto += " <td bgcolor='#FFFFFF'>" + " <a href='"
+ enderecoUrlAcionamento + "' target='_blank'>"
+ nomeFuncionarioResponsavel + "</a>" + " </td>";
lsTexto += "</tr>";
lsTexto += "</table>";
lsTexto += "<br><br>";
lsTexto += "Atenciosamente,<br><br>";
lsTexto += "Ouvidoria - <b>" + nomeOrgao + "</b><br><br><br>";
lsTexto += orgao.getConfiguracoes().getUrlSuporteUsuario();
_log.info("\n\nURL :" + enderecoUrlAcionamento + "\n");
_log.info("\nNumero protocolo :" + numeroProtocolo + "\n");
_log.info("\n>>>Responsavel :" + nomeFuncionarioResponsavel
+ "\n");
_log.info("\n>>>Email de Destino :" + lsPara + "\n");
_log.info("\n>>>EstadoAcionamento :" + estadoAcionamento
+ "\n\n");
/* Eviar nota de alerta */
Utilitario.enviarEmail(lsServidorSMTP, lsDe, lsPara, "", "",
lsAssunto, lsTexto);
_log.info("\n>>>Enviado email para responsável pelo protocolo :"
+ numeroProtocolo + "\n");
acionamento = null;
enderecoUrlAcionamento = null;
estadoAcionamento = null;
dataAcionamento = null;
numeroProtocolo = null;
assunto = null;
data = null;
dataFormatada = null;
nomeFuncionarioResponsavel = null;
lsPara = null;
nomeOrgao = null;
funcionario = null;
}
}
// Monta o cabeçalho do email
return true;
}
private String urlDetalhamento(Acionamento acionamento, Orgao orgao) {
String lsEnderecoUrl = url;
String enc = Utilitario.encrypt(Constants.DES_KEY, orgao.getId()
.toString());
lsEnderecoUrl = lsEnderecoUrl
+ "/MainIntranet.do?path=/andamento/ExibeMsgPorRespons&id="
+ acionamento.getId();
lsEnderecoUrl = lsEnderecoUrl + "&osessionid=".concat(enc);
return lsEnderecoUrl;
}
}