Commit 7ef43825f9b27f5fe22e6e3481ef79995caa95f0
1 parent
5de24bed
Exists in
master
[2866]-Alterar a Grid de Processos (Listagem)
Showing
4 changed files
with
134 additions
and
17 deletions
Show diff stats
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<Processo, Long> 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<Processo, Long> 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 | /** | ... | ... |