package gcom.gui.cobranca; import gcom.cadastro.localidade.FiltroLocalidade; import gcom.cadastro.localidade.Localidade; import gcom.cobranca.CicloMeta; import gcom.cobranca.CicloMetaGrupo; import gcom.cobranca.CobrancaAcao; import gcom.cobranca.CobrancaGrupo; import gcom.cobranca.CriterioSituacaoLigacaoAgua; import gcom.cobranca.FiltroCicloMetaGrupo; import gcom.cobranca.FiltroCobrancaAcao; import gcom.cobranca.FiltroCriterioSituacaoLigacaoAgua; import gcom.cobranca.GrupoLocalidadeImovelHelper; import gcom.cobranca.InformarCicloMetaGrupoHelper; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.TreeMap; 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; /** * [UC00] Informar metas do ciclo * * @author Francisco do Nascimento * */ public class InformarCicloMetaGrupoContinuarAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse httpServletResponse) { ActionForward retorno = actionMapping .findForward("informarCicloMetaGrupo"); CicloMetaGrupoActionForm cicloMetaForm = (CicloMetaGrupoActionForm) actionForm; Fachada fachada = Fachada.getInstancia(); // Mudar isso quando tiver esquema de seguran�a HttpSession sessao = request.getSession(false); if (!((sessao.getAttribute("cicloMeta"))==null)) { sessao.removeAttribute("idCicloMeta"); sessao.removeAttribute("cicloMeta"); sessao.removeAttribute("helpers"); } CicloMeta cicloMeta = (CicloMeta) sessao.getAttribute("cicloMeta"); if (cicloMeta == null) { cicloMeta = new CicloMeta(); if (cicloMetaForm.getIdCobrancaAcao() != null){ FiltroCobrancaAcao filtroCobrancaAcao = new FiltroCobrancaAcao(); filtroCobrancaAcao.adicionarParametro(new ParametroSimples(FiltroCobrancaAcao.ID, cicloMetaForm.getIdCobrancaAcao())); filtroCobrancaAcao.adicionarCaminhoParaCarregamentoEntidade(FiltroCobrancaAcao.COBRANCAO_CRITERIO); filtroCobrancaAcao.adicionarCaminhoParaCarregamentoEntidade(FiltroCobrancaAcao.LIGACAO_AGUA_SITUACAO); Collection colecaoCobrancaAcao = fachada.pesquisar( filtroCobrancaAcao, CobrancaAcao.class.getName()); CobrancaAcao cobrancaAcao = (CobrancaAcao) Util.retonarObjetoDeColecao( colecaoCobrancaAcao); cicloMeta.setCobrancaAcao(cobrancaAcao); } cicloMeta.setAnoMesReferencia(Util.formatarMesAnoComBarraParaAnoMes(cicloMetaForm.getAnoMesCobranca())); cicloMeta.setMetaTotal(Integer.parseInt(cicloMetaForm.getMetaTotal())); if (cicloMetaForm.getValorLimite() != null && !cicloMetaForm.getValorLimite().trim().equals("")){ cicloMetaForm.setValorLimite(cicloMetaForm.getValorLimite().replace(".","").replace(",",".")); cicloMeta.setValorLimite(new BigDecimal (cicloMetaForm.getValorLimite())); } sessao.setAttribute("cicloMeta", cicloMeta); } else { cicloMeta.setMetaTotal(Integer.parseInt(cicloMetaForm.getMetaTotal())); cicloMetaForm.setValorLimite(cicloMetaForm.getValorLimite().replace(".","").replace(",",".")); cicloMeta.setValorLimite(new BigDecimal(cicloMetaForm.getValorLimite())); } if (cicloMetaForm.getIdCicloMeta() != null && !cicloMetaForm.getIdCicloMeta().equals("") && !cicloMetaForm.getIdCicloMeta().equals("-1")){ cicloMeta.setId(new Integer(cicloMetaForm.getIdCicloMeta())); } if (request.getParameter("regerarMetas") != null && !request.getParameter("regerarMetas").equals("")){ if (cicloMetaForm.getIdCicloMeta() != null && !cicloMetaForm.getIdCicloMeta().equals("") && !cicloMetaForm.getIdCicloMeta().equals("-1")){ sessao.setAttribute("metasRegeradas", true); } } //TreeMap<String, InformarCicloMetaGrupoHelper> helpers = fachada.distribuirMetasCiclo(cicloMeta); TreeMap<String, InformarCicloMetaGrupoHelper> helpers = this.distribuirMetasCiclo(cicloMeta); int metaTotalCalculada = 0; int metaTotalAjustada = 0; // percorrer os helpers de gerencia para calcular o valor total das metas for (Iterator iter = helpers.values().iterator(); iter.hasNext();) { InformarCicloMetaGrupoHelper helperGerencia = (InformarCicloMetaGrupoHelper) iter.next(); metaTotalCalculada +=helperGerencia.getMetaOriginal(); metaTotalAjustada += helperGerencia.getMetaAtual(); } request.setAttribute("metaTotalCalculada", new Integer(metaTotalCalculada)); request.setAttribute("metaTotalAjustada", new Integer(metaTotalAjustada)); if (cicloMeta.getValorLimite() != null){ request.setAttribute("valorLimiteEmissao", cicloMeta.getValorLimite()); }else{ request.setAttribute("valorLimiteEmissao", 0); } sessao.setAttribute("helpers", helpers.values()); return retorno; } public TreeMap<String, InformarCicloMetaGrupoHelper> distribuirMetasCiclo(CicloMeta cicloMeta){ // Distribuir as metas de grupo/localidade por gerencia/cas/localidade TreeMap<String, InformarCicloMetaGrupoHelper> helpersGerencia = new TreeMap<String, InformarCicloMetaGrupoHelper>(); Fachada fachada = Fachada.getInstancia(); Collection colecaoCicloMetaGrupo = new ArrayList(); if (cicloMeta.getId() != null && cicloMeta.getId().intValue() != -1){ cicloMeta.setUltimaAlteracao(new Date()); FiltroCicloMetaGrupo filtroCicloGrupo = new FiltroCicloMetaGrupo(); filtroCicloGrupo.adicionarParametro(new ParametroSimples(FiltroCicloMetaGrupo.CICLO_META, cicloMeta.getId())); colecaoCicloMetaGrupo = fachada.pesquisar( filtroCicloGrupo, CicloMetaGrupo.class.getName()); if (colecaoCicloMetaGrupo != null && !colecaoCicloMetaGrupo.isEmpty()){ fachada.removerCicloMetaGrupo(cicloMeta.getId()); colecaoCicloMetaGrupo.clear(); } } Collection<GrupoLocalidadeImovelHelper> colecaoQuantidadeHelper = new ArrayList<GrupoLocalidadeImovelHelper>(); int quantidadeTotalImoveis = 0; // [3.1.2] Pesquisar as situa��es de liga��o de agua permitidas para a a��o if (cicloMeta.getCobrancaAcao() != null && cicloMeta.getCobrancaAcao().getCobrancaCriterio() != null){ Collection<Integer> colecaoIdsSituacaoLigacaoAgua = new ArrayList<Integer>(); // pesquisar a colecao de criterios para situacao ligacao agua, esgoto e cobranca FiltroCriterioSituacaoLigacaoAgua filtroCritSitAgua = new FiltroCriterioSituacaoLigacaoAgua(); filtroCritSitAgua.adicionarParametro(new ParametroSimples( FiltroCriterioSituacaoLigacaoAgua.COBRANCA_CRITERIO_ID, cicloMeta.getCobrancaAcao().getCobrancaCriterio().getId())); filtroCritSitAgua.adicionarCaminhoParaCarregamentoEntidade(FiltroCriterioSituacaoLigacaoAgua.LIGACAO_AGUA_SITUACAO); Collection colecaoCritSituacaoLigacaoAgua = fachada.pesquisar(filtroCritSitAgua, CriterioSituacaoLigacaoAgua.class.getName()); if (colecaoCritSituacaoLigacaoAgua == null || colecaoCritSituacaoLigacaoAgua.isEmpty()){ if (cicloMeta.getCobrancaAcao().getLigacaoAguaSituacao() == null){ throw new ActionServletException("atencao.cobranca_acao_sem_situacao_acao", null, ""); } colecaoIdsSituacaoLigacaoAgua.add(cicloMeta.getCobrancaAcao().getLigacaoAguaSituacao().getId()); } else { for (Iterator iter = colecaoCritSituacaoLigacaoAgua.iterator(); iter .hasNext();) { CriterioSituacaoLigacaoAgua clas = (CriterioSituacaoLigacaoAgua) iter.next(); colecaoIdsSituacaoLigacaoAgua.add(clas.getComp_id().getLigacaoAguaSituacao().getId()); } } Collection colecaoQuantidadeImoveis = null; colecaoQuantidadeImoveis = fachada.pesquisarQuantidadeImoveisPorGrupoLocalidade( colecaoIdsSituacaoLigacaoAgua); if (colecaoQuantidadeImoveis != null){ Iterator iter = colecaoQuantidadeImoveis.iterator(); while (iter.hasNext()) { Object[] linha = (Object[]) iter.next(); GrupoLocalidadeImovelHelper helper = new GrupoLocalidadeImovelHelper(); helper.setIdGrupo((Integer) linha[0]); helper.setIdLocalidade((Integer) linha[1]); helper.setQuantidadeImoveis((Integer) linha[2]); quantidadeTotalImoveis += helper.getQuantidadeImoveis(); colecaoQuantidadeHelper.add(helper); } } // antes do (double) veio 0.0 double fator = ((double) cicloMeta.getMetaTotal()) / quantidadeTotalImoveis; int metaAcumulada = 0; boolean estouro = false; CicloMetaGrupo itemMaior = null; int indice = 0; // Gerando as metas proporcionais for (Iterator iter = colecaoQuantidadeHelper.iterator(); iter.hasNext();) { indice++; GrupoLocalidadeImovelHelper helper = (GrupoLocalidadeImovelHelper) iter.next(); CicloMetaGrupo cicloMetaGrupo = new CicloMetaGrupo(); cicloMetaGrupo.setCicloMeta(cicloMeta); CobrancaGrupo cobGrupo = new CobrancaGrupo(); cobGrupo.setId(helper.getIdGrupo()); cicloMetaGrupo.setCobrancaGrupo(cobGrupo); Localidade localidade = new Localidade(); localidade.setId(helper.getIdLocalidade()); cicloMetaGrupo.setLocalidade(localidade); cicloMetaGrupo.setQuantidadeImoveisSituacaoAgua( helper.getQuantidadeImoveis()); int metaCalculada = 0; if (!estouro){ BigDecimal calculoMeta = new BigDecimal(fator).multiply( new BigDecimal(helper.getQuantidadeImoveis())); calculoMeta = calculoMeta.setScale(0, BigDecimal.ROUND_HALF_EVEN); metaCalculada = calculoMeta.intValue(); if (itemMaior == null || itemMaior.getMetaCalculada() < metaCalculada){ itemMaior = cicloMetaGrupo; } metaAcumulada += metaCalculada; } cicloMetaGrupo.setMetaCalculada(metaCalculada); cicloMetaGrupo.setMetaAjustada(metaCalculada); if (metaCalculada < 0){ cicloMetaGrupo.setMetaCalculada(0); cicloMetaGrupo.setMetaAjustada(0); } //chegou ao fim if (indice == colecaoQuantidadeHelper.size()){ // Alterando o item com maior meta para ficar exatamente o valor da meta total if (metaAcumulada > cicloMeta.getMetaTotal()){ itemMaior.setMetaCalculada(itemMaior.getMetaCalculada() - (metaAcumulada - cicloMeta.getMetaTotal())); if (itemMaior.getMetaCalculada() < 0){ itemMaior.setMetaCalculada(0); } itemMaior.setMetaAjustada(itemMaior.getMetaAjustada() - (metaAcumulada - cicloMeta.getMetaTotal())); if (itemMaior.getMetaAjustada() < 0){ itemMaior.setMetaAjustada(0); } cicloMetaGrupo = itemMaior; colecaoCicloMetaGrupo.remove(cicloMetaGrupo); }else if (cicloMeta.getMetaTotal() > metaAcumulada){ itemMaior.setMetaCalculada(itemMaior.getMetaCalculada() - (cicloMeta.getMetaTotal() - metaAcumulada)); if (itemMaior.getMetaCalculada() < 0){ itemMaior.setMetaCalculada(0); } itemMaior.setMetaAjustada(itemMaior.getMetaAjustada() - (cicloMeta.getMetaTotal() - metaAcumulada)); if (itemMaior.getMetaAjustada() < 0){ itemMaior.setMetaAjustada(0); } cicloMetaGrupo = itemMaior; colecaoCicloMetaGrupo.remove(cicloMetaGrupo); } } cicloMetaGrupo.setUltimaAlteracao(new Date()); colecaoCicloMetaGrupo.add(cicloMetaGrupo); } } helpersGerencia = agruparCicloMetaGrupo(colecaoCicloMetaGrupo); colecaoQuantidadeHelper.clear(); return helpersGerencia; } private TreeMap<String, InformarCicloMetaGrupoHelper> agruparCicloMetaGrupo(Collection colecaoCicloMetaGrupo){ TreeMap<String, InformarCicloMetaGrupoHelper> helpersGerencia = new TreeMap<String, InformarCicloMetaGrupoHelper>(); Fachada fachada = Fachada.getInstancia(); if (colecaoCicloMetaGrupo != null) { for (Iterator iter = colecaoCicloMetaGrupo.iterator(); iter.hasNext();) { CicloMetaGrupo cicloMetaGrupo = (CicloMetaGrupo) iter.next(); FiltroLocalidade filtroLocalidade = new FiltroLocalidade(); filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID, cicloMetaGrupo.getLocalidade().getId())); filtroLocalidade.adicionarCaminhoParaCarregamentoEntidade(FiltroLocalidade.GERENCIA); filtroLocalidade.adicionarCaminhoParaCarregamentoEntidade(FiltroLocalidade.UNIDADE_NEGOCIO); Collection colecaoLocalidade = fachada.pesquisar( filtroLocalidade, Localidade.class.getName()); Localidade localidade = (Localidade) Util.retonarObjetoDeColecao(colecaoLocalidade); Integer idGerencia = localidade.getGerenciaRegional().getId(); Integer idUnidadeNegocio = localidade.getUnidadeNegocio().getId(); InformarCicloMetaGrupoHelper helperGerenciaLoc = helpersGerencia.get(localidade.getGerenciaRegional().getNome()); if (helperGerenciaLoc == null){ helperGerenciaLoc = new InformarCicloMetaGrupoHelper(); helperGerenciaLoc.setTipoItem("G"); helperGerenciaLoc.setIdItem(idGerencia); helperGerenciaLoc.setNomeItem(localidade.getGerenciaRegional().getNome()); helperGerenciaLoc.setMetaOriginal(cicloMetaGrupo.getMetaCalculada()); helperGerenciaLoc.setMetaAtual(cicloMetaGrupo.getMetaAjustada()); helperGerenciaLoc.setQtdImoveisSituacao(cicloMetaGrupo.getQuantidadeImoveisSituacaoAgua()); /** Usado pelo analisar metas Ciclo **/ if(cicloMetaGrupo.getQuantidadeRealizada() == null){ helperGerenciaLoc.setQtdTotalRealizada(0); }else { helperGerenciaLoc.setQtdTotalRealizada(cicloMetaGrupo.getQuantidadeRealizada()); } if(cicloMetaGrupo.getQuantidadeDocumentosRestantes() == null){ helperGerenciaLoc.setQtdTotalRestante(0); }else { helperGerenciaLoc.setQtdTotalRestante(cicloMetaGrupo.getQuantidadeDocumentosRestantes()); } if(cicloMetaGrupo.getValorTotalDocumentosRestantes() == null){ helperGerenciaLoc.setValorTotalRestante(new BigDecimal(0)); }else { helperGerenciaLoc.setValorTotalRestante(cicloMetaGrupo.getValorTotalDocumentosRestantes()); } /** ------------------------------ **/ helpersGerencia.put(localidade.getGerenciaRegional().getNome(), helperGerenciaLoc); TreeMap<String, InformarCicloMetaGrupoHelper> helpersUneg = new TreeMap<String, InformarCicloMetaGrupoHelper>(); helperGerenciaLoc.setSubItens(helpersUneg); } else { helperGerenciaLoc.setMetaOriginal(helperGerenciaLoc.getMetaOriginal() + cicloMetaGrupo.getMetaCalculada()); helperGerenciaLoc.setMetaAtual(helperGerenciaLoc.getMetaAtual() + cicloMetaGrupo.getMetaAjustada()); helperGerenciaLoc.setQtdImoveisSituacao(helperGerenciaLoc.getQtdImoveisSituacao() + cicloMetaGrupo.getQuantidadeImoveisSituacaoAgua()); /** Usado pelo analisar metas Ciclo **/ if(cicloMetaGrupo.getQuantidadeRealizada() == null){ cicloMetaGrupo.setQuantidadeRealizada(0); } helperGerenciaLoc.setQtdTotalRealizada(helperGerenciaLoc.getQtdTotalRealizada() + cicloMetaGrupo.getQuantidadeRealizada()); if(cicloMetaGrupo.getQuantidadeDocumentosRestantes() == null){ cicloMetaGrupo.setQuantidadeDocumentosRestantes(0); } helperGerenciaLoc.setQtdTotalRestante(helperGerenciaLoc.getQtdTotalRestante() + cicloMetaGrupo.getQuantidadeDocumentosRestantes()); if(cicloMetaGrupo.getValorTotalDocumentosRestantes() == null){ cicloMetaGrupo.setValorTotalDocumentosRestantes(new BigDecimal(0)); } helperGerenciaLoc.setValorTotalRestante(helperGerenciaLoc.getValorTotalRestante(). add(cicloMetaGrupo.getValorTotalDocumentosRestantes())); /** ------------------------------ **/ } InformarCicloMetaGrupoHelper helperUnegLoc = helperGerenciaLoc.getSubItens().get(localidade.getUnidadeNegocio().getNome()); if (helperUnegLoc == null){ helperUnegLoc = new InformarCicloMetaGrupoHelper(); helperUnegLoc.setTipoItem("U"); helperUnegLoc.setIdItem(idUnidadeNegocio); helperUnegLoc.setNomeItem(localidade.getUnidadeNegocio().getNome()); helperUnegLoc.setMetaOriginal(cicloMetaGrupo.getMetaCalculada()); helperUnegLoc.setMetaAtual(cicloMetaGrupo.getMetaAjustada()); helperUnegLoc.setQtdImoveisSituacao(cicloMetaGrupo.getQuantidadeImoveisSituacaoAgua()); /** Usado pelo analisar metas Ciclo **/ helperUnegLoc.setQtdTotalRealizada(cicloMetaGrupo.getQuantidadeRealizada()); helperUnegLoc.setQtdTotalRestante(cicloMetaGrupo.getQuantidadeDocumentosRestantes()); helperUnegLoc.setValorTotalRestante(cicloMetaGrupo.getValorTotalDocumentosRestantes()); /** ------------------------------ **/ helperGerenciaLoc.getSubItens().put(localidade.getUnidadeNegocio().getNome(), helperUnegLoc); TreeMap<String, InformarCicloMetaGrupoHelper> helpersLoc = new TreeMap<String, InformarCicloMetaGrupoHelper>(); helperUnegLoc.setSubItens(helpersLoc); } else { helperUnegLoc.setMetaOriginal(helperUnegLoc.getMetaOriginal() + cicloMetaGrupo.getMetaCalculada()); helperUnegLoc.setMetaAtual(helperUnegLoc.getMetaAtual() + cicloMetaGrupo.getMetaAjustada()); helperUnegLoc.setQtdImoveisSituacao(helperUnegLoc.getQtdImoveisSituacao() + cicloMetaGrupo.getQuantidadeImoveisSituacaoAgua()); /** Usado pelo analisar metas Ciclo **/ helperUnegLoc.setQtdTotalRealizada(helperGerenciaLoc.getQtdTotalRealizada() + cicloMetaGrupo.getQuantidadeRealizada()); helperUnegLoc.setQtdTotalRestante(helperGerenciaLoc.getQtdTotalRestante() + cicloMetaGrupo.getQuantidadeDocumentosRestantes()); helperUnegLoc.setValorTotalRestante(helperGerenciaLoc.getValorTotalRestante(). add(cicloMetaGrupo.getValorTotalDocumentosRestantes())); /** ------------------------------ **/ } InformarCicloMetaGrupoHelper helperLoc = helperUnegLoc.getSubItens().get(localidade.getDescricao()); if (helperLoc == null){ helperLoc = new InformarCicloMetaGrupoHelper(); helperLoc.setTipoItem("L"); helperLoc.setIdItem(localidade.getId()); helperLoc.setNomeItem(localidade.getDescricao()); helperLoc.setMetaOriginal(cicloMetaGrupo.getMetaCalculada()); helperLoc.setMetaAtual(cicloMetaGrupo.getMetaAjustada()); helperLoc.setQtdImoveisSituacao(cicloMetaGrupo.getQuantidadeImoveisSituacaoAgua()); /** Usado pelo analisar metas Ciclo **/ helperLoc.setQtdTotalRealizada(cicloMetaGrupo.getQuantidadeRealizada()); helperLoc.setQtdTotalRestante(cicloMetaGrupo.getQuantidadeDocumentosRestantes()); helperLoc.setValorTotalRestante(cicloMetaGrupo.getValorTotalDocumentosRestantes()); /** ------------------------------ **/ helperUnegLoc.getSubItens().put(localidade.getDescricao(), helperLoc); } else { helperLoc.setMetaOriginal(helperLoc.getMetaOriginal() + cicloMetaGrupo.getMetaCalculada()); helperLoc.setMetaAtual(helperLoc.getMetaAtual() + cicloMetaGrupo.getMetaAjustada()); helperLoc.setQtdImoveisSituacao(helperLoc.getQtdImoveisSituacao() + cicloMetaGrupo.getQuantidadeImoveisSituacaoAgua()); /** Usado pelo analisar metas Ciclo **/ helperLoc.setQtdTotalRealizada(helperGerenciaLoc.getQtdTotalRealizada() + cicloMetaGrupo.getQuantidadeRealizada()); helperLoc.setQtdTotalRestante(helperGerenciaLoc.getQtdTotalRestante() + cicloMetaGrupo.getQuantidadeDocumentosRestantes()); helperLoc.setValorTotalRestante(helperGerenciaLoc.getValorTotalRestante(). add(cicloMetaGrupo.getValorTotalDocumentosRestantes())); /** ------------------------------ **/ } } } return helpersGerencia; } }