package gcom.gui.atendimentopublico.ordemservico; import gcom.atendimentopublico.ordemservico.Atividade; import gcom.atendimentopublico.ordemservico.FiltroMaterial; import gcom.atendimentopublico.ordemservico.Material; import gcom.atendimentopublico.ordemservico.OrdemServico; import gcom.atendimentopublico.ordemservico.OrdemServicoAtividade; import gcom.atendimentopublico.ordemservico.OsAtividadeMaterialExecucao; import gcom.atendimentopublico.ordemservico.bean.ManterDadosAtividadesOrdemServicoHelper; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.ConstantesSistema; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.Map; 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; /** * Esta classe tem por finalidade exibir para o usu�rio a tela que receber� os * par�metros para realiza��o da atualiza��o dos dados das atividades de uma OS * (Material) * * @author Raphael Rossiter * @date 18/10/2006 */ public class ExibirManterMaterialExecucaoOSAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { ActionForward retorno = actionMapping .findForward("manterMaterialExecucaoOS"); ManterMaterialExecucaoOSActionForm form = (ManterMaterialExecucaoOSActionForm) actionForm; HttpSession sessao = httpServletRequest.getSession(false); Fachada fachada = Fachada.getInstancia(); //Carregamento inicial String numeroOS = httpServletRequest.getParameter("ordemServico"); if (numeroOS != null && !numeroOS.equalsIgnoreCase("")){ //Identifica se a chamada foi feita por uma tela principal ou por um popup String caminhoRetorno = httpServletRequest.getParameter("caminhoRetorno"); if (caminhoRetorno != null && !caminhoRetorno.equalsIgnoreCase("")){ sessao.setAttribute("caminhoRetornoManterMaterial", caminhoRetorno); } String idAtividade = httpServletRequest.getParameter("idAtividade"); String descricaoAtividade = httpServletRequest.getParameter("descricaoAtividade"); form.setNumeroOS(numeroOS); form.setIdAtividade(idAtividade); form.setDescricaoAtividade(descricaoAtividade); //Obtendo material j� cadastrado - PARTE NOVA Collection colecaoSessao = (Collection) sessao.getAttribute("colecaoManterDadosAtividadesOrdemServicoHelper"); this.informarOrdemServicoAtividadeJaCadastrada(colecaoSessao, Util.converterStringParaInteger(numeroOS), Util.converterStringParaInteger(idAtividade), sessao, fachada); //Material Programado Collection colecaoMaterial = fachada.obterMateriaisProgramados(Util.converterStringParaInteger(numeroOS)); if (colecaoMaterial != null && !colecaoMaterial.isEmpty()){ sessao.setAttribute("colecaoMaterialProgramado", colecaoMaterial); } //Inicializando o formul�rio form.setIdMaterialProgramado(""); form.setIdMaterialNaoProgramado(""); form.setDescricaoMaterialNaoProgramado(""); } //Pesquisar Material ENTER if ((form.getIdMaterialNaoProgramado() != null && !form.getIdMaterialNaoProgramado().equals("")) && (form.getDescricaoMaterialNaoProgramado() == null || form.getDescricaoMaterialNaoProgramado().equals(""))){ FiltroMaterial filtroMaterial = new FiltroMaterial(); filtroMaterial.adicionarParametro(new ParametroSimples(FiltroMaterial.ID, form.getIdMaterialNaoProgramado())); filtroMaterial.adicionarParametro(new ParametroSimples(FiltroMaterial.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO)); Collection colecaoMaterial = fachada.pesquisar(filtroMaterial, Material.class.getName()); if (colecaoMaterial == null || colecaoMaterial.isEmpty()) { form.setIdMaterialNaoProgramado(""); form.setDescricaoMaterialNaoProgramado("MATERIAL INEXISTENTE"); httpServletRequest.setAttribute("corMaterial", "exception"); httpServletRequest.setAttribute("nomeCampo", "idMaterialNaoProgramado"); } else { Material material = (Material) Util .retonarObjetoDeColecao(colecaoMaterial); form.setIdMaterialNaoProgramado(material.getId().toString()); form.setDescricaoMaterialNaoProgramado(material.getDescricao()); httpServletRequest.setAttribute("nomeCampo", "botaoAdicionar"); } } //Pesquisar Material POPUP String pesquisarMaterial = httpServletRequest.getParameter("pesquisarMaterial"); if (pesquisarMaterial != null && !pesquisarMaterial.equalsIgnoreCase("")){ retorno = actionMapping.findForward("pesquisarMaterial"); } //Recebendo dados Material POPUP if (httpServletRequest.getParameter("idCampoEnviarDados") != null){ form.setIdMaterialNaoProgramado(httpServletRequest.getParameter("idCampoEnviarDados")); form.setDescricaoMaterialNaoProgramado(httpServletRequest.getParameter("descricaoCampoEnviarDados")); httpServletRequest.setAttribute("nomeCampo", "botaoAdicionar"); } //Adicionar String adicionarMaterial = httpServletRequest.getParameter("adicionarMaterial"); if (adicionarMaterial != null && !adicionarMaterial.equalsIgnoreCase("")){ //Verificando as informa��es colhidas //=================================================================================== Integer idMaterial = null; if (form.getIdMaterialProgramado() != null && !form.getIdMaterialProgramado().equalsIgnoreCase("")){ idMaterial = Util.converterStringParaInteger(form.getIdMaterialProgramado()); } else{ idMaterial = Util.converterStringParaInteger(form.getIdMaterialNaoProgramado()); } //=================================================================================== //Informando OS_ATIVIDADE_MATERIAL_EXECUCAO if (sessao.getAttribute("colecaoManterDadosAtividadesOrdemServicoHelper") != null){ Collection colecaoManterDadosAtividadesOrdemServicoHelper = (Collection) sessao.getAttribute("colecaoManterDadosAtividadesOrdemServicoHelper"); this.informarOrdemServicoAtividade(colecaoManterDadosAtividadesOrdemServicoHelper, Util.converterStringParaInteger(form.getNumeroOS()), Util.converterStringParaInteger(form.getIdAtividade()), idMaterial, sessao, fachada); } else{ this.informarOrdemServicoAtividade(null, Util.converterStringParaInteger(form.getNumeroOS()), Util.converterStringParaInteger(form.getIdAtividade()), idMaterial, sessao, fachada); } //Inicializando o formul�rio form.setIdMaterialProgramado(""); form.setIdMaterialNaoProgramado(""); form.setDescricaoMaterialNaoProgramado(""); httpServletRequest.setAttribute("nomeCampo", "idMaterialProgramado"); } //Remover String removerMaterial = httpServletRequest.getParameter("removerMaterial"); if (removerMaterial != null && !removerMaterial.equalsIgnoreCase("")){ Integer identificadorMaterial = Util.converterStringParaInteger(removerMaterial); Collection colecaoSessao = (Collection) sessao.getAttribute("colecaoManterDadosAtividadesOrdemServicoHelper"); this.removerMaterial(identificadorMaterial, Util.converterStringParaInteger(form.getIdAtividade()), colecaoSessao); //Inicializando o formul�rio form.setIdMaterialProgramado(""); form.setIdMaterialNaoProgramado(""); form.setDescricaoMaterialNaoProgramado(""); httpServletRequest.setAttribute("nomeCampo", "idMaterialProgramado"); } //Atualizar Quantidade String atualizarQuantidade = httpServletRequest.getParameter("atualizarQuantidade"); if (atualizarQuantidade != null && !atualizarQuantidade.equalsIgnoreCase("")){ if (sessao.getAttribute("caminhoRetornoManterMaterial") != null){ httpServletRequest.setAttribute("voltar", "OK"); } else{ httpServletRequest.setAttribute("inserir", "OK"); } } //Atualizar Quantidade if (sessao.getAttribute("colecaoManterDadosAtividadesOrdemServicoHelper") != null){ Collection colecaoSessao = (Collection) sessao.getAttribute("colecaoManterDadosAtividadesOrdemServicoHelper"); Map<String, String[]> requestMap = httpServletRequest.getParameterMap(); this.atualizarQuantidadeMaterial(colecaoSessao, Util.converterStringParaInteger(form.getIdAtividade()), requestMap); } //Objetos utilizados apenas para facilitar a quebra na exibi��o httpServletRequest.setAttribute("numeroOS", form.getNumeroOS()); httpServletRequest.setAttribute("idAtividade", form.getIdAtividade()); return retorno; } private void informarOrdemServicoAtividadeJaCadastrada(Collection colecaoSessao, Integer numeroOS, Integer idAtividade, HttpSession sessao, Fachada fachada){ ManterDadosAtividadesOrdemServicoHelper manterDadosAtividadesOrdemServicoHelper = null; if (colecaoSessao != null && !colecaoSessao.isEmpty()){ boolean ordemServicoAtividadeInformada = false; Iterator iteratorColecaoSessao = colecaoSessao.iterator(); while(iteratorColecaoSessao.hasNext()){ manterDadosAtividadesOrdemServicoHelper = (ManterDadosAtividadesOrdemServicoHelper) iteratorColecaoSessao.next(); /* * Verifica se j� existe na cole��o uma OrdemServicoAtividade com o mesmo n�mero de OS e * mesma atividade informada */ if (manterDadosAtividadesOrdemServicoHelper.getOrdemServicoAtividade().getOrdemServico().getId() .equals(numeroOS) && manterDadosAtividadesOrdemServicoHelper.getOrdemServicoAtividade() .getAtividade().getId().equals(idAtividade)){ //Informando OsAtividadeMaterialExecucao Collection colecaoOsAtividadeMaterialExecucao = null; if (manterDadosAtividadesOrdemServicoHelper .getOrdemServicoAtividade().getId() != null){ colecaoOsAtividadeMaterialExecucao = fachada.pesquisarOsAtividadeMaterialExecucao( manterDadosAtividadesOrdemServicoHelper.getOrdemServicoAtividade().getId()); } if (colecaoOsAtividadeMaterialExecucao != null && !colecaoOsAtividadeMaterialExecucao.isEmpty()){ manterDadosAtividadesOrdemServicoHelper.setColecaoOsAtividadeMaterialExecucao( colecaoOsAtividadeMaterialExecucao); } ordemServicoAtividadeInformada = true; break; } } /* * Caso j� exista OrdemServicoAtividade informada, por�m ainda n�o foi cadastrada nenhuma com o mesmo * n�mero de OS e atividade informados */ if (!ordemServicoAtividadeInformada){ //1� Passo - Gerando o objeto manterDadosAtividadesOrdemServicoHelper = this.gerarOrdemServicoAtividadeJaCadastrada(numeroOS, idAtividade, fachada); //2� Passo - Adicionando o objeto na cole��o que foi recebida (J� foi criada e colocada na sess�o) colecaoSessao.add(manterDadosAtividadesOrdemServicoHelper); } } else{ //Primeira OrdemServicoAtividade informada //1� Passo - Gerando o objeto manterDadosAtividadesOrdemServicoHelper = this.gerarOrdemServicoAtividadeJaCadastrada(numeroOS, idAtividade, fachada); if (manterDadosAtividadesOrdemServicoHelper != null){ //2� Passo - Adicionando o objeto em uma cole��o vazia Collection colecaoManterDadosAtividadesOrdemServicoHelper = new ArrayList(); colecaoManterDadosAtividadesOrdemServicoHelper.add(manterDadosAtividadesOrdemServicoHelper); //3� Passo - Colocando a cole��o gerada na sess�o sessao.setAttribute("colecaoManterDadosAtividadesOrdemServicoHelper", colecaoManterDadosAtividadesOrdemServicoHelper); } } } private ManterDadosAtividadesOrdemServicoHelper gerarOrdemServicoAtividadeJaCadastrada(Integer numeroOS, Integer idAtividade, Fachada fachada){ ManterDadosAtividadesOrdemServicoHelper manterDadosAtividadesOrdemServicoHelper = null; OrdemServicoAtividade ordemServicoAtividade = fachada.pesquisarOrdemServicoAtividade(numeroOS, idAtividade); if (ordemServicoAtividade != null){ manterDadosAtividadesOrdemServicoHelper = new ManterDadosAtividadesOrdemServicoHelper(); manterDadosAtividadesOrdemServicoHelper.setOrdemServicoAtividade(ordemServicoAtividade); //Informando OsAtividadeMaterialExecucao Collection colecaoOsAtividadeMaterialExecucao = fachada.pesquisarOsAtividadeMaterialExecucao( ordemServicoAtividade.getId()); if (colecaoOsAtividadeMaterialExecucao != null && !colecaoOsAtividadeMaterialExecucao.isEmpty()){ manterDadosAtividadesOrdemServicoHelper.setColecaoOsAtividadeMaterialExecucao( colecaoOsAtividadeMaterialExecucao); } } return manterDadosAtividadesOrdemServicoHelper; } //=============================================================================================================== private void informarOrdemServicoAtividade(Collection colecaoSessao, Integer numeroOS, Integer idAtividade, Integer idMaterial ,HttpSession sessao, Fachada fachada){ ManterDadosAtividadesOrdemServicoHelper manterDadosAtividadesOrdemServicoHelper = null; if (colecaoSessao != null && !colecaoSessao.isEmpty()){ boolean ordemServicoAtividadeInformada = false; Iterator iteratorColecaoSessao = colecaoSessao.iterator(); while(iteratorColecaoSessao.hasNext()){ manterDadosAtividadesOrdemServicoHelper = (ManterDadosAtividadesOrdemServicoHelper) iteratorColecaoSessao.next(); /* * Verifica se j� existe na cole��o uma OrdemServicoAtividade com o mesmo n�mero de OS e * mesma atividade informada */ if (manterDadosAtividadesOrdemServicoHelper.getOrdemServicoAtividade().getOrdemServico().getId() .equals(numeroOS) && manterDadosAtividadesOrdemServicoHelper.getOrdemServicoAtividade() .getAtividade().getId().equals(idAtividade)){ //Informando OsAtividadePeriodoExecucao Collection colecaoOsAtividadeMaterialExecucao = this.informarOsAtividadeMaterialExecucao( manterDadosAtividadesOrdemServicoHelper.getColecaoOsAtividadeMaterialExecucao(), numeroOS, idMaterial, fachada); manterDadosAtividadesOrdemServicoHelper.setColecaoOsAtividadeMaterialExecucao( colecaoOsAtividadeMaterialExecucao); ordemServicoAtividadeInformada = true; break; } } /* * Caso j� exista OrdemServicoAtividade informada, por�m ainda n�o foi cadastrada nenhuma com o mesmo * n�mero de OS e atividade informados */ if (!ordemServicoAtividadeInformada){ //1� Passo - Gerando o objeto manterDadosAtividadesOrdemServicoHelper = this.gerarOrdemServicoAtividade(numeroOS, idAtividade, idMaterial, fachada); //2� Passo - Adicionando o objeto na cole��o que foi recebida (J� foi criada e colocada na sess�o) colecaoSessao.add(manterDadosAtividadesOrdemServicoHelper); } } else{ //Primeira OrdemServicoAtividade informada //1� Passo - Gerando o objeto manterDadosAtividadesOrdemServicoHelper = this.gerarOrdemServicoAtividade(numeroOS, idAtividade, idMaterial, fachada); //2� Passo - Adicionando o objeto em uma cole��o vazia Collection colecaoManterDadosAtividadesOrdemServicoHelper = new ArrayList(); colecaoManterDadosAtividadesOrdemServicoHelper.add(manterDadosAtividadesOrdemServicoHelper); //3� Passo - Colocando a cole��o gerada na sess�o sessao.setAttribute("colecaoManterDadosAtividadesOrdemServicoHelper", colecaoManterDadosAtividadesOrdemServicoHelper); } } private ManterDadosAtividadesOrdemServicoHelper gerarOrdemServicoAtividade(Integer numeroOS, Integer idAtividade, Integer idMaterial, Fachada fachada){ ManterDadosAtividadesOrdemServicoHelper manterDadosAtividadesOrdemServicoHelper = new ManterDadosAtividadesOrdemServicoHelper(); OrdemServico ordemServico = new OrdemServico(); ordemServico.setId(numeroOS); Atividade atividade = new Atividade(); atividade.setId(idAtividade); OrdemServicoAtividade ordemServicoAtividade = new OrdemServicoAtividade(); ordemServicoAtividade.setAtividade(atividade); ordemServicoAtividade.setOrdemServico(ordemServico); manterDadosAtividadesOrdemServicoHelper.setOrdemServicoAtividade(ordemServicoAtividade); //Informando OsAtividadeMaterialExecucao Collection colecaoOsAtividadeMaterialExecucaoHelper = this.informarOsAtividadeMaterialExecucao( null, numeroOS, idMaterial, fachada); manterDadosAtividadesOrdemServicoHelper.setColecaoOsAtividadeMaterialExecucao( colecaoOsAtividadeMaterialExecucaoHelper); return manterDadosAtividadesOrdemServicoHelper; } //================================================================================================================ private Collection informarOsAtividadeMaterialExecucao(Collection colecaoOsAtividadeMaterialExecucao, Integer numeroOS, Integer idMaterial, Fachada fachada){ Collection colecaoRetorno = null; OsAtividadeMaterialExecucao osAtividadeMaterialExecucao = null; if (colecaoOsAtividadeMaterialExecucao != null && !colecaoOsAtividadeMaterialExecucao.isEmpty()){ Iterator iteratorColecaoOsAtividadeMaterialExecucao = colecaoOsAtividadeMaterialExecucao.iterator(); while(iteratorColecaoOsAtividadeMaterialExecucao.hasNext()){ osAtividadeMaterialExecucao = (OsAtividadeMaterialExecucao) iteratorColecaoOsAtividadeMaterialExecucao.next(); /* * Verifica se j� existe na cole��o uma OsAtividadeMaterialExecucao com o mesmo material * *[FS0012] - Verificar Material j� existente */ if (osAtividadeMaterialExecucao.getMaterial().getId().equals(idMaterial)){ throw new ActionServletException( "atencao.material_ja_informado"); } } /* * Caso j� exista OsAtividadeMaterialExecucao informada, por�m ainda n�o foi cadastrada nenhuma * com o mesmo material */ //1� Passo - Gerando o objeto osAtividadeMaterialExecucao = this.gerarOsAtividadeMaterialExecucao(numeroOS, idMaterial, fachada); //2� Passo - Adicionando o objeto na cole��o que foi recebida (J� foi criada e colocada na sess�o) colecaoOsAtividadeMaterialExecucao.add(osAtividadeMaterialExecucao); return colecaoOsAtividadeMaterialExecucao; } else{ //Primeira OsAtividadeMaterialExecucao informada //1� Passo - Gerando o objeto osAtividadeMaterialExecucao = this.gerarOsAtividadeMaterialExecucao(numeroOS, idMaterial, fachada); //2� Passo - Adicionando o objeto em uma cole��o vazia colecaoRetorno = new ArrayList(); colecaoRetorno.add(osAtividadeMaterialExecucao); return colecaoRetorno; } } private OsAtividadeMaterialExecucao gerarOsAtividadeMaterialExecucao(Integer numeroOS, Integer idMaterial, Fachada fachada){ OsAtividadeMaterialExecucao osAtividadeMaterialExecucao = new OsAtividadeMaterialExecucao(); FiltroMaterial filtroMaterial = new FiltroMaterial(); filtroMaterial.adicionarParametro(new ParametroSimples(FiltroMaterial.ID, idMaterial)); Collection colecaoMaterial = fachada.pesquisar(filtroMaterial, Material.class.getName()); //[FS0011] - Verificar Exist�ncia do Material if (colecaoMaterial == null || colecaoMaterial.isEmpty()){ throw new ActionServletException( "atencao.pesquisa_inexistente", null, "Material"); } Material material = (Material) Util.retonarObjetoDeColecao(colecaoMaterial); osAtividadeMaterialExecucao.setMaterial(material); //Obter quantidade padr�o de acordo com o material e a OS BigDecimal qtdMaterial = fachada.obterQuantidadePadraoMaterial(numeroOS, idMaterial); if (qtdMaterial != null){ osAtividadeMaterialExecucao.setQuantidadeMaterial(qtdMaterial); } return osAtividadeMaterialExecucao; } //================================================================================================================= private void removerMaterial(Integer identificacaoMaterial, Integer idAtividade,Collection colecaoSessao){ Iterator iteratorColecaoSessao = colecaoSessao.iterator(); ManterDadosAtividadesOrdemServicoHelper manterDadosAtividadesOrdemServicoHelper = null; OsAtividadeMaterialExecucao osAtividadeMaterialExecucao = null; //Atividade while (iteratorColecaoSessao.hasNext()){ manterDadosAtividadesOrdemServicoHelper = (ManterDadosAtividadesOrdemServicoHelper) iteratorColecaoSessao.next(); if (manterDadosAtividadesOrdemServicoHelper.getOrdemServicoAtividade().getAtividade().getId() .equals(idAtividade)){ //Material Collection colecaoOSAtividadeMaterialExecucao = manterDadosAtividadesOrdemServicoHelper.getColecaoOsAtividadeMaterialExecucao(); Iterator iteratorColecaoOSAtividadeMaterialExecucao = colecaoOSAtividadeMaterialExecucao.iterator(); while (iteratorColecaoOSAtividadeMaterialExecucao.hasNext()){ osAtividadeMaterialExecucao = (OsAtividadeMaterialExecucao) iteratorColecaoOSAtividadeMaterialExecucao.next(); if (osAtividadeMaterialExecucao.getMaterial().getId().equals(identificacaoMaterial)){ colecaoOSAtividadeMaterialExecucao.remove(osAtividadeMaterialExecucao); break; } } } } } //================================================================================================================= private void atualizarQuantidadeMaterial(Collection colecaoSessao, Integer idAtividade, Map<String, String[]> requestMap){ Iterator iteratorColecaoSessao = colecaoSessao.iterator(); ManterDadosAtividadesOrdemServicoHelper helper = null; String quantidade = null; BigDecimal quantidadeAtualizada = new BigDecimal ("0.00"); while (iteratorColecaoSessao.hasNext()) { helper = (ManterDadosAtividadesOrdemServicoHelper) iteratorColecaoSessao.next(); if (helper.getOrdemServicoAtividade().getAtividade().getId().equals(idAtividade)){ Collection colecaoOsAtividadeMaterialExecucao = helper.getColecaoOsAtividadeMaterialExecucao(); if (colecaoOsAtividadeMaterialExecucao != null && !colecaoOsAtividadeMaterialExecucao.isEmpty()){ Iterator iteratorColecaoOsAtividadeMaterialExecucao = colecaoOsAtividadeMaterialExecucao.iterator(); OsAtividadeMaterialExecucao osAtividadeMaterialExecucao = null; while (iteratorColecaoOsAtividadeMaterialExecucao.hasNext()){ osAtividadeMaterialExecucao = (OsAtividadeMaterialExecucao) iteratorColecaoOsAtividadeMaterialExecucao.next(); if (requestMap.get("material" + osAtividadeMaterialExecucao.getMaterial().getId()) != null) { quantidade = (requestMap.get("material" + + osAtividadeMaterialExecucao.getMaterial().getId()))[0]; quantidadeAtualizada = Util.formatarMoedaRealparaBigDecimal(quantidade); osAtividadeMaterialExecucao.setQuantidadeMaterial(quantidadeAtualizada); } } } } } } }