package gcom.gui.atendimentopublico.registroatendimento;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimentoSolicitante;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.funcionario.FiltroFuncionario;
import gcom.cadastro.funcionario.Funcionario;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Esta classe tem por finalidade inserir um solicitante em uma RA j� cadastrada
*
* @author Raphael Rossiter
* @date 25/08/2006
*/
public class AdicionarSolicitanteRegistroAtendimentoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping
.findForward("adicionarSolicitanteRegistroAtendimento");
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
AdicionarSolicitanteRegistroAtendimentoActionForm form = (AdicionarSolicitanteRegistroAtendimentoActionForm) actionForm;
/*
* Pesquisas realizadas a partir do ENTER
* ===========================================================================================================
*/
String objetoColecao = (String) sessao.getAttribute("objetoColecao");
String idRASolicitante = (String) sessao
.getAttribute("idRASolicitante");
if ((form.getIdCliente() != null && !form.getIdCliente()
.equalsIgnoreCase(""))
&& (form.getNomeCliente() == null || form.getNomeCliente()
.equals(""))) {
/*
* Obtendo o id do im�vel informado na aba de inser��o n� 02 (Caso
* n�o tenho sido informado ser� passado como par�metro NULL).
*/
String idImovel = null;
// caso seja do processo de atualizar registro atendimento
if (objetoColecao != null && !objetoColecao.equals("")) {
AtualizarRegistroAtendimentoActionForm atualizarRegistroAtendimentoActionForm = (AtualizarRegistroAtendimentoActionForm) sessao
.getAttribute("AtualizarRegistroAtendimentoActionForm");
idImovel = atualizarRegistroAtendimentoActionForm.getIdImovel();
} else {
// caso seja do processo de inserir registro atendimento
InserirRegistroAtendimentoActionForm inserirRegistroAtendimentoActionForm = (InserirRegistroAtendimentoActionForm) sessao
.getAttribute("InserirRegistroAtendimentoActionForm");
idImovel = inserirRegistroAtendimentoActionForm.getIdImovel();
}
// [FS0027] - Verificar informa��o do im�vel
Cliente cliente = fachada.verificarInformacaoImovel(Util
.converterStringParaInteger(form.getIdCliente()), Util
.converterStringParaInteger(idImovel), false);
if (cliente == null) {
// Nenhuma cliente encontrado
throw new ActionServletException(
"atencao.pesquisa_inexistente", null, "Cliente");
}
// caso seja do processo de atualizar registro atendimento
if (objetoColecao == null || objetoColecao.equals("")) {
// [FS0012] - Verificar exist�ncia do cliente solicitante
fachada.verificarExistenciaClienteSolicitante(Util
.converterStringParaInteger(form.getIdRA()),
cliente.getId());
} else {
if (idRASolicitante != null && !idRASolicitante.equals("")) {
// [FS0012] - Verificar exist�ncia do cliente
// solicitante
fachada
.verificarExistenciaClienteSolicitanteAtualizar(
Util.converterStringParaInteger(form
.getIdRA()),
cliente.getId(),
Util
.converterStringParaInteger(idRASolicitante));
}
}
form.setIdCliente(cliente.getId().toString());
form.setNomeCliente(cliente.getNome());
Collection colecaoEnderecos = fachada
.pesquisarEnderecosClienteAbreviado(cliente.getId());
if (colecaoEnderecos != null && !colecaoEnderecos.isEmpty()) {
sessao.setAttribute("colecaoEnderecosSolicitante",
colecaoEnderecos);
}
Collection colecaoFones = fachada.pesquisarClienteFone(cliente
.getId());
sessao.setAttribute("colecaoFonesSolicitante", colecaoFones);
this.limparUnidadeSolicitante(sessao);
this.limparNomeSolicitante(sessao);
}
if ((form.getIdUnidadeSolicitanteInformar() != null && !form
.getIdUnidadeSolicitanteInformar().equals(""))
&& (form.getDescricaoUnidadeSolicitanteInformar() == null || form
.getDescricaoUnidadeSolicitanteInformar().equals(""))) {
FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional();
filtroUnidadeOrganizacional
.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.ID, form
.getIdUnidadeSolicitanteInformar()));
filtroUnidadeOrganizacional
.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
Collection colecaoUnidade = fachada.pesquisar(
filtroUnidadeOrganizacional, UnidadeOrganizacional.class
.getName());
if (colecaoUnidade == null || colecaoUnidade.isEmpty()) {
// Nenhuma unidade encontrado
throw new ActionServletException(
"atencao.pesquisa_inexistente", null,
"Unidade Solicitante");
}
UnidadeOrganizacional unidade = (UnidadeOrganizacional) Util
.retonarObjetoDeColecao(colecaoUnidade);
form
.setIdUnidadeSolicitanteInformar(unidade.getId()
.toString());
form.setDescricaoUnidadeSolicitanteInformar(unidade
.getDescricao());
// caso seja do processo de atualizar registro atendimento
if (objetoColecao == null || objetoColecao.equals("")) {
// [FS0026] - Verificar exist�ncia da unidade solicitante
fachada.verificarExistenciaUnidadeSolicitante(Util
.converterStringParaInteger(form.getIdRA()), Util
.converterStringParaInteger(form
.getIdUnidadeSolicitanteInformar()));
} else {
if (idRASolicitante != null && !idRASolicitante.equals("")) {
// [FS0026] - Verificar exist�ncia da unidade
// solicitante
fachada
.verificarExistenciaUnidadeSolicitanteAtualizar(
Util.converterStringParaInteger(form
.getIdRA()),
Util
.converterStringParaInteger(form
.getIdUnidadeSolicitanteInformar()),
Util
.converterStringParaInteger(idRASolicitante));
}
}
// this.limparCliente(sessao);
// this.limparNomeSolicitante(sessao);
}
if ((form.getIdFuncionarioResponsavel() != null && !form
.getIdFuncionarioResponsavel().equalsIgnoreCase(""))
&& (form.getDescricaoFuncionarioResponsavel() == null || form
.getDescricaoFuncionarioResponsavel().equals(""))) {
FiltroFuncionario filtroFuncionario = new FiltroFuncionario();
filtroFuncionario.adicionarParametro(new ParametroSimples(
FiltroFuncionario.ID, form.getIdFuncionarioResponsavel()));
filtroFuncionario.adicionarParametro(new ParametroSimples(
FiltroFuncionario.UNIDADE_ORGANIZACIONAL_ID, form
.getIdUnidadeSolicitanteInformar()));
Collection colecaoFuncionario = fachada.pesquisar(
filtroFuncionario, Funcionario.class.getName());
if (colecaoFuncionario == null || colecaoFuncionario.isEmpty()) {
// Nenhum funcion�rio encontrado
throw new ActionServletException(
"atencao.pesquisa_inexistente", null, "Funcion�rio");
}
Funcionario funcionario = (Funcionario) Util
.retonarObjetoDeColecao(colecaoFuncionario);
form
.setIdFuncionarioResponsavel(funcionario.getId()
.toString());
form.setDescricaoFuncionarioResponsavel(funcionario.getNome());
httpServletRequest.setAttribute("nomeCampo",
"botaoAdicionarSolicitante");
}
/*
* Fim das pesquisas realizadas pelo ENTER
* ===========================================================================================================
* ===========================================================================================================
*/
String nomeSolicitante = null;
if (form.getNomeSolicitanteInformar() != null
&& !form.getNomeSolicitanteInformar().equalsIgnoreCase("")) {
nomeSolicitante = form.getNomeSolicitanteInformar();
}
Collection colecaoEndereco = null;
if (sessao.getAttribute("colecaoEnderecosSolicitante") != null) {
colecaoEndereco = (Collection) sessao
.getAttribute("colecaoEnderecosSolicitante");
}
Collection colecaoFone = null;
if (sessao.getAttribute("colecaoFonesSolicitante") != null) {
colecaoFone = (Collection) sessao
.getAttribute("colecaoFonesSolicitante");
}
Short indicadorClienteEspecificacao = null;
if (form.getIndicadorClienteEspecificacao() != null
&& !form.getIndicadorClienteEspecificacao()
.equalsIgnoreCase("")) {
indicadorClienteEspecificacao = new Short(form
.getIndicadorClienteEspecificacao());
}
String pontoReferencia = null;
if (form.getPontoReferencia() != null
&& !form.getPontoReferencia().equalsIgnoreCase("")) {
pontoReferencia = form.getPontoReferencia();
}
/*
* Obtendo o id do im�vel informado na aba de inser��o n� 02 (Caso n�o
* tenho sido informado ser� passado como par�metro NULL).
*/
String idImovel = null;
//PROTOCOLO DE ATENDIMENTO
String protocoloAtendimento = form.getProtocoloAtendimento();
if ((protocoloAtendimento == null || protocoloAtendimento.equals("")) &&
sessao.getAttribute("protocoloAtendimento") != null){
protocoloAtendimento = (String) sessao.getAttribute("protocoloAtendimento");
}
// CASO SEJA DO PROCESSO DE ATUALIZAR REGISTRO DE ATENDIMENTO
if (objetoColecao != null && !objetoColecao.equals("")) {
//FORMUL�RIO
AtualizarRegistroAtendimentoActionForm atualizarRegistroAtendimentoActionForm =
(AtualizarRegistroAtendimentoActionForm) sessao.getAttribute("AtualizarRegistroAtendimentoActionForm");
//IM�VEL
idImovel = atualizarRegistroAtendimentoActionForm.getIdImovel();
//VALIDANDO UM SOLICITANTE J� EXISTENTE
if (!objetoColecao.equals("SIM") &&
idRASolicitante != null && !idRASolicitante.equals("")) {
// [FS0030] - Verificar preenchimento dos dados de identifica��o do solicitante
fachada.verificaDadosSolicitanteAtualizar(
Util.converterStringParaInteger(form.getIdCliente()),
Util.converterStringParaInteger(form.getIdUnidadeSolicitanteInformar()),
Util.converterStringParaInteger(form.getIdFuncionarioResponsavel()),
nomeSolicitante, colecaoEndereco, colecaoFone, indicadorClienteEspecificacao,
Util.converterStringParaInteger(idImovel),
Util.converterStringParaInteger(form.getIdRA()),
Util.converterStringParaInteger(idRASolicitante));
}
//VALIDANDO UM NOVO SOLICITANTE
else {
// [FS0030] - Verificar preenchimento dos dados de identifica��o do solicitante
fachada.verificaDadosSolicitante(
Util.converterStringParaInteger(form.getIdCliente()),
Util.converterStringParaInteger(form.getIdUnidadeSolicitanteInformar()),
Util.converterStringParaInteger(form.getIdFuncionarioResponsavel()),
nomeSolicitante, colecaoEndereco, colecaoFone, indicadorClienteEspecificacao,
Util.converterStringParaInteger(idImovel),
Util.converterStringParaInteger(form.getIdRA()), null,
Util.converterStringParaInteger(form.getIdMeioSolicitacao()) );
}
//COLE��O COM OS SOLICITANTES CADASTRADOS NA BASE
Collection colecaoRASolicitante = (Collection) sessao
.getAttribute("colecaoRASolicitante");
//MONTANDO O REGISTRO DE ATENDIMENTO SOLICITANTE
RegistroAtendimentoSolicitante registroAtendimentoSolicitante = fachada
.inserirDadosNoRegistroAtendimentoSolicitante(
Util.converterStringParaInteger(form.getIdRA()),
Util.converterStringParaInteger(form.getIdCliente()),
colecaoEndereco, pontoReferencia, nomeSolicitante,
Util.converterStringParaInteger(form.getIdUnidadeSolicitanteInformar()),
Util.converterStringParaInteger(form.getIdFuncionarioResponsavel()),
colecaoFone, form.getClienteFoneSelected());
//[UC0405] RM1039 MONTANDO O DADOS DE ENVIO DE EMAIL PARA O QUESTIONARIO DE SATISFACAO
if(form.getEnviarEmailSatisfacao() != null && !form.getEnviarEmailSatisfacao().equals("")){
registroAtendimentoSolicitante.setEnderecoEmail(form.getEnderecoEmail());
registroAtendimentoSolicitante.setIndicadorEnvioEmailPesquisa(Short.parseShort(form.getEnviarEmailSatisfacao()));
}
//INFORMANDO O PROTOCOLO DE ATENDIMENTO
if (protocoloAtendimento != null && !protocoloAtendimento.equals("")){
registroAtendimentoSolicitante.setNumeroProtocoloAtendimento(protocoloAtendimento);
}
if (objetoColecao != null && !objetoColecao.equals("SIM")) {
Iterator iteRASolicitante = colecaoRASolicitante.iterator();
while (iteRASolicitante.hasNext()) {
RegistroAtendimentoSolicitante registroAtendimentoSolicitanteColecao =
(RegistroAtendimentoSolicitante) iteRASolicitante.next();
if (registroAtendimentoSolicitanteColecao.getUltimaAlteracao().getTime() ==
Long.parseLong(objetoColecao)) {
if (registroAtendimentoSolicitanteColecao.getID() != null) {
registroAtendimentoSolicitante.setID(registroAtendimentoSolicitanteColecao.getID());
registroAtendimentoSolicitante
.setIndicadorSolicitantePrincipal(registroAtendimentoSolicitanteColecao
.getIndicadorSolicitantePrincipal());
}
registroAtendimentoSolicitante.setUltimaAlteracao(registroAtendimentoSolicitanteColecao
.getUltimaAlteracao());
iteRASolicitante.remove();
break;
}
}
}
else {
// seta a ultima altera��o
registroAtendimentoSolicitante.setUltimaAlteracao(new Date());
}
colecaoRASolicitante.add(registroAtendimentoSolicitante);
// Iniciar Funcionalidade
httpServletRequest.setAttribute("iniciarFuncionalidade",
"/gsan/atualizarRegistroAtendimentoWizardAction.do?action=exibirAtualizarRegistroAtendimentoDadosSolicitanteAction");
}
else {
//CASO SEJA DO PROCESSO DE INSERIR REGISTRO DE ATENDIMENTO
InserirRegistroAtendimentoActionForm inserirRegistroAtendimentoActionForm =
(InserirRegistroAtendimentoActionForm) sessao.getAttribute("InserirRegistroAtendimentoActionForm");
idImovel = inserirRegistroAtendimentoActionForm.getIdImovel();
// [FS0030] - Verificar preenchimento dos dados de identifica��o do solicitante
fachada.verificaDadosSolicitante(
Util.converterStringParaInteger(form.getIdCliente()),
Util.converterStringParaInteger(form.getIdUnidadeSolicitanteInformar()),
Util.converterStringParaInteger(form.getIdFuncionarioResponsavel()),
nomeSolicitante, colecaoEndereco, colecaoFone, indicadorClienteEspecificacao,
Util.converterStringParaInteger(idImovel),
Util.converterStringParaInteger(form.getIdRA()), null,
Util.converterStringParaInteger(form.getIdMeioSolicitacao()) );
// [SB0027] - Inclui Solicitante do Registro de Atendimento
fachada.inserirRegistroAtendimentoSolicitante(
Util.converterStringParaInteger(form.getIdRA()),
Util.converterStringParaInteger(form.getIdCliente()),
colecaoEndereco, pontoReferencia, nomeSolicitante, true,
Util.converterStringParaInteger(form.getIdUnidadeSolicitanteInformar()),
Util.converterStringParaInteger(form.getIdFuncionarioResponsavel()),
colecaoFone, protocoloAtendimento);
// Iniciar Funcionalidade
httpServletRequest.setAttribute("iniciarFuncionalidade", "/gsan/exibirInserirRegistroAtendimentoAction.do");
}
sessao.removeAttribute("atualizacaoRA");
sessao.removeAttribute("objetoColecao");
sessao.removeAttribute("idRASolicitante");
sessao.removeAttribute("enderecoOcorrenciaRA");
sessao.removeAttribute("protocoloAtendimento");
limparCliente(sessao);
limparUnidadeSolicitante(sessao);
limparNomeSolicitante(sessao);
return retorno;
}
private void limparCliente(HttpSession sessao) {
sessao.removeAttribute("colecaoEnderecosSolicitante");
sessao.removeAttribute("colecaoFonesSolicitante");
sessao.removeAttribute("desabilitarDadosSolicitanteUnidade");
sessao.removeAttribute("desabilitarDadosSolicitanteFuncionario");
sessao.removeAttribute("desabilitarDadosSolicitanteNome");
sessao.removeAttribute("habilitarAlteracaoEnderecoSolicitante");
}
private void limparUnidadeSolicitante(HttpSession sessao) {
sessao.removeAttribute("desabilitarDadosSolicitanteCliente");
sessao.removeAttribute("desabilitarDadosSolicitanteNome");
sessao.removeAttribute("habilitarAlteracaoEnderecoSolicitante");
}
private void limparNomeSolicitante(HttpSession sessao) {
sessao.removeAttribute("desabilitarDadosSolicitanteCliente");
sessao.removeAttribute("desabilitarDadosSolicitanteUnidade");
sessao.removeAttribute("desabilitarDadosSolicitanteFuncionario");
sessao.removeAttribute("habilitarAlteracaoEnderecoSolicitante");
}
}