package gcom.gui.atendimentopublico;
import gcom.atendimentopublico.EspecificacaoPavimentacaoServicoTipo;
import gcom.atendimentopublico.FiltroEspecificacaoPavimentacaoServicoTipo;
import gcom.atendimentopublico.ordemservico.FiltroServicoTipo;
import gcom.atendimentopublico.ordemservico.ServicoTipo;
import gcom.atendimentopublico.registroatendimento.FiltroLocalOcorrencia;
import gcom.atendimentopublico.registroatendimento.FiltroSolicitacaoTipo;
import gcom.atendimentopublico.registroatendimento.FiltroSolicitacaoTipoEspecificacao;
import gcom.atendimentopublico.registroatendimento.LocalOcorrencia;
import gcom.atendimentopublico.registroatendimento.SolicitacaoTipo;
import gcom.atendimentopublico.registroatendimento.SolicitacaoTipoEspecificacao;
import gcom.cadastro.imovel.FiltroPavimentoCalcada;
import gcom.cadastro.imovel.FiltroPavimentoRua;
import gcom.cadastro.imovel.PavimentoCalcada;
import gcom.cadastro.imovel.PavimentoRua;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
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;
public class ExibirDeterminarTipoServicoEspecificacaoAction extends GcomAction{
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("determinarTipoServicoEspecificacao");
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
DeterminarTipoServicoEspecificacaoActionForm determinarTipoServicoEspecificacaoActionForm = (DeterminarTipoServicoEspecificacaoActionForm) actionForm;
String pesquisarTipoServico = httpServletRequest.getParameter("pesquisarTipoServico");
sessao.removeAttribute("corTipoServico");
if(pesquisarTipoServico != null && pesquisarTipoServico.equals("OK")){
ServicoTipo servicoTipo = fachada.pesquisarSevicoTipo(
new Integer(determinarTipoServicoEspecificacaoActionForm.getTipoServico()));
if(servicoTipo != null){
determinarTipoServicoEspecificacaoActionForm.setTipoServico(servicoTipo.getId().toString());
determinarTipoServicoEspecificacaoActionForm.setDescricaoTipoServico(servicoTipo.getDescricao());
}else{
determinarTipoServicoEspecificacaoActionForm.setTipoServico("");
determinarTipoServicoEspecificacaoActionForm.setDescricaoTipoServico("Tipo de Servi�o Inexistente");
sessao.setAttribute("corTipoServico", "exception");
}
}
//Solicita��o Tipo
FiltroSolicitacaoTipo filtroTipoSolicitacao = new FiltroSolicitacaoTipo();
filtroTipoSolicitacao.adicionarParametro( new ParametroSimples
(FiltroSolicitacaoTipo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtroTipoSolicitacao.adicionarParametro( new ParametroSimples
(FiltroSolicitacaoTipo.INDICADOR_USO_SISTEMA, ConstantesSistema.INDICADOR_USO_DESATIVO));
Collection colecaoTipoSolicitacao = fachada.pesquisar(
filtroTipoSolicitacao, SolicitacaoTipo.class.getName());
if ((colecaoTipoSolicitacao == null || colecaoTipoSolicitacao.isEmpty())) {
throw new ActionServletException("atencao.entidade_sem_dados_para_selecao", null,"Solicita��o Tipo");
}
sessao.setAttribute("colecaoTipoSolicitacao", colecaoTipoSolicitacao);
String tipoSolicitacao = determinarTipoServicoEspecificacaoActionForm.getTiposSolicitacao();
Collection colecaoSolicitacaoTipoEspecificacao = new ArrayList();
if (tipoSolicitacao != null && !tipoSolicitacao.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
// Solicita��o Tipo Especifica��o
FiltroSolicitacaoTipoEspecificacao filtroSolicitacaoTipoEspecificacao = new FiltroSolicitacaoTipoEspecificacao();
filtroSolicitacaoTipoEspecificacao.adicionarParametro( new ParametroSimples
(FiltroSolicitacaoTipoEspecificacao.SOLICITACAO_TIPO_ID, tipoSolicitacao));
colecaoSolicitacaoTipoEspecificacao = fachada.pesquisar(
filtroSolicitacaoTipoEspecificacao, SolicitacaoTipoEspecificacao.class.getName());
if ((colecaoSolicitacaoTipoEspecificacao == null || colecaoSolicitacaoTipoEspecificacao.isEmpty()) &&
!determinarTipoServicoEspecificacaoActionForm.getTiposSolicitacao().equals("-1")) {
throw new ActionServletException("atencao.entidade_sem_dados_para_selecao", null,"Solicita��o Tipo Especifica��o");
}
}
sessao.setAttribute("colecaoSolicitacaoTipoEspecificacao", colecaoSolicitacaoTipoEspecificacao);
// Local de Ocorr�ncia
FiltroLocalOcorrencia filtroLocalOcorrencia = new FiltroLocalOcorrencia();
filtroLocalOcorrencia.adicionarParametro( new ParametroSimples
(FiltroLocalOcorrencia.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
Collection colecaoLocalOcorrencia = fachada.pesquisar(
filtroLocalOcorrencia, LocalOcorrencia.class.getName());
if (colecaoLocalOcorrencia == null || colecaoLocalOcorrencia.isEmpty()) {
throw new ActionServletException("atencao.entidade_sem_dados_para_selecao", null,"Local de Ocorr�ncia");
}
sessao.setAttribute("colecaoLocalOcorrencia", colecaoLocalOcorrencia);
// Pavimento Rua
FiltroPavimentoRua filtroPavimentoRua = new FiltroPavimentoRua();
filtroPavimentoRua.adicionarParametro( new ParametroSimples
(FiltroPavimentoRua.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
Collection colecaoPavimentoRua = fachada.pesquisar(
filtroPavimentoRua, PavimentoRua.class.getName());
if (colecaoPavimentoRua == null || colecaoPavimentoRua.isEmpty()) {
throw new ActionServletException("atencao.entidade_sem_dados_para_selecao", null,"Pavimento Rua");
}
sessao.setAttribute("colecaoPavimentoRua", colecaoPavimentoRua);
// Pavimento Cal�ada
FiltroPavimentoCalcada filtroPavimentoCalcada = new FiltroPavimentoCalcada();
filtroPavimentoCalcada.adicionarParametro( new ParametroSimples
(FiltroPavimentoCalcada.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
Collection colecaoPavimentoCalcada = fachada.pesquisar(
filtroPavimentoCalcada, PavimentoCalcada.class.getName());
if (colecaoPavimentoCalcada == null || colecaoPavimentoCalcada.isEmpty()) {
throw new ActionServletException("atencao.entidade_sem_dados_para_selecao", null,"Pavimento Cal�ada");
}
sessao.setAttribute("colecaoPavimentoCalcada", colecaoPavimentoCalcada);
sessao.setAttribute("tiposSolicitacao",determinarTipoServicoEspecificacaoActionForm.getTiposSolicitacao());
//Colec�o Tipo de Servi�o da Ordem de Servi�o por Especifica��o para mostrar na Grid
if ( httpServletRequest.getParameter("menu") != null &&
httpServletRequest.getParameter("menu").equals("sim")){
FiltroEspecificacaoPavimentacaoServicoTipo filtro = new FiltroEspecificacaoPavimentacaoServicoTipo();
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroEspecificacaoPavimentacaoServicoTipo.LOCALOCORRENCIA);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroEspecificacaoPavimentacaoServicoTipo.PAVIMENTOCALCADA);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroEspecificacaoPavimentacaoServicoTipo.PAVIMENTORUA);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroEspecificacaoPavimentacaoServicoTipo.SOLICITACAOTIPOESPECIFICACAO);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroEspecificacaoPavimentacaoServicoTipo.SERVICOTIPO);
filtro.setCampoOrderBy(FiltroEspecificacaoPavimentacaoServicoTipo.SOLICITACAOTIPOESPECIFICACAO);
filtro.setCampoOrderBy(FiltroEspecificacaoPavimentacaoServicoTipo.LOCALOCORRENCIA);
filtro.setCampoOrderBy(FiltroEspecificacaoPavimentacaoServicoTipo.PAVIMENTORUA);
filtro.setCampoOrderBy(FiltroEspecificacaoPavimentacaoServicoTipo.PAVIMENTOCALCADA);
filtro.setCampoOrderBy(FiltroEspecificacaoPavimentacaoServicoTipo.SERVICOTIPO);
Collection result =
fachada.pesquisar(filtro,
EspecificacaoPavimentacaoServicoTipo.class.getName());
sessao.setAttribute("colecaoEspServTipo", result);
}
// atualiza cole��o
if (httpServletRequest.getParameter("adicionarTipoServicoEspecificacao") != null
&& httpServletRequest.getParameter("adicionarTipoServicoEspecificacao").equalsIgnoreCase("S")){
atualizaColecoesNaSessao(sessao,httpServletRequest, actionForm);
httpServletRequest.setAttribute("adicionarTipoServicoEspecificacao","N");
}
return retorno;
}
private void atualizaColecoesNaSessao(HttpSession sessao,
HttpServletRequest httpServletRequest, ActionForm actionForm){
DeterminarTipoServicoEspecificacaoActionForm detToServEspActionForm =
(DeterminarTipoServicoEspecificacaoActionForm) actionForm;
// Instancia o objeto
EspecificacaoPavimentacaoServicoTipo espPavServTp = this.instanciarObjeto(detToServEspActionForm);
// ------------- Verificar preenchimento dos campos ------------- //
if(espPavServTp.getSolicitacaoTipoEspecificacao() == null
|| espPavServTp.getLocalOcorrencia() == null
|| espPavServTp.getPavimentoCalcada() == null
|| espPavServTp.getPavimentoRua() == null
|| espPavServTp.getServicoTipo() == null){
throw new ActionServletException("atencao.inserir_especificacao_pavimentacao_servico_tipo",
null, "");
}
Collection<EspecificacaoPavimentacaoServicoTipo> colecaoEspServTipo = null;
if (sessao.getAttribute("colecaoEspServTipo") != null) {
colecaoEspServTipo = (Collection<EspecificacaoPavimentacaoServicoTipo>) sessao
.getAttribute("colecaoEspServTipo");
} else {
colecaoEspServTipo = new ArrayList();
}
if (colecaoEspServTipo.contains(espPavServTp)) {
throw new ActionServletException("atencao.especificacao_pavimentacao_servico_tipo_existente");
} else {
colecaoEspServTipo.add(espPavServTp);
}
//Ordena a cole��o
Collections.sort((List) colecaoEspServTipo,
new Comparator() {
public int compare(Object a, Object b) {
String posicao1 = ((EspecificacaoPavimentacaoServicoTipo) a)
.getSolicitacaoTipoEspecificacao().getDescricao()
+ ((EspecificacaoPavimentacaoServicoTipo) a)
.getLocalOcorrencia().getDescricao()
+ ((EspecificacaoPavimentacaoServicoTipo) a)
.getPavimentoRua().getDescricao()
+ ((EspecificacaoPavimentacaoServicoTipo) a)
.getPavimentoCalcada().getDescricao()
+ ((EspecificacaoPavimentacaoServicoTipo) a)
.getServicoTipo().getDescricao();
String posicao2 = ((EspecificacaoPavimentacaoServicoTipo) b)
.getSolicitacaoTipoEspecificacao().getDescricao()
+ ((EspecificacaoPavimentacaoServicoTipo) b)
.getLocalOcorrencia().getDescricao()
+ ((EspecificacaoPavimentacaoServicoTipo) b)
.getPavimentoRua().getDescricao()
+ ((EspecificacaoPavimentacaoServicoTipo) b)
.getPavimentoCalcada().getDescricao()
+ ((EspecificacaoPavimentacaoServicoTipo) b)
.getServicoTipo().getDescricao();
return posicao1.compareTo(posicao2);
}
});
//manda para a sess�o a cole��o
sessao.setAttribute("colecaoEspServTipo", colecaoEspServTipo);
}
private EspecificacaoPavimentacaoServicoTipo instanciarObjeto(DeterminarTipoServicoEspecificacaoActionForm form){
EspecificacaoPavimentacaoServicoTipo espPavServTp = new EspecificacaoPavimentacaoServicoTipo();
String idServicoTipo = form.getTipoServico();
Fachada fachada = Fachada.getInstancia();
if(!(form.getTiposSolicitacao() == null || form.getTiposEspecificacaoSolicitacao() == null
|| form.getPavimentoRua() == null || form.getPavimentoCalcada() == null
|| form.getLocaisOcorrencia() == null || idServicoTipo == null)){
SolicitacaoTipo solicitacaoTipo = new SolicitacaoTipo();
solicitacaoTipo.setId(Integer.valueOf(form.getTiposSolicitacao()));
FiltroSolicitacaoTipoEspecificacao filtroSolicitacaoTipoEspecificacao = new FiltroSolicitacaoTipoEspecificacao();
filtroSolicitacaoTipoEspecificacao.adicionarParametro(
new ParametroSimples(FiltroSolicitacaoTipoEspecificacao.ID, form.getTiposEspecificacaoSolicitacao()));
Collection colecaoSolicitacaoTipoEspecificacao = fachada.pesquisar(
filtroSolicitacaoTipoEspecificacao, SolicitacaoTipoEspecificacao.class.getName());
SolicitacaoTipoEspecificacao solicitacaoTipoEspecificacao = (SolicitacaoTipoEspecificacao) colecaoSolicitacaoTipoEspecificacao.iterator().next();
espPavServTp.setSolicitacaoTipoEspecificacao(solicitacaoTipoEspecificacao);
FiltroLocalOcorrencia filtroLocalOcorrencia = new FiltroLocalOcorrencia();
filtroLocalOcorrencia.adicionarParametro(
new ParametroSimples(FiltroLocalOcorrencia.ID, form.getLocaisOcorrencia()));
Collection colecaoLocalOcorrencia = fachada.pesquisar(filtroLocalOcorrencia, LocalOcorrencia.class.getName());
LocalOcorrencia localOcorrencia = (LocalOcorrencia) colecaoLocalOcorrencia.iterator().next();
espPavServTp.setLocalOcorrencia(localOcorrencia);
FiltroPavimentoRua filtroPavimentoRua = new FiltroPavimentoRua();
filtroPavimentoRua.adicionarParametro(
new ParametroSimples(FiltroPavimentoRua.ID, form.getPavimentoRua()));
Collection colecaoPavimentoRua = fachada.pesquisar(filtroPavimentoRua, PavimentoRua.class.getName());
PavimentoRua pavimentoRua = (PavimentoRua) colecaoPavimentoRua.iterator().next();
espPavServTp.setPavimentoRua(pavimentoRua);
FiltroPavimentoCalcada filtroPavimentoCalcada = new FiltroPavimentoCalcada();
filtroPavimentoCalcada.adicionarParametro(new ParametroSimples(
FiltroPavimentoCalcada.ID, form.getPavimentoCalcada()));
Collection colecaoPavimentoCalcada = fachada.pesquisar(filtroPavimentoCalcada, PavimentoCalcada.class.getName());
PavimentoCalcada pavimentoCalcada = (PavimentoCalcada) colecaoPavimentoCalcada.iterator().next();
espPavServTp.setPavimentoCalcada(pavimentoCalcada);
FiltroServicoTipo filtroServicoTipo = new FiltroServicoTipo();
filtroServicoTipo.adicionarParametro(new ParametroSimples(FiltroServicoTipo.ID, idServicoTipo));
Collection colecaoServicoTipo = fachada.pesquisar(filtroServicoTipo,
ServicoTipo.class.getName());
if(colecaoServicoTipo != null && !colecaoServicoTipo.isEmpty()){
ServicoTipo servicoTipo = (ServicoTipo) colecaoServicoTipo.iterator().next();
espPavServTp.setServicoTipo(servicoTipo);
}else{
throw new ActionServletException("atencao.tipo_servico_inexistente");
}
espPavServTp.setUltimaAlteracao(new Date());
}
return espPavServTp;
}
}