package gcom.gui.atendimentopublico.registroatendimento;
import gcom.atendimentopublico.registroatendimento.FiltroMeioSolicitacao;
import gcom.atendimentopublico.registroatendimento.FiltroRegistroAtendimentoConta;
import gcom.atendimentopublico.registroatendimento.FiltroSolicitacaoTipo;
import gcom.atendimentopublico.registroatendimento.FiltroSolicitacaoTipoEspecificacao;
import gcom.atendimentopublico.registroatendimento.MeioSolicitacao;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimentoConta;
import gcom.atendimentopublico.registroatendimento.SolicitacaoTipo;
import gcom.atendimentopublico.registroatendimento.SolicitacaoTipoEspecificacao;
import gcom.atendimentopublico.registroatendimento.bean.DefinirDataPrevistaUnidadeDestinoEspecificacaoHelper;
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.ParametroNaoNulo;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.Date;
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 exibir para o usu�rio a tela que receber� os
* par�metros para realiza��o da atualiza��o de um R.A (Aba n� 01 - Dados
* gerais)
*
* @author S�vio Luiz
* @date 10/08/2006
*/
public class ExibirAtualizarRegistroAtendimentoDadosGeraisAction extends
GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping
.findForward("atualizarRegistroAtendimentoDadosGerais");
HttpSession sessao = httpServletRequest.getSession(false);
sessao.removeAttribute("gis");
// recupara o id da especifica��o para verificar se
// ser� gerado a ordem de servi�o ou n�o dependendo da mudan�a
// da especifica��o
Integer idEspecificacaoBase = (Integer) sessao
.getAttribute("idEspecificacaoBase");
AtualizarRegistroAtendimentoActionForm atualizarRegistroAtendimentoActionForm = null;
if (httpServletRequest
.getAttribute("AtualizarRegistroAtendimentoActionForm") != null) {
sessao
.setAttribute(
"AtualizarRegistroAtendimentoActionForm",
httpServletRequest
.getAttribute("AtualizarRegistroAtendimentoActionForm"));
atualizarRegistroAtendimentoActionForm = (AtualizarRegistroAtendimentoActionForm) httpServletRequest
.getAttribute("AtualizarRegistroAtendimentoActionForm");
} else {
atualizarRegistroAtendimentoActionForm = (AtualizarRegistroAtendimentoActionForm) actionForm;
}
Fachada fachada = Fachada.getInstancia();
/*
* Unidade de Atendimento (Permite que o usu�rio informe ou selecione
* outra)
*
* [FS0004] - Verificar exist�ncia da unidade de atendimento
*
* [FS0033] - Verificar autoriza��o da unidade de atendimento para
* abertura de registro de atendimento
*/
String idUnidade = atualizarRegistroAtendimentoActionForm.getUnidade();
String descricaoUnidade = atualizarRegistroAtendimentoActionForm
.getDescricaoUnidade();
if (idUnidade != null && !idUnidade.equalsIgnoreCase("")
&& (descricaoUnidade == null || descricaoUnidade.equals(""))) {
UnidadeOrganizacional unidadeOrganizacionalSelecionada = fachada
.verificarAutorizacaoUnidadeAberturaRA(new Integer(
idUnidade), false);
if (unidadeOrganizacionalSelecionada != null) {
atualizarRegistroAtendimentoActionForm
.setUnidade(unidadeOrganizacionalSelecionada.getId()
.toString());
atualizarRegistroAtendimentoActionForm
.setDescricaoUnidade(unidadeOrganizacionalSelecionada
.getDescricao());
if (unidadeOrganizacionalSelecionada.getMeioSolicitacao() != null) {
atualizarRegistroAtendimentoActionForm
.setMeioSolicitacao(unidadeOrganizacionalSelecionada
.getMeioSolicitacao().getId().toString());
}
httpServletRequest.setAttribute("nomeCampo", "meioSolicitacao");
} else {
atualizarRegistroAtendimentoActionForm.setUnidade("");
atualizarRegistroAtendimentoActionForm
.setDescricaoUnidade("Unidade Inexistente");
httpServletRequest.setAttribute("corUnidade", "exception");
httpServletRequest.setAttribute("nomeCampo", "unidade");
}
}
/*
* Meio de Solicita��o - Carregando a cole��o que ir� ficar dispon�vel
* para escolha do usu�rio
*
* [FS0003] - Verificar exist�ncia de dados
*/
Collection colecaoMeioSolicitacao = (Collection) sessao
.getAttribute("colecaoMeioSolicitacao");
if (colecaoMeioSolicitacao == null) {
FiltroMeioSolicitacao filtroMeioSolicitacao = new FiltroMeioSolicitacao(
FiltroMeioSolicitacao.DESCRICAO);
filtroMeioSolicitacao.setConsultaSemLimites(true);
filtroMeioSolicitacao.adicionarParametro(new ParametroSimples(
FiltroMeioSolicitacao.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
colecaoMeioSolicitacao = fachada.pesquisar(filtroMeioSolicitacao,
MeioSolicitacao.class.getName());
if (colecaoMeioSolicitacao == null
|| colecaoMeioSolicitacao.isEmpty()) {
throw new ActionServletException(
"atencao.entidade_sem_dados_para_selecao", null,
"MEIO_SOLICITACAO");
} else {
sessao.setAttribute("colecaoMeioSolicitacao",
colecaoMeioSolicitacao);
}
}
/*
* Tipo de Solicita��o - Carregando a cole��o que ir� ficar dispon�vel
* para escolha do usu�rio
*
* [FS0003] - Verificar exist�ncia de dados
*/
Collection colecaoSolicitacaoTipo = (Collection) sessao
.getAttribute("colecaoSolicitacaoTipo");
if (colecaoSolicitacaoTipo == null) {
FiltroSolicitacaoTipo filtroSolicitacaoTipo = new FiltroSolicitacaoTipo(
FiltroSolicitacaoTipo.DESCRICAO);
filtroSolicitacaoTipo.setConsultaSemLimites(true);
filtroSolicitacaoTipo.adicionarParametro(new ParametroSimples(
FiltroSolicitacaoTipo.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
filtroSolicitacaoTipo.adicionarParametro(new ParametroSimples(
FiltroSolicitacaoTipo.INDICADOR_USO_SISTEMA,
SolicitacaoTipo.INDICADOR_USO_SISTEMA_NAO));
colecaoSolicitacaoTipo = fachada.pesquisar(filtroSolicitacaoTipo,
SolicitacaoTipo.class.getName());
if (colecaoSolicitacaoTipo == null
|| colecaoSolicitacaoTipo.isEmpty()) {
throw new ActionServletException(
"atencao.entidade_sem_dados_para_selecao", null,
"SOLICITACAO_TIPO");
} else {
sessao.setAttribute("colecaoSolicitacaoTipo",
colecaoSolicitacaoTipo);
}
}
/*
* Especifica��o - Carregando a cole��o que ir� ficar dispon�vel para
* escolha do usu�rio
*
* [FS0003] - Verificar exist�ncia de dados
*/
String pesquisarEspecificacao = httpServletRequest
.getParameter("pesquisarEspecificacao");
if (pesquisarEspecificacao != null
&& !pesquisarEspecificacao.equalsIgnoreCase("")
|| (atualizarRegistroAtendimentoActionForm.getTipoSolicitacao() != null && !atualizarRegistroAtendimentoActionForm
.getTipoSolicitacao().equals(""))) {
FiltroSolicitacaoTipoEspecificacao filtroSolicitacaoTipoEspecificacao = new FiltroSolicitacaoTipoEspecificacao(
FiltroSolicitacaoTipoEspecificacao.DESCRICAO);
filtroSolicitacaoTipoEspecificacao
.adicionarParametro(new ParametroSimples(
FiltroSolicitacaoTipoEspecificacao.SOLICITACAO_TIPO_ID,
new Integer(atualizarRegistroAtendimentoActionForm
.getTipoSolicitacao())));
filtroSolicitacaoTipoEspecificacao.setConsultaSemLimites(true);
Collection colecaoSolicitacaoTipoEspecificacao = fachada.pesquisar(
filtroSolicitacaoTipoEspecificacao,
SolicitacaoTipoEspecificacao.class.getName());
if (colecaoSolicitacaoTipoEspecificacao == null
|| colecaoSolicitacaoTipoEspecificacao.isEmpty()) {
sessao.removeAttribute("colecaoSolicitacaoTipoEspecificacao");
atualizarRegistroAtendimentoActionForm.setDataPrevista("");
throw new ActionServletException(
"atencao.entidade_sem_dados_para_selecao", null,
"SOLICITACAO_TIPO_ESPECIFICACAO");
} else {
sessao.setAttribute("colecaoSolicitacaoTipoEspecificacao",
colecaoSolicitacaoTipoEspecificacao);
}
}
/*
* Data Prevista - (exibir a data prevista calculada no SB0003 e n�o
* permitir altera��o).
*
* [SB0003 - Define Data Prevista e Unidade Destino da Especifica��o]
* [FS0018] - Verificar exist�ncia da unidade centralizadora
*/
String definirDataPrevista = httpServletRequest
.getParameter("definirDataPrevista");
if (definirDataPrevista != null
&& !definirDataPrevista.equalsIgnoreCase("")
&& atualizarRegistroAtendimentoActionForm.getDataAtendimento() != null
&& !atualizarRegistroAtendimentoActionForm.getDataAtendimento()
.equalsIgnoreCase("")
&& !atualizarRegistroAtendimentoActionForm
.getEspecificacao()
.equalsIgnoreCase(
String
.valueOf(ConstantesSistema.NUMERO_NAO_INFORMADO))) {
Date dataAtendimento = Util
.converteStringParaDate(atualizarRegistroAtendimentoActionForm
.getDataAtendimento());
DefinirDataPrevistaUnidadeDestinoEspecificacaoHelper dataPrevistaUnidadeDestino = fachada
.definirDataPrevistaUnidadeDestinoEspecificacao(
dataAtendimento, new Integer(
atualizarRegistroAtendimentoActionForm
.getEspecificacao()));
if (dataPrevistaUnidadeDestino.getDataPrevista() != null) {
atualizarRegistroAtendimentoActionForm.setDataPrevista(Util
.formatarData(dataPrevistaUnidadeDestino
.getDataPrevista()));
}
atualizarRegistroAtendimentoActionForm
.setIndFaltaAgua(dataPrevistaUnidadeDestino
.getIndFaltaAgua());
atualizarRegistroAtendimentoActionForm
.setIndMatricula(dataPrevistaUnidadeDestino
.getIndMatricula());
atualizarRegistroAtendimentoActionForm
.setImovelObrigatorio(dataPrevistaUnidadeDestino
.getImovelObrigatorio());
atualizarRegistroAtendimentoActionForm
.setPavimentoRuaObrigatorio(dataPrevistaUnidadeDestino
.getPavimentoRuaObrigatorio());
atualizarRegistroAtendimentoActionForm
.setPavimentoCalcadaObrigatorio(dataPrevistaUnidadeDestino
.getPavimentoCalcadaObrigatorio());
// Identificar tipo de gera��o da ordem de servi�o (AUTOM�TICA,
// OPCIONAL ou N�O GERAR)
if ((fachada
.gerarOrdemServicoAutomatica(Util
.converterStringParaInteger(atualizarRegistroAtendimentoActionForm
.getEspecificacao())))
&& (!idEspecificacaoBase.equals(new Integer(
atualizarRegistroAtendimentoActionForm
.getEspecificacao())))) {
FiltroSolicitacaoTipoEspecificacao filtroSolicitacaoTipoEspecificacao = new FiltroSolicitacaoTipoEspecificacao();
filtroSolicitacaoTipoEspecificacao.adicionarCaminhoParaCarregamentoEntidade("servicoTipo");
filtroSolicitacaoTipoEspecificacao
.adicionarParametro(new ParametroSimples(
FiltroSolicitacaoTipoEspecificacao.ID,
atualizarRegistroAtendimentoActionForm.getEspecificacao()));
filtroSolicitacaoTipoEspecificacao
.adicionarParametro(new ParametroNaoNulo(
FiltroSolicitacaoTipoEspecificacao.SERVICO_TIPO_ID));
filtroSolicitacaoTipoEspecificacao.adicionarParametro(new ParametroSimples(
FiltroSolicitacaoTipoEspecificacao.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
Collection colecaoSolicitacaoTipoEspecificacao = fachada.pesquisar(
filtroSolicitacaoTipoEspecificacao,
SolicitacaoTipoEspecificacao.class.getName());
Integer idServicoTipo = ((SolicitacaoTipoEspecificacao)
colecaoSolicitacaoTipoEspecificacao.iterator().next()).getServicoTipo().getId();
sessao.setAttribute("servicoTipo", idServicoTipo);
sessao.setAttribute("gerarOSAutomativa", "OK");
} else {
sessao.removeAttribute("gerarOSAutomativa");
sessao.removeAttribute("servicoTipo");
}
httpServletRequest.setAttribute("nomeCampo", "observacao");
}
/*
* Caso o Tempo de Espera Final esteja desabilitado e o Tempo de Espera
* Inicial para Atendimento esteja preenchido, atribuir o valor
* correspondente � hora corrente e n�o permitir altera��o
*/
String tempoEsperaFinalDesabilitado = httpServletRequest
.getParameter("tempoEsperaFinalDesabilitado");
if (tempoEsperaFinalDesabilitado != null
&& !tempoEsperaFinalDesabilitado.equalsIgnoreCase("")) {
this
.atribuirHoraCorrenteTempoEsperaFinal(atualizarRegistroAtendimentoActionForm);
httpServletRequest.setAttribute("nomeCampo", "unidade");
}
// [FS0045] - Verificar exist�ncia de Contas Associadas
// Mariana Victor - 31/01/2011
if (atualizarRegistroAtendimentoActionForm.getTipoSolicitacao() != null
&& !atualizarRegistroAtendimentoActionForm.getTipoSolicitacao().equals("")
&& atualizarRegistroAtendimentoActionForm.getEspecificacao() != null
&& !atualizarRegistroAtendimentoActionForm.getEspecificacao().equals("")) {
FiltroRegistroAtendimentoConta filtroRegistroAtendimentoConta = new FiltroRegistroAtendimentoConta();
filtroRegistroAtendimentoConta.adicionarParametro(
new ParametroSimples(FiltroRegistroAtendimentoConta.REGISTRO_ATENDIMENTO_ID, atualizarRegistroAtendimentoActionForm.getNumeroRA()));
Collection colecaoRAConta = fachada.pesquisar(filtroRegistroAtendimentoConta, RegistroAtendimentoConta.class.getName());
if (colecaoRAConta != null && !colecaoRAConta.isEmpty()) {
sessao.setAttribute("contasAssociadas", true);
} else {
sessao.removeAttribute("contasAssociadas");
}
}
return retorno;
}
/**
* [UC0408] Atualizar Registro de Atendimento
*
* Atribui o valor correspondente � hora corrente
*
* @author S�vio Luiz
* @date 10/08/2006
*
* @param AtualizarRegistroAtendimentoActionForm
* @return void
*/
private void atribuirHoraCorrenteTempoEsperaFinal(
AtualizarRegistroAtendimentoActionForm atualizarRegistroAtendimentoActionForm) {
Date dataCorrente = new Date();
atualizarRegistroAtendimentoActionForm.setTempoEsperaFinal(Util
.formatarHoraSemSegundos(dataCorrente));
}
}