Commit 56ee39eeb2f5abed920a34dac782fd2204f006ab

Authored by rogerio.costa
1 parent b89d7cdd
Exists in master

Assinar documento digital

cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/ProcessoDaoHibernate.java
1 package br.com.centralit.api.dao.impl; 1 package br.com.centralit.api.dao.impl;
2 2
  3 +import java.util.ArrayList;
3 import java.util.Calendar; 4 import java.util.Calendar;
4 import java.util.Collection; 5 import java.util.Collection;
  6 +import java.util.List;
5 7
6 import javax.persistence.FetchType; 8 import javax.persistence.FetchType;
7 9
@@ -17,12 +19,14 @@ import org.springframework.security.core.context.SecurityContextHolder; @@ -17,12 +19,14 @@ import org.springframework.security.core.context.SecurityContextHolder;
17 import org.springframework.stereotype.Repository; 19 import org.springframework.stereotype.Repository;
18 20
19 import br.com.centralit.api.dao.ProcessoDao; 21 import br.com.centralit.api.dao.ProcessoDao;
  22 +import br.com.centralit.api.model.CredencialProcesso;
20 import br.com.centralit.api.model.Processo; 23 import br.com.centralit.api.model.Processo;
21 import br.com.centralit.api.model.SigiloPrivilegio; 24 import br.com.centralit.api.model.SigiloPrivilegio;
22 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; 25 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
23 import br.com.centralit.framework.dao.arquitetura.SearchSeven; 26 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
24 import br.com.centralit.framework.model.Dominio; 27 import br.com.centralit.framework.model.Dominio;
25 import br.com.centralit.framework.model.Usuario; 28 import br.com.centralit.framework.model.Usuario;
  29 +import br.com.centralit.framework.model.arquitetura.PersistentObject;
26 import br.com.centralit.framework.util.UtilObjeto; 30 import br.com.centralit.framework.util.UtilObjeto;
27 31
28 import com.googlecode.genericdao.search.Filter; 32 import com.googlecode.genericdao.search.Filter;
@@ -63,6 +67,7 @@ import com.googlecode.genericdao.search.SearchResult; @@ -63,6 +67,7 @@ import com.googlecode.genericdao.search.SearchResult;
63 * 67 *
64 */ 68 */
65 @Repository("processoDao") 69 @Repository("processoDao")
  70 +@SuppressWarnings("unchecked")
66 public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoDao { 71 public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoDao {
67 72
68 /** 73 /**
@@ -198,10 +203,45 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD @@ -198,10 +203,45 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD
198 */ 203 */
199 public <RT> SearchResult<RT> searchAndCountPorSigilo(ISearch search) { 204 public <RT> SearchResult<RT> searchAndCountPorSigilo(ISearch search) {
200 205
201 - Long idUsuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId();  
202 -  
203 Criteria criteria = this.newCriteria(); 206 Criteria criteria = this.newCriteria();
204 207
  208 + DetachedCriteria detachedPrivilegio = getDetachedPorPermissaoEmSigilo();
  209 +
  210 + // Joins
  211 + criteria.createAlias("documentos", "documentos", JoinType.LEFT_OUTER_JOIN);
  212 +
  213 + criteria.createAlias("documentos.status", "statusDocumento", JoinType.LEFT_OUTER_JOIN);
  214 + // Filtros
  215 + criteria.add(Restrictions.or(Restrictions.eq("statusDocumento.codigo", 0L), Restrictions.isNull("validado"), Restrictions.eq("validado", false)));
  216 +
  217 + criteria.add(Restrictions.or(Subqueries.propertyIn("sigilo.id", detachedPrivilegio), Subqueries.propertyIn("documentos.sigilo.id", detachedPrivilegio)));
  218 +
  219 + criteria.setProjection(Projections.distinct(Projections.property("id")));
  220 +
  221 + search.getFilters().add(Filter.in("id", criteria.list()));
  222 +
  223 + return super.searchAndCount(search);
  224 + }
  225 +
  226 + /**
  227 + * <p>
  228 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  229 + * </p>
  230 + *
  231 + * <p>
  232 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  233 + * </p>
  234 + *
  235 + * Método responsável por filtrar o sigilo que o usuario logado tem permissão através do(s) grupo(s) que o mesmo pertence
  236 + *
  237 + * @author rogerio.costa
  238 + *
  239 + * @return DetachedCriteria/ ids dos sigilos
  240 + */
  241 + private DetachedCriteria getDetachedPorPermissaoEmSigilo() {
  242 +
  243 + Long idUsuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId();
  244 +
205 DetachedCriteria detachedCriteriaPrivilegio = DetachedCriteria.forClass(SigiloPrivilegio.class); 245 DetachedCriteria detachedCriteriaPrivilegio = DetachedCriteria.forClass(SigiloPrivilegio.class);
206 246
207 detachedCriteriaPrivilegio.setProjection(Projections.property("sigilo.id")); 247 detachedCriteriaPrivilegio.setProjection(Projections.property("sigilo.id"));
@@ -218,19 +258,7 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD @@ -218,19 +258,7 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD
218 258
219 detachedCriteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", idUsuario)); 259 detachedCriteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", idUsuario));
220 260
221 - criteria.add(Subqueries.propertyIn("sigilo.id", detachedCriteriaPrivilegio));  
222 -  
223 - criteria.createAlias("documentos", "documentos", JoinType.LEFT_OUTER_JOIN);  
224 -  
225 - criteria.createAlias("documentos.status", "statusDocumento", JoinType.LEFT_OUTER_JOIN);  
226 -  
227 - criteria.add(Restrictions.or(Restrictions.eq("statusDocumento.codigo", 0L), Restrictions.isNull("validado"), Restrictions.eq("validado", false)));  
228 -  
229 - criteria.setProjection(Projections.distinct(Projections.property("id")));  
230 -  
231 - search.getFilters().add(Filter.in("id", criteria.list()));  
232 -  
233 - return super.searchAndCount(search); 261 + return detachedCriteriaPrivilegio;
234 } 262 }
235 263
236 @Override 264 @Override
@@ -248,17 +276,17 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD @@ -248,17 +276,17 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD
248 276
249 return UtilObjeto.isReferencia(criteria.uniqueResult()); 277 return UtilObjeto.isReferencia(criteria.uniqueResult());
250 } 278 }
251 -  
252 - public Collection<Processo> autoCompleteProcessoByNupAndStatus(String nup, Dominio dominio){  
253 - 279 +
  280 + public Collection<Processo> autoCompleteProcessoByNupAndStatus(String nup, Dominio dominio) {
  281 +
254 Search search = new SearchSeven(this.persistentClass); 282 Search search = new SearchSeven(this.persistentClass);
255 283
256 search.addFilterOr(Filter.ilike("nup", "%" + nup + "%"), Filter.ilike("nup", "%" + nup + "%")); 284 search.addFilterOr(Filter.ilike("nup", "%" + nup + "%"), Filter.ilike("nup", "%" + nup + "%"));
257 - 285 +
258 search.addFilterEqual("status.id", dominio.getId()); 286 search.addFilterEqual("status.id", dominio.getId());
259 - 287 +
260 search.addSortDesc("id"); 288 search.addSortDesc("id");
261 - 289 +
262 search.setMaxResults(10); 290 search.setMaxResults(10);
263 291
264 return this.search(search); 292 return this.search(search);
@@ -271,17 +299,138 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD @@ -271,17 +299,138 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD
271 Search search = new SearchSeven(this.persistentClass); 299 Search search = new SearchSeven(this.persistentClass);
272 300
273 search.addFilterOr(Filter.ilike("nup", "%" + nup + "%"), Filter.ilike("nup", "%" + nup + "%")); 301 search.addFilterOr(Filter.ilike("nup", "%" + nup + "%"), Filter.ilike("nup", "%" + nup + "%"));
274 - 302 +
275 search.getFilters().add(Filter.notEqual("status.codigo", 1L)); 303 search.getFilters().add(Filter.notEqual("status.codigo", 1L));
276 - 304 +
277 search.getFilters().add(Filter.notEqual("status.codigo", 5L)); 305 search.getFilters().add(Filter.notEqual("status.codigo", 5L));
278 - 306 +
279 search.getFilters().add(Filter.notEqual("status.codigo", 3L)); 307 search.getFilters().add(Filter.notEqual("status.codigo", 3L));
280 - 308 +
281 search.addSortDesc("id"); 309 search.addSortDesc("id");
282 - 310 +
283 search.setMaxResults(10); 311 search.setMaxResults(10);
284 312
285 return this.search(search); 313 return this.search(search);
286 } 314 }
  315 +
  316 + @Override
  317 + public List<PersistentObject> findAutoComplete(String chave, String valor) {
  318 +
  319 + Criteria criteriaProcesso = this.newCriteria(Processo.class);
  320 +
  321 + this.filterProcessoPermissaoUsuario(criteriaProcesso);
  322 +
  323 + criteriaProcesso.add(Restrictions.ilike(chave, "%" + valor + "%"));
  324 +
  325 + return criteriaProcesso.list();
  326 + }
  327 +
  328 + /**
  329 + * <p>
  330 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  331 + * </p>
  332 + *
  333 + * <p>
  334 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  335 + * </p>
  336 + *
  337 + * Método responsável por realizar os filtros em que o usuario logado tem permissão.
  338 + *
  339 + * @author rogerio.costa
  340 + *
  341 + * @param criteriaProcesso
  342 + */
  343 + private void filterProcessoPermissaoUsuario(Criteria criteriaProcesso) {
  344 +
  345 + Usuario usuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() );
  346 +
  347 + // Verifica se o usuario está lotado na unidade
  348 + if (UtilObjeto.isReferencia(usuario.getUnidade())) {
  349 +
  350 + // Filtro de permissões herdadas através de grupos
  351 + DetachedCriteria detachedCriteriaPrivilegio = findSigiloUsuarioContemPermissaoAtravesDosGrupos(usuario);
  352 +
  353 + // Filtro da credencial do processo
  354 + DetachedCriteria detachedCredencialProcesso = findProcessoSigilosoPorCredencial(usuario);
  355 +
  356 + criteriaProcesso.add(Restrictions.eq("unidade.id", usuario.getUnidade().getId()));
  357 +
  358 + criteriaProcesso.add(Restrictions.or(Subqueries.propertyIn("sigilo.id", detachedCriteriaPrivilegio), Subqueries.propertyIn("id", detachedCredencialProcesso), Restrictions.or(Restrictions.eq("autor.id", usuario.getId()), Restrictions.isNull("sigilo"))));
  359 +
  360 + criteriaProcesso.add(Restrictions.isNotNull("idProcessInstance"));
  361 +
  362 + }
  363 + }
  364 +
  365 + /**
  366 + * <p>
  367 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  368 + * </p>
  369 + *
  370 + * <p>
  371 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  372 + * </p>
  373 + *
  374 + * 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.
  375 + *
  376 + * @author rogerio.costa
  377 + *
  378 + * @param usuario
  379 + * @return DetachedCriteria/Sigilo.id
  380 + */
  381 + private DetachedCriteria findSigiloUsuarioContemPermissaoAtravesDosGrupos(Usuario usuario) {
  382 +
  383 + DetachedCriteria detachedCriteriaPrivilegio = DetachedCriteria.forClass(SigiloPrivilegio.class);
  384 +
  385 + detachedCriteriaPrivilegio.setProjection(Projections.property("sigilo.id"));
  386 +
  387 + detachedCriteriaPrivilegio.createAlias("privilegio", "privilegio");
  388 +
  389 + detachedCriteriaPrivilegio.createAlias("privilegio.grupoPrivilegios", "grupoPrivilegio");
  390 +
  391 + detachedCriteriaPrivilegio.add(Restrictions.isNull("grupoPrivilegio.dataInativo"));
  392 +
  393 + detachedCriteriaPrivilegio.createCriteria("grupoPrivilegio.grupo").createAlias("grupoUsuarios", "grupoUsuario");
  394 +
  395 + detachedCriteriaPrivilegio.add(Restrictions.isNull("grupoUsuario.dataInativo"));
  396 +
  397 + detachedCriteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", usuario.getId()));
  398 +
  399 + return detachedCriteriaPrivilegio;
  400 + }
  401 +
  402 + /**
  403 + * <p>
  404 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  405 + * </p>
  406 + *
  407 + * <p>
  408 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  409 + * </p>
  410 + *
  411 + * 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.
  412 + *
  413 + * @author rogerio.costa
  414 + *
  415 + * @param usuario
  416 + * @return DetachedCriteria/ Processo.id
  417 + */
  418 + private DetachedCriteria findProcessoSigilosoPorCredencial(Usuario usuario) {
  419 +
  420 + DetachedCriteria detachedCredencialProcesso = DetachedCriteria.forClass(CredencialProcesso.class);
  421 +
  422 + detachedCredencialProcesso.setProjection(Projections.property("processo.id"));
  423 +
  424 + detachedCredencialProcesso.createAlias("grupo", "grupo", JoinType.LEFT_OUTER_JOIN);
  425 +
  426 + detachedCredencialProcesso.createAlias("grupo.grupoUsuarios", "grupoUsuario", JoinType.LEFT_OUTER_JOIN);
  427 +
  428 + detachedCredencialProcesso.add(Restrictions.isNull("grupoUsuario.dataInativo"));
  429 +
  430 + detachedCredencialProcesso.add(Restrictions.or(Restrictions.eq("grupoUsuario.usuario.id", usuario.getId()), Restrictions.eq("usuario.id", usuario.getId())));
  431 +
  432 + detachedCredencialProcesso.add(Restrictions.isNull("dataInativo"));
  433 +
  434 + return detachedCredencialProcesso;
  435 + }
287 } 436 }
cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/UnidadeProcessoDaoHibernate.java
@@ -93,7 +93,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un @@ -93,7 +93,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
93 return this.search(searchSeven); 93 return this.search(searchSeven);
94 94
95 } 95 }
96 - 96 +
97 /** 97 /**
98 * 98 *
99 * <p> 99 * <p>
@@ -203,7 +203,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un @@ -203,7 +203,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
203 searchSeven.addFilterEqual("processo.id", idProcesso); 203 searchSeven.addFilterEqual("processo.id", idProcesso);
204 204
205 searchSeven.addFilterEqual("unidade.id", idUnidade); 205 searchSeven.addFilterEqual("unidade.id", idUnidade);
206 - 206 +
207 searchSeven.setMaxResults(1); 207 searchSeven.setMaxResults(1);
208 208
209 return this.searchUnique(searchSeven); 209 return this.searchUnique(searchSeven);
@@ -222,34 +222,38 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un @@ -222,34 +222,38 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
222 @Override 222 @Override
223 public <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus) { 223 public <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus) {
224 224
225 - // Filtro de permissões herdadas através de grupos  
226 - DetachedCriteria detachedCriteriaPrivilegio = findSigiloUsuarioContemPermissaoAtravesDosGrupos(usuario); 225 + // Verifica se o usuario está lotado na unidade
  226 + if (UtilObjeto.isReferencia(usuario.getUnidade())) {
227 227
228 - // Filtro da credencial do processo  
229 - DetachedCriteria detachedCredencialProcesso = findProcessoSigilosoPorCredencial(usuario); 228 + // Filtro de permissões herdadas através de grupos
  229 + DetachedCriteria detachedCriteriaPrivilegio = findSigiloUsuarioContemPermissaoAtravesDosGrupos(usuario);
230 230
231 - // Filtro da unidade, para processos públicos e restritos.  
232 - search.getFilters().add(Filter.or(Filter.not(Filter.equal("processo.status.id", idStatus)), Filter.isEmpty("processo.status.id")));  
233 -  
234 - search.getFilters().add(Filter.notEqual("processo.status.codigo", 5L)); 231 + // Filtro da credencial do processo
  232 + DetachedCriteria detachedCredencialProcesso = findProcessoSigilosoPorCredencial(usuario);
235 233
236 - // Verifica se o usuario está lotado na unidade  
237 - if (UtilObjeto.isReferencia(usuario.getUnidade())) { 234 + // Filtro da unidade, para processos públicos e restritos.
  235 + search.getFilters().add(Filter.or(Filter.not(Filter.equal("processo.status.id", idStatus)), Filter.isEmpty("processo.status.id")));
  236 +
  237 + search.getFilters().add(Filter.notEqual("processo.status.codigo", 5L));
238 238
239 search.getFilters().add(Filter.equal("unidade.id", usuario.getUnidade().getId())); 239 search.getFilters().add(Filter.equal("unidade.id", usuario.getUnidade().getId()));
240 - }  
241 240
242 - Criteria criteriaProcessoSigiloso = this.newCriteria(Processo.class); 241 + search.getFilters().add(Filter.or(Filter.equal("concluido", false), Filter.isNull("concluido")));
243 242
244 - criteriaProcessoSigiloso.setProjection(Projections.property("id")); 243 + Criteria criteriaProcessoSigiloso = this.newCriteria(Processo.class);
245 244
246 - criteriaProcessoSigiloso.add(Restrictions.or(Subqueries.propertyIn("sigilo.id", detachedCriteriaPrivilegio), Subqueries.propertyIn("id", detachedCredencialProcesso))); 245 + criteriaProcessoSigiloso.setProjection(Projections.property("id"));
247 246
248 - search.getFilters().add(Filter.isNotNull("processo.idProcessInstance")); 247 + criteriaProcessoSigiloso.add(Restrictions.or(Subqueries.propertyIn("sigilo.id", detachedCriteriaPrivilegio), Subqueries.propertyIn("id", detachedCredencialProcesso)));
249 248
250 - search.getFilters().add(Filter.or(Filter.equal("processo.autor.id", usuario.getId()), Filter.isNull("processo.sigilo"), Filter.in("processo.id", criteriaProcessoSigiloso.list()))); 249 + search.getFilters().add(Filter.isNotNull("processo.idProcessInstance"));
251 250
252 - return super.searchAndCount(search); 251 + search.getFilters().add(Filter.or(Filter.equal("processo.autor.id", usuario.getId()), Filter.isNull("processo.sigilo"), Filter.in("processo.id", criteriaProcessoSigiloso.list())));
  252 +
  253 + return super.searchAndCount(search);
  254 + }
  255 +
  256 + return new SearchResult<RT>();
253 } 257 }
254 258
255 /** 259 /**
@@ -323,38 +327,37 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un @@ -323,38 +327,37 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
323 327
324 return detachedCriteriaPrivilegio; 328 return detachedCriteriaPrivilegio;
325 } 329 }
326 - 330 +
327 /** 331 /**
328 * 332 *
329 */ 333 */
330 public Collection<UnidadeProcesso> findByPorIdProcessoEmExecucao(Long idProcesso) { 334 public Collection<UnidadeProcesso> findByPorIdProcessoEmExecucao(Long idProcesso) {
331 - 335 +
332 SearchSeven searchSeven = new SearchSeven(); 336 SearchSeven searchSeven = new SearchSeven();
333 337
334 searchSeven.addFilterEqual("processo.id", idProcesso); 338 searchSeven.addFilterEqual("processo.id", idProcesso);
335 - 339 +
336 searchSeven.addFilterOr(Filter.equal("concluido", false), Filter.isNull("concluido")); 340 searchSeven.addFilterOr(Filter.equal("concluido", false), Filter.isNull("concluido"));
337 341
338 return this.search(searchSeven); 342 return this.search(searchSeven);
339 - 343 +
340 } 344 }
341 345
342 public UnidadeProcesso obterPorUnidadeEProcessoEmExecucao(Long idProcesso, Long idUnidade) { 346 public UnidadeProcesso obterPorUnidadeEProcessoEmExecucao(Long idProcesso, Long idUnidade) {
343 - 347 +
344 SearchSeven searchSeven = new SearchSeven(); 348 SearchSeven searchSeven = new SearchSeven();
345 349
346 searchSeven.addFilterEqual("processo.id", idProcesso); 350 searchSeven.addFilterEqual("processo.id", idProcesso);
347 351
348 searchSeven.addFilterEqual("unidade.id", idUnidade); 352 searchSeven.addFilterEqual("unidade.id", idUnidade);
349 -  
350 - searchSeven.addFilterOr( Filter.isNull("concluido")); 353 +
  354 + searchSeven.addFilterOr(Filter.isNull("concluido"));
351 355
352 searchSeven.setMaxResults(1); 356 searchSeven.setMaxResults(1);
353 357
354 return this.searchUnique(searchSeven); 358 return this.searchUnique(searchSeven);
355 } 359 }
356 360
357 -  
358 /** 361 /**
359 * <p> 362 * <p>
360 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> 363 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
@@ -384,6 +387,5 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un @@ -384,6 +387,5 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
384 387
385 return UtilObjeto.isReferencia(criteria.uniqueResult()); 388 return UtilObjeto.isReferencia(criteria.uniqueResult());
386 389
387 -  
388 } 390 }
389 } 391 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/DocumentoGedServiceImpl.java
@@ -334,7 +334,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo @@ -334,7 +334,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
334 } 334 }
335 } 335 }
336 336
337 - if (UtilObjeto.isReferencia(entity.getProcesso().getSigilo())) { 337 + if (UtilObjeto.isReferencia(entity.getProcesso().getSigilo()) && UtilObjeto.isReferencia(entity.getSigilo())) {
338 if (entity.getProcesso().getSigilo().getTipoSigilo().getCodigo() == 1L) { 338 if (entity.getProcesso().getSigilo().getTipoSigilo().getCodigo() == 1L) {
339 if (entity.getSigilo().getTipoSigilo().getCodigo() == 0L) { 339 if (entity.getSigilo().getTipoSigilo().getCodigo() == 0L) {
340 throw new BusinessException(DocumentoGedServiceImpl.VALIDAR_NIVEL_ACESSO, CodigoErro.REGRA_NEGOCIO.getValue()); 340 throw new BusinessException(DocumentoGedServiceImpl.VALIDAR_NIVEL_ACESSO, CodigoErro.REGRA_NEGOCIO.getValue());
@@ -344,6 +344,8 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo @@ -344,6 +344,8 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
344 throw new BusinessException(DocumentoGedServiceImpl.VALIDAR_NIVEL_ACESSO, CodigoErro.REGRA_NEGOCIO.getValue()); 344 throw new BusinessException(DocumentoGedServiceImpl.VALIDAR_NIVEL_ACESSO, CodigoErro.REGRA_NEGOCIO.getValue());
345 } 345 }
346 } 346 }
  347 + }else{
  348 + throw new BusinessException(DocumentoGedServiceImpl.VALIDAR_NIVEL_ACESSO, CodigoErro.REGRA_NEGOCIO.getValue());
347 } 349 }
348 } 350 }
349 351
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/InicializarEcmServiceImpl.java
@@ -240,10 +240,10 @@ public class InicializarEcmServiceImpl extends UtilStartup { @@ -240,10 +240,10 @@ public class InicializarEcmServiceImpl extends UtilStartup {
240 menuPesquisaProcesso.setIncludes(filesPesquisaProcesso); 240 menuPesquisaProcesso.setIncludes(filesPesquisaProcesso);
241 this.menuService.mergeIfNotExist(menuPesquisaProcesso); 241 this.menuService.mergeIfNotExist(menuPesquisaProcesso);
242 242
243 - Pagina pgProcessoFinalizado = new Pagina("Processo Arquivado", "/cit-ecm-web/html/processoFinalizado/processoFinalizadoList.html"); 243 + Pagina pgProcessoFinalizado = new Pagina("Processos Arquivados", "/cit-ecm-web/html/processoFinalizado/processoFinalizadoList.html");
244 pgProcessoFinalizado = this.paginaService.saveIfNotExist(pgProcessoFinalizado); 244 pgProcessoFinalizado = this.paginaService.saveIfNotExist(pgProcessoFinalizado);
245 245
246 - Menu menuProcessoFinalizado = new Menu("Processo Arquivado", pgProcessoFinalizado, menuProcesso, 2, 4, null, null, null, null, modulo, "PROCESSO_FINALIZADO"); 246 + Menu menuProcessoFinalizado = new Menu("Processos Arquivados", pgProcessoFinalizado, menuProcesso, 2, 4, null, null, null, null, modulo, "PROCESSO_FINALIZADO");
247 menuProcessoFinalizado.setIncludes(this.gerarArquivosMenu(menuProcessoFinalizado, this.CIT_ECM_WEB_ANGULAR, "ProcessoFinalizado", false, true, false)); 247 menuProcessoFinalizado.setIncludes(this.gerarArquivosMenu(menuProcessoFinalizado, this.CIT_ECM_WEB_ANGULAR, "ProcessoFinalizado", false, true, false));
248 this.menuService.mergeIfNotExist(menuProcessoFinalizado); 248 this.menuService.mergeIfNotExist(menuProcessoFinalizado);
249 249
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/ProcessoServiceImpl.java
@@ -19,9 +19,6 @@ import org.springframework.beans.factory.annotation.Qualifier; @@ -19,9 +19,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
19 import org.springframework.stereotype.Service; 19 import org.springframework.stereotype.Service;
20 import org.springframework.validation.Validator; 20 import org.springframework.validation.Validator;
21 21
22 -import com.googlecode.genericdao.search.ISearch;  
23 -import com.googlecode.genericdao.search.SearchResult;  
24 -  
25 import br.com.centralit.api.dao.ProcessoDao; 22 import br.com.centralit.api.dao.ProcessoDao;
26 import br.com.centralit.api.model.DocumentoGed; 23 import br.com.centralit.api.model.DocumentoGed;
27 import br.com.centralit.api.model.EstruturaOrganizacionalECM; 24 import br.com.centralit.api.model.EstruturaOrganizacionalECM;
cit-ecm-web/src/main/java/br/com/centralit/controller/ProcessoController.java
@@ -11,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestParam; @@ -11,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestParam;
11 import org.springframework.web.bind.annotation.ResponseBody; 11 import org.springframework.web.bind.annotation.ResponseBody;
12 12
13 import br.com.centralit.api.framework.json.ViewsEcm; 13 import br.com.centralit.api.framework.json.ViewsEcm;
14 -import br.com.centralit.api.model.PlanoClassificacao;  
15 import br.com.centralit.api.model.Processo; 14 import br.com.centralit.api.model.Processo;
16 import br.com.centralit.api.service.ProcessoService; 15 import br.com.centralit.api.service.ProcessoService;
17 import br.com.centralit.api.service.UsuarioService; 16 import br.com.centralit.api.service.UsuarioService;
cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java
@@ -138,7 +138,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -138,7 +138,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
138 list.add(new AcaoHistoricoAlteracaoProcesso("ENVIAR_PROCESSO", "Enviar Processo", "O processo foi enviado para a <<unidade>>.")); 138 list.add(new AcaoHistoricoAlteracaoProcesso("ENVIAR_PROCESSO", "Enviar Processo", "O processo foi enviado para a <<unidade>>."));
139 list.add(new AcaoHistoricoAlteracaoProcesso("JUSTIFICATIVA_ACAO_PROCESSO", "Justificativa", "<<acao>> , protocolo <<protocolo>>. Justificativa: <<justificativa>>.")); 139 list.add(new AcaoHistoricoAlteracaoProcesso("JUSTIFICATIVA_ACAO_PROCESSO", "Justificativa", "<<acao>> , protocolo <<protocolo>>. Justificativa: <<justificativa>>."));
140 list.add(new AcaoHistoricoAlteracaoProcesso("ACAO_PROCESSO", "Ação", "<<acao>> , protocolo <<protocolo>>.")); 140 list.add(new AcaoHistoricoAlteracaoProcesso("ACAO_PROCESSO", "Ação", "<<acao>> , protocolo <<protocolo>>."));
141 - list.add(new AcaoHistoricoAlteracaoProcesso("VALIDAR_PROCESSO", "Validar Processo", "O processo <<protocolo>> foi validado e seus documentos.")); 141 + list.add(new AcaoHistoricoAlteracaoProcesso("VALIDAR_PROCESSO", "Validar Processo", "O processo <<protocolo>> e seus documentos foram validados de acordo com seu nível de acesso."));
142 list.add(new AcaoHistoricoAlteracaoProcesso("ATRIBUICAO_PROCESSO", "Atribuição de processo", "O processo <<protocolo>> foi atribuido para <<usuario>>.")); 142 list.add(new AcaoHistoricoAlteracaoProcesso("ATRIBUICAO_PROCESSO", "Atribuição de processo", "O processo <<protocolo>> foi atribuido para <<usuario>>."));
143 list.add(new AcaoHistoricoAlteracaoProcesso("ASSINAR_DOCUMENTO", "Assinatura de documento", "O documento <<tipo_documento>> <<numero_documento>> foi assinado por <<usuario>>.")); 143 list.add(new AcaoHistoricoAlteracaoProcesso("ASSINAR_DOCUMENTO", "Assinatura de documento", "O documento <<tipo_documento>> <<numero_documento>> foi assinado por <<usuario>>."));
144 list.add(new AcaoHistoricoAlteracaoProcesso("ATUALIZAR_ANDAMENTO_PROCESSO", "Atualização de Andamento do Processo", "Situação do processo alterada para <<situacao>>.")); 144 list.add(new AcaoHistoricoAlteracaoProcesso("ATUALIZAR_ANDAMENTO_PROCESSO", "Atualização de Andamento do Processo", "Situação do processo alterada para <<situacao>>."));
@@ -298,7 +298,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -298,7 +298,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
298 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NOVOPROCESSO", " Novo Processo", dominio, modulo)); 298 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NOVOPROCESSO", " Novo Processo", dominio, modulo));
299 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TIPOPROTOCOLO", "Tipo de Protocolo", dominio, modulo)); 299 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TIPOPROTOCOLO", "Tipo de Protocolo", dominio, modulo));
300 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TOTAL_ITENS_HISTORICO", "Total de históricos", dominio, modulo)); 300 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TOTAL_ITENS_HISTORICO", "Total de históricos", dominio, modulo));
301 - internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VERSAO_ATUAL", "Versão Atual", dominio, modulo)); 301 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VERSAO_ATUAL", "Versão atual", dominio, modulo));
302 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VERSAO_DOCUMENTO", "Versões do documento", dominio, modulo)); 302 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VERSAO_DOCUMENTO", "Versões do documento", dominio, modulo));
303 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VERSAO_INTERMEDIARIA", "Versão Intermediária", dominio, modulo)); 303 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VERSAO_INTERMEDIARIA", "Versão Intermediária", dominio, modulo));
304 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VERSOESDODOCUMENTO", "Versões do Documento", dominio, modulo)); 304 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VERSOESDODOCUMENTO", "Versões do Documento", dominio, modulo));
@@ -378,7 +378,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -378,7 +378,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
378 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.OBJETO", "Objeto", dominio, modulo)); 378 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.OBJETO", "Objeto", dominio, modulo));
379 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATRIBUIDOA", "Atribuído a", dominio, modulo)); 379 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATRIBUIDOA", "Atribuído a", dominio, modulo));
380 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.UNIDADE_GERADORA", "Unidade gestora", dominio, modulo)); 380 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.UNIDADE_GERADORA", "Unidade gestora", dominio, modulo));
381 - internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.PRAZO_TEMPORALIDADE", "Unidade gestora", dominio, modulo)); 381 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.PRAZO_TEMPORALIDADE", "Prazo temporalidade", dominio, modulo));
382 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CLASSIFICACAO_ARQUIVISTICA", "Classificação Arquivística (Assunto)", dominio, modulo)); 382 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CLASSIFICACAO_ARQUIVISTICA", "Classificação Arquivística (Assunto)", dominio, modulo));
383 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CRIADO_EM", "Criado em", dominio, modulo)); 383 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CRIADO_EM", "Criado em", dominio, modulo));
384 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_CONCLUSAO", "Data conclusão", dominio, modulo)); 384 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_CONCLUSAO", "Data conclusão", dominio, modulo));
@@ -414,7 +414,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -414,7 +414,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
414 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CAPTURAR", "Capturar", dominio, modulo)); 414 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CAPTURAR", "Capturar", dominio, modulo));
415 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.HISTORICO_DE_ATRIBUICAO", "Histórico de atribuição", dominio, modulo)); 415 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.HISTORICO_DE_ATRIBUICAO", "Histórico de atribuição", dominio, modulo));
416 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_ATRIBUICAO", "Data da atribuição", dominio, modulo)); 416 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_ATRIBUICAO", "Data da atribuição", dominio, modulo));
417 - internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATRIBUIDO_NOME", "Atribuído", dominio, modulo)); 417 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATRIBUIDO_NOME", "Atribuído a", dominio, modulo));
418 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATRIBUIDO_POR", "Atribuído por", dominio, modulo)); 418 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATRIBUIDO_POR", "Atribuído por", dominio, modulo));
419 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.REMOVIDO_POR", "Removido por", dominio, modulo)); 419 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.REMOVIDO_POR", "Removido por", dominio, modulo));
420 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_REMOCAO", "Data remoção", dominio, modulo)); 420 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_REMOCAO", "Data remoção", dominio, modulo));
@@ -556,7 +556,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -556,7 +556,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
556 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.PROCESSO_SEM_DOCUMENTO_ENVIO_UNIDADE", "Para enviar o processo é necessário incluir documento ao mesmo", dominio, modulo)); 556 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.PROCESSO_SEM_DOCUMENTO_ENVIO_UNIDADE", "Para enviar o processo é necessário incluir documento ao mesmo", dominio, modulo));
557 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.UNIDADE_SEM_GRUPO_PADRAO", "Não é possível enviar o processo para unidade selecionada. Motivo: Grupo padrão não contém usuário(s)!", dominio, modulo)); 557 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.UNIDADE_SEM_GRUPO_PADRAO", "Não é possível enviar o processo para unidade selecionada. Motivo: Grupo padrão não contém usuário(s)!", dominio, modulo));
558 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.CONFIRMA_CONCLUIR_UNIDADE", "Concluir processo nesta unidade?", dominio, modulo)); 558 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.CONFIRMA_CONCLUIR_UNIDADE", "Concluir processo nesta unidade?", dominio, modulo));
559 - internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.PROCESSO_ENVIADO_SUCESSO", "Processo enviado com sucesso!", dominio, modulo));  
560 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG_HISTORICO_ECM.VALIDAR_PROCESSO", "Validar Processo", dominio, modulo)); 559 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG_HISTORICO_ECM.VALIDAR_PROCESSO", "Validar Processo", dominio, modulo));
561 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.EXISTE_PROCESSO_ABERTO", "Existe um processo aberto, deseja fechá-lo?", dominio, modulo)); 560 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.EXISTE_PROCESSO_ABERTO", "Existe um processo aberto, deseja fechá-lo?", dominio, modulo));
562 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.ATRIBUICAO_PRIMEIRO_ACESSO", "Esté processo foi atribuido para você", dominio, modulo)); 561 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.ATRIBUICAO_PRIMEIRO_ACESSO", "Esté processo foi atribuido para você", dominio, modulo));
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoListController.js
@@ -17,7 +17,7 @@ citApp.controller(&#39;ClassificarDocumentoProcessoListController&#39;, [&#39;$scope&#39;, &#39;Proc @@ -17,7 +17,7 @@ citApp.controller(&#39;ClassificarDocumentoProcessoListController&#39;, [&#39;$scope&#39;, &#39;Proc
17 fields: ['id', 'nup', 'sigiloOriginal.tipoSigilo.descricao', 'sigilo.tipoSigilo.descricao', 'prazoSigilo'], 17 fields: ['id', 'nup', 'sigiloOriginal.tipoSigilo.descricao', 'sigilo.tipoSigilo.descricao', 'prazoSigilo'],
18 filters : [{type : 'string', field : 'nup' }, 18 filters : [{type : 'string', field : 'nup' },
19 {type : 'string', field : 'sigiloOriginal.tipoSigilo.descricao' } , 19 {type : 'string', field : 'sigiloOriginal.tipoSigilo.descricao' } ,
20 - {type : 'string', field : 'sigilo.tipoSigilo.descricao', comparison : 'nn'}, 20 + {type : 'string', field : 'sigilo.tipoSigilo.descricao'},
21 {type : 'date', field : 'prazoSigilo' }] 21 {type : 'date', field : 'prazoSigilo' }]
22 }; 22 };
23 23
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ProcessoFinalizadoListController.js
@@ -14,7 +14,7 @@ citApp.controller(&#39;ProcessoFinalizadoListController&#39;, [&#39;$scope&#39;, &#39;ProcessoReposi @@ -14,7 +14,7 @@ citApp.controller(&#39;ProcessoFinalizadoListController&#39;, [&#39;$scope&#39;, &#39;ProcessoReposi
14 $scope.filterCriteria = { 14 $scope.filterCriteria = {
15 start : 1, 15 start : 1,
16 dir : 'asc', 16 dir : 'asc',
17 - sort : 'id', 17 + sort : 'dataConclusao',
18 limit : 10, 18 limit : 10,
19 fields: ['nup', 'tipoProcesso.nome', 'assunto.nome', 'nivelAcesso.nivelAcesso.descricao', 'dataCriacao', 'dataConclusao', 'temporalidade.dataFimTemporalidade', 'temporalidade.tipoDestinacao.descricao'], 19 fields: ['nup', 'tipoProcesso.nome', 'assunto.nome', 'nivelAcesso.nivelAcesso.descricao', 'dataCriacao', 'dataConclusao', 'temporalidade.dataFimTemporalidade', 'temporalidade.tipoDestinacao.descricao'],
20 filters : [{type : 'string', field : 'nup' }, 20 filters : [{type : 'string', field : 'nup' },