Commit 7ef43825f9b27f5fe22e6e3481ef79995caa95f0

Authored by rogerio.costa
1 parent 5de24bed
Exists in master

[2866]-Alterar a Grid de Processos (Listagem)

cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/UnidadeProcessoDaoHibernate.java
... ... @@ -3,18 +3,24 @@ package br.com.centralit.api.dao.impl;
3 3 import java.util.Collection;
4 4  
5 5 import org.hibernate.Criteria;
  6 +import org.hibernate.criterion.DetachedCriteria;
6 7 import org.hibernate.criterion.Projections;
7 8 import org.hibernate.criterion.Restrictions;
  9 +import org.hibernate.criterion.Subqueries;
  10 +import org.hibernate.sql.JoinType;
8 11 import org.springframework.stereotype.Repository;
9 12  
10 13 import br.com.centralit.api.dao.UnidadeProcessoDao;
  14 +import br.com.centralit.api.model.CredencialProcesso;
11 15 import br.com.centralit.api.model.Processo;
12 16 import br.com.centralit.api.model.SigiloPrivilegio;
13 17 import br.com.centralit.api.model.UnidadeProcesso;
14 18 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
15 19 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
  20 +import br.com.centralit.framework.model.GrupoPrivilegio;
16 21 import br.com.centralit.framework.model.Usuario;
17 22 import br.com.centralit.framework.util.UtilColecao;
  23 +import br.com.centralit.framework.util.UtilObjeto;
18 24  
19 25 import com.googlecode.genericdao.search.Filter;
20 26 import com.googlecode.genericdao.search.ISearch;
... ... @@ -178,6 +184,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
178 184  
179 185 /**
180 186 * Método responsável por listar processos através da unidade do usuário
  187 + *
181 188 * @author rogerio.cassimiro
182 189 * @param search
183 190 * @param usuario
... ... @@ -187,24 +194,103 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
187 194 @Override
188 195 public <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus) {
189 196  
  197 + //Filtro de permissões herdadas através de grupos
  198 + DetachedCriteria detachedCriteriaPrivilegio = findSigiloUsuarioContemPermissaoAtravesDosGrupos(usuario);
  199 +
  200 + // Filtro da credencial do processo
  201 + DetachedCriteria detachedCredencialProcesso = findProcessoSigilosoPorCredencial(usuario);
  202 +
  203 + // Filtro da unidade, para processos públicos e restritos.
190 204 search.getFilters().add(Filter.or(Filter.not(Filter.equal("processo.status.id", idStatus)), Filter.isEmpty("processo.status.id")));
191   -
192   - Criteria criteriaPrivilegio = this.newCriteria(SigiloPrivilegio.class);
193   - criteriaPrivilegio.setProjection(Projections.property("sigilo.id"));
194   - criteriaPrivilegio.createAlias("privilegio", "privilegio");
195   - criteriaPrivilegio.createAlias("privilegio.grupoPrivilegios", "grupoPrivilegio");
196   - criteriaPrivilegio.add(Restrictions.isNull("grupoPrivilegio.dataInativo"));
197   - criteriaPrivilegio.createCriteria("grupoPrivilegio.grupo").createAlias("grupoUsuarios", "grupoUsuario");
198   - criteriaPrivilegio.add(Restrictions.isNull("grupoUsuario.dataInativo"));
199   - criteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", usuario.getId()));
200   -
201   - search.getFilters().add(Filter.equal("processo.autor.id", usuario.getId()));
  205 +
  206 + // Verifica se o usuario está lotado na unidade
  207 + if (UtilObjeto.isReferencia(usuario.getUnidade())) {
  208 +
  209 + search.getFilters().add(Filter.equal("unidade.id", usuario.getUnidade().getId()));
  210 + }
  211 +
  212 + Criteria criteriaProcessoSigiloso = this.newCriteria(Processo.class);
  213 +
  214 + criteriaProcessoSigiloso.setProjection(Projections.property("id"));
  215 +
  216 + criteriaProcessoSigiloso.add(Restrictions.or(Subqueries.propertyIn("sigilo.id", detachedCriteriaPrivilegio), Subqueries.propertyIn("id", detachedCredencialProcesso)));
  217 +
202 218 search.getFilters().add(Filter.isNotNull("processo.idProcessInstance"));
203   -// search.getFilters().add(Filter.or(
204   -// Filter.in("processo.autor.id", usuario.getId()),
205   -// Filter.in("unidade.id", usuario.getUnidade().getId()),
206   -// Filter.in("processo.sigilo.id", criteriaPrivilegio.list())));
207   -//
  219 +
  220 + search.getFilters().add(Filter.or(Filter.equal("processo.autor.id", usuario.getId()), Filter.isNull("processo.sigilo"), Filter.in("processo.id", criteriaProcessoSigiloso.list())));
  221 +
208 222 return super.searchAndCount(search);
209 223 }
  224 +
  225 + /**
  226 + * <p>
  227 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  228 + * </p>
  229 + *
  230 + * <p>
  231 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  232 + * </p>
  233 + *
  234 + * Método responsável por retornar os ids dos processo sigilosos que o usuário tem permissão, adicionado diretamente para o usuário e grupo que o mesmo está vinculado.
  235 + *
  236 + * @author rogerio.costa
  237 + *
  238 + * @param usuario
  239 + * @return DetachedCriteria/ Processo.id
  240 + */
  241 + private DetachedCriteria findProcessoSigilosoPorCredencial(Usuario usuario) {
  242 +
  243 + DetachedCriteria detachedCredencialProcesso = DetachedCriteria.forClass(CredencialProcesso.class);
  244 +
  245 + detachedCredencialProcesso.setProjection(Projections.property("processo.id"));
  246 +
  247 + detachedCredencialProcesso.createAlias("grupo", "grupo", JoinType.LEFT_OUTER_JOIN);
  248 +
  249 + detachedCredencialProcesso.createAlias("grupo.grupoUsuarios", "grupoUsuario", JoinType.LEFT_OUTER_JOIN);
  250 +
  251 + detachedCredencialProcesso.add(Restrictions.isNull("grupoUsuario.dataInativo"));
  252 +
  253 + detachedCredencialProcesso.add(Restrictions.or(Restrictions.eq("grupoUsuario.usuario.id", usuario.getId()), Restrictions.eq("usuario.id", usuario.getId())));
  254 +
  255 + detachedCredencialProcesso.add(Restrictions.isNull("dataInativo"));
  256 +
  257 + return detachedCredencialProcesso;
  258 + }
  259 +
  260 + /**
  261 + * <p>
  262 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  263 + * </p>
  264 + *
  265 + * <p>
  266 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  267 + * </p>
  268 + *
  269 + * Método responsável por retornar um detachedCriteria com os ids dos sigilos que o usuário tem permissão. O mesmo é consultado através dos grupos que o usuário pertence.
  270 + *
  271 + * @author rogerio.costa
  272 + *
  273 + * @param usuario
  274 + * @return DetachedCriteria/Sigilo.id
  275 + */
  276 + private DetachedCriteria findSigiloUsuarioContemPermissaoAtravesDosGrupos(Usuario usuario) {
  277 +
  278 + DetachedCriteria detachedCriteriaPrivilegio = DetachedCriteria.forClass(SigiloPrivilegio.class);
  279 +
  280 + detachedCriteriaPrivilegio.setProjection(Projections.property("sigilo.id"));
  281 +
  282 + detachedCriteriaPrivilegio.createAlias("privilegio", "privilegio");
  283 +
  284 + detachedCriteriaPrivilegio.createAlias("privilegio.grupoPrivilegios", "grupoPrivilegio");
  285 +
  286 + detachedCriteriaPrivilegio.add(Restrictions.isNull("grupoPrivilegio.dataInativo"));
  287 +
  288 + detachedCriteriaPrivilegio.createCriteria("grupoPrivilegio.grupo").createAlias("grupoUsuarios", "grupoUsuario");
  289 +
  290 + detachedCriteriaPrivilegio.add(Restrictions.isNull("grupoUsuario.dataInativo"));
  291 +
  292 + detachedCriteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", usuario.getId()));
  293 +
  294 + return detachedCriteriaPrivilegio;
  295 + }
210 296 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/Processo.java
... ... @@ -112,6 +112,7 @@ public class Processo extends PersistentObjectUnidade {
112 112  
113 113 /** Atributo nup. */
114 114 @JsonView({ Views.ProcessoEdit.class})
  115 + @ManyToOne(fetch = FetchType.LAZY)
115 116 private Dominio tipoProtocolo;
116 117  
117 118 /** Atributo observacaoGeral. */
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/ProcessoServiceImpl.java
... ... @@ -153,6 +153,8 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
153 153 public Processo save(Processo entity) {
154 154  
155 155 this.validarEntidade(entity, this.validator);
  156 +
  157 + this.validarUnidade();
156 158  
157 159 this.montarEntidade(entity);
158 160 entity.setSigiloOriginal(entity.getSigilo());
... ... @@ -181,6 +183,23 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
181 183 }
182 184  
183 185 /**
  186 + * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
  187 + *
  188 + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  189 + *
  190 + * Método responsável por validar a unidade vigente
  191 + *
  192 + * @author rogerio.costa
  193 + *
  194 + */
  195 + private void validarUnidade() {
  196 +
  197 + if (!UtilObjeto.isReferencia(this.getUsuario().getUnidade())) {
  198 + throw new BusinessException("ECM.VALIDACAO.ERRO_UNIDADE_ECM_VIGENTE_USUARIO", CodigoErro.REGRA_NEGOCIO.getValue());
  199 + }
  200 + }
  201 +
  202 + /**
184 203 *
185 204 * <p>
186 205 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
... ...
cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java
... ... @@ -405,7 +405,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
405 405 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NOME_NOVO_SUPORTE ", "Nome do suporte", dominio, modulo));
406 406 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NOVO_TIPO_SUPORTE ", "Novo tipo suporte de documento", dominio, modulo));
407 407 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TIPO_SUPORTE_DOCUMENTO ", "Tipo suporte de documento", dominio, modulo));
408   -
409 408 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TARJAS_ASSINATURA", "Tarjas de assinatura", dominio, modulo));
410 409 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.LOGO_TARJA_ASSINATURA", "Logotipo da tarja de assinatura", dominio, modulo));
411 410 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DADOS_TARJA_ASSINATURA", "Dados da tarja de assinatura", dominio, modulo));
... ... @@ -413,6 +412,18 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
413 412 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CONTEUDO_HTML", "Conteúdo HTML", dominio, modulo));
414 413 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.REMOVER_IMAGEM", "Remover imagem", dominio, modulo));
415 414 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CAMPOS_DINAMICOS", "Campos Dinâmicos", dominio, modulo));
  415 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.SOBRESTAR_SEM", "Sobrestar", dominio, modulo));
  416 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.SOBRESTADA", "Sobrestada", dominio, modulo));
  417 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.SITUACAO_INSTANCIA_TAREFA", "Situação instância tarefa", dominio, modulo));
  418 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NIVEL_DE_ACESSO", "Nível de acesso", dominio, modulo));
  419 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ASSUNTO_COMPLEMENTAR", "Assunto complementar", dominio, modulo));
  420 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ASSINATURAS_DOCUMENTO", "Assinaturas do Documento", dominio, modulo));
  421 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ASSINANTE", "Assinante", dominio, modulo));
  422 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CARGO_FUNCAO", "Cargo/Função", dominio, modulo));
  423 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.OU", "ou", dominio, modulo));
  424 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CERTIFICADO_DIGITAL", "Certificado Digital", dominio, modulo));
  425 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ASSINATURA_DOCUMENTO", "Assinatura de Documento", dominio, modulo));
  426 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ASSINAR", "Assinar", dominio, modulo));
416 427 }
417 428  
418 429 /**
... ...