/*
* 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.struts.action.acionamento;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import br.gov.serpro.ouvidoria.controller.acionamento.EnviarMensagemWebCtrl;
import br.gov.serpro.ouvidoria.controller.andamento.RecuperarCodigoAcessoCtrl;
import br.gov.serpro.ouvidoria.model.EstadoAcionamento;
import br.gov.serpro.ouvidoria.model.MeioEnvioResposta;
import br.gov.serpro.ouvidoria.model.TipoAcionador;
import br.gov.serpro.ouvidoria.struts.ActionSupport;
import br.gov.serpro.ouvidoria.struts.form.CadastrarAcionamentoForm;
import br.gov.serpro.ouvidoria.util.Constants;
/**
* Objetivo: Cadastrar o acionamento
*
* @author SERPRO
* @version $Revision: 1.1.2.4 $, $Date: 2011/10/18 17:57:04 $
* @version 0.1, 2004/12/07
*
*/
public class CadastrarAcionamentoAction extends ActionSupport {
/**
* Método de execução da ação. Realiza dois forwards: um em caso de sucesso
* e outro em caso de falha
*
* @param mapping
* @param form
* ActionForm, caso necessário
* @param request
* @param response
*
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
ActionErrors erros = new ActionErrors();
EnviarMensagemWebCtrl enviarMensagemWebCtrl = new EnviarMensagemWebCtrl(
getDaoFactory());
String nome = "";
String cpf = "";
String strArquivoAnexo = "";
String strMensagemDigitalizada = "";
CadastrarAcionamentoForm _form = (CadastrarAcionamentoForm) form;
Integer tipoMensagem = _form.getTipoMensagem();
Integer assunto = _form.getAssunto();
Integer localidadeOcorrencia = _form.getLocalidadeOcorrencia();
Integer meioEnvioResposta = _form.getMeioEnvioResposta();
Integer meioRecebimento = _form.getMeioRecebimento();
String mensagem = _form.getMensagem();
FormFile arquivoAnexo = _form.getArquivoAnexo();
FormFile mensagemDigitalizada = _form.getMensagemDigitalizada();
String sexo = _form.getSexo();
Integer escolaridade = _form.getEscolaridade();
Integer faixaEtaria = _form.getFaixaEtaria();
Integer pais = _form.getPais();
Integer uf = _form.getUf();
String email = _form.getEmail();
String codPaisTelefone = _form.getCodigoPaisTelefone();
String codCidadeTelefone = _form.getCodigoCidadeTelefone();
String telefone = _form.getTelefone();
String codPaisFax = _form.getCodigoPaisFax();
String codCidadeFax = _form.getCodigoCidadeFax();
String fax = _form.getFax();
Integer tipoAcionador = _form.getTipoAcionador();
String nomeAcionadorPessoaFisica = _form.getNomeAcionadorPessoaFisica();
String cpfAcionadorPessoaFisica = _form.getCpfAcionadorPessoaFisica();
String razaoSocialAcionadorPessoaJuridica = _form
.getRazaoSocialAcionadorPessoaJuridica();
String cnpjAcionadorPessoaJuridica = _form
.getCnpjAcionadorPessoaJuridica();
String nomeContatoAcionadorPessoaJuridica = _form
.getNomeContatoAcionadorPessoaJuridica();
String cpfAcionadorPessoaJuridica = _form
.getCpfAcionadorPessoaJuridica();
String matriculaAcionadorFuncionario = _form
.getMatriculaAcionadorFuncionario();
String setorAcionadorFuncionario = _form.getSetorAcionadorFuncionario();
String nomeAcionadorFuncionario = _form.getNomeAcionadorFuncionario();
String cpfAcionadorFuncionario = _form.getCpfAcionadorFuncionario();
String logradouroCarta = _form.getLogradouroCarta();
String numeroCarta = _form.getNumeroCarta();
String complementoCarta = _form.getComplementoCarta();
String bairroCarta = _form.getBairroCarta();
String cidadeCarta = _form.getCidadeCarta();
String cepCarta = _form.getCepCarta();
Integer paisCarta = _form.getPaisCarta();
Integer ufCarta = _form.getUfCarta();
String pergunta = _form.getPergunta();
String resposta = _form.getResposta();
// define qual nome e qual cpf a ser usado
if (enviarMensagemWebCtrl.getTipoAcionador(tipoAcionador).equals(
TipoAcionador.PESSOA_FISICA)) {
nome = nomeAcionadorPessoaFisica;
cpf = cpfAcionadorPessoaFisica;
} else {
if (enviarMensagemWebCtrl.getTipoAcionador(tipoAcionador).equals(
TipoAcionador.FUNCIONARIO)) {
nome = nomeAcionadorFuncionario;
cpf = cpfAcionadorFuncionario;
}
}
if (sexo == "") {
sexo = null;
}
if (arquivoAnexo != null) {
strArquivoAnexo = arquivoAnexo.getFileName();
}
if (mensagemDigitalizada != null) {
strMensagemDigitalizada = mensagemDigitalizada.getFileName();
}
// Atribui número de protocolo do acionamento
enviarMensagemWebCtrl.getAcionamento().setNumeroProtocolo(
enviarMensagemWebCtrl.obterNumeroProtocolo());
if ((arquivoAnexo != null) && (arquivoAnexo.getFileName().length() > 0)) {
strArquivoAnexo = enviarMensagemWebCtrl.getAcionamento()
.getNumeroProtocolo()
+ "_" + this.convertToASCII2(arquivoAnexo.getFileName());
}
if ((mensagemDigitalizada != null)
&& (mensagemDigitalizada.getFileName().length() > 0)) {
strMensagemDigitalizada = enviarMensagemWebCtrl.getAcionamento()
.getNumeroProtocolo()
+ "_"
+ this.convertToASCII2(mensagemDigitalizada.getFileName());
}
// Acionamento é criado como pendente
enviarMensagemWebCtrl.getAcionamento().setEstadoAcionamento(
EstadoAcionamento.PENDENTE);
enviarMensagemWebCtrl.getAcionamento()
.setOrigemAcionamento(
(String) request.getSession().getAttribute(
Constants.SS_ORIGEM));
// Data do acionamento é a data atual
enviarMensagemWebCtrl.getAcionamento().setDataAcionamento(
new Timestamp(System.currentTimeMillis()));
// Atribui a Localidade de Ocorrência do acionamento
enviarMensagemWebCtrl.getAcionamento().setLocalidadeOcorrencia(
enviarMensagemWebCtrl
.getLocalidadeOcorrencia(localidadeOcorrencia));
// Atribui o meio de recebimento do acionamento
if ((meioRecebimento != null) && (meioRecebimento.intValue() != 0)) {
enviarMensagemWebCtrl
.getAcionamento()
.setMeioRecebimentoAcionamento(
enviarMensagemWebCtrl
.getMeioRecebimentoAcionamento(meioRecebimento));
}
// Cria a mensagem do acionamento
enviarMensagemWebCtrl.getAcionamento().criarMensagem(mensagem,
strArquivoAnexo, strMensagemDigitalizada,
enviarMensagemWebCtrl.getTipoMensagem(tipoMensagem),
enviarMensagemWebCtrl.getAssunto(assunto));
// Cria o acionador do acionamento
enviarMensagemWebCtrl.getAcionamento().criarAcionador(
sexo,
email,
codPaisTelefone,
codCidadeTelefone,
telefone,
codPaisFax,
codCidadeFax,
fax,
nome,
cpf,
cnpjAcionadorPessoaJuridica,
razaoSocialAcionadorPessoaJuridica,
cpfAcionadorPessoaJuridica,
nomeContatoAcionadorPessoaJuridica,
matriculaAcionadorFuncionario,
setorAcionadorFuncionario,
enviarMensagemWebCtrl.getPais(pais),
enviarMensagemWebCtrl.getMeioEnvioRespostaOrgao(
meioEnvioResposta, new Integer(this.getOrgao(request)
.getId().intValue())),
enviarMensagemWebCtrl.getEscolaridade(escolaridade),
enviarMensagemWebCtrl.getUF(uf),
enviarMensagemWebCtrl.getFaixaEtaria(faixaEtaria),
enviarMensagemWebCtrl.getTipoAcionador(tipoAcionador));
try {
enviarMensagemWebCtrl.getAcionamento()
.definirDataPrevistaResolucaoExterna();
} catch (Exception e) {
if (Constants.DEBUG) {
System.out
.println("Não há data prevista para resolução externa.");
e.printStackTrace();
}
}
try {
enviarMensagemWebCtrl.getAcionamento()
.definirDataPrevistaResolucaoInterna();
} catch (Exception e) {
if (Constants.DEBUG) {
System.out
.println("Não há data prevista para resolução interna.");
e.printStackTrace();
}
}
// define o especialista
enviarMensagemWebCtrl.getAcionamento().definirEspecialista(
enviarMensagemWebCtrl.getTipoMensagem(tipoMensagem),
enviarMensagemWebCtrl.getAssunto(assunto),
enviarMensagemWebCtrl.getLocalidadeOcorrencia(
localidadeOcorrencia).getSubOrgao(),
enviarMensagemWebCtrl
.getLocalidadeOcorrencia(localidadeOcorrencia),
this.getOrgao(request));
// Se o meio de resposta for carta, armazena informações do endereço
if (enviarMensagemWebCtrl.getMeioEnvioRespostaOrgao(meioEnvioResposta,
new Integer(this.getOrgao(request).getId().intValue()))
.getMeioEnvioResposta().equals(MeioEnvioResposta.CARTA)) {
enviarMensagemWebCtrl.getAcionamento().getAcionador()
.criarInformacoesRecebimentoRespostaCarta(logradouroCarta,
numeroCarta, complementoCarta, cepCarta,
bairroCarta, cidadeCarta,
enviarMensagemWebCtrl.getPais(paisCarta),
enviarMensagemWebCtrl.getUF(ufCarta));
}
// Se usa código de acesso, este precisa ser gerado e as informações de
// cosnsulta armazenadas
if (this.getOrgao(request).getConfiguracoes().getPossuiCodigoAcesso()
.booleanValue()) {
enviarMensagemWebCtrl.getAcionamento().getAcionador()
.criarInformacoesConsultaAcionamento(pergunta, resposta,
new Integer(0));
}
if ((arquivoAnexo != null) || (mensagemDigitalizada != null)) {
String caminho = "";
caminho += enviarMensagemWebCtrl.getParametrosGerais()
.getDiretorioContextoAplicacao();
caminho += Constants.DIR_ANEXOS;
caminho += this.getOrgao(request).getConfiguracoes()
.getNomeDiretorioOrgao()
+ "/";
if ((arquivoAnexo != null)
&& (arquivoAnexo.getFileName().length() > 0)) {
/* Salvamento de arquivos anexos */
try {
File f = new File(caminho);
f.mkdirs();
FileOutputStream fos = new FileOutputStream(caminho
+ strArquivoAnexo);
fos.write(arquivoAnexo.getFileData());
} catch (FileNotFoundException e) {
e.printStackTrace();
throw (new FileNotFoundException(
"Erro ao tentar anexar Arquivo."
+ "\nCaso o nome do arquivo contenha acentos, retire-os e tente novamente.\n\n"));
} catch (Exception e) {
e.printStackTrace();
}
}
if ((mensagemDigitalizada != null)
&& (mensagemDigitalizada.getFileName().length() > 0)) {
try {
File f = new File(caminho);
f.mkdirs();
FileOutputStream fos = new FileOutputStream(caminho
+ strMensagemDigitalizada);
fos.write(mensagemDigitalizada.getFileData());
} catch (FileNotFoundException e) {
throw (new FileNotFoundException(
"Erro ao tentar anexar Mensagem Digitalizada."
+ "\nCaso o nome do arquivo contenha acentos, retire-os e tente novamente.\n\n"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
/* SALVA O ACIONAMENTO */
enviarMensagemWebCtrl.salvarAcionamento();
String nomeAcionador = enviarMensagemWebCtrl.getNomeAcionador();
// Se houver email, envia email com o codigo de acesso (se houver) e
// o codigo do protocolo
if (!email.equals("")) {
if (this.getOrgao(request).getConfiguracoes()
.getPossuiCodigoAcesso().booleanValue()) {
RecuperarCodigoAcessoCtrl recuperaCodigoAcesso = new RecuperarCodigoAcessoCtrl(
daoFactory);
recuperaCodigoAcesso.enviarCodigoAcessoViaEmail(this
.getOrgao(request), enviarMensagemWebCtrl
.getAcionamento().getNumeroProtocolo());
} else {
RecuperarCodigoAcessoCtrl recuperaCodigoAcesso = new RecuperarCodigoAcessoCtrl(
daoFactory);
recuperaCodigoAcesso.enviarProtocoloViaEmail(this
.getOrgao(request), enviarMensagemWebCtrl
.getAcionamento().getNumeroProtocolo());
}
}
// mostrar somente o primeiro nome
if (nomeAcionador != null) {
int ind = nomeAcionador.indexOf(" ");
if (ind != -1) {
nomeAcionador = nomeAcionador.subSequence(0, ind).toString();
}
}
request.setAttribute("nomeAcionador", nomeAcionador);
request.setAttribute("sexo", enviarMensagemWebCtrl.getAcionamento()
.getAcionador().getSexo());
request.setAttribute("textoRespostaAcionamento", this.getOrgao(request)
.getConfiguracoes().getTextoRespostaAcionamentoFormatado());
request.setAttribute("protocolo", enviarMensagemWebCtrl
.getAcionamento().getNumeroProtocolo());
if (enviarMensagemWebCtrl.getAcionamento().getAcionador()
.getInformacoesConsultaAcionamento() != null
&& enviarMensagemWebCtrl.getAcionamento().getAcionador()
.getInformacoesConsultaAcionamento().getCodigoAcesso() != null) {
request.setAttribute("codigoAcesso", enviarMensagemWebCtrl
.getAcionamento().getAcionador()
.getInformacoesConsultaAcionamento().getCodigoAcesso());
}
if (enviarMensagemWebCtrl.getAcionamento()
.getDataPrevistaResolucaoExterna() != null) {
SimpleDateFormat sfd1 = new SimpleDateFormat("dd/MM/yyyy");
String dataFormatada = sfd1.format(enviarMensagemWebCtrl
.getAcionamento().getDataPrevistaResolucaoExterna());
request.setAttribute("dataPrevistaResolucaoExterna", dataFormatada);
}
/* Gera histórico, se for o caso */
this.geraHistorico(request, enviarMensagemWebCtrl.getAcionamento());
if (erros.isEmpty()) {
return (mapping.findForward("success"));
}
return (mapping.findForward("failure"));
}
public String convertToASCII2(String text) {
return text.replaceAll("[áàãâä]", "a").replaceAll("[éèẽêë]", "e")
.replaceAll("[íìĩîï]", "i").replaceAll("[óòõôö]", "o")
.replaceAll("[úùũûü]", "u").replaceAll("[ÁÀÃÂÄ]", "A")
.replaceAll("[ÉÈẼÊË]", "E").replaceAll("[ÍÌĨÎÏ]", "I")
.replaceAll("[ÓÒÕÔÖ]", "O").replaceAll("[ÚÙŨÛÜ]", "U")
.replace('ç', 'c').replace('Ç', 'C').replace('ñ', 'n')
.replace('Ñ', 'N');
}
}