package gcom.gui.atendimentopublico.ordemservico; import gcom.atendimentopublico.ordemservico.FiltroOrdemServicoPavimento; import gcom.atendimentopublico.ordemservico.OrdemServicoPavimento; 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.interceptor.RegistradorOperacao; import gcom.seguranca.acesso.Operacao; import gcom.seguranca.acesso.usuario.Usuario; import gcom.seguranca.acesso.usuario.UsuarioAcao; import gcom.seguranca.acesso.usuario.UsuarioAcaoUsuarioHelper; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import gcom.util.filtro.ParametroSimplesIn; import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.Iterator; 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; /** * Action de Atualizar Ordem de Repavimentacao em Processo de Aceite pelo PopUp. * * @author Hugo Leonardo * @created 17/05/2010 */ public class AtualizarOrdemRepavimentacaoProcessoAceitePopUpAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { // Inicializando Variaveis ActionForward retorno = actionMapping.findForward("atualizarOrdemRepavimentacaoProcessoAceitePopUp"); FiltrarOrdemRepavimentacaoProcessoAceiteActionForm form = (FiltrarOrdemRepavimentacaoProcessoAceiteActionForm) actionForm; //Obt�m a sess�o HttpSession sessao = httpServletRequest.getSession(false); Fachada fachada = Fachada.getInstancia(); Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado"); boolean temPermissao = verificaUnidadeUsuario(usuario, fachada); if (temPermissao) { throw new ActionServletException("atencao.nao_possui_permissao_para_atualizar"); } Collection collOrdemServicoPavimento = (Collection) sessao.getAttribute("collOrdemServicoPavimentoAceite"); String dataAceite = null; String motivo = null; Date dtAceite = null; OrdemServicoPavimento ordemServicoPavimento = new OrdemServicoPavimento(); if (httpServletRequest.getAttribute("ordemServicoPavimentoAtualizar") != null) { ordemServicoPavimento = (OrdemServicoPavimento) httpServletRequest.getAttribute("ordemServicoPavimentoAtualizar"); }else if(sessao.getAttribute("ordemServicoPavimentoAtualizar")!= null ){ ordemServicoPavimento = (OrdemServicoPavimento) sessao.getAttribute("ordemServicoPavimentoAtualizar"); } if (httpServletRequest.getAttribute("ordemServicoPavimentoAceitarOSConvergente") != null || sessao.getAttribute("ordemServicoPavimentoAceitarOSConvergente") != null ) { if (sessao.getAttribute("osPavimentoAceiteHelper") != null && !sessao.getAttribute("osPavimentoAceiteHelper").equals("")) { if(form.getDataAceite()!= null && !"".equals(form.getDataAceite())){ dataAceite = dataAceite = form.getDataAceite(); dtAceite = validarDataAceite(form, dtAceite, ordemServicoPavimento); } OrdemRepavimentacaoProcessoAceiteHelper osPavimentoAceiteHelper = (OrdemRepavimentacaoProcessoAceiteHelper) sessao.getAttribute("osPavimentoAceiteHelper"); fachada.aceitarOSRepavimentacaoConvergente(osPavimentoAceiteHelper, usuario, dtAceite, new Short(form.getIndicadorSituacaoAceite().toString())); } }else if (httpServletRequest.getAttribute("ordemServicoPavimentoAtualizar") != null || sessao.getAttribute("ordemServicoPavimentoAtualizar") != null ) { if(form.getDataAceite()!= null && !"".equals(form.getDataAceite())){ dataAceite = form.getDataAceite(); dtAceite = validarDataAceite(form, dtAceite, ordemServicoPavimento); } if ( form.getMotivo() != null && !"".equals(form.getMotivo())) { motivo = form.getMotivo(); } if (httpServletRequest.getAttribute("ordemServicoPavimentoAtualizar") != null) { ordemServicoPavimento = (OrdemServicoPavimento) httpServletRequest.getAttribute("ordemServicoPavimentoAtualizar"); }else if(sessao.getAttribute("ordemServicoPavimentoAtualizar")!= null ){ ordemServicoPavimento = (OrdemServicoPavimento) sessao.getAttribute("ordemServicoPavimentoAtualizar"); } ordemServicoPavimento.setDataAceite(Util.converteStringParaDate(dataAceite)); ordemServicoPavimento.setIndicadorAceite(new Short(form.getIndicadorSituacaoAceite().toString())); ordemServicoPavimento.setUsuarioAceite(usuario); ordemServicoPavimento.setDescricaoMotivoAceite(motivo); /* * [UC0107] Registrar Transa��o * */ RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_ATUALIZAR_ORDEM_REPAVIMENTACAO_PROCESSO_ACEITE, ordemServicoPavimento.getOrdemServico().getId(), ordemServicoPavimento.getOrdemServico().getId(), new UsuarioAcaoUsuarioHelper(usuario, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); // [UC0107] -Fim- Registrar Transa��o registradorOperacao.registrarOperacao(ordemServicoPavimento); fachada.atualizar(ordemServicoPavimento); httpServletRequest.removeAttribute("ordemServicoPavimentoAtualizar"); sessao.removeAttribute("ordemServicoPavimentoAtualizar"); }else{ if(form.getDataAceite()!= null && !"".equals(form.getDataAceite())){ dataAceite = form.getDataAceite(); dtAceite = validarDataAceite(form, dtAceite, ordemServicoPavimento); } if(form.getIdRegistro() != null){ String[] idsRegistrosChecados = form.getIdRegistro(); // obter uma listas das Ordens de repavimenta��o selecionadas List listIdsRegistrosChecados = Arrays.asList(idsRegistrosChecados); //Pesquisar a Ordem Servico Selecionados para atualizacao na base FiltroOrdemServicoPavimento filtroOSPavimentoSelecionados = new FiltroOrdemServicoPavimento(); filtroOSPavimentoSelecionados.adicionarParametro( new ParametroSimplesIn( FiltroOrdemServicoPavimento.ORDEM_SERVICO_ID, listIdsRegistrosChecados)); Collection colecaoOSPavimentoSelecionados = fachada.pesquisar(filtroOSPavimentoSelecionados, OrdemServicoPavimento.class.getName()); //Verificar se existe Ordem de Repavimenta��o em Aceite entre as Ordens selecionadas. fachada.verificarExistenciaRepavimentacaoAceite(colecaoOSPavimentoSelecionados); OSPavimentoRetornoHelper oSPavimentoRetornoHelper = null; Iterator iterator = collOrdemServicoPavimento.iterator(); String idOSPav = ""; while (iterator.hasNext()) { oSPavimentoRetornoHelper = (OSPavimentoRetornoHelper) iterator.next(); for (int i = 0; i < idsRegistrosChecados.length; i++) { if(oSPavimentoRetornoHelper.getOrdemServico().getId().toString().equals(idsRegistrosChecados[i])){ ordemServicoPavimento = oSPavimentoRetornoHelper.getOrdemServicoPavimento(); if ( ordemServicoPavimento.getDataAceite() != null && !ordemServicoPavimento.getDataAceite().equals("") ) { idOSPav = ordemServicoPavimento.getOrdemServico().getId().toString(); } else if ( ordemServicoPavimento.getDescricaoMotivoAceite() != null && !ordemServicoPavimento.getDescricaoMotivoAceite().equals("") ) { idOSPav = ordemServicoPavimento.getOrdemServico().getId().toString(); } ordemServicoPavimento.setDataAceite(Util.converteStringParaDate(dataAceite)); ordemServicoPavimento.setIndicadorAceite(new Short(form.getIndicadorSituacaoAceite().toString())); ordemServicoPavimento.setUsuarioAceite(usuario); ordemServicoPavimento.setDescricaoMotivoAceite(form.getMotivo()); ordemServicoPavimento.setUltimaAlteracao(new Date()); if ( !idOSPav.equals("") && sessao.getAttribute("confirmacao") == null ) { httpServletRequest.setAttribute("caminhoActionConclusao", "/gsan/atualizarOrdemRepavimentacaoProcessoAceitePopUpAction.do"); httpServletRequest.setAttribute("cancelamento", "TRUE"); httpServletRequest.setAttribute("nomeBotao1", "Sim"); httpServletRequest.setAttribute("nomeBotao2", "N�o"); sessao.setAttribute("confirmacao" , "sim"); return montarPaginaConfirmacao("atencao.dados_os_sobrescritos", httpServletRequest, actionMapping); } fachada.atualizar(ordemServicoPavimento); } } } } } httpServletRequest.setAttribute("fecharPopup", "OK"); sessao.setAttribute("fecharPopup", "OK"); httpServletRequest.removeAttribute("ordemServicoPavimentoAceitarOSConvergente"); sessao.removeAttribute("ordemServicoPavimentoAceitarOSConvergente"); httpServletRequest.removeAttribute("ordemServicoPavimentoAtualizar"); sessao.removeAttribute("ordemServicoPavimentoAtualizar"); return retorno; } /** * Verifica se usuario em Permissao para atualizar o * retorno das ordens de Servi�o atraves do bot�o confirmar demandas. * * @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; } public Date validarDataAceite(FiltrarOrdemRepavimentacaoProcessoAceiteActionForm form, Date dtAceite, OrdemServicoPavimento ordemServicoPavimento ){ String dataAceite = form.getDataAceite(); dtAceite = Util.converteStringParaDate(dataAceite); //Verifica se a ordem de servico pavimento foi informada, //caso n�o faz a pesquisa de acordo com o id da OS, //armazenado um ou mais de um no campo hidden do form. //Nesse fluxo, caso entre em algum exception exibe o numero da OS com excess�o if ( ordemServicoPavimento == null || ordemServicoPavimento.getId() == null ) { String[] idsRegistrosChecados = form.getIdRegistro(); // obter uma listas das Ordens de repavimenta��o selecionadas List listIdsRegistrosChecados = Arrays.asList(idsRegistrosChecados); FiltroOrdemServicoPavimento filtro = new FiltroOrdemServicoPavimento(); filtro.adicionarParametro( new ParametroSimplesIn( FiltroOrdemServicoPavimento.ORDEM_SERVICO_ID , listIdsRegistrosChecados)); Collection colecaoPavimento = Fachada.getInstancia().pesquisar( filtro , OrdemServicoPavimento.class.getName()); Iterator iteratorPavimento = colecaoPavimento.iterator(); while ( iteratorPavimento.hasNext() ) { ordemServicoPavimento = (OrdemServicoPavimento) iteratorPavimento.next(); if ( ordemServicoPavimento.getIndicadorAceite() != null ) { if ( dtAceite.before(ordemServicoPavimento.getDataAceite()) ) { throw new ActionServletException( "atencao.os.data.aceite.menor.anterior.informado", ordemServicoPavimento.getOrdemServico().getId() +"", Util.formatarData(ordemServicoPavimento.getDataExecucao()) ); } } else { if ( dtAceite.before(ordemServicoPavimento.getDataExecucao()) ) { throw new ActionServletException( "atencao.os.data.aceite.menor.retorno", ordemServicoPavimento.getOrdemServico().getId() +"", Util.formatarData(ordemServicoPavimento.getDataExecucao()) ); } } Date dataAtualSemHora = Util.formatarDataSemHora(new Date()); if(Util.compararData(dtAceite, dataAtualSemHora) == 1){ String dataAtual = Util.formatarData(new Date()); throw new ActionServletException( "atencao.os.data.superior.data.corrente", ordemServicoPavimento.getOrdemServico().getId() +"", dataAtual); } } } else { if ( ordemServicoPavimento.getIndicadorAceite() != null ) { if ( dtAceite.before(ordemServicoPavimento.getDataAceite()) ) { throw new ActionServletException( "atencao.data.aceite.menor.anterior.informado", null, Util.formatarData(ordemServicoPavimento.getDataExecucao()) ); } } else { if ( dtAceite.before(ordemServicoPavimento.getDataExecucao()) ) { throw new ActionServletException( "atencao.data.aceite.menor.retorno", null, Util.formatarData(ordemServicoPavimento.getDataExecucao()) ); } } Date dataAtualSemHora = Util.formatarDataSemHora(new Date()); if(Util.compararData(dtAceite, dataAtualSemHora) == 1){ String dataAtual = Util.formatarData(new Date()); throw new ActionServletException( "atencao.data.superior.data.corrente", null, dataAtual); } } return dtAceite; } }