package gcom.gui.atendimentopublico.registroatendimento;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import gcom.atendimentopublico.registroatendimento.FiltroSolicitacaoTipo;
import gcom.atendimentopublico.registroatendimento.FiltroSolicitacaoTipoEspecificacao;
import gcom.atendimentopublico.registroatendimento.SolicitacaoTipo;
import gcom.atendimentopublico.registroatendimento.SolicitacaoTipoEspecificacao;
import gcom.cadastro.endereco.FiltroLogradouro;
import gcom.cadastro.endereco.Logradouro;
import gcom.cadastro.geografico.Bairro;
import gcom.cadastro.geografico.BairroArea;
import gcom.cadastro.geografico.FiltroBairro;
import gcom.cadastro.geografico.FiltroBairroArea;
import gcom.cadastro.geografico.FiltroMunicipio;
import gcom.cadastro.geografico.Municipio;
import gcom.cadastro.imovel.FiltroImovelPerfil;
import gcom.cadastro.imovel.ImovelPerfil;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.PermissaoEspecial;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
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 ExibirFiltrarRegistroAtendimentoTramitacaoAction 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) {
// Obt�m o action form
FiltrarRegistroAtendimentoTramitacaoActionForm form = (FiltrarRegistroAtendimentoTramitacaoActionForm) actionForm;
// Seta a a��o de retorno
ActionForward retorno = actionMapping.findForward("filtrarRegistroAtendimentoTramitacao");
// Obt�m a sess�o
HttpSession sessao = httpServletRequest.getSession(false);
// Obt�m a facahda
Fachada fachada = Fachada.getInstancia();
String menu = httpServletRequest.getParameter("menu");
if (menu != null && !menu.equalsIgnoreCase("")){
Integer qtdDias = 30;
Date dataAtual = new Date();
Date dataSugestao = Util.subtrairNumeroDiasDeUmaData(dataAtual, qtdDias);
form.setPeriodoAtendimentoInicial(Util.formatarData(dataSugestao));
form.setPeriodoAtendimentoFinal(Util.formatarData(dataAtual));
}
// Tipo Solicita��o
getSolicitacaoTipoCollection(sessao, fachada);
// Especifica��o
if (form.getTipoSolicitacao() != null &&
form.getTipoSolicitacao().length > 0) {
getSolicitacaoTipoEspecificacaoCollection(sessao, fachada, form);
} else {
form.setSelectedTipoSolicitacaoSize("0");
}
// Unidade Atual
if (form.getUnidadeAtualId() != null && !form.getUnidadeAtualId().equals("")) {
getUnidade(form, httpServletRequest, 1);
}
// Unidade Superior
if (form.getUnidadeSuperiorId() != null && !form.getUnidadeSuperiorId().equals("")) {
getUnidade(form, httpServletRequest, 2);
}
// Munic�pio
if (form.getMunicipioId() != null && !form.getMunicipioId().equals("")) {
getMunicipio(form, httpServletRequest);
}
// Bairro & �rea do Bairro
if (form.getBairroId() != null && !form.getBairroId().equals("")) {
// Verificar informa��o do munic�pio
if (form.getMunicipioId() != null && !form.getMunicipioId().equals("")) {
getBairro(form, httpServletRequest);
} else {
throw new ActionServletException("atencao.filtrar_informar_municipio");
}
}
// Logradouro
if (form.getLogradouroId() != null && !form.getLogradouroId().equals("")) {
getLogradouro(form, httpServletRequest);
}
// Perfil Imovel
getPerfilImovelCollection(sessao, fachada);
Collection tramites = (Collection)sessao.getAttribute("tramites");
if(tramites != null && !tramites.isEmpty()){
sessao.removeAttribute("tramites");
}
// Verifica Permissao Especial para Tramitar Acquagis
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
boolean permissaoTramitarAcquagis = Fachada.getInstancia().verificarPermissaoEspecial(
PermissaoEspecial.TRAMITAR_RA_ACQUAGIS,
usuarioLogado);
httpServletRequest.setAttribute("permissaoTramitarAcquagis", permissaoTramitarAcquagis);
return retorno;
}
/**
* Carrega cole��o de solicita��o tipo
*
* @param sessao
* @param fachada
*/
private void getSolicitacaoTipoCollection(HttpSession sessao, Fachada fachada) {
// Filtra Solicita��o Tipo
FiltroSolicitacaoTipo filtroSolicitacaoTipo = new FiltroSolicitacaoTipo();
filtroSolicitacaoTipo.setCampoOrderBy(FiltroSolicitacaoTipo.DESCRICAO);
Collection<SolicitacaoTipo> colecaoSolicitacaoTipo = fachada.pesquisar(filtroSolicitacaoTipo, SolicitacaoTipo.class.getName());
if (colecaoSolicitacaoTipo != null && !colecaoSolicitacaoTipo.isEmpty()) {
sessao.setAttribute("colecaoTipoSolicitacao", colecaoSolicitacaoTipo);
} else {
throw new ActionServletException("atencao.naocadastrado", null, "Especifica��o");
}
}
/**
* Carrega cole��o de solicita��o tipo especifica��o.
*
* @param sessao
* @param fachada
*/
private void getSolicitacaoTipoEspecificacaoCollection(HttpSession sessao, Fachada fachada, FiltrarRegistroAtendimentoTramitacaoActionForm form) {
String[] solicitacaoTipo = form.getTipoSolicitacao();
form.setSelectedTipoSolicitacaoSize(solicitacaoTipo.length+"");
if (solicitacaoTipo.length == 1) {
// Filtra Solicita��o Tipo Especifica��o
FiltroSolicitacaoTipoEspecificacao filtroSolicitacaoTipoEspecificacao = new FiltroSolicitacaoTipoEspecificacao();
filtroSolicitacaoTipoEspecificacao.adicionarParametro(new ParametroSimples(FiltroSolicitacaoTipoEspecificacao.SOLICITACAO_TIPO_ID, solicitacaoTipo[0]));
filtroSolicitacaoTipoEspecificacao.setCampoOrderBy(FiltroSolicitacaoTipoEspecificacao.DESCRICAO);
Collection<SolicitacaoTipoEspecificacao> colecaoSolicitacaoTipoEspecificacao = fachada.pesquisar( filtroSolicitacaoTipoEspecificacao, SolicitacaoTipoEspecificacao.class.getName());
if (colecaoSolicitacaoTipoEspecificacao != null && !colecaoSolicitacaoTipoEspecificacao.isEmpty()) {
sessao.setAttribute("colecaoEspecificacao", colecaoSolicitacaoTipoEspecificacao);
} else {
sessao.setAttribute("colecaoEspecificacao", new ArrayList<SolicitacaoTipoEspecificacao>());
}
} else {
sessao.setAttribute("colecaoEspecificacao", new ArrayList<SolicitacaoTipoEspecificacao>());
}
}
/**
* Recupera Unidade
*
* Verificar exist�ncia de unidades subordinadas
*
* @param form
* @param fachada
* @param tipo
*/
private void getUnidade(FiltrarRegistroAtendimentoTramitacaoActionForm form, HttpServletRequest httpServletRequest, int tipo) {
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
// [F0006] Valida Unidade Atendimento
//if (isValidateObject(filtrarRegistroAtendimentoActionForm)) {
String unidadeId = "";
switch (tipo) {
case 1:
unidadeId = form.getUnidadeAtualId();
form.setUnidadeAtualDescricao(getUnidadeDescricao(fachada, unidadeId));
if (form.getUnidadeAtualDescricao().equalsIgnoreCase("Unidade Inexistente")) {
sessao.removeAttribute("unidadeAtualEncontrada");
form.setUnidadeAtualId("");
} else {
sessao.setAttribute("unidadeAtualEncontrada","true");
form.setValidaUnidadeAtual("false");
}
break;
case 2:
unidadeId = form.getUnidadeSuperiorId();
UnidadeOrganizacional unidadeOrganizacional = new UnidadeOrganizacional();
unidadeOrganizacional.setId(new Integer(unidadeId));
form.setUnidadeSuperiorDescricao(getUnidadeDescricao(fachada, unidadeId));
if (form.getUnidadeSuperiorDescricao().equalsIgnoreCase("Unidade Inexistente")) {
sessao.removeAttribute("unidadeSuperiorEncontrada");
form.setUnidadeSuperiorId("");
} else {
// [FS007] Verificar exist�ncia de unidades subordinadas
fachada.verificarExistenciaUnidadesSubordinadas(unidadeOrganizacional);
sessao.setAttribute("unidadeSuperiorEncontrada","true");
form.setValidaUnidadeSuperior("false");
}
break;
default:
break;
}
}
/**
* Recupera a Unidade Organizacional (Atendimento, Atual e Superior)
*
* Valida Unidade
*
* @param fachada
* @param unidadeId
* @return Descri��o da Unidade Filtrada
*/
private String getUnidadeDescricao(Fachada fachada, String unidadeId) {
// Filtra Unidade
FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional();
filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples(FiltroUnidadeOrganizacional.ID, unidadeId));
// Recupera Unidade Organizacional
Collection<UnidadeOrganizacional> colecaoUnidadeOrganizacional = fachada.pesquisar(filtroUnidadeOrganizacional, UnidadeOrganizacional.class.getName());
if (colecaoUnidadeOrganizacional != null && !colecaoUnidadeOrganizacional.isEmpty()) {
UnidadeOrganizacional unidadeOrganizacional = colecaoUnidadeOrganizacional.iterator().next();
return unidadeOrganizacional.getDescricao();
}
return "Unidade Inexistente";
}
/**
* Recupera Munic�pio
*
* @param form
* @param fachada
*/
private void getMunicipio(FiltrarRegistroAtendimentoTramitacaoActionForm form, HttpServletRequest httpServletRequest) {
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
// [F0008] Valida Munic�pio
//if (isValidateObject(filtrarRegistroAtendimentoActionForm)) {
// Filtra Imovel
FiltroMunicipio filtroMunicipio = new FiltroMunicipio();
filtroMunicipio.adicionarParametro(new ParametroSimples(FiltroMunicipio.ID, form.getMunicipioId()));
// Recupera Munic�pio
Collection<Municipio> colecaoMunicipio = fachada.pesquisar(filtroMunicipio, Municipio.class.getName());
if (colecaoMunicipio != null && !colecaoMunicipio.isEmpty()) {
sessao.setAttribute("municipioEncontrada", "true");
Municipio municipio = colecaoMunicipio.iterator().next();
form.setMunicipioDescricao(municipio.getNome());
} else {
sessao.removeAttribute("municipioEncontrada");
form.setMunicipioId("");
form.setMunicipioDescricao("Munic�pio inexistente");
}
form.setValidaMunicipio("false");
//}
}
/**
* Recupera Bairro
*
* @param form
* @param fachada
* @param sessao
*/
private void getBairro(FiltrarRegistroAtendimentoTramitacaoActionForm form, HttpServletRequest httpServletRequest) {
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
// [F0010] Valida Bairro
//if (isValidateObject(filtrarRegistroAtendimentoActionForm)) {
// Filtra Bairro
FiltroBairro filtroBairro = new FiltroBairro();
filtroBairro.adicionarParametro(new ParametroSimples(FiltroBairro.CODIGO, form.getBairroId()));
filtroBairro.adicionarParametro(new ParametroSimples(FiltroBairro.MUNICIPIO_ID,
form.getMunicipioId()));
Collection<Bairro> colecaoBairro = fachada.pesquisar(filtroBairro, Bairro.class.getName());
if (colecaoBairro != null && !colecaoBairro.isEmpty()) {
sessao.setAttribute("bairroEncontrada", "true");
Bairro bairro = colecaoBairro.iterator().next();
form.setBairroDescricao(bairro.getNome());
carregaBairroArea(bairro.getId(), fachada, sessao);
} else {
sessao.removeAttribute("bairroEncontrada");
form.setBairroId("");
form.setBairroDescricao("Bairro inexistente");
}
form.setValidaBairro("false");
//}
}
/**
* Recupera Logradouro
*
* @param form
* @param fachada
*/
private void getLogradouro(FiltrarRegistroAtendimentoTramitacaoActionForm form, HttpServletRequest httpServletRequest) {
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
// [F0011] Valida Logradouro
//if (isValidateObject(filtrarRegistroAtendimentoActionForm)) {
// Filtra Logradouro
FiltroLogradouro filtroLogradouro = new FiltroLogradouro();
filtroLogradouro.adicionarParametro(new ParametroSimples(FiltroLogradouro.ID,
form.getLogradouroId()));
// Recupera Logradouro
Collection<Logradouro> colecaoLogradouro = fachada.pesquisar(filtroLogradouro, Logradouro.class.getName());
if (colecaoLogradouro != null && !colecaoLogradouro.isEmpty()) {
sessao.setAttribute("logradouroEncontrada", "true");
Logradouro logradouro = colecaoLogradouro.iterator().next();
form.setLogradouroDescricao(logradouro.getNome());
} else {
sessao.removeAttribute("logradouroEncontrada");
form.setLogradouroId("");
form.setLogradouroDescricao("Logradouro inexistente");
}
form.setValidaLogradouro("false");
//}
}
/**
* Carrega �rea do Bairro de acordo com o bairro informado
*
* @param bairroId
* @param fachada
* @param sessao
*/
private void carregaBairroArea(int bairroId, Fachada fachada, HttpSession sessao) {
FiltroBairroArea filtroBairroArea = new FiltroBairroArea();
filtroBairroArea.adicionarParametro(new ParametroSimples(FiltroBairroArea.ID_BAIRRO, bairroId));
// Recupera �rea do Bairro
Collection<BairroArea> colecaoBairroArea = fachada.pesquisar(filtroBairroArea, BairroArea.class.getName());
if (colecaoBairroArea != null && !colecaoBairroArea.isEmpty()) {
sessao.setAttribute("colecaoBairroArea", colecaoBairroArea);
} else {
sessao.removeAttribute("colecaoBairroArea");
}
}
/**
* Carrega cole��o de Perfil do Im�vel
*
* @author Daniel Alves
* @date 09/07/2010
*
* @param sessao
* @param fachada
*/
private void getPerfilImovelCollection(HttpSession sessao, Fachada fachada) {
// Filtra Solicita��o Tipo
FiltroImovelPerfil filtroImovelPerfil = new FiltroImovelPerfil();
filtroImovelPerfil.setCampoOrderBy(FiltroImovelPerfil.DESCRICAO);
Collection<ImovelPerfil> colecaoPerfilImovel= fachada.pesquisar(filtroImovelPerfil, ImovelPerfil.class.getName());
if (colecaoPerfilImovel != null && !colecaoPerfilImovel.isEmpty()) {
sessao.setAttribute("colecaoPerfilImovel", colecaoPerfilImovel);
} else {
throw new ActionServletException("atencao.naocadastrado", null, "Perfil do Imovel");
}
}
}