package gcom.gui.atendimentopublico.ordemservico; import gcom.atendimentopublico.ordemservico.bean.OSPavimentoRetornoHelper; import gcom.atendimentopublico.ordemservico.bean.OrdemRepavimentacaoProcessoAceiteHelper; import gcom.cadastro.unidade.FiltroUnidadeOrganizacional; import gcom.cadastro.unidade.UnidadeOrganizacional; import gcom.cadastro.unidade.UnidadeTipo; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.seguranca.acesso.usuario.Usuario; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.util.Collection; 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; /** * Action de Exibir Manter Ordem de Repavimentacao em Processo de Aceite. * * @author Hugo Leonardo * @created 14/05/2010 * */ public class ExibirManterOrdemRepavimentacaoProcessoAceiteAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { //Inicializando Variaveis ActionForward retorno = actionMapping.findForward("manterOrdemRepavimentacaoProcessoAceite"); HttpSession sessao = httpServletRequest.getSession(false); Fachada fachada = Fachada.getInstancia(); Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado"); boolean usuarioRepav = verificaUnidadeUsuario(usuario, fachada); FiltrarOrdemRepavimentacaoProcessoAceiteActionForm form = (FiltrarOrdemRepavimentacaoProcessoAceiteActionForm) actionForm; //Recebe os Parametros do filtro atraves do Helper e seta os valores no FORM OrdemRepavimentacaoProcessoAceiteHelper osPavimentoAceiteHelper = null; if (sessao.getAttribute("osPavimentoAceiteHelper") != null) { osPavimentoAceiteHelper = (OrdemRepavimentacaoProcessoAceiteHelper) sessao.getAttribute("osPavimentoAceiteHelper"); adicionaOsParametrosNoForm( osPavimentoAceiteHelper , form , fachada ); } if(form.getManterPaginaAux() == null ){ form.setManterPaginaAux("0"); httpServletRequest.setAttribute("manterPaginaAux", form.getManterPaginaAux() ); } Collection collOrdemServicoPavimento = null; if (httpServletRequest.getParameter("retornaDoPopup") != null) { collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, (Integer) httpServletRequest.getAttribute("numeroPaginasPesquisa")); }else{ if (sessao.getAttribute("collOrdemServicoPavimentoHelper") != null) { collOrdemServicoPavimento = (Collection) sessao.getAttribute("collOrdemServicoPavimentoHelper"); } } //Conta a quantidade de registros selecionados. Integer ordemServicoPavimentoCount = fachada.pesquisarOrdemRepavimentacaoProcessoAceiteCount(osPavimentoAceiteHelper); form.setOrdensServicoSelecionadas(ordemServicoPavimentoCount.toString()); if ( ordemServicoPavimentoCount == null || ordemServicoPavimentoCount.equals("") || ordemServicoPavimentoCount.equals(" ") || ordemServicoPavimentoCount.intValue() <= 0 || ordemServicoPavimentoCount.intValue() > 1000) { throw new ActionServletException("atencao.informarOutroFiltro", "exibirFiltrarOrdemRepavimentacaoProcessoAceiteAction.do?limpar=S", null, new String[]{} ); } Integer pagina = null; Integer paginaAtualizada = null ; retorno = this.controlarPaginacao(httpServletRequest, retorno, ordemServicoPavimentoCount ); //pesquisa na colecao para atualizacao na tela if ( httpServletRequest.getAttribute("numeroPaginasPesquisa") != null && (!httpServletRequest.getAttribute("numeroPaginasPesquisa").toString().equals("0") || form.getManterPaginaAux() != null ) ) { //Primeira vez que entra na pagina if ( sessao.getAttribute("numeroPagina") != null ) { //Controla pagina para que nao retorne para pagina incial. retorno = this.controlarPaginacao(httpServletRequest, retorno, ordemServicoPavimentoCount ); String paginaAtual = (String) sessao.getAttribute("numeroPagina"); form.setManterPaginaAux( paginaAtual ); pagina = (Integer) Util.converterStringParaInteger( form.getManterPaginaAux() ); collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite( osPavimentoAceiteHelper, pagina ); Integer numeroDaPagina = pagina.intValue() +1; httpServletRequest.setAttribute("page.offset", numeroDaPagina.toString() ); httpServletRequest.setAttribute("numeroPaginasPesquisa", pagina.toString() ); retorno = this.controlarPaginacao(httpServletRequest, retorno, ordemServicoPavimentoCount ); } else { //Esse fluxo serve para ter o controle da pagina��o quando a pagina for atualizada atraves do popup. paginaAtualizada = (Integer) httpServletRequest.getAttribute("numeroPaginasPesquisa") + 1; form.setManterPaginaAux( paginaAtualizada.toString() ); collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, (Integer) httpServletRequest.getAttribute("numeroPaginasPesquisa")); //Fluxo responsavel caso as OS sejam pesquisada com a situa��o SEM ACEITES if ( osPavimentoAceiteHelper.getSituacaoAceite().toString().equals("1") && httpServletRequest.getParameter("retornaDoPopup") != null ) { collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, (Integer) httpServletRequest.getAttribute("numeroPaginasPesquisa")); sessao.setAttribute("totalRegistros", ordemServicoPavimentoCount); } else { collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, (Integer) httpServletRequest.getAttribute("numeroPaginasPesquisa")); } } } else { //Pega o numero da pagina atraves do aux criado para guardar o numero da pagina. //segunda vez em diante que abre a pagina if (form.getManterPaginaAux() != null && !form.getManterPaginaAux().equals("")) { pagina = (Integer) Util.converterStringParaInteger(form.getManterPaginaAux()); collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, pagina); Integer pag = pagina.intValue() +1; httpServletRequest.setAttribute("page.offset", pag.toString() ); retorno = this.controlarPaginacao(httpServletRequest, retorno, ordemServicoPavimentoCount ); } else { collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, (Integer) httpServletRequest.getAttribute("numeroPaginasPesquisa")); } } String[] idsRegistrosChecados = form.getIdRegistro(); boolean exiteOrdemRepavSemAceite = verificaOrdemRepavSemAceite(usuario, fachada, osPavimentoAceiteHelper); if (exiteOrdemRepavSemAceite) { sessao.setAttribute("exiteOrdemRepavSemAceite", "true"); httpServletRequest.setAttribute("exiteOrdemRepavSemAceite", "true" ); }else{ sessao.removeAttribute("exiteOrdemRepavSemAceite"); httpServletRequest.removeAttribute("exiteOrdemRepavSemAceite"); } boolean exiteOrdemRepavConvergentes = verificaOrdemRepavConvergentes(usuario, fachada, osPavimentoAceiteHelper); if (exiteOrdemRepavConvergentes) { sessao.setAttribute("exiteOrdemRepavConvergentes", "true"); httpServletRequest.setAttribute("exiteOrdemRepavConvergentes", "true" ); } else{ sessao.removeAttribute("exiteOrdemRepavConvergentes"); httpServletRequest.removeAttribute("exiteOrdemRepavConvergentes"); } if(usuarioRepav){ sessao.setAttribute("usuarioTipoRepavimentadora", "true"); httpServletRequest.setAttribute("usuarioTipoRepavimentadora", "true" ); }else{ sessao.removeAttribute("usuarioTipoRepavimentadora"); httpServletRequest.removeAttribute("usuarioTipoRepavimentadora" ); } // pesquisa na colecao para atualizacao na tela if ( pagina != null ) { collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, pagina); if ( osPavimentoAceiteHelper.getSituacaoAceite().toString().equals("1") || osPavimentoAceiteHelper.getSituacaoAceite().toString().equals("2") ) { Integer atualizaPaginacao = fachada.pesquisarOrdemRepavimentacaoProcessoAceiteCount(osPavimentoAceiteHelper); if ( atualizaPaginacao == null || atualizaPaginacao.equals("") || atualizaPaginacao.equals(" ") || atualizaPaginacao.intValue() <= 0 ) { throw new ActionServletException("atencao.informarOutroFiltro", "exibirFiltrarOrdemRepavimentacaoProcessoAceiteAction.do?limpar=S", null, new String[]{} ); } else { sessao.setAttribute("totalRegistros", atualizaPaginacao); retorno = this.controlarPaginacao(httpServletRequest, retorno, atualizaPaginacao ); } } } else { collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, (Integer) httpServletRequest.getAttribute("numeroPaginasPesquisa")); if ( osPavimentoAceiteHelper.getSituacaoAceite().toString().equals("1") || osPavimentoAceiteHelper.getSituacaoAceite().toString().equals("2") ) { Integer atualizaPaginacao = fachada.pesquisarOrdemRepavimentacaoProcessoAceiteCount(osPavimentoAceiteHelper); if ( atualizaPaginacao == null || atualizaPaginacao.equals("") || atualizaPaginacao.equals(" ") || atualizaPaginacao.intValue() <= 0 ) { throw new ActionServletException("atencao.informarOutroFiltro", "exibirFiltrarOrdemRepavimentacaoProcessoAceiteAction.do?limpar=S", null, new String[]{} ); } } Integer atualizaPaginacao = fachada.pesquisarOrdemRepavimentacaoProcessoAceiteCount(osPavimentoAceiteHelper); if ( idsRegistrosChecados != null && idsRegistrosChecados.length == 10 ) { collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, (Integer) 0 ); sessao.setAttribute("totalRegistros", atualizaPaginacao); sessao.setAttribute("page.offset", (Integer) httpServletRequest.getAttribute("numeroPaginasPesquisa") + 1 ); retorno = this.controlarPaginacao(httpServletRequest, retorno, atualizaPaginacao ); } else if (collOrdemServicoPavimento != null && collOrdemServicoPavimento.size() == 0) { collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite(osPavimentoAceiteHelper, (Integer) 0 ); sessao.setAttribute("totalRegistros", atualizaPaginacao); sessao.setAttribute("page.offset", 1); retorno = this.controlarPaginacao(httpServletRequest, retorno, atualizaPaginacao ); }else { sessao.setAttribute("totalRegistros", atualizaPaginacao); } } httpServletRequest.removeAttribute("fecharPopup"); sessao.setAttribute("collOrdemServicoPavimentoAceite", collOrdemServicoPavimento); sessao.removeAttribute("numeroPagina"); return retorno; } /** * UC_1020 - Exibir Ordens de Repavimenta��o em Processo de Aceite; * * 5.1. Caso exista ordem de repavimenta��o (sem aceite ou com aceite rejeitado) e n�o rejeitada * (existe ocorr�ncia na tabela ORDEM_SERVICO_PAVIMENTO com (OSPV_ICACEITE com o valor nulo * ou com o valor 2 (dois)) e RPMR_ID com o valor nulo): * * @author Hugo Leonardo * * @date 19/05/2010, 10/12/2010 * @param usuario * @param fachada * @return boolean */ private boolean verificaOrdemRepavSemAceite(Usuario usuario, Fachada fachada, OrdemRepavimentacaoProcessoAceiteHelper osPavimentoAceiteHelper){ boolean permissao = false; Collection collOrdemServicoPavimento = null; collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite( osPavimentoAceiteHelper, null ); Iterator iteratorCollOrdemServicoPavimento = collOrdemServicoPavimento.iterator(); OSPavimentoRetornoHelper osPavimentoRetornoHelper = new OSPavimentoRetornoHelper(); while( iteratorCollOrdemServicoPavimento.hasNext() ) { osPavimentoRetornoHelper = (OSPavimentoRetornoHelper) iteratorCollOrdemServicoPavimento.next(); if(osPavimentoRetornoHelper.getOrdemServicoPavimento().getIndicadorAceite() == null && osPavimentoRetornoHelper.getOrdemServicoPavimento().getMotivoRejeicao() == null){ permissao = true; } } return permissao; } /** * UC_1020 - Exibir Ordens de Repavimenta��o em Processo de Aceite; * * 5.1.2 Caso exista ordem de repavimenta��o com dados de pavimento * da contratante convergentes com os dados de pavimento retorno da contratada; * * @author Hugo Leonardo * * @date 19/05/2010 * @param usuario * @param fachada * @return boolean */ private boolean verificaOrdemRepavConvergentes(Usuario usuario, Fachada fachada, OrdemRepavimentacaoProcessoAceiteHelper osPavimentoAceiteHelper){ boolean permissao = false; Collection collOrdemServicoPavimento = null; collOrdemServicoPavimento = fachada.pesquisarOrdemRepavimentacaoProcessoAceite( osPavimentoAceiteHelper, null ); Iterator iteratorCollOrdemServicoPavimento = collOrdemServicoPavimento.iterator(); OSPavimentoRetornoHelper osPavimentoRetornoHelper = new OSPavimentoRetornoHelper(); while( iteratorCollOrdemServicoPavimento.hasNext() ) { osPavimentoRetornoHelper = (OSPavimentoRetornoHelper) iteratorCollOrdemServicoPavimento.next(); if(osPavimentoRetornoHelper.getOrdemServicoPavimento().getAreaPavimentoRua().compareTo( osPavimentoRetornoHelper.getOrdemServicoPavimento().getAreaPavimentoRuaRetorno()) == 0 && osPavimentoRetornoHelper.getOrdemServicoPavimento().getPavimentoRua().getId().equals( osPavimentoRetornoHelper.getOrdemServicoPavimento().getPavimentoRuaRetorno().getId()) && osPavimentoRetornoHelper.getOrdemServicoPavimento().getIndicadorAceite() == null && osPavimentoRetornoHelper.getOrdemServicoPavimento().getMotivoRejeicao() == null){ permissao = true; break; } } return permissao; } /** * Verifica se usuario em Permissao para atualizar o * retorno das ordens de Servi�o em Processo de Aceite atraves do bot�o Informar Aceite. * * @author Hugo Leonardo * * @date 17/05/2010 * @param usuario * @param fachada * @return boolean */ private boolean verificaUnidadeUsuario( Usuario usuario, Fachada fachada) { boolean temPermissao = false; Collection colecaoUnidadesResponsaveis = null; FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional(); if ( usuario != null && usuario.getUnidadeOrganizacional() != null && usuario.getUnidadeOrganizacional().getUnidadeTipo() != null && usuario.getUnidadeOrganizacional().getUnidadeTipo().getId() != null && (usuario.getUnidadeOrganizacional().getUnidadeTipo().getId().intValue() == UnidadeTipo.UNIDADE_TIPO_REPAVIMENTADORA_ID.intValue()) ) { filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples( FiltroUnidadeOrganizacional.ID, usuario.getUnidadeOrganizacional().getId())); filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples( FiltroUnidadeOrganizacional.ID_UNIDADE_TIPO,UnidadeTipo.UNIDADE_TIPO_REPAVIMENTADORA_ID)); colecaoUnidadesResponsaveis = fachada.pesquisar(filtroUnidadeOrganizacional, UnidadeOrganizacional.class.getName()); if ( colecaoUnidadesResponsaveis != null && !colecaoUnidadesResponsaveis.isEmpty() ) { temPermissao = true; } } return temPermissao; } /** * @author Hugo Leonardo * * @date 17/05/2010 * * @param OrdemRepavimentacaoProcessoAceiteHelper * @param form * @param fachada */ private void adicionaOsParametrosNoForm( OrdemRepavimentacaoProcessoAceiteHelper ordemRepavimentacaoProcessoAceiteHelper, FiltrarOrdemRepavimentacaoProcessoAceiteActionForm form , Fachada fachada) { if(ordemRepavimentacaoProcessoAceiteHelper.getIdUnidadeResponsavel() != null){ FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional(); filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples( FiltroUnidadeOrganizacional.ID, ordemRepavimentacaoProcessoAceiteHelper.getIdUnidadeResponsavel())); Collection colecaoUnidadesResponsaveis = fachada.pesquisar( filtroUnidadeOrganizacional, UnidadeOrganizacional.class.getName()); UnidadeOrganizacional unidadeOrganizacional = (UnidadeOrganizacional) Util.retonarObjetoDeColecao(colecaoUnidadesResponsaveis); if(unidadeOrganizacional != null){ form.setDescricaoUnidadeResponsavel(unidadeOrganizacional.getDescricao()); } } if(ordemRepavimentacaoProcessoAceiteHelper.getSituacaoAceite() != null){ String situacao = ""; if(ordemRepavimentacaoProcessoAceiteHelper.getSituacaoAceite().toString().equals("1")){ situacao = "SEM ACEITES"; }else if(ordemRepavimentacaoProcessoAceiteHelper.getSituacaoAceite().toString().equals("2")){ situacao = "ACEITAS"; }else if(ordemRepavimentacaoProcessoAceiteHelper.getSituacaoAceite().toString().equals("3")){ situacao = "N�O ACEITAS"; }else{ situacao = "TODAS"; } form.setSituacaoAceiteDescricao(situacao); } // Periodo de Aceite do Servico if(ordemRepavimentacaoProcessoAceiteHelper.getPeriodoAceiteServicoInicial() != null && ordemRepavimentacaoProcessoAceiteHelper.getPeriodoAceiteServicoFinal()!= null){ form.setPeriodoAceiteServicoInicial(ordemRepavimentacaoProcessoAceiteHelper.getPeriodoAceiteServicoInicial()); form.setPeriodoAceiteServicoFinal(ordemRepavimentacaoProcessoAceiteHelper.getPeriodoAceiteServicoFinal()); }else{ form.setPeriodoAceiteServicoInicial(null); form.setPeriodoAceiteServicoFinal(null); } // Periodo de Retorno do Servico if(ordemRepavimentacaoProcessoAceiteHelper.getPeriodoRetornoServicoInicial() != null && ordemRepavimentacaoProcessoAceiteHelper.getPeriodoRetornoServicoFinal()!= null){ form.setPeriodoRetornoServicoInicial(ordemRepavimentacaoProcessoAceiteHelper.getPeriodoRetornoServicoInicial()); form.setPeriodoRetornoServicoFinal(ordemRepavimentacaoProcessoAceiteHelper.getPeriodoRetornoServicoFinal()); }else{ form.setPeriodoRetornoServicoInicial(null); form.setPeriodoRetornoServicoFinal(null); } // Unidade de Encerramento if(ordemRepavimentacaoProcessoAceiteHelper.getIdUnidadeOrganizacional() !=null && !ordemRepavimentacaoProcessoAceiteHelper.getIdUnidadeOrganizacional().equals("")){ form.setIdUnidadeOrganizacional(ordemRepavimentacaoProcessoAceiteHelper.getIdUnidadeOrganizacional().toString()); }else{ form.setIdUnidadeOrganizacional(null); } } }