package gcom.gui.atendimentopublico.registroatendimento;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.cadastro.cliente.ClienteEndereco;
import gcom.cadastro.cliente.ClienteFone;
import gcom.cadastro.cliente.IClienteFone;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
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;
/**
* ExibirReiterarRegistroAtendimentoAction
*
* @author Vivianne Sousa
* @date 09/05/2011
*
*/
public class ExibirReiterarRegistroAtendimentoAction extends GcomAction {
/**
* Exibe a Tela para Reiterar o RA
*
* @author Vivianne Sousa
* @date 09/05/2011
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("reiterarRegistroAtendimento");
ReiterarRegistroAtendimentoActionForm form = (ReiterarRegistroAtendimentoActionForm) actionForm;
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
//OBTENDO PROTOCOLO DE ATENDIMENTO
String protocoloAtendimento = this.getFachada().obterProtocoloAtendimento();
sessao.setAttribute("protocoloAtendimento", protocoloAtendimento);
Fachada fachada = Fachada.getInstancia();
validacoesRa( form, fachada, usuarioLogado);
obterDadosGeraisRa(form, fachada);
//Verifica se o usu�rio deseja desfezar as altera��es efetuadas
if (httpServletRequest.getParameter("desfazer") != null ||
httpServletRequest.getParameter("limparDadosSolicitante") != null ||
httpServletRequest.getParameter("resetarReiteracao") != null) {
this.limparCliente(sessao);
this.limparNomeSolicitante(sessao);
this.limparUnidadeSolicitante(sessao);
// form.setPontoReferencia("");
form.setNomeSolicitante("");
form.setIdClienteSolicitante("");
form.setIdUnidadeSolicitante("");
form.setObservacao("");
sessao.removeAttribute("colecaoEnderecos");
sessao.removeAttribute("colecaoFonesSolicitante");
}
String pesquisarCliente = httpServletRequest.getParameter("pesquisarCliente");
if (pesquisarCliente != null && !pesquisarCliente.equalsIgnoreCase("")) {
String idCliente = httpServletRequest.getParameter("cliente");
pesquisarDadosCliente(httpServletRequest, form, sessao, fachada, idCliente);
}
String pesquisarUnidade = httpServletRequest.getParameter("pesquisarUnidade");
if (pesquisarUnidade != null && !pesquisarUnidade.equalsIgnoreCase("")) {
String idUnidade = httpServletRequest.getParameter("unidade");
if (idUnidade != null){
// sessao.setAttribute("enderecoPertenceCliente", "OK");
String nomeSolicitante = form.getNomeSolicitante();
form.setNomeSolicitante("");
fachada.verificarExistenciaUnidadeSolicitanteDataAtual(
new Integer(form.getNumeroRA()), new Integer(idUnidade), nomeSolicitante);
form.setNomeSolicitante(nomeSolicitante);
form.setIdUnidadeSolicitante(idUnidade);
this.limparCliente(sessao);
this.limparNomeSolicitante(sessao);
sessao.setAttribute("desabilitarDadosSolicitanteCliente", "OK");
sessao.setAttribute("desabilitarDadosSolicitanteNome", "OK");
sessao.setAttribute("habilitarAlteracaoEndereco", "SIM");
sessao.setAttribute("habilitarAlteracaoEnderecoAbaSolicitante", "NAO");
sessao.setAttribute("habilitarAlteracaoEnderecoSolicitante", "SIM");
}
}
String informadoNomeSolicitante = httpServletRequest.getParameter("informadoNomeSolicitante");
if (informadoNomeSolicitante != null && !informadoNomeSolicitante.equalsIgnoreCase("")){
this.limparCliente(sessao);
this.limparUnidadeSolicitante(sessao);
sessao.setAttribute("desabilitarDadosSolicitanteCliente", "OK");
sessao.setAttribute("desabilitarDadosSolicitanteUnidade", "OK");
sessao.setAttribute("habilitarAlteracaoEndereco", "SIM");
}
String limparNomeSolicitante = httpServletRequest.getParameter("limparNomeSolicitante");
if (limparNomeSolicitante != null && !limparNomeSolicitante.equalsIgnoreCase("")){
this.limparNomeSolicitante(sessao);
}
/*
* Removendo endere�o
*/
String removerEndereco = httpServletRequest.getParameter("removerEndereco");
if (removerEndereco != null && !removerEndereco.trim().equalsIgnoreCase("")) {
if (sessao.getAttribute("colecaoEnderecos") != null) {
Collection enderecos = (Collection) sessao
.getAttribute("colecaoEnderecos");
if (!enderecos.isEmpty()) {
enderecos.remove(enderecos.iterator().next());
}
}
}
/*
* Adicionar Fone
*/
String adicionarFone = httpServletRequest.getParameter("adicionarFone");
if (adicionarFone != null&& !adicionarFone.trim().equalsIgnoreCase("")) {
retorno = actionMapping.findForward("informarFone");
}
/*
* Remover Fone
*/
String removerFone = httpServletRequest.getParameter("removerFone");
if (removerFone != null && !removerFone.equalsIgnoreCase("")){
long objetoRemocao = (Long.valueOf(httpServletRequest.getParameter("removerFone"))).longValue();
Collection colecaoFones = (Collection) sessao.getAttribute("colecaoFonesSolicitante");
Iterator iteratorColecaoFones = colecaoFones.iterator();
IClienteFone clienteFone = null;
while (iteratorColecaoFones.hasNext()){
clienteFone = (IClienteFone) iteratorColecaoFones.next();
if (obterTimestampIdObjeto(clienteFone) == objetoRemocao){
colecaoFones.remove(clienteFone);
break;
}
}
}
if(httpServletRequest.getParameter("retornoEndereco")!= null){
sessao.setAttribute("habilitarAlteracaoEndereco", "SIM");
if (sessao.getAttribute("colecaoEnderecos") != null) {
Collection enderecos = (Collection) sessao
.getAttribute("colecaoEnderecos");
if (!enderecos.isEmpty()) {
ClienteEndereco endereco = (ClienteEndereco) enderecos.iterator().next();
endereco.setIndicadorEnderecoCorrespondencia(ConstantesSistema.SIM);
}
}
}
return retorno;
}
private void limparNomeSolicitante(HttpSession sessao){
sessao.removeAttribute("desabilitarDadosSolicitanteCliente");
sessao.removeAttribute("desabilitarDadosSolicitanteUnidade");
sessao.removeAttribute("habilitarAlteracaoEndereco");
}
private void limparCliente(HttpSession sessao){
if (sessao.getAttribute("enderecoPertenceCliente") != null){
sessao.removeAttribute("colecaoEnderecos");
sessao.removeAttribute("colecaoFonesSolicitante");
}
sessao.removeAttribute("enderecoPertenceCliente");
sessao.removeAttribute("desabilitarDadosSolicitanteUnidade");
sessao.removeAttribute("desabilitarDadosSolicitanteNome");
sessao.removeAttribute("habilitarAlteracaoEndereco");
sessao.removeAttribute("habilitarAlteracaoEnderecoSolicitante");
}
private void limparUnidadeSolicitante(HttpSession sessao){
sessao.removeAttribute("desabilitarDadosSolicitanteCliente");
sessao.removeAttribute("desabilitarDadosSolicitanteNome");
sessao.removeAttribute("habilitarAlteracaoEndereco");
sessao.removeAttribute("habilitarAlteracaoEnderecoSolicitante");
}
private void pesquisarDadosCliente(HttpServletRequest httpServletRequest,
ReiterarRegistroAtendimentoActionForm form, HttpSession sessao,
Fachada fachada, String idCliente) {
if (idCliente != null) {
String nomeSolicitante = form.getNomeSolicitante();
form.setNomeSolicitante("");
fachada.verificarExistenciaClienteSolicitanteDataAtual(
new Integer(form.getNumeroRA()), new Integer(idCliente), nomeSolicitante);
form.setNomeSolicitante(nomeSolicitante);
form.setIdClienteSolicitante(idCliente);
Collection colecaoEnderecos = fachada.pesquisarEnderecosClienteAbreviado(new Integer(idCliente));
if (colecaoEnderecos != null && !colecaoEnderecos.isEmpty()){
Iterator endCorrespondencia = colecaoEnderecos.iterator();
ClienteEndereco endereco = null;
while(endCorrespondencia.hasNext()){
endereco = (ClienteEndereco) endCorrespondencia.next();
if (endereco.getIndicadorEnderecoCorrespondencia() != null &&
endereco.getIndicadorEnderecoCorrespondencia().equals(ConstantesSistema.INDICADOR_ENDERECO_CORRESPONDENCIA)){
form.setClienteEnderecoSelected(endereco.getId().toString());
break;
}
}
sessao.setAttribute("colecaoEnderecos", colecaoEnderecos);
sessao.setAttribute("enderecoPertenceCliente", "OK");
}
Collection colecaoFones = fachada.pesquisarClienteFone(new Integer(idCliente));
if (colecaoFones != null && !colecaoFones.isEmpty()){
Iterator fonePrincipal = colecaoFones.iterator();
ClienteFone fone = null;
while(fonePrincipal.hasNext()){
fone = (ClienteFone) fonePrincipal.next();
if (fone.getIndicadorTelefonePadrao() != null &&
fone.getIndicadorTelefonePadrao()
.equals(ConstantesSistema.INDICADOR_TELEFONE_PRINCIPAL)){
form.setClienteFoneSelected(fone.getId().toString());
break;
}
}
sessao.setAttribute("colecaoFonesSolicitante", colecaoFones);
}
this.limparUnidadeSolicitante(sessao);
this.limparNomeSolicitante(sessao);
sessao.setAttribute("desabilitarDadosSolicitanteUnidade", "OK");
sessao.setAttribute("desabilitarDadosSolicitanteNome", "OK");
sessao.setAttribute("habilitarAlteracaoEndereco", "NAO");
sessao.setAttribute("habilitarAlteracaoEnderecoSolicitante", "NAO");
}
}
/**
* @author Vivianne Sousa
* @date 10/05/2011
*/
private void obterDadosGeraisRa(ReiterarRegistroAtendimentoActionForm form, Fachada fachada) {
RegistroAtendimento ra = fachada.pesquisarDadosRegistroAtendimentoParaReiteracao(
new Integer(form.getNumeroRA()));
form.setDataPrevista(Util.formatarData(ra.getDataPrevistaAtual()));
form.setIdTipoSolicitacao(ra.getSolicitacaoTipoEspecificacao().getSolicitacaoTipo().getId().toString());
form.setDescTipoSolicitacao(ra.getSolicitacaoTipoEspecificacao().getSolicitacaoTipo().getDescricao());
form.setIdEspecificacao(ra.getSolicitacaoTipoEspecificacao().getId().toString());
form.setDescEspecificacao(ra.getSolicitacaoTipoEspecificacao().getDescricao());
//[UC0418 � Obter Unidade Atual do RA]
UnidadeOrganizacional unidadeAtual = fachada.obterUnidadeAtualRA(new Integer(form.getNumeroRA()));
if(unidadeAtual != null){
form.setIdUnidadeAtual(unidadeAtual.getId().toString());
form.setDescUnidadeAtual(unidadeAtual.getDescricao());
}
}
/**
* @author Vivianne Sousa
* @date 24/05/2011
*/
private void validacoesRa(ReiterarRegistroAtendimentoActionForm form, Fachada fachada,Usuario usuarioLogado) {
RegistroAtendimento ra = fachada.pesquisarDadosRegistroAtendimentoParaReiteracao(
new Integer(form.getNumeroRA()));
//[FS0001] - Verificar se o RA est� cancelado ou bloqueado
/*
* Caso o usu�rio esteja tentando reiterar o registro de atendimento
* e o mesmo esteja com a situa��o de cancelado ou bloqueado, o
* sistema dever� exibir a mensagem: "Este R.A. j� est� encerrado ou
* bloqueado. n�o poss�vel reiter�-lo."
*/
if (RegistroAtendimento.SITUACAO_ENCERRADO.equals(ra.getCodigoSituacao())
|| RegistroAtendimento.SITUACAO_BLOQUEADO.equals(ra.getCodigoSituacao())) {
throw new ActionServletException(
"atencao.registro_atendimento.cancelado_bloqueado");
}
// [FS0002] - Verificar se o RA est� no prazo de atendimento
/*
* Caso o usu�rio esteja tentando reiterar o registro de atendimento
* e o mesmo ainda esteja no prazo de atendimento, o sistema dever�
* exibir a mensagem: "Prazo previsto para o atendimento ainda n�o
* expirou. n�o poss�vel reiter�-lo."
*/
Date dataAtual = new Date();
if (Util.compararDiaMesAno(ra.getDataPrevistaAtual(), dataAtual) > 0) {
throw new ActionServletException(
"atencao.registro_atendimento.prazo_nao_expirado");
}
// [FS0004] - Verificar se a unidade organizacional pode reiterar a
// RA
UnidadeOrganizacional unidadeAtualRA = fachada.obterUnidadeAtualRA(new Integer(form.getNumeroRA()));
/*
* Caso o indicador de autoriza��o de manuten��o do R.A. esteja com
* n�o, o sistema dever� exibir a mensagem: "Este R.A. foi
* registrado por outra Unidade Organizacional, reitera��o
* impedida."
*/
Short indicadorAutorizacaoManutencaoRA = fachada.obterIndicadorAutorizacaoManutencaoRA(
unidadeAtualRA.getId(), usuarioLogado.getId());
if (ConstantesSistema.NAO.equals(indicadorAutorizacaoManutencaoRA)) {
throw new ActionServletException(
"atencao.registro_atendimento.manutencao_nao_autorizada");
}
}
}