diff --git a/siga-ex/src/main/java/br/gov/jfrj/siga/ex/bl/Mesa2Ant.java b/siga-ex/src/main/java/br/gov/jfrj/siga/ex/bl/Mesa2Ant.java index 8127ccbac8..96072ba135 100644 --- a/siga-ex/src/main/java/br/gov/jfrj/siga/ex/bl/Mesa2Ant.java +++ b/siga-ex/src/main/java/br/gov/jfrj/siga/ex/bl/Mesa2Ant.java @@ -462,7 +462,7 @@ && temMarcador(hashMobGrp, idMob, Integer.valueOf(CpMarcadorGrupoEnum.CAIXA_DE_E if ( iMobs + 1000 < iMobsFim ) iMobsFim = iMobs + 1000; List refs = dao.listarMovimentacoesMesa( - listIdMobil.subList(iMobs, iMobsFim), trazerComposto); + listIdMobil.subList(iMobs, iMobsFim), titular, lotaTitular, trazerComposto); for (Object[] ref : refs) { incluiMovimentacoesMesa(map, ref); diff --git a/siga-ex/src/main/java/br/gov/jfrj/siga/ex/logic/ExPodeBuscarUltimaMovimentacaoPorId.java b/siga-ex/src/main/java/br/gov/jfrj/siga/ex/logic/ExPodeBuscarUltimaMovimentacaoPorId.java new file mode 100644 index 0000000000..d88f8db884 --- /dev/null +++ b/siga-ex/src/main/java/br/gov/jfrj/siga/ex/logic/ExPodeBuscarUltimaMovimentacaoPorId.java @@ -0,0 +1,32 @@ +package br.gov.jfrj.siga.ex.logic; + +import com.crivano.jlogic.And; +import com.crivano.jlogic.CompositeExpressionSupport; +import com.crivano.jlogic.Expression; + +import br.gov.jfrj.siga.dp.DpLotacao; +import br.gov.jfrj.siga.dp.DpPessoa; +import br.gov.jfrj.siga.ex.model.enm.ExTipoDeConfiguracao; + +public class ExPodeBuscarUltimaMovimentacaoPorId extends CompositeExpressionSupport { + + private final DpPessoa titular; + private final DpLotacao lotaTitular; + + public ExPodeBuscarUltimaMovimentacaoPorId(DpPessoa titular, DpLotacao lotaTitular) { + this.titular = titular; + this.lotaTitular = lotaTitular; + } + + @Override + protected Expression create() { + + return And.of( + + new ExPodePorConfiguracao(titular, lotaTitular) + .withIdTpConf(ExTipoDeConfiguracao.BUSCAR_ULTIMA_MOV_POR_ID) + + ); + } + +} \ No newline at end of file diff --git a/siga-ex/src/main/java/br/gov/jfrj/siga/ex/model/enm/ExTipoDeConfiguracao.java b/siga-ex/src/main/java/br/gov/jfrj/siga/ex/model/enm/ExTipoDeConfiguracao.java index 68b90dc207..bfc88f5d27 100644 --- a/siga-ex/src/main/java/br/gov/jfrj/siga/ex/model/enm/ExTipoDeConfiguracao.java +++ b/siga-ex/src/main/java/br/gov/jfrj/siga/ex/model/enm/ExTipoDeConfiguracao.java @@ -623,7 +623,14 @@ public enum ExTipoDeConfiguracao implements ITipoDeConfiguracao { new Enum[] { CpParamCfg.ORGAO, CpParamCfg.LOTACAO, CpParamCfg.PESSOA }, new Enum[] { CpParamCfg.SITUACAO }, new CpSituacaoDeConfiguracaoEnum[] { CpSituacaoDeConfiguracaoEnum.PODE, CpSituacaoDeConfiguracaoEnum.NAO_PODE }, - CpSituacaoDeConfiguracaoEnum.NAO_PODE, true); + CpSituacaoDeConfiguracaoEnum.NAO_PODE, true), + + + BUSCAR_ULTIMA_MOV_POR_ID(67, "Buscar Última Movimentação do Documento por ID e não por Timestamp", "Esta configuração tem o objetivo de mudar a forma como a mesa busca a última movimentação de um documento.", + new Enum[] { CpParamCfg.ORGAO, CpParamCfg.LOTACAO, CpParamCfg.PESSOA }, + new Enum[] { CpParamCfg.SITUACAO }, + new CpSituacaoDeConfiguracaoEnum[] { CpSituacaoDeConfiguracaoEnum.PODE, CpSituacaoDeConfiguracaoEnum.NAO_PODE }, + CpSituacaoDeConfiguracaoEnum.PODE, true); private final int id; diff --git a/siga-ex/src/main/java/br/gov/jfrj/siga/hibernate/ExDao.java b/siga-ex/src/main/java/br/gov/jfrj/siga/hibernate/ExDao.java index 154be5e985..740e0bc80f 100644 --- a/siga-ex/src/main/java/br/gov/jfrj/siga/hibernate/ExDao.java +++ b/siga-ex/src/main/java/br/gov/jfrj/siga/hibernate/ExDao.java @@ -95,8 +95,11 @@ import br.gov.jfrj.siga.ex.ExTpDocPublicacao; import br.gov.jfrj.siga.ex.ExVia; import br.gov.jfrj.siga.ex.BIE.ExBoletimDoc; +import br.gov.jfrj.siga.ex.bl.Ex; import br.gov.jfrj.siga.ex.bl.ExBL; import br.gov.jfrj.siga.ex.bl.Mesa2Ant; +import br.gov.jfrj.siga.ex.logic.ExPodeBuscarUltimaMovimentacaoPorId; +import br.gov.jfrj.siga.ex.logic.ExPodeEditarData; import br.gov.jfrj.siga.ex.logic.ExPodeOtimizarQuadroDeExpedientes; import br.gov.jfrj.siga.ex.model.enm.ExTipoDeMovimentacao; import br.gov.jfrj.siga.ex.util.MascaraUtil; @@ -2542,10 +2545,40 @@ public List listarMobilsPorGrupoEMarcas(boolean contar, Integer qtd, Integer off return l; } - public List listarMovimentacoesMesa(List listIdMobil, boolean trazerComposto) { + public List listarMovimentacoesMesa(List listIdMobil, DpPessoa titular, DpLotacao lotaTitular, boolean trazerComposto) { // long tempoIni = System.nanoTime(); List> l = new ArrayList> (); - Query query = em() + Query query = null; + boolean podeBuscarUltimaMovimentacaoPorId = Ex + .getInstance() + .getComp() + .pode(ExPodeBuscarUltimaMovimentacaoPorId.class,titular, lotaTitular); + + if (podeBuscarUltimaMovimentacaoPorId) { + query = em() + .createQuery( + "select " + + "mob, " + + (trazerComposto ? " frm.isComposto, " : "0, ") + + "(select movUltima from ExMovimentacao movUltima " + + " where movUltima.exMobil.idMobil = mob.idMobil and movUltima.idMov = (" + + " select max(movUltima1.idMov) from ExMovimentacao movUltima1" + + " where movUltima1.exMobil.idMobil = mob.idMobil " + + " and movUltima1.exMovimentacaoCanceladora.idMov = null ) ), " + + "(select movTramite from ExMovimentacao movTramite" + + " where movTramite.exMobil.idMobil = mob.idMobil and movTramite.idMov = (" + + " select max(movTramite1.idMov) from ExMovimentacao movTramite1" + + " where movTramite1.exTipoMovimentacao = :tpmov " + + " and movTramite1.exMobil.idMobil = mob.idMobil " + + " and movTramite1.exMovimentacaoCanceladora.idMov = null ) ), " + + "doc " + + "from ExMobil mob " + + "inner join mob.exDocumento doc " + + (trazerComposto ? "inner join doc.exFormaDocumento frm " : "") + + "where mob.idMobil in (:listIdMobil) " + ); + } else { + query = em() .createQuery( "select " + "mob, " @@ -2567,6 +2600,7 @@ public List listarMovimentacoesMesa(List listIdMobil, boolean trazerCompos + (trazerComposto ? "inner join doc.exFormaDocumento frm " : "") + "where mob.idMobil in (:listIdMobil) " ); + } query.setParameter("tpmov", ExTipoDeMovimentacao.TRANSFERENCIA); if (listIdMobil != null) { query.setParameter("listIdMobil", listIdMobil);