package gcom.gui.atendimentopublico.registroatendimento;
import gcom.atendimentopublico.registroatendimento.FiltroRegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.Tramite;
import gcom.atendimentopublico.registroatendimento.bean.FiltrarRegistroAtendimentoHelper;
import gcom.atendimentopublico.registroatendimento.bean.ObterDescricaoSituacaoRAHelper;
import gcom.atendimentopublico.registroatendimento.bean.RAFiltroHelper;
import gcom.cadastro.geografico.BairroArea;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.gui.integracao.ProcessarRequisicaoGisAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesAplicacao;
import gcom.util.ConstantesSistema;
import gcom.util.FachadaException;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
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;
/**
* [UC0503]Tramitar Conjunto de Registro de Atendimento
*
* @author Ana Maria
* @date 08/01/2007
*/
public class FiltrarRegistroAtendimentoTramitacaoAction extends GcomAction {
/**
* < <Descri��o do m�todo>>
*
* @param actionMapping
* Descri��o do par�metro
* @param actionForm
* Descri��o do par�metro
* @param httpServletRequest
* Descri��o do par�metro
* @param httpServletResponse
* Descri��o do par�metro
* @return Descri��o do retorno
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
HttpSession sessao = httpServletRequest.getSession(false);
Fachada fachada = Fachada.getInstancia();
FiltrarRegistroAtendimentoTramitacaoActionForm form = (FiltrarRegistroAtendimentoTramitacaoActionForm) actionForm;
ActionForward retorno = actionMapping.findForward("tramitacaoRegistroAtendimento");
boolean parametroInformado = false;
String retornaDoPopup = (String)httpServletRequest.getParameter("retornaDoPopup");
String importarMovimentoACQUAGIS =
(String) httpServletRequest.getParameter("importarMovimentoACQUAGIS");
Collection<RegistroAtendimento> colecaoRegistroAtendimento = new ArrayList();
if(retornaDoPopup == null){
RegistroAtendimento ra = new RegistroAtendimento();
FiltrarRegistroAtendimentoHelper filtroRA = new FiltrarRegistroAtendimentoHelper();
HashMap<String, Collection> dadosMovimentoACQUAGIS = null;
if (importarMovimentoACQUAGIS != null &&
importarMovimentoACQUAGIS.equalsIgnoreCase("sim")) {
dadosMovimentoACQUAGIS = ProcessarRequisicaoGisAction.listaRAIntegracaoGIS;
Set colecaoRA = null;
if (dadosMovimentoACQUAGIS != null && !dadosMovimentoACQUAGIS.isEmpty()) {
// Set<String> chaves = dadosMovimentoACQUAGIS.keySet();
colecaoRA = new HashSet();
//
// for (Iterator<String> iterator = chaves.iterator(); iterator.hasNext();) {
// // Nesse caso o Login do Usuario
// String chave = iterator.next();
// if(chave != null) {
// // Percorre a Lista de RAs
// Iterator lista = dadosMovimentoACQUAGIS.get(chave).iterator();
// while (lista.hasNext()) {
// Integer idRA = new Integer(lista.next().toString());
// colecaoRA.add(idRA);
// }
// }
// }
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
if (dadosMovimentoACQUAGIS.get(usuario.getLogin()) != null) {
Iterator lista = dadosMovimentoACQUAGIS.get(usuario.getLogin()).iterator();
while (lista.hasNext()) {
Integer idRA = new Integer(lista.next().toString());
colecaoRA.add(idRA);
}
}else {
//Nenhum resultado
throw new ActionServletException(
"atencao.pesquisa.nenhumresultado");
}
if (colecaoRA != null && !colecaoRA.isEmpty()) {
/*
FiltroRegistroAtendimento filtro = new FiltroRegistroAtendimento();
filtro.adicionarCaminhoParaCarregamentoEntidade(
FiltroRegistroAtendimento.SOLICITACAO_TIPO_ESPECIFICACAO);
filtro.adicionarCaminhoParaCarregamentoEntidade("localidade");
filtro.adicionarParametro(new ParametroSimplesIn(
FiltroRegistroAtendimento.ID, colecaoRA));
colecaoRegistroAtendimento =
fachada.pesquisar(filtro, RegistroAtendimento.class.getName());
*/
filtroRA.setRegistroAtendimento(new RegistroAtendimento());
filtroRA.setColecaoRAPorUnidades((Set) colecaoRA);
filtroRA.setNumeroPagina(new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO));
colecaoRegistroAtendimento = fachada.filtrarRegistroAtendimento(filtroRA);
sessao.setAttribute("importarMovimentoACQUAGIS", "sim");
sessao.setAttribute("caminhoRetornoOS", "filtrarRegistroAtendimentoTramitacaoAction.do?importarMovimentoACQUAGIS=sim");
this.tramitarRAMovimentoACQUAGIS(sessao, colecaoRegistroAtendimento);
}
}else {
//Nenhum resultado
throw new ActionServletException(
"atencao.pesquisa.nenhumresultado");
}
}else {
// Numero RA
if (form.getNumeroRa() != null
&& !form.getNumeroRa().equals("")) {
ra.setId(new Integer(form.getNumeroRa()));
parametroInformado = true;
}
// Tipo Solicita��o
Collection<Integer> colecaoSolicitacaoTipoSolicitacao = new ArrayList();
if (form.getTipoSolicitacao() != null
&& form.getTipoSolicitacao().length > 0) {
String[] tipoSolicitacao = form.getTipoSolicitacao();
for (int i = 0; i < tipoSolicitacao.length; i++) {
if (new Integer(tipoSolicitacao[i]).intValue() != ConstantesSistema.NUMERO_NAO_INFORMADO) {
colecaoSolicitacaoTipoSolicitacao.add(new Integer(
tipoSolicitacao[i]));
// passar a cole��o de especifica��o por par�metro
parametroInformado = true;
}
}
}
// Tipo Especifica��o
Collection<Integer> colecaoSolicitacaoTipoEspecificacao = new ArrayList();
if (colecaoSolicitacaoTipoSolicitacao.size() < 2
&& form.getEspecificacao() != null
&& form.getEspecificacao().length > 0) {
String[] tipoSolicitacaoEspecificacao = form
.getEspecificacao();
for (int i = 0; i < tipoSolicitacaoEspecificacao.length; i++) {
if (new Integer(tipoSolicitacaoEspecificacao[i])
.intValue() != ConstantesSistema.NUMERO_NAO_INFORMADO) {
colecaoSolicitacaoTipoEspecificacao
.add(new Integer(
tipoSolicitacaoEspecificacao[i]));
// passar a cole��o de especifica��o por par�metro
parametroInformado = true;
}
}
}
// Perfil Imovel
Collection<Integer> colecaoPerfilImovel = null;
if (form.getColecaoPerfilImovel() != null) {
colecaoPerfilImovel = new ArrayList<Integer>();
for (String id : form.getColecaoPerfilImovel()) {
if (!id.equals("-1")) {
parametroInformado = true;
colecaoPerfilImovel.add(new Integer(id));
}
}
if (colecaoPerfilImovel.size() == 0) colecaoPerfilImovel = null;
}
// Data de Atendimento
Date dataAtendimentoInicial = null;
Date dataAtendimentoFinal = null;
if (form.getPeriodoAtendimentoInicial() != null
&& !form.getPeriodoAtendimentoInicial().equals("")) {
dataAtendimentoInicial = Util.converteStringParaDate(form
.getPeriodoAtendimentoInicial());
dataAtendimentoFinal = null;
if (form.getPeriodoAtendimentoFinal() != null
&& !form.getPeriodoAtendimentoFinal().equals("")) {
dataAtendimentoFinal = Util.converteStringParaDate(form
.getPeriodoAtendimentoFinal());
dataAtendimentoFinal = Util
.adaptarDataFinalComparacaoBetween(dataAtendimentoFinal);
} else {
dataAtendimentoFinal = new Date();
}
// Verificar data final menor que data inicial
int qtdeDias = Util.obterQuantidadeDiasEntreDuasDatas(
dataAtendimentoInicial, dataAtendimentoFinal);
if (qtdeDias < 0) {
throw new ActionServletException(
"atencao.filtrar_data_final_maior_que_inicial");
}
// passar as datas de atendimento por par�metro
parametroInformado = true;
}
// Unidade de Atual
UnidadeOrganizacional unidadeAtual = null;
if (form.getUnidadeAtualId() != null
&& !form.getUnidadeAtualId().equals("")) {
unidadeAtual = new UnidadeOrganizacional();
unidadeAtual.setId(new Integer(form.getUnidadeAtualId()));
// passar cole��o de unidades por par�metro
parametroInformado = true;
}
// Unidade de Superior
UnidadeOrganizacional unidadeSuperior = null;
if (form.getUnidadeSuperiorId() != null
&& !form.getUnidadeSuperiorId().equals("")) {
unidadeSuperior = new UnidadeOrganizacional();
unidadeSuperior.setId(new Integer(form
.getUnidadeSuperiorId()));
// passar cole��o de unidades por par�metro
parametroInformado = true;
}
// Munic�pio
String municipioId = null;
if (form.getMunicipioId() != null
&& !form.getMunicipioId().equals("")) {
municipioId = form.getMunicipioId();
parametroInformado = true;
}
// Bairro
String bairroId = null;
if (form.getBairroId() != null
&& !form.getBairroId().equals("")) {
bairroId = form.getBairroId();
parametroInformado = true;
}
// Bairro �rea
if (new Integer(form.getAreaBairroId()).intValue() != ConstantesSistema.NUMERO_NAO_INFORMADO) {
BairroArea bairroArea = new BairroArea();
bairroArea.setId(new Integer(form.getAreaBairroId()));
ra.setBairroArea(bairroArea);
parametroInformado = true;
}
// Logradouro
String logradouroId = null;
if (form.getLogradouroId() != null
&& !form.getLogradouroId().equals("")) {
logradouroId = form.getLogradouroId();
parametroInformado = true;
}
ra.setCodigoSituacao(new Short("1"));
// Filtra Registro Atendimento
if (parametroInformado) {
//Collection<RegistroAtendimento> colecaoRegistroAtendimento = new ArrayList();
filtroRA.setRegistroAtendimento(ra);
filtroRA.setUnidadeAtual(unidadeAtual);
filtroRA.setUnidadeSuperior(unidadeSuperior);
filtroRA.setDataAtendimentoInicial(dataAtendimentoInicial);
filtroRA.setDataAtendimentoFinal(dataAtendimentoFinal);
filtroRA
.setColecaoTipoSolicitacaoEspecificacao(colecaoSolicitacaoTipoEspecificacao);
filtroRA
.setColecaoTipoSolicitacao(colecaoSolicitacaoTipoSolicitacao);
filtroRA.setMunicipioId(municipioId);
filtroRA.setBairroId(bairroId);
filtroRA.setLogradouroId(logradouroId);
filtroRA.setColecaoPerfilImovel(colecaoPerfilImovel);
filtroRA.setNumeroPagina(new Integer(
ConstantesSistema.NUMERO_NAO_INFORMADO));
// Collection colecaoRAHelperCompleta =
// fachada.filtrarRegistroAtendimento(filtroRA);
// Integer totalRegistros = colecaoRAHelperCompleta.size();
// retorno = this.controlarPaginacao(httpServletRequest,
// retorno, totalRegistros);
// String totalRegistrosRA = ""+ (Integer)
// sessao.getAttribute("totalRegistros");
// sessao.setAttribute("totalRegistrosRA",
// totalRegistrosRA);
// filtroRA.setNumeroPagina(((Integer)
// httpServletRequest.getAttribute("numeroPaginasPesquisa")));
colecaoRegistroAtendimento = fachada
.filtrarRegistroAtendimento(filtroRA);
} else {
throw new ActionServletException(
"atencao.filtrar_informar_um_filtro");
}
}
if (colecaoRegistroAtendimento != null) {
// Carrega Cole��o
Collection<RAFiltroHelper> colecaoRAHelper = loadColecaoRAHelper(colecaoRegistroAtendimento, sessao);
sessao.removeAttribute("numeroOS");
// sessao.setAttribute("colecaoCompleta",
// colecaoRAHelperCompleta);
Collection<Tramite> tramites = (Collection)sessao.getAttribute("tramites");
//************************************************************
// CRC3430
// Por: Ivan Sergio
// tramites n�o estava sendo verificado se estava null
//************************************************************
if (tramites != null) {
Collection<RAFiltroHelper> colecaoRAHelperDepoisTramite = new ArrayList<RAFiltroHelper>();
for(RAFiltroHelper raFiltroHelper: colecaoRAHelper) {
for(Tramite tramite: tramites){
if (raFiltroHelper.getRegistroAtendimento().getId().equals(tramite.getRegistroAtendimento().getId())) {
colecaoRAHelperDepoisTramite.add(raFiltroHelper);
}
}
}
if (colecaoRAHelperDepoisTramite.size() == 0) {
// Nenhum resultado
throw new ActionServletException(
"atencao.pesquisa.nenhumresultado");
}
sessao.setAttribute("colecaoRAHelper", colecaoRAHelperDepoisTramite);
//sessao.setAttribute("colecaoRAHelper", colecaoRAHelper);
}else {
sessao.setAttribute("colecaoRAHelper", colecaoRAHelper);
}
} else {
// Nenhum resultado
throw new ActionServletException(
"atencao.pesquisa.nenhumresultado");
}
}
return retorno;
}
/**
* Carrega cole��o de registro atendimento, situa��o abreviada e unidade atual no
* objeto facilitador
*
* @param colecaoRegistroAtendimento
* @return
*/
private Collection loadColecaoRAHelper(Collection<RegistroAtendimento> colecaoRegistroAtendimento, HttpSession sessao) {
Fachada fachada = Fachada.getInstancia();
Collection colecaoRAHelper = new ArrayList();
UnidadeOrganizacional unidadeAtual = null;
UnidadeOrganizacional unidadeDestino = null;
ObterDescricaoSituacaoRAHelper situacao = null;
RAFiltroHelper helper = null;
//************************************************************
// Autor: Ivan Sergio
// Data: 29/09/2009
// Esta modificacao esta sendo utilizada para auxiliar no
// Processar Movimento pela Integracao com o ACQUAGIS.
//************************************************************
if(sessao.getAttribute("importarMovimentoACQUAGIS") != null &&
sessao.getAttribute("importarMovimentoACQUAGIS").equals("sim")) {
FiltroUnidadeOrganizacional filtroUnidade = new FiltroUnidadeOrganizacional();
filtroUnidade.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.ID, 9543));
unidadeDestino = (UnidadeOrganizacional) Util.retonarObjetoDeColecao(
fachada.pesquisar(filtroUnidade, UnidadeOrganizacional.class.getName()));
}
//************************************************************
for (Iterator iter = colecaoRegistroAtendimento.iterator(); iter.hasNext();) {
RegistroAtendimento registroAtendimento = (RegistroAtendimento) iter.next();
situacao = fachada.obterDescricaoSituacaoRA(registroAtendimento.getId());
unidadeAtual = fachada.obterUnidadeAtualRA(registroAtendimento.getId());
helper = new RAFiltroHelper();
helper.setRegistroAtendimento(registroAtendimento);
helper.setUnidadeAtual(unidadeAtual);
helper.setSituacao(situacao.getDescricaoAbreviadaSituacao());
if(registroAtendimento.getImovel()!= null){
helper.setPerfilImovel(registroAtendimento.getImovel().getImovelPerfil());
}
//************************************************************
// Autor: Ivan Sergio
// Data: 29/09/2009
// Esta modificacao esta sendo utilizada para auxiliar no
// Processar Movimento pela Integracao com o ACQUAGIS.
//************************************************************
if (unidadeDestino != null)
helper.setUnidadeDestino(unidadeDestino);
//************************************************************
colecaoRAHelper.add(helper);
}
return colecaoRAHelper;
}
/***
* @author Ivan Sergio
* @date 28/09/2009
* Metodo utilizado para auxiliar no Processar Movimento pela Integracao com o ACQUAGIS
*
* @param sessao
* @param idsRA
*/
private void tramitarRAMovimentoACQUAGIS(HttpSession sessao, Collection idsRA) {
Fachada fachada = Fachada.getInstancia();
//Usuario logado no sistema
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
//String[] ids = (String[]) sessao.getAttribute("ids");
String[] ids = new String[idsRA.size()];
Iterator iColecaoRa = idsRA.iterator();
int x = 0;
while (iColecaoRa.hasNext()) {
RegistroAtendimento ra = (RegistroAtendimento) iColecaoRa.next();
ids[x] = ra.getId() + ";" + ra.getUnidadeAtual().getId();
x++;
System.out.println(ra.getId().toString());
}
//Data e Hora da tramita��o
//String dataHoraTramitacao = form.getDataTramitacao() + " " + form.getHoraTramitacao()+ ":00";
String dataHoraTramitacao = Util.formatarDataComHora(new Date());
Date dataHoraTramitacaoObjetoDate = Util.converteStringParaDateHora(dataHoraTramitacao);
//Unidade Destino
FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional();
filtroUnidadeOrganizacional.adicionarCaminhoParaCarregamentoEntidade("unidadeTipo");
filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples(FiltroUnidadeOrganizacional.ID, 9543));
UnidadeOrganizacional unidadeDestino =(UnidadeOrganizacional) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroUnidadeOrganizacional,UnidadeOrganizacional.class.getName()));
//[FS0006] Valida Data
//[FS0007] Valida Hora
//[FS0008] Valida Unidade Destino
fachada.validarConjuntoTramitacaoIntegracao(ids, dataHoraTramitacaoObjetoDate, 9543,usuario);
Collection<Tramite> tramites = null;
//Recupera a cole��o de tramite da sess�o, caso exista, ou cria uma nova
if(sessao.getAttribute("tramites") != null && !sessao.getAttribute("tramites").equals("")){
tramites = (Collection)sessao.getAttribute("tramites");
}else{
tramites = new ArrayList();
}
boolean achou = false;
if (ids != null && ids.length != 0) {
for (int i = 0; i < ids.length; i++) {
if (ids[i] != null) {
achou = false;
String[] idsTramitacao = ids[i].split(";");
// Verifica a exist�ncia da cole��o na sess�o.
if (sessao.getAttribute("tramites") != null
&& !sessao.getAttribute("tramites").equals("")) {
Collection tramitesSessao = (Collection) sessao
.getAttribute("tramites");
if (tramitesSessao != null && !tramitesSessao.isEmpty()) {
Iterator iteratorTramite = tramitesSessao
.iterator();
while (iteratorTramite.hasNext()) {
Tramite tramiteColecao = (Tramite) iteratorTramite
.next();
// Caso exita na colec�o da sess�o o registro de
// atendimento selecionado atualiza o tramite
// existente.
if (tramiteColecao
.getRegistroAtendimento()
.getId()
.equals(
Integer
.parseInt(idsTramitacao[0]))) {
// Unidade Destino
tramiteColecao
.setUnidadeOrganizacionalDestino(unidadeDestino);
// Atualiza a unidade Destino do RA
// atualizarUnidadeDestinoColecao(Integer.parseInt(idsTramitacao[0]),
// sessao, unidadeDestino);
// Usu�rio Respons�vel
tramiteColecao
.setUsuarioResponsavel(usuario);
// Data da tramita��o
tramiteColecao
.setDataTramite(dataHoraTramitacaoObjetoDate);
// Parecer da tramita��o
tramiteColecao
.setParecerTramite("TRAMITE AUTOMATICO. RESULTANTE DA GERACAO DE MOVIMENTO PARA A EXECUTORA.");
achou = true;
break;
}
}
}
}
if (!achou) {
// Cria o tramite e joga na sess�o
Tramite tramite = new Tramite();
// Unidade Destino
tramite.setUnidadeOrganizacionalDestino(unidadeDestino);
// Atualiza a unidade Destino do RA
// atualizarUnidadeDestinoColecao(Integer.parseInt(idsTramitacao[0]),
// sessao, unidadeDestino);
// Registro de Atendimento
FiltroRegistroAtendimento filtroRegistroAtendimento = new FiltroRegistroAtendimento();
filtroRegistroAtendimento
.adicionarCaminhoParaCarregamentoEntidade(FiltroRegistroAtendimento.SOLICITACAO_TIPO);
filtroRegistroAtendimento
.adicionarParametro(new ParametroSimples(
FiltroRegistroAtendimento.ID,
idsTramitacao[0]));
Collection colecaoRA = fachada.pesquisar(
filtroRegistroAtendimento,
RegistroAtendimento.class.getName());
RegistroAtendimento ra = (RegistroAtendimento) Util
.retonarObjetoDeColecao(colecaoRA);
tramite.setRegistroAtendimento(ra);
// Unidade Atual
FiltroUnidadeOrganizacional filtroUnidadeOrganizacionalAtual = new FiltroUnidadeOrganizacional();
filtroUnidadeOrganizacionalAtual
.adicionarCaminhoParaCarregamentoEntidade("unidadeTipo");
filtroUnidadeOrganizacionalAtual
.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.ID, Integer
.parseInt(idsTramitacao[1])));
UnidadeOrganizacional unidadeAtual = (UnidadeOrganizacional) Util
.retonarObjetoDeColecao(fachada.pesquisar(
filtroUnidadeOrganizacionalAtual,
UnidadeOrganizacional.class.getName()));
tramite.setUnidadeOrganizacionalOrigem(unidadeAtual);
// Usu�rio Respons�vel
tramite.setUsuarioResponsavel(usuario);
// Usu�rio Logado
tramite.setUsuarioRegistro(usuario);
// Data da tramita��o
tramite.setDataTramite(dataHoraTramitacaoObjetoDate);
//Parecer da tramita��o
tramite
.setParecerTramite("TRAMITE AUTOMATICO. GERADO PELA GERACAO DE MOVIMENTO PARA A EXECUTORA.");
boolean erroValidacaoTramitacao = false;
try {
fachada.validarTramitacao(tramite, usuario);
} catch (FachadaException e) {
erroValidacaoTramitacao = true;
System.out.println(tramite.getRegistroAtendimento().getId() +" "+ ConstantesAplicacao.get(e.getMessage(), e.getParametroMensagem().toArray(new String[e.getParametroMensagem().size()])));
}
if (!erroValidacaoTramitacao) {
tramites.add(tramite);
}
}
}
}
}
sessao.setAttribute("tramites", tramites);
}
}