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,18 +3,24 @@ package br.com.centralit.api.dao.impl; | ||
3 | import java.util.Collection; | 3 | import java.util.Collection; |
4 | 4 | ||
5 | import org.hibernate.Criteria; | 5 | import org.hibernate.Criteria; |
6 | +import org.hibernate.criterion.DetachedCriteria; | ||
6 | import org.hibernate.criterion.Projections; | 7 | import org.hibernate.criterion.Projections; |
7 | import org.hibernate.criterion.Restrictions; | 8 | import org.hibernate.criterion.Restrictions; |
9 | +import org.hibernate.criterion.Subqueries; | ||
10 | +import org.hibernate.sql.JoinType; | ||
8 | import org.springframework.stereotype.Repository; | 11 | import org.springframework.stereotype.Repository; |
9 | 12 | ||
10 | import br.com.centralit.api.dao.UnidadeProcessoDao; | 13 | import br.com.centralit.api.dao.UnidadeProcessoDao; |
14 | +import br.com.centralit.api.model.CredencialProcesso; | ||
11 | import br.com.centralit.api.model.Processo; | 15 | import br.com.centralit.api.model.Processo; |
12 | import br.com.centralit.api.model.SigiloPrivilegio; | 16 | import br.com.centralit.api.model.SigiloPrivilegio; |
13 | import br.com.centralit.api.model.UnidadeProcesso; | 17 | import br.com.centralit.api.model.UnidadeProcesso; |
14 | import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; | 18 | import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; |
15 | import br.com.centralit.framework.dao.arquitetura.SearchSeven; | 19 | import br.com.centralit.framework.dao.arquitetura.SearchSeven; |
20 | +import br.com.centralit.framework.model.GrupoPrivilegio; | ||
16 | import br.com.centralit.framework.model.Usuario; | 21 | import br.com.centralit.framework.model.Usuario; |
17 | import br.com.centralit.framework.util.UtilColecao; | 22 | import br.com.centralit.framework.util.UtilColecao; |
23 | +import br.com.centralit.framework.util.UtilObjeto; | ||
18 | 24 | ||
19 | import com.googlecode.genericdao.search.Filter; | 25 | import com.googlecode.genericdao.search.Filter; |
20 | import com.googlecode.genericdao.search.ISearch; | 26 | import com.googlecode.genericdao.search.ISearch; |
@@ -178,6 +184,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un | @@ -178,6 +184,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un | ||
178 | 184 | ||
179 | /** | 185 | /** |
180 | * Método responsável por listar processos através da unidade do usuário | 186 | * Método responsável por listar processos através da unidade do usuário |
187 | + * | ||
181 | * @author rogerio.cassimiro | 188 | * @author rogerio.cassimiro |
182 | * @param search | 189 | * @param search |
183 | * @param usuario | 190 | * @param usuario |
@@ -187,24 +194,103 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un | @@ -187,24 +194,103 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un | ||
187 | @Override | 194 | @Override |
188 | public <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus) { | 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 | search.getFilters().add(Filter.or(Filter.not(Filter.equal("processo.status.id", idStatus)), Filter.isEmpty("processo.status.id"))); | 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 | search.getFilters().add(Filter.isNotNull("processo.idProcessInstance")); | 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 | return super.searchAndCount(search); | 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,6 +112,7 @@ public class Processo extends PersistentObjectUnidade { | ||
112 | 112 | ||
113 | /** Atributo nup. */ | 113 | /** Atributo nup. */ |
114 | @JsonView({ Views.ProcessoEdit.class}) | 114 | @JsonView({ Views.ProcessoEdit.class}) |
115 | + @ManyToOne(fetch = FetchType.LAZY) | ||
115 | private Dominio tipoProtocolo; | 116 | private Dominio tipoProtocolo; |
116 | 117 | ||
117 | /** Atributo observacaoGeral. */ | 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,6 +153,8 @@ public class ProcessoServiceImpl extends GenericServiceImpl<Processo, Long> impl | ||
153 | public Processo save(Processo entity) { | 153 | public Processo save(Processo entity) { |
154 | 154 | ||
155 | this.validarEntidade(entity, this.validator); | 155 | this.validarEntidade(entity, this.validator); |
156 | + | ||
157 | + this.validarUnidade(); | ||
156 | 158 | ||
157 | this.montarEntidade(entity); | 159 | this.montarEntidade(entity); |
158 | entity.setSigiloOriginal(entity.getSigilo()); | 160 | entity.setSigiloOriginal(entity.getSigilo()); |
@@ -181,6 +183,23 @@ public class ProcessoServiceImpl extends GenericServiceImpl<Processo, Long> impl | @@ -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 | * <p> | 204 | * <p> |
186 | * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> | 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,7 +405,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen | ||
405 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NOME_NOVO_SUPORTE ", "Nome do suporte", dominio, modulo)); | 405 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NOME_NOVO_SUPORTE ", "Nome do suporte", dominio, modulo)); |
406 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NOVO_TIPO_SUPORTE ", "Novo tipo suporte de documento", dominio, modulo)); | 406 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NOVO_TIPO_SUPORTE ", "Novo tipo suporte de documento", dominio, modulo)); |
407 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TIPO_SUPORTE_DOCUMENTO ", "Tipo suporte de documento", dominio, modulo)); | 407 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TIPO_SUPORTE_DOCUMENTO ", "Tipo suporte de documento", dominio, modulo)); |
408 | - | ||
409 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TARJAS_ASSINATURA", "Tarjas de assinatura", dominio, modulo)); | 408 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.TARJAS_ASSINATURA", "Tarjas de assinatura", dominio, modulo)); |
410 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.LOGO_TARJA_ASSINATURA", "Logotipo da tarja de assinatura", dominio, modulo)); | 409 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.LOGO_TARJA_ASSINATURA", "Logotipo da tarja de assinatura", dominio, modulo)); |
411 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DADOS_TARJA_ASSINATURA", "Dados da tarja de assinatura", dominio, modulo)); | 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,6 +412,18 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen | ||
413 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CONTEUDO_HTML", "Conteúdo HTML", dominio, modulo)); | 412 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CONTEUDO_HTML", "Conteúdo HTML", dominio, modulo)); |
414 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.REMOVER_IMAGEM", "Remover imagem", dominio, modulo)); | 413 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.REMOVER_IMAGEM", "Remover imagem", dominio, modulo)); |
415 | internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.CAMPOS_DINAMICOS", "Campos Dinâmicos", dominio, modulo)); | 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 | /** |