Package br.gov.serpro.ouvidoria.struts.action.acionamento

Source Code of br.gov.serpro.ouvidoria.struts.action.acionamento.CadastrarAcionamentoAction

/*
* 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');
  }

}
TOP

Related Classes of br.gov.serpro.ouvidoria.struts.action.acionamento.CadastrarAcionamentoAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.