From 63142b11d7a5d9b5f217ab4152af760079280794 Mon Sep 17 00:00:00 2001 From: rogerio.costa Date: Tue, 26 Apr 2016 09:51:47 -0300 Subject: [PATCH] #3216 - Classificar a Informação de Documentos e Processos --- cit-ecm-api/src/main/java/br/com/centralit/api/dao/DocumentoGedDao.java | 45 +++++++++++++++++++++++++++------------------ cit-ecm-api/src/main/java/br/com/centralit/api/dao/ProcessoDao.java | 20 +++++++++++++++++++- cit-ecm-api/src/main/java/br/com/centralit/api/dao/UnidadeProcessoDao.java | 30 +++++++++++++++++++++++++----- cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/DocumentoGedDaoHibernate.java | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------ cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/ProcessoDaoHibernate.java | 55 +++++++++++++++++++++++++++++++++++++++++++++---------- cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/UnidadeProcessoDaoHibernate.java | 36 ++++++++++++++++++++++++++++++++---- cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java | 25 +++++++++++++++++++++++++ cit-ecm-api/src/main/java/br/com/centralit/api/model/Processo.java | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------- cit-ecm-api/src/main/java/br/com/centralit/api/service/CredencialProcessoService.java | 21 +++++++++++++++++++++ cit-ecm-api/src/main/java/br/com/centralit/api/service/DocumentoGedService.java | 24 +++++++++++++----------- cit-ecm-api/src/main/java/br/com/centralit/api/service/UnidadeProcessoService.java | 22 +++++++++++++++++++++- cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/CredencialProcessoServiceImpl.java | 2 +- cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/DocumentoGedServiceImpl.java | 41 ++++++++++++++++++++++++----------------- cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/InicializarEcmServiceImpl.java | 2 +- cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/ProcessoServiceImpl.java | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------- cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/UnidadeProcessoServiceImpl.java | 33 +++++++++++++++++++++++++++++---- cit-ecm-web/src/main/java/br/com/centralit/controller/DocumentoGedController.java | 38 ++++++++++++++++++++++++++++++++++++++ cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java | 21 +++++++++++++++++---- cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoController.js | 230 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------- cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoListController.js | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------- cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/DocumentoGedController.js | 16 ++++++++-------- cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoController.js | 47 +++++++++++++++++++++++++++++++++-------------- cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/SolrSearchController.js | 8 ++++---- cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumento.html | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------- cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumentoList.html | 340 ++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cit-ecm-web/src/main/webapp/html/documentoGed/metadadosDocumentoEdit.html | 8 ++++---- cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeDocumentosProcesso.html | 2 +- cit-ecm-web/src/main/webapp/html/processo/processoEdit.html | 2 +- 28 files changed, 803 insertions(+), 885 deletions(-) diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/DocumentoGedDao.java b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/DocumentoGedDao.java index 88334e5..6f6b6ea 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/DocumentoGedDao.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/DocumentoGedDao.java @@ -120,34 +120,43 @@ public interface DocumentoGedDao extends CitGenericDAO { * @return Collection */ Collection findPorPlanoClassificacao(Long idPlanoClassificacao); - + /** * - *

Iniciativa(s): NUMERO_INICIATIVA

- * - *

Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO

- * + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * * Método responsável por - * + * * @author andre.silva - * + * * @param idProcesso * @return */ Collection findByProcessoSigilo(Long idProcesso); /** + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

* - *

Iniciativa(s): NUMERO_INICIATIVA

- * - *

Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO

- * - * Método responsável por - * - * @author andre.silva - * - * @param documentoGed - * @return + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * Método responsável por verificar se o documento é sigiloso através do id + * + * @author rogerio.costa + * + * @param id + * + * @return Sigilo */ - Boolean isDocumentoAbertoEmOutrasUnidades(DocumentoGed documentoGed); + Boolean isSigiloso(Long id); + } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/ProcessoDao.java b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/ProcessoDao.java index 6257da7..7f10d02 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/ProcessoDao.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/ProcessoDao.java @@ -155,5 +155,23 @@ public interface ProcessoDao extends CitGenericDAO { * @return SearchResult */ SearchResult searchAndCountPorSigilo(ISearch search); - + + /** + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * Método responsável por verificar se o processo é sigiloso + * + * @author rogerio.costa + * + * @param id + * @return + */ + boolean isSigiloso(Long id); + } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/UnidadeProcessoDao.java b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/UnidadeProcessoDao.java index a8c4187..2760975 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/UnidadeProcessoDao.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/UnidadeProcessoDao.java @@ -2,14 +2,14 @@ package br.com.centralit.api.dao; import java.util.Collection; -import com.googlecode.genericdao.search.ISearch; -import com.googlecode.genericdao.search.SearchResult; - import br.com.centralit.api.model.Processo; import br.com.centralit.api.model.UnidadeProcesso; import br.com.centralit.framework.dao.arquitetura.CitGenericDAO; import br.com.centralit.framework.model.Usuario; +import com.googlecode.genericdao.search.ISearch; +import com.googlecode.genericdao.search.SearchResult; + /** *

* @@ -118,9 +118,10 @@ public interface UnidadeProcessoDao extends CitGenericDAO { * @return UnidadeProcesso */ UnidadeProcesso obterPorUnidadeEProcesso(Long idProcesso, Long idUnidade); - + /** * Método responsável por listar processos através da unidade do usuário + * * @author rogerio.cassimiro * @param search * @param usuario @@ -128,5 +129,24 @@ public interface UnidadeProcessoDao extends CitGenericDAO { * @return SearchResult */ SearchResult searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus); - + + /** + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * Método responsável por verificar se o processo foi enviado para outra unidade + * + * @author rogerio.costa + * + * @param idProcesso + * + * @return Boolean + */ + Boolean isProcessoEnviado(Long idProcesso); + } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/DocumentoGedDaoHibernate.java b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/DocumentoGedDaoHibernate.java index de99726..ad71fd7 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/DocumentoGedDaoHibernate.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/DocumentoGedDaoHibernate.java @@ -16,13 +16,50 @@ import br.com.centralit.api.model.SigiloPrivilegio; import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; import br.com.centralit.framework.dao.arquitetura.SearchSeven; import br.com.centralit.framework.model.Usuario; +import br.com.centralit.framework.util.UtilObjeto; import com.googlecode.genericdao.search.Filter; import com.googlecode.genericdao.search.Sort; +/** + *

+ * + *

+ * + *

+ * Company: Central IT - Governança Corporativa - + *

+ * + *

+ * Title: + *

+ * + *

+ * Description: + *

+ * + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * @since 23/04/2016 - 16:52:47 + * + * @version 1.0.0 + * + * @author rogerio.costa + * + */ @Repository("documentoGedDao") +@SuppressWarnings("unchecked") public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements DocumentoGedDao { + /** + * Responsável pela criação de novas instâncias desta classe. + */ public DocumentoGedDaoHibernate() { super(DocumentoGed.class); @@ -69,6 +106,7 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum searchSeven.addFilterOr(Filter.equal("id", id), Filter.equal("idRaiz", id)); searchSeven.addSort(Sort.asc("versaoDocumento")); + searchSeven.addFilterNotEmpty("dataInativo"); return this.search(searchSeven); @@ -168,25 +206,38 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum } /** + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * Método responsável por verificar se o documento é sigiloso através do id + * + * @author rogerio.costa * + * @param id + * + * @return Sigilo */ - @Override - public Boolean isDocumentoAbertoEmOutrasUnidades(DocumentoGed documentoGed) { + public Boolean isSigiloso(Long id) { - Session session = (Session) this.em().getDelegate(); + Criteria criteria = this.newCriteria(); - Criteria criteria = session.createCriteria(persistentClass); + criteria.setProjection(Projections.id()); - criteria.setProjection(Projections.rowCount()); + criteria.add(Restrictions.eq("id", id)); + + criteria.add(Restrictions.isNotNull("sigilo")); - criteria.add(Restrictions.eq("id", documentoGed.getId())); - criteria.add(Restrictions.ne("unidade.id", documentoGed.getUnidade().getId())); + criteria.setMaxResults(1); - return (Long) criteria.uniqueResult() > 0; + return UtilObjeto.isReferencia(criteria.uniqueResult()); } - @SuppressWarnings("unchecked") @Override public Collection findByProcessoSigilo(Long idProcesso) { @@ -206,11 +257,16 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum criteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", idUsuario)); - Session session = (Session) this.em().getDelegate(); - - Criteria criteria = session.createCriteria(persistentClass); + Criteria criteria = this.newCriteria(); criteria.add(Restrictions.eq("processo.id", idProcesso)); + + criteria.add(Restrictions.isNull("dataInativo")); + + criteria.createAlias("status", "status"); + + criteria.add(Restrictions.eq("status.codigo", 0L)); + criteria.add(Restrictions.in("sigilo.id", criteriaPrivilegio.list())); return criteria.list(); diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/ProcessoDaoHibernate.java b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/ProcessoDaoHibernate.java index 95c32bf..516a462 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/ProcessoDaoHibernate.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/ProcessoDaoHibernate.java @@ -3,10 +3,16 @@ package br.com.centralit.api.dao.impl; import java.util.Calendar; import java.util.Collection; +import javax.persistence.FetchType; + import org.hibernate.Criteria; import org.hibernate.Session; +import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; +import org.hibernate.criterion.Subqueries; +import org.hibernate.sql.JoinType; +import org.hibernate.transform.ResultTransformer; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Repository; @@ -16,6 +22,7 @@ import br.com.centralit.api.model.SigiloPrivilegio; import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; import br.com.centralit.framework.dao.arquitetura.SearchSeven; import br.com.centralit.framework.model.Usuario; +import br.com.centralit.framework.util.UtilObjeto; import com.googlecode.genericdao.search.Filter; import com.googlecode.genericdao.search.ISearch; @@ -191,25 +198,53 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD Long idUsuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId(); - Criteria criteriaPrivilegio = this.newCriteria(SigiloPrivilegio.class); + Criteria criteria = this.newCriteria(); + + DetachedCriteria detachedCriteriaPrivilegio = DetachedCriteria.forClass(SigiloPrivilegio.class); + + detachedCriteriaPrivilegio.setProjection(Projections.property("sigilo.id")); + + detachedCriteriaPrivilegio.createAlias("privilegio", "privilegio"); - criteriaPrivilegio.setProjection(Projections.property("sigilo.id")); + detachedCriteriaPrivilegio.createAlias("privilegio.grupoPrivilegios", "grupoPrivilegio"); - criteriaPrivilegio.createAlias("privilegio", "privilegio"); + detachedCriteriaPrivilegio.add(Restrictions.isNull("grupoPrivilegio.dataInativo")); - criteriaPrivilegio.createAlias("privilegio.grupoPrivilegios", "grupoPrivilegio"); + detachedCriteriaPrivilegio.createCriteria("grupoPrivilegio.grupo").createAlias("grupoUsuarios", "grupoUsuario"); - criteriaPrivilegio.add(Restrictions.isNull("grupoPrivilegio.dataInativo")); + detachedCriteriaPrivilegio.add(Restrictions.isNull("grupoUsuario.dataInativo")); - criteriaPrivilegio.createCriteria("grupoPrivilegio.grupo").createAlias("grupoUsuarios", "grupoUsuario"); + detachedCriteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", idUsuario)); - criteriaPrivilegio.add(Restrictions.isNull("grupoUsuario.dataInativo")); + criteria.add(Subqueries.propertyIn("sigilo.id", detachedCriteriaPrivilegio)); - criteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", idUsuario)); + criteria.createAlias("documentos", "documentos", JoinType.LEFT_OUTER_JOIN); + + criteria.createAlias("documentos.status", "statusDocumento", JoinType.LEFT_OUTER_JOIN); + + criteria.add(Restrictions.or(Restrictions.eq("statusDocumento.codigo", 0L), Restrictions.isNull("validado"), Restrictions.eq("validado", false))); - search.getFilters().add(Filter.in("sigilo.id", criteriaPrivilegio.list())); + criteria.setProjection(Projections.distinct(Projections.property("id"))); + + search.getFilters().add(Filter.in("id", criteria.list())); return super.searchAndCount(search); } - + + @Override + public boolean isSigiloso(Long id) { + + Criteria criteria = this.newCriteria(); + + criteria.setProjection(Projections.id()); + + criteria.add(Restrictions.eq("id", id)); + + criteria.add(Restrictions.isNotNull("sigilo")); + + criteria.setMaxResults(1); + + return UtilObjeto.isReferencia(criteria.uniqueResult()); + } + } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/UnidadeProcessoDaoHibernate.java b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/UnidadeProcessoDaoHibernate.java index 1d6d3fa..e702058 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/UnidadeProcessoDaoHibernate.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/UnidadeProcessoDaoHibernate.java @@ -17,7 +17,6 @@ import br.com.centralit.api.model.SigiloPrivilegio; import br.com.centralit.api.model.UnidadeProcesso; import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; import br.com.centralit.framework.dao.arquitetura.SearchSeven; -import br.com.centralit.framework.model.GrupoPrivilegio; import br.com.centralit.framework.model.Usuario; import br.com.centralit.framework.util.UtilColecao; import br.com.centralit.framework.util.UtilObjeto; @@ -160,6 +159,35 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO *

* + * Método responsável por verificar se o processo foi enviado para outra unidade + * + * @author rogerio.costa + * + * @param idProcesso + * + * @return Boolean + */ + public Boolean isProcessoEnviado(Long idProcesso) { + + Criteria criteria = this.newCriteria(); + + criteria.setProjection(Projections.id()); + criteria.add(Restrictions.eq("processo.id", idProcesso)); + criteria.add(Restrictions.isNull("dataInativo")); + + return criteria.list().size() > 1; + + } + + /** + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * * Método responsável por obter através da unidade e processo * * @author rogerio.costa @@ -193,8 +221,8 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un */ @Override public SearchResult searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus) { - - //Filtro de permissões herdadas através de grupos + + // Filtro de permissões herdadas através de grupos DetachedCriteria detachedCriteriaPrivilegio = findSigiloUsuarioContemPermissaoAtravesDosGrupos(usuario); // Filtro da credencial do processo @@ -253,7 +281,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un detachedCredencialProcesso.add(Restrictions.or(Restrictions.eq("grupoUsuario.usuario.id", usuario.getId()), Restrictions.eq("usuario.id", usuario.getId()))); detachedCredencialProcesso.add(Restrictions.isNull("dataInativo")); - + return detachedCredencialProcesso; } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java b/cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java index 000fdc3..7eb0e05 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java @@ -151,6 +151,11 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) private Dominio status; + /** Atributo estado. */ + @ManyToOne(fetch = FetchType.LAZY) + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) + private Dominio estado; + /** Atributo tramitarDocumento. */ @ManyToOne(fetch = FetchType.LAZY) @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) @@ -973,4 +978,24 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { this.tipoSuporteDocumento = tipoSuporteDocumento; } + /** + * Retorna o valor do atributo estado + * + * @return Dominio + */ + public Dominio getEstado() { + + return estado; + } + + /** + * Define o valor do atributo estado. + * + * @param estado + */ + public void setEstado(Dominio estado) { + + this.estado = estado; + } + } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/model/Processo.java b/cit-ecm-api/src/main/java/br/com/centralit/api/model/Processo.java index 4839125..097feed 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/model/Processo.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/model/Processo.java @@ -27,6 +27,7 @@ import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer; import br.com.centralit.framework.json.Views; import br.com.centralit.framework.model.Dominio; import br.com.centralit.framework.util.UtilColecao; +import br.com.centralit.framework.util.UtilObjeto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonView; @@ -70,9 +71,9 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class Processo extends PersistentObjectUnidade { public static final String GRID_PROCESSO_NA_UNIDADE = "GRID_PROCESSO_NA_UNIDADE"; - + public static final String GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO = "GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO"; - + /** Atributo serialVersionUID. */ private static final long serialVersionUID = -6167513900417461697L; @@ -90,7 +91,7 @@ public class Processo extends PersistentObjectUnidade { @Temporal(TemporalType.TIMESTAMP) @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) - @JsonView({Views.UnidadeProcessoListView.class}) + @JsonView({ Views.UnidadeProcessoListView.class }) private Calendar dataReferencia; /** Atributo dataConclusao. */ @@ -110,15 +111,33 @@ public class Processo extends PersistentObjectUnidade { @Transient private Long idTask; - /** Atributo nup. */ - @JsonView({ Views.ProcessoEdit.class}) - @ManyToOne(fetch = FetchType.LAZY) - private Dominio tipoProtocolo; - /** Atributo observacaoGeral. */ @JsonView({ Views.ProcessoEdit.class }) private String observacaoGeral; + @JsonView({ Views.ProcessoEdit.class }) + private String tipoAssunto; + + /** Atributo idProcessInstance. */ + @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) + private Long idProcessInstance; + + /** Atributo aprovado. */ + @JsonView({ ViewsEcm.ProcessoList.class }) + private Boolean validado; + + /** Atributo prazoSigilo. */ + @Temporal(TemporalType.TIMESTAMP) + @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) + @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) + @JsonView({ ViewsEcm.ProcessoList.class }) + private Calendar prazoSigilo; + + /** Atributo nup. */ + @JsonView({ Views.ProcessoEdit.class }) + @ManyToOne(fetch = FetchType.LAZY) + private Dominio tipoProtocolo; + /** Atributo status. */ @ManyToOne(fetch = FetchType.LAZY) @JsonView({ Views.ProcessoEdit.class, Views.UnidadeProcessoListView.class }) @@ -139,16 +158,9 @@ public class Processo extends PersistentObjectUnidade { @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) private PlanoClassificacao assunto; - @JsonView({ Views.ProcessoEdit.class }) - private String tipoAssunto; - - /** Atributo idProcessInstance. */ - @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) - private Long idProcessInstance; - /** Atributo nivelAcesso. */ @ManyToOne(fetch = FetchType.LAZY) - @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) + @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) private NivelAcessoTipoProcesso nivelAcesso; @ManyToOne(fetch = FetchType.LAZY) @@ -209,17 +221,6 @@ public class Processo extends PersistentObjectUnidade { @JoinTable(name = "processo_anexado", joinColumns = { @JoinColumn(name = "processo_id") }, inverseJoinColumns = { @JoinColumn(name = "processo_anexado_id") }) private Collection anexados; - /** Atributo prazoSigilo. */ - @Temporal(TemporalType.TIMESTAMP) - @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) - @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) - @JsonView({ ViewsEcm.ProcessoList.class }) - private Calendar prazoSigilo; - - /** Atributo aprovado. */ - @JsonView({ ViewsEcm.ProcessoList.class }) - private Boolean aprovado; - /** Atributo credenciais. */ @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL) private Collection credenciais; @@ -814,23 +815,29 @@ public class Processo extends PersistentObjectUnidade { } /** - * Retorna o valor do atributo aprovado + * Retorna o valor do atributo validado * * @return Boolean */ - public Boolean getAprovado() { + public Boolean getValidado() { + + if (!UtilObjeto.isReferencia(this.validado)) { - return aprovado; + this.validado = Boolean.FALSE; + + } + + return validado; } /** - * Define o valor do atributo aprovado. + * Define o valor do atributo validado. * - * @param aprovado + * @param validado */ - public void setAprovado(Boolean aprovado) { + public void setValidado(Boolean validado) { - this.aprovado = aprovado; + this.validado = validado; } /** @@ -854,17 +861,21 @@ public class Processo extends PersistentObjectUnidade { } /** - *

Iniciativa(s): NUMERO_INICIATIVA

- * - *

Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO

- * + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * * Verifica se o processo foi tramitado. Levando em consideração a unidadeProcesso criada apartir da criação do processo. - * + * * @author maycon.silva - * + * * @return boolean */ - /*@JsonView({ Views.ProcessoEdit.class })*/ + /* @JsonView({ Views.ProcessoEdit.class }) */ public boolean isTramitado() { return !UtilColecao.isVazio(this.getUnidadesProcesso()) && this.getUnidadesProcesso().size() > 1; diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/CredencialProcessoService.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/CredencialProcessoService.java index 9db3736..03a13ed 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/CredencialProcessoService.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/CredencialProcessoService.java @@ -4,8 +4,10 @@ import java.util.Collection; import br.com.centralit.api.model.CredencialProcesso; import br.com.centralit.api.model.Processo; +import br.com.centralit.api.model.Sigilo; import br.com.centralit.api.viewHelper.GrupoUsuarioVH; import br.com.centralit.api.viewHelper.HerancaSistemaVH; +import br.com.centralit.framework.model.Grupo; import br.com.centralit.framework.service.arquitetura.GenericService; /** @@ -200,4 +202,23 @@ public interface CredencialProcessoService extends GenericService + * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * Método responsável por obter grupos através do sigilo + * + * @author rogerio.costa + * + * @param sigilo + * + * @return Collection + */ + Collection findGrupoPorSigilo(Sigilo sigilo); + } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/DocumentoGedService.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/DocumentoGedService.java index ad78d9f..25e62a3 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/DocumentoGedService.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/DocumentoGedService.java @@ -3,9 +3,7 @@ package br.com.centralit.api.service; import java.util.Collection; import br.com.centralit.api.model.DocumentoGed; -import br.com.centralit.framework.model.Dominio; import br.com.centralit.api.model.Processo; -import br.com.centralit.api.viewHelper.AnexarProcessoVH; import br.com.centralit.framework.model.Dominio; import br.com.centralit.framework.service.arquitetura.GenericService; @@ -40,7 +38,7 @@ public interface DocumentoGedService extends GenericService void saveIconeDocumento(DocumentoGed documentoGed, Dominio tipoAnexo); void anexarDocumento(Processo processoDestinoAnexo, Processo processoOrigem); - + Collection findByProcessoSigilo(Long idProcesso); /** @@ -61,19 +59,23 @@ public interface DocumentoGedService extends GenericService * @return Collection */ Collection findPorPlanoClassificacao(Long idPlanoClassificacao); - + /** * - *

Iniciativa(s): NUMERO_INICIATIVA

- * - *

Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO

- * + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * * Método responsável por - * + * * @author andre.silva - * + * * @param listaDocumentos */ - void atualizarSigiloDocumentos(Collection listaDocumentos); + Collection atualizarSigiloDocumentos(Collection listaDocumentos); } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/UnidadeProcessoService.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/UnidadeProcessoService.java index 6ea3e0d..5dc652b 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/UnidadeProcessoService.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/UnidadeProcessoService.java @@ -174,10 +174,30 @@ public interface UnidadeProcessoService extends GenericService SearchResult */ SearchResult searchAndCountPorUnidade(ISearch search); - + + /** + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * Método responsável por verificar se o processo foi enviado para outra unidade + * + * @author rogerio.costa + * + * @param idProcesso + * + * @return Boolean + */ + Boolean isProcessoEnviado(Long idProcesso); + } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/CredencialProcessoServiceImpl.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/CredencialProcessoServiceImpl.java index e5d9540..6a5ec7e 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/CredencialProcessoServiceImpl.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/CredencialProcessoServiceImpl.java @@ -543,7 +543,7 @@ public class CredencialProcessoServiceImpl extends GenericServiceImpl */ - private Collection findGrupoPorSigilo(Sigilo sigilo) { + public Collection findGrupoPorSigilo(Sigilo sigilo) { Collection idPrivilegios = this.getPrivilegios(sigilo); diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/DocumentoGedServiceImpl.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/DocumentoGedServiceImpl.java index 208a3c1..09fb11c 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/DocumentoGedServiceImpl.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/DocumentoGedServiceImpl.java @@ -34,6 +34,7 @@ import br.com.centralit.api.service.ProcessoService; import br.com.centralit.api.service.SigiloService; import br.com.centralit.api.service.SolrService; import br.com.centralit.api.service.TipoDocumentoService; +import br.com.centralit.api.service.UnidadeProcessoService; import br.com.centralit.framework.exception.BusinessException; import br.com.centralit.framework.exception.CodigoErro; import br.com.centralit.framework.model.Dominio; @@ -82,7 +83,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl listaDocumentos) { + public Collection atualizarSigiloDocumentos(Collection listaDocumentos) { + + Collection documentosAlterados = new LinkedList(); if (!UtilColecao.isVazio(listaDocumentos)) { for (DocumentoGed documento : listaDocumentos) { DocumentoGed entity = (DocumentoGed) this.documentoGedDao.getReference(documento.getId()); - if (documento.getSigilo() == null) { - entity.setAprovado(Boolean.TRUE); - } else { - entity.setSigiloOriginal(documento.getSigilo()); - entity.setNivelAcessoOriginal(documento.getNivelAcesso()); - entity.setSigilo(documento.getSigilo()); - entity.setNivelAcesso(documento.getNivelAcesso()); - } - - super.merge(entity); + entity.setSigiloOriginal(documento.getSigilo()); + entity.setNivelAcessoOriginal(documento.getNivelAcesso()); + entity.setSigilo(documento.getSigilo()); + entity.setNivelAcesso(documento.getNivelAcesso()); + entity.setStatus(this.dominioService.findByChaveAndCodigo("statusDocumentoGed", 1L)); + documentosAlterados.add(entity); } } + return documentosAlterados; + } /** diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/InicializarEcmServiceImpl.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/InicializarEcmServiceImpl.java index b8794e6..555707f 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/InicializarEcmServiceImpl.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/InicializarEcmServiceImpl.java @@ -246,7 +246,7 @@ public class InicializarEcmServiceImpl extends UtilStartup { pgProcessoDocumentoSigiloso = this.paginaService.saveIfNotExist(pgProcessoDocumentoSigiloso); Menu menuProcessoDocumentoSigiloso = new Menu("Processos e Documentos Sigilosos", pgProcessoDocumentoSigiloso, menuProcesso, 2, 5, null, null, null, null, modulo, "CLASSIFICAR_PROCESSO_DOCUMENTO"); - menuProcessoDocumentoSigiloso.setIncludes(this.gerarArquivosMenu(menuProcessoDocumentoSigiloso, this.CIT_ECM_WEB_ANGULAR, "ClassificarDocumentoProcesso", true, true, true)); + menuProcessoDocumentoSigiloso.setIncludes(this.gerarArquivosMenu(menuProcessoDocumentoSigiloso, this.CIT_ECM_WEB_ANGULAR, "ClassificarDocumentoProcesso", true, true, false)); this.menuService.mergeIfNotExist(menuProcessoDocumentoSigiloso); Pagina pgGerenciarProcessoListUnidade = new Pagina("Processos Abertos na Unidade", "/cit-ecm-web/html/gerenciarProcesso/gerenciarProcessoListUnidade.html"); diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/ProcessoServiceImpl.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/ProcessoServiceImpl.java index 53a8de3..599bdb7 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/ProcessoServiceImpl.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/ProcessoServiceImpl.java @@ -34,6 +34,7 @@ import br.com.centralit.api.service.DocumentoGedService; import br.com.centralit.api.service.DominioService; import br.com.centralit.api.service.GrupoService; import br.com.centralit.api.service.HistoricoAtribuicaoProcessoService; +import br.com.centralit.api.service.NotificacaoService; import br.com.centralit.api.service.PlanoClassificacaoService; import br.com.centralit.api.service.ProcessoService; import br.com.centralit.api.service.SigiloService; @@ -46,9 +47,13 @@ import br.com.centralit.framework.esi.environment.EnvironmentOutput; import br.com.centralit.framework.esi.environment.EnvironmentVariable; import br.com.centralit.framework.exception.BusinessException; import br.com.centralit.framework.exception.CodigoErro; +import br.com.centralit.framework.model.Dominio; import br.com.centralit.framework.model.Grupo; +import br.com.centralit.framework.model.Notificacao; +import br.com.centralit.framework.model.NotificacaoGrupo; import br.com.centralit.framework.model.Unidade; import br.com.centralit.framework.service.arquitetura.GenericServiceImpl; +import br.com.centralit.framework.util.Util; import br.com.centralit.framework.util.UtilColecao; import br.com.centralit.framework.util.UtilDate; import br.com.centralit.framework.util.UtilObjeto; @@ -91,7 +96,8 @@ import com.googlecode.genericdao.search.SearchResult; @Service("processoService") public class ProcessoServiceImpl extends GenericServiceImpl implements ProcessoService { - private static final String VALIDAR_PROCESSOS_OUTRAS_UNIDADES = "ECM.VALIDACAO.VALIDAR_PROCESSOS_OUTRAS_UNIDADES"; + /** Cosntante VALIDAR_OUTRAS_UNIDADES. */ + private static final String VALIDAR_OUTRAS_UNIDADES = "ECM.VALIDACAO.VALIDAR_ALTERACAO_NIVEL_ACESSO_OUTRAS_UNIDADES"; private final ProcessoDao processoDao; @@ -141,6 +147,10 @@ public class ProcessoServiceImpl extends GenericServiceImpl impl @Autowired private HttpServletRequest request; + /** Atributo notificacaoService. */ + @Autowired + private NotificacaoService notificacaoService; + @Autowired public ProcessoServiceImpl( final ProcessoDao processoDao, @Qualifier("processoValidator") final Validator validator ) { @@ -153,7 +163,6 @@ public class ProcessoServiceImpl extends GenericServiceImpl impl public Processo save(Processo entity) { this.validarEntidade(entity, this.validator); - this.validarUnidade(); this.montarEntidade(entity); @@ -170,22 +179,76 @@ public class ProcessoServiceImpl extends GenericServiceImpl impl this.saveSolr(processo); - if (entity.getSigilo() == null) { + // Verifica se o processo é sigiloso, verdadeiro sejá estarta o businessProcess, falso envia uma notificação para os grupos responsáeis. + if (!UtilObjeto.isReferencia(processo.getSigilo())) { + this.startBusinessProcess(processo); + } else { + + this.enviarNotificacaoProcessoSigiloso(processo); } return processo; } /** - *

Iniciativa(s): NUMERO_INICIATIVA

- * - *

Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO

- * + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * Método responsável por enviar notificação para os responsável sobre a criação do processo sigiloso + * + * @author rogerio.costa + * + * @param processo + */ + private void enviarNotificacaoProcessoSigiloso(Processo processo) { + + StringBuilder sb = new StringBuilder(); + + sb.append("O processo ").append(processo.getNup()).append(" foi criado como ").append(processo.getSigilo().getTipoSigilo().getDescricao()); + + Dominio tipoNotificacao = this.dominioService.findByChaveAndCodigo("tipoNotificacao", 4L); + + Dominio tipoPrioridade = this.dominioService.findByChaveAndCodigo("tipoPrioridade", 2L); + + Notificacao notificacao = new Notificacao("Processo sigiloso", sb.toString(), tipoNotificacao, tipoPrioridade, null, null, null); + + Collection grupos = this.credencialProcessoService.findGrupoPorSigilo(processo.getSigilo()); + + if (!UtilColecao.isVazio(grupos)) { + + notificacao.setNotificacaoGrupos(new LinkedList()); + + for (Grupo grupo : grupos) { + + NotificacaoGrupo notificacaoGrupo = new NotificacaoGrupo(grupo, notificacao); + + notificacao.getNotificacaoGrupos().add(notificacaoGrupo); + } + + } + + this.notificacaoService.save(notificacao); + } + + /** + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * * Método responsável por validar a unidade vigente - * + * * @author rogerio.costa - * + * */ private void validarUnidade() { @@ -195,14 +258,18 @@ public class ProcessoServiceImpl extends GenericServiceImpl impl } /** - *

Iniciativa(s): NUMERO_INICIATIVA

- * - *

Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO

- * + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * * Método responsável por - * + * * @author rogerio.costa - * + * * @param processo */ private void saveSolr(Processo processo) { @@ -242,25 +309,28 @@ public class ProcessoServiceImpl extends GenericServiceImpl impl Processo processo = (Processo) this.processoDao.getReference(entity.getId()); - this.validarEntidade(entity, this.validator); + if (entity.getStatus().getCodigo() == 3L) { - this.montarEntidade(processo); + this.validarEntidade(entity, this.validator); - processo.setSigiloOriginal(processo.getSigilo()); - processo.setNivelAcessoOriginal(processo.getNivelAcesso()); + this.montarEntidade(processo); - processo.setSigilo(entity.getSigilo()); - processo.setNivelAcesso(entity.getNivelAcesso()); - processo.setAprovado(entity.getAprovado()); + processo.setSigiloOriginal(processo.getSigilo()); + processo.setNivelAcessoOriginal(processo.getNivelAcesso()); + processo.setSigilo(entity.getSigilo()); + processo.setNivelAcesso(entity.getNivelAcesso()); + processo.setValidado(entity.getValidado()); + processo.setStatus(this.dominioService.findByChaveAndCodigo("statusProcesso", 4L)); - processo = super.merge(processo); + if (UtilObjeto.isReferencia(processo.getValidado()) && processo.getValidado()) { - this.documentoGedService.atualizarSigiloDocumentos(entity.getDocumentos()); - - if (UtilObjeto.isReferencia(processo.getAprovado()) && processo.getAprovado()) { + this.startBusinessProcess(processo); + } - this.startBusinessProcess(processo); } + + processo.setDocumentos(this.documentoGedService.atualizarSigiloDocumentos(entity.getDocumentos())); + return processo; } @@ -271,11 +341,9 @@ public class ProcessoServiceImpl extends GenericServiceImpl impl this.montarEntidade(processo); - try { -// this.solrService.addProcesso(processo); - } catch (Exception e) { - e.printStackTrace(); - } + // this.saveSolr(processo); + + this.validarAbertosEmOutrasUnidades(processo); return super.merge(processo); } @@ -426,9 +494,18 @@ public class ProcessoServiceImpl extends GenericServiceImpl impl } } + if (UtilObjeto.isReferencia(processo.getTipoProtocolo())) { + + processo.setTipoProtocolo(this.dominioService.findByChaveAndCodigo("tipoProtocoloNup", processo.getTipoProtocolo().getCodigo())); + + } + // Verifica se o sigilo foi selecionado if (UtilObjeto.isReferencia(processo.getSigilo()) && UtilObjeto.isReferencia(processo.getSigilo().getId())) { processo.setSigilo(this.sigiloService.getReference(processo.getSigilo().getId())); + // Processo sigiloso inicia com o status Aguardando validação. + processo.setStatus(this.dominioService.findByChaveAndCodigo("statusProcesso", 3L)); + this.atribuirPrazoPadraoProcesso(processo); } else { processo.setSigilo(null); @@ -978,15 +1055,14 @@ public class ProcessoServiceImpl extends GenericServiceImpl impl * @param entity * História de usuário #3216_CA007 */ - @SuppressWarnings("unused") private void validarAbertosEmOutrasUnidades(Processo entity) { - if (UtilObjeto.isReferencia(entity.getNivelAcesso().getNivelAcesso())) { - if (entity.getNivelAcesso().getNivelAcesso().getCodigo() == 0L) { - Collection listaUnidades = this.unidadeProcessoService.findProcesso(entity); - if (listaUnidades != null && listaUnidades.size() > 0) { - throw new BusinessException(ProcessoServiceImpl.VALIDAR_PROCESSOS_OUTRAS_UNIDADES, CodigoErro.REGRA_NEGOCIO.getValue()); - } + // verifica se o documento está passando a ser sigiloso + if (UtilObjeto.isReferencia(entity.getSigilo()) && !this.processoDao.isSigiloso(entity.getId())) { + + if (this.unidadeProcessoService.isProcessoEnviado(entity.getId())) { + + throw new BusinessException(VALIDAR_OUTRAS_UNIDADES, CodigoErro.REGRA_NEGOCIO.getValue()); } } } @@ -1107,5 +1183,5 @@ public class ProcessoServiceImpl extends GenericServiceImpl impl return this.processoDao.getProcessoByProtocolo(nup); } - + } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/UnidadeProcessoServiceImpl.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/UnidadeProcessoServiceImpl.java index ce2603e..e9b6ab6 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/UnidadeProcessoServiceImpl.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/UnidadeProcessoServiceImpl.java @@ -105,7 +105,7 @@ public class UnidadeProcessoServiceImpl extends GenericServiceImpl SearchResult */ @Override public SearchResult searchAndCountPorUnidade(ISearch search) { + Dominio dominioStatusProcesso = dominioService.findByChaveAndCodigo(Dominio.TIPO_STATUS_PROCESSO_ECM, Dominio.TIPO_STATUS_PROCESSO_ECM_CONCLUIDO); Usuario usuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ); return this.unidadeProcessoDao.searchAndCountPorUnidade(search, usuario, dominioStatusProcesso.getId()); } - -} \ No newline at end of file + + /** + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * Método responsável por verificar se o processo foi enviado para outra unidade + * + * @author rogerio.costa + * + * @param idProcesso + * + * @return Boolean + */ + public Boolean isProcessoEnviado(Long idProcesso) { + + return this.unidadeProcessoDao.isProcessoEnviado(idProcesso); + + } + +} diff --git a/cit-ecm-web/src/main/java/br/com/centralit/controller/DocumentoGedController.java b/cit-ecm-web/src/main/java/br/com/centralit/controller/DocumentoGedController.java index d7982c6..fb7d5bb 100644 --- a/cit-ecm-web/src/main/java/br/com/centralit/controller/DocumentoGedController.java +++ b/cit-ecm-web/src/main/java/br/com/centralit/controller/DocumentoGedController.java @@ -16,12 +16,50 @@ import br.com.centralit.framework.controller.GenericController; import br.com.centralit.framework.json.ResponseBodyWrapper; import br.com.centralit.framework.view.ResultResponseVH; +/** + *

+ * + *

+ * + *

+ * Company: Central IT - Governança Corporativa - + *

+ * + *

+ * Title: + *

+ * + *

+ * Description: + *

+ * + *

+ * Iniciativa(s): NUMERO_INICIATIVA + *

+ * + *

+ * Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO + *

+ * + * @since 25/04/2016 - 09:18:05 + * + * @version 1.0.0 + * + * @author rogerio.costa + * + */ @Controller @RequestMapping("/rest/documentoGed") public class DocumentoGedController extends GenericController { + /** Atributo documentoGedService. */ private DocumentoGedService documentoGedService; + /** + * Responsável pela criação de novas instâncias desta classe. + * + * @param documentoGedService + */ @Autowired public DocumentoGedController( DocumentoGedService documentoGedService ) { diff --git a/cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java b/cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java index acb0734..e92eed3 100644 --- a/cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java +++ b/cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java @@ -167,9 +167,9 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen List list = new ArrayList(); - list.add(new Dominio("statusDocumentoGed", "Minuta", "MINUTA", 1L)); - list.add(new Dominio("statusDocumentoGed", "Original", "ORIGINAL", 2L)); - list.add(new Dominio("statusDocumentoGed", "Cópia", "COPIA", 3L)); + list.add(new Dominio("estadoDocumentoGed", "Minuta", "MINUTA", 1L)); + list.add(new Dominio("estadoDocumentoGed", "Original", "ORIGINAL", 2L)); + list.add(new Dominio("estadoDocumentoGed", "Cópia", "COPIA", 3L)); list.add(new Dominio("tipoDestinacao", "Guardar Permanente", "GUARDAR_PERMANENTE", 1L)); list.add(new Dominio("tipoDestinacao", "Eliminação", "ELIMINAR", 2L)); @@ -203,6 +203,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen list.add(new Dominio("statusProcesso", "Concluído", "CONCLUIDO", 1L)); list.add(new Dominio("statusProcesso", "Em andamento", "EM_ANDAMENTO", 2L)); + list.add(new Dominio("statusProcesso", "Aguardando Validação", "AGUARDANDO_VALIDACAO", 3L)); + list.add(new Dominio("statusProcesso", "Validado", "VALIDADO", 4L)); + + list.add(new Dominio("statusDocumentoGed", "Aguardando Validação", "AGUARDANDO_VALIDACAO", 0L)); + list.add(new Dominio("statusDocumentoGed", "Validado", "VALIDADO", 1L)); list.add(new Dominio("filtroPesquisa", "Ambos", "AMBOS", 0L)); list.add(new Dominio("filtroPesquisa", "Processo", "PROCESSO", 1L)); @@ -439,7 +444,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.UNIDADE_GESTORA ", "Unidade gestora", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_CRIACAO ", "Data criação", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.PLACEHOLDER_PESQUISA ", "Digite o Nup, tipo de processo, tipo de documento, conteúdo do documento, autor, assunto, destinatário...", dominio, modulo)); - internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATE ", "Até", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATE", "Até", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VALIDADO", "Validado", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ESTADO", "Estado", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VALIDAR", "Validar", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NAO_CONTEM_DOCUMENTOS", "Não contém documentos", dominio, modulo)); } @@ -473,6 +482,8 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.REMOCAO_COM_VINCULO", "Não é possível excluir pois o mesmo encontra-se em uso por outro cadastro no sistema!", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.PERMISSAO_OPERACAO", "Você não tem permissão para executar a operação.", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.GRUPO_PADRAO_EM_OUTRA_UNIDADE", "O grupo selecionado como padrão está sendo usado como grupo padrão da unidade ", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.VALIDAR_ALTERACAO_NIVEL_ACESSO_OUTRAS_UNIDADES", "Não é possível alterar o nível de acesso para sigiloso, pois o processo foi enviado para outra unidade.", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.VALIDAR_NIVEL_ACESSO", "Não é possível incluir documento com o nível de acesso menor que o do processo.", dominio, modulo)); } @@ -550,5 +561,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.TAREFA_SOBRESTADA_SUCESSO", "Tarefa sobrestada com sucesso!", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.CONFIRMA_REATIVACAO_TAREFA", "Confirma reativação da tarefa?", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.TAREFA_REATIVADA", "Tarefa reativada com sucesso", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.VALIDADO", "Validado com sucesso!", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.SELECIONE_UM_ITEM_PARA_VALIDACAO", "Selecione um item para validar.", dominio, modulo)); } } diff --git a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoController.js b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoController.js index bef0b87..42c7a79 100644 --- a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoController.js +++ b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoController.js @@ -1,111 +1,40 @@ 'use strict'; citApp.controller('ClassificarDocumentoProcessoController', ['$scope', 'ProcessoRepository', '$translate', '$timeout', 'DominioRepository', '$compile', '$injector', 'DocumentoGedRepository', 'appService', 'NivelAcessoTipoProcessoRepository', 'HipoteseLegalRepository', 'NivelAcessoTipoDocumentoRepository', 'HistoricoAlteracaoProcessoRepository', 'SigiloRepository', function ClassificarDocumentoProcessoController($scope, ProcessoRepository, $translate, $timeout, DominioRepository, $compile, $injector, DocumentoGedRepository, appService, NivelAcessoTipoProcessoRepository, HipoteseLegalRepository, NivelAcessoTipoDocumentoRepository, HistoricoAlteracaoProcessoRepository, SigiloRepository) { - $scope.$showAdvancedFilters = false; - $scope.totalPages = 10; - $scope.totalItens = 0; - $scope.limit = 10; - $scope.processos = []; - $scope.businessProcess = null; - $scope.indexProcessoNegocio = null; - - $scope.idPainelItem = 0; - - $scope.tabAtual = 0; - - $scope.aprovado = null; - - $scope.tabs = [ {active: true} - ,{active: false} - ]; - - $scope.showTaskTab = true; - $scope.init = function(showTaskTab) { - $scope.showTaskTab = showTaskTab; - }; - - $scope.setCurrentTab = function(tab) { - $scope.tabAtual = tab; - for (var i = 0; i < $scope.tabs.length; i++) { - $scope.tabs[i].active = i == tab; - } - }; - - $scope.resetForm = function() { - angular.element("#editProcessoEcm").scope().resetForm(); - }; - - $scope.headers = [{title : $translate.instant('ECM.LABEL.PROTOCOLO'), value : 'nup' }, - {title : $translate.instant('ECM.LABEL.NIVEL_FINAL'), value : 'nivelAcesso.nivelAcesso.descricao'} , - {title : $translate.instant('ECM.LABEL.PROPOSTA'), value : 'sigilo.tipoSigilo.descricao'}, - {title : $translate.instant('ECM.LABEL.PRAZO_SIGILO'), value : 'prazoSigilo', filter : 'dateBR' }]; - - $scope.filterCriteria = { - start : 1, - dir : 'asc', - sort : 'id', - limit : 10, - fields: ['id', 'nup', 'nivelAcesso.nivelAcesso.descricao', 'sigilo.tipoSigilo.descricao', 'nivelAcesso.nivelAcesso.descricao', 'prazoSigilo'], - filters : [{type : 'string', field : 'nup' }, - {type : 'string', field : 'nivelAcesso.nivelAcesso.descricao' } , - {type : 'string', field : 'sigilo.tipoSigilo.descricao', comparison : 'nn'}, - {type : 'date', field : 'prazoSigilo' }] - }; - - // Will be called when filtering the grid, will reset the page number to one - $scope.filterResult = function() { - - //Timeout adicionado para que os filtros de pesquisa funcionem - $timeout(function(){ - $scope.filterCriteria.start = 1; - $scope.fetchResult().then(function() { - // The request fires correctly but sometimes the ui doesn't update, - // that's a fix - $scope.filterCriteria.start = 1; - }); - - }); - }; - - // call back function that we passed to our custom directive sortBy, will be - // called when clicking on any field to sort - $scope.onSort = function(sortedBy, sortDir) { - $scope.filterCriteria.dir = sortDir; - $scope.filterCriteria.sort = sortedBy; - $scope.filterCriteria.start = 1; - $scope.fetchResult().then(function() { - // The request fires correctly but sometimes the ui doesn't update, - // that's a fix - $scope.filterCriteria.start = 1; - }); - }; - - - // RECUPERA LISTA DE TAREFAS E SETA RESULTADO NA GRID - $scope.fetchResult = function(page) { - - $scope.setCurrentTab(0); - $scope.setLoading(true); - - return ProcessoRepository.getListPage($scope.filterCriteria).then(function(result) { - $scope.processos = result.originalElement.objects; - $scope.totalPages = result.originalElement.totalPages; - $scope.totalItens = result.originalElement.totalItens; - $scope.setLoading(false); - }, function() { - $scope.totalPages = 0; - $scope.totalItens = 0; - $scope.setLoading(false); - }); - }; + //Iniciar classificação + $scope.iniciar = function(processo){ + + $scope.setLoading(true); + + $scope.processoValidacao = processo; + + $scope.validado = $scope.processoValidacao.validado; + + $scope.contemDocumentoParaValidar = $.grep($scope.processoValidacao.documentos, function(e){ return e.status.codigo == 0; })[0] != null; + + $scope.findPorIdTipoProcesso(processo.tipoProcesso.id); + + if($scope.processoValidacao.documentos){ + + angular.forEach($scope.processoValidacao.documentos, function (item) { + + $scope.findNivelAcessoTipoDocumento(item); + + }); + }; + + $scope.setLoading(false); + + }; $scope.removerAtributos = function(){ - angular.forEach($scope.processo.documentos, function (item) { + angular.forEach($scope.processoValidacao.documentos, function (item) { delete item.autorUserName; delete item.unidadeNome; delete item.documentoVersao; delete item.originalElement; + delete item.nivelAcessoList; if(item.nivelAcesso != undefined && item.nivelAcesso.sigilos != null){ angular.forEach(item.nivelAcesso.sigilos, function (item) { @@ -132,22 +61,19 @@ citApp.controller('ClassificarDocumentoProcessoController', ['$scope', 'Processo if($scope.classificarDocumentoProcessoForm.$valid){ $scope.setLoadingSalva(true); - $scope.removerAtributos(); - - $scope.processo.aprovado = $scope.aprovado; - ProcessoRepository.atualizarSigiloProcesso($scope.processo).then(function(result) { - $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO')); + $scope.processoValidacao.validado = $scope.validado; + ProcessoRepository.atualizarSigiloProcesso($scope.processoValidacao).then(function(result) { $scope.historicoAlteracao(result.originalElement); - ProcessoRepository.get($scope.processo.id).then(function(result){ - $scope.processo = result.originalElement; - $scope.aprovado = result.originalElement.aprovado; - $scope.carregarListaDocumentos($scope.processo.id); - }); $scope.classificarDocumentoProcessoForm.$submitted = false; $scope.atualizaProcesso(); + $scope.showAlert("success", $translate.instant('ECM.MSG.VALIDADO')); + $scope.setLoading(false); + + $timeout(function(){ + $scope.$parent.$parent.closeWidget(); + }); }); - $scope.setLoading(false); }else{ //Mensagem de erro de campos obrigatorios não preenchidos $scope.showAlert('error', $translate.instant('MSG.MN001'), " ", false); @@ -173,70 +99,44 @@ citApp.controller('ClassificarDocumentoProcessoController', ['$scope', 'Processo $scope.closeWidget = function() { angular.element("#searchGerenciarProcesso").scope().closeWidget(); }; - - $scope.initializeNivelAcessoDocumento = function(){ - $scope.nivelAcessoTipoDocumentoList = []; - NivelAcessoTipoDocumentoRepository.findAll().then(function(result) { - $scope.nivelAcessoTipoDocumentoList = result; - }); - }; - - - $scope.initializeSigiloDocumento = function(){ - $scope.sigiloDocumentoList = [ ]; - SigiloRepository.getList().then(function(result) { - $scope.sigilos = result; - }); - }; - $scope.iniciar = function(processo){ + //Listar nivelAcessoTipoDocumento + $scope.findNivelAcessoTipoDocumento = function(documento){ - ProcessoRepository.get(processo.id).then(function(result) { - $scope.processo = result.originalElement; - $scope.aprovado = result.originalElement.aprovado; - $scope.carregarListaDocumentos(processo.id); - }); - - $scope.findNivelPorIdProcesso(processo.tipoProcesso.id); - + documento.nivelAcessoList = []; + + return NivelAcessoTipoDocumentoRepository.findPorIdTipoDocumento(documento.tipoDocumento.id).then(function(result) { + + angular.forEach(result, function (nivelAcesso) { + //seta o originalElement do result + documento.nivelAcessoList.push(nivelAcesso.originalElement); + //substitui o nivelAcesso do documento + if(documento.nivelAcesso.id === nivelAcesso.originalElement.id){ + + documento.nivelAcesso = nivelAcesso.originalElement; + + } + + }); + }); }; - $scope.carregarListaDocumentos = function(idProcesso){ - $scope.processo.documentos = []; - DocumentoGedRepository.findByProcessoSigilo(idProcesso).then(function(result) { - angular.forEach(result, function(item) { - - var documento = item.originalElement; - $scope.processo.documentos.push(documento); - - }); - }); - } ; - - - $scope.findNivelPorIdProcesso = function(idTipoProcesso){ + $scope.limparSigilo = function(documento){ + + $timeout(function(){ + if(documento.nivelAcesso.nivelAcesso.codigo != 0){ + + documento.sigilo = null; + + } + }); + }; + + $scope.findPorIdTipoProcesso = function(idTipoProcesso){ NivelAcessoTipoProcessoRepository.findPorIdTipoProcesso(idTipoProcesso).then(function(result) { $scope.nivelAcessoList = result; }); }; - - // Consulta entidade e mostra no formulario - $scope.getProcesso = function(processo){ - $scope.setLoadingGet(true); - - ProcessoRepository.get(processo.id).then(function(result) { - $scope.processo = result.originalElement; - $scope.aprovado = result.originalElement.aprovado; - $scope.setLoading(false); - $scope.constroiRelacionamentoTipoProcesso($scope.processo.tipoProcesso); - - }); - }; - - - $scope.initializeNivelAcessoDocumento(); - $scope.initializeSigiloDocumento(); - $scope.fetchResult(); }]); diff --git a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoListController.js b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoListController.js index 5d210d6..b87679c 100644 --- a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoListController.js +++ b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoListController.js @@ -1,43 +1,12 @@ 'use strict'; citApp.controller('ClassificarDocumentoProcessoListController', ['$scope', 'ProcessoRepository', '$translate', '$timeout', 'DominioRepository', '$compile', '$injector', 'DocumentoGedRepository', 'appService', function ClassificarDocumentoProcessoListController($scope, ProcessoRepository, $translate, $timeout, DominioRepository, $compile, $injector, DocumentoGedRepository, appService) { - $scope.$showAdvancedFilters = false; - $scope.totalPages = 10; - $scope.totalItens = 0; - $scope.limit = 10; - $scope.processos = []; - $scope.businessProcess = null; - $scope.indexProcessoNegocio = null; - - $scope.idPainelItem = 0; - - $scope.tabAtual = 0; - - $scope.tabs = [ {active: true} - ,{active: false} - ]; - - $scope.showTaskTab = true; - $scope.init = function(showTaskTab) { - $scope.showTaskTab = showTaskTab; - }; - - $scope.setCurrentTab = function(tab) { - $scope.tabAtual = tab; - for (var i = 0; i < $scope.tabs.length; i++) { - $scope.tabs[i].active = i == tab; - } - }; - - $scope.resetForm = function() { - angular.element("#editProcessoEcm").scope().resetForm(); - }; - - $scope.headers = [{title : $translate.instant('LABEL.PROTOCOLO'), value : 'nup' }, - {title : $translate.instant('LABEL.PROPOSTA'), value : 'sigiloOriginal.tipoSigilo.descricao'}, - {title : $translate.instant('LABEL.NIVEL_FINAL'), value : 'sigilo.tipoSigilo.descricao'} , - {title : $translate.instant('LABEL.PRAZO_SIGILO'), value : 'prazoSigilo', filter : 'dateBR' }]; + + $scope.headers = [{title : $translate.instant('ECM.LABEL.PROTOCOLO'), value : 'nup' }, + {title : $translate.instant('ECM.LABEL.PROPOSTA'), value : 'sigiloOriginal.tipoSigilo.descricao'}, + {title : $translate.instant('ECM.LABEL.NIVEL_FINAL'), value : 'sigilo.tipoSigilo.descricao'} , + {title : $translate.instant('ECM.LABEL.PRAZO_SIGILO'), value : 'prazoSigilo', filter : 'dateBR' }]; $scope.filterCriteria = { start : 1, @@ -52,115 +21,68 @@ citApp.controller('ClassificarDocumentoProcessoListController', ['$scope', 'Proc {type : 'date', field : 'prazoSigilo' }] }; - // Will be called when filtering the grid, will reset the page number to one - $scope.filterResult = function() { - - //Timeout adicionado para que os filtros de pesquisa funcionem - $timeout(function(){ - $scope.filterCriteria.start = 1; - $scope.fetchResult().then(function() { - // The request fires correctly but sometimes the ui doesn't update, - // that's a fix - $scope.filterCriteria.start = 1; - }); - - }); - }; - - // call back function that we passed to our custom directive sortBy, will be - // called when clicking on any field to sort - $scope.onSort = function(sortedBy, sortDir) { - $scope.filterCriteria.dir = sortDir; - $scope.filterCriteria.sort = sortedBy; - $scope.filterCriteria.start = 1; - $scope.fetchResult().then(function() { - // The request fires correctly but sometimes the ui doesn't update, - // that's a fix - $scope.filterCriteria.start = 1; - }); - }; - - - // RECUPERA LISTA DE TAREFAS E SETA RESULTADO NA GRID - $scope.fetchResult = function(page) { - - $scope.setCurrentTab(0); - $scope.setLoading(true); - - return ProcessoRepository.getListPage($scope.filterCriteria).then(function(result) { - $scope.processos = result.originalElement.objects; - $scope.totalPages = result.originalElement.totalPages; - $scope.totalItens = result.originalElement.totalItens; - $scope.setLoading(false); - }, function() { - $scope.totalPages = 0; - $scope.totalItens = 0; - $scope.setLoading(false); - }); + $scope.atualizarGrid = function() { + $scope.filterResult(); }; - + // ABRI Processo SELECIONADA - $scope.abrirVisualizar = function(processo){ - - var pagina = '/cit-ecm-web/html/gerenciarProcesso/gerenciarProcesso.html'; + $scope.abreValidar = function(){ - ProcessoRepository.get(processo.id).then(function(result){ - processo = result.originalElement; - DocumentoGedRepository.findByProcessoSigilo(processo.id).then(function(result) { - processo.documentos = result; - }); - }); - - if (appService.existsWorkspace(pagina)) { - $scope.$openModalConfirm({message:$translate.instant('ECM.MSG.EXISTE_PROCESSO_ABERTO'), callback: function(){ - $scope.$modalConfirmInstance.dismiss('cancel'); - $scope.setLoading(true); + if($scope.modelSelecionado && $scope.modelSelecionado.id){ + + var pagina = '/cit-ecm-web/html/gerenciarProcesso/gerenciarProcesso.html'; + + if (appService.existsWorkspace(pagina)) { + $scope.$openModalConfirm({message:$translate.instant('ECM.MSG.EXISTE_PROCESSO_ABERTO'), callback: function(){ + $scope.$modalConfirmInstance.dismiss('cancel'); + $scope.setLoading(true); + $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange'); + $timeout(function() { + angular.element('#searchGerenciarProcesso').scope().getProcesso($scope.modelSelecionado); + + }, 100); + $scope.setLoading(false); + }}); + }else{ $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange'); $timeout(function() { - angular.element('#searchGerenciarProcesso').scope().getProcesso(processo); + angular.element('#searchGerenciarProcesso').scope().getProcesso($scope.modelSelecionado); }, 100); - $scope.setLoading(false); - }}); - }else{ - $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange'); - $timeout(function() { - angular.element('#searchGerenciarProcesso').scope().getProcesso(processo); - - }, 100); - } + } + }else{ + $scope.showAlert('warning', $translate.instant('ECM.MSG.SELECIONE_UM_ITEM_PARA_VALIDACAO')); + } }; //adiciona a lista de documentos ao processo - $scope.retrieveAditionalHtml = function(processo) { - processo.$show = !processo.$show; - if (!processo.$show) - return; + $scope.findDocumentos = function() { - if(!processo.documentos){ - DocumentoGedRepository.findByProcessoSigilo(processo.id).then(function(result) { - processo.documentos = result; - $scope.showAditionalHtml(processo); - }); - }else{ - $scope.showAditionalHtml(processo); + _getProcesso(); + + if($scope.modelSelecionado.id){ + + DocumentoGedRepository.findByProcessoSigilo($scope.modelSelecionado.id).then(function(result) { + $scope.modelSelecionado.documentos = result; + }); } + $scope.modelSelecionado.$expandido = !$scope.modelSelecionado.$expandido; + + }; + + function _getProcesso(){ + $scope.modelSelecionado = {}; + for(var count = 0; count < $scope.processos.length; count++){ + if($scope.processos[count].$show) { + $scope.modelSelecionado = $scope.processos[count]; + break; + }; + }; - //abre a div com os documentos - $scope.showAditionalHtml = function(processo) { - var id = "divHtmlAdicional_" + $scope.idPainelItem + "_" + processo.id; - - var el = document.getElementById(id); - if (!el || el.innerHTML != '') - return; - - var element = angular.element("#"+id); - el.focus(); }; - - $scope.fetchResult(); + }]); diff --git a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/DocumentoGedController.js b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/DocumentoGedController.js index c9a435c..1b95284 100644 --- a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/DocumentoGedController.js +++ b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/DocumentoGedController.js @@ -190,7 +190,7 @@ citApp.controller('DocumentoGedController', ['$scope', 'DocumentoGedRepository', processo : $scope.documentoGed.processo, autor : $scope.usuarioLogado, acaoAlteracao : "INCLUSAO_DOCUMENTO", - idTask : $scope.task.id, + idTask : $scope.task ? $scope.task.id : null, mapaAtributos : {"tipo_documento" : $scope.documentoGed.tipoDocumento.nome, "numero_documento" : $scope.documentoGed.numero} }; HistoricoAlteracaoProcessoRepository.saveParams(historicoAlteracaoProcesso).then(function(result){ @@ -203,7 +203,7 @@ citApp.controller('DocumentoGedController', ['$scope', 'DocumentoGedRepository', processo : $scope.documentoGed.processo, autor : $scope.usuarioLogado, acaoAlteracao : "CRIACAO_NOVA_VERSAO_DOCUMENTO", - idTask : $scope.task.id, + idTask : $scope.task ? $scope.task.id : null, mapaAtributos : {"tipo_documento" : $scope.documentoGed.tipoDocumento.nome, "numero_documento" : $scope.documentoGed.numero, "numero_versao" : $scope.documentoGed.versaoDocumento.toFixed(1)} }; HistoricoAlteracaoProcessoRepository.saveParams(historicoAlteracaoProcesso).then(function(result){ @@ -241,17 +241,17 @@ citApp.controller('DocumentoGedController', ['$scope', 'DocumentoGedRepository', $scope.mantido = false; $scope.documentoGed.localizacao = null; $scope.documentoGed.numero = null; - DominioRepository.findAllDominio('statusDocumentoGed').then(function(result) { - $scope.statusList = result; + DominioRepository.findAllDominio('estadoDocumentoGed').then(function(result) { + $scope.estadoList = result; }); }else{ $scope.documentoGed.conteudo = {}; - if($.grep($scope.statusList, function(e){ return e.codigo === 3; })[0]){ + if($.grep($scope.estadoList, function(e){ return e.codigo === 3; })[0]){ - $scope.statusList.splice($.grep($scope.statusList, function(e){ return e.codigo === 3; })[0].$index, 1); + $scope.estadoList.splice($.grep($scope.estadoList, function(e){ return e.codigo === 3; })[0].$index, 1); } } @@ -323,8 +323,8 @@ citApp.controller('DocumentoGedController', ['$scope', 'DocumentoGedRepository', }); }; - DominioRepository.findAllDominio('statusDocumentoGed').then(function(result) { - $scope.statusList = result; + DominioRepository.findAllDominio('estadoDocumentoGed').then(function(result) { + $scope.estadoList = result; }); //SET HIPOTESE LEGAL #INICIO diff --git a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoController.js b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoController.js index dd68908..a5129bd 100644 --- a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoController.js +++ b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoController.js @@ -13,7 +13,6 @@ citApp.controller('GerenciarProcessoController', [ '$scope', '$translate', '$tim //INICIALIZA VARIAVEIS PARA HABILITAR E FECHAR DIVS DE AÇÕES DO PROCESSO - $scope.isHistoricoProcesso = true; $scope.fecharPagina = function() { $scope.isProcessoRelacionado = false; $scope.isDocumentoEdit = false; @@ -339,9 +338,21 @@ citApp.controller('GerenciarProcessoController', [ '$scope', '$translate', '$tim $scope.classificarDocumentoProceso = function () { $scope.fecharPagina(); $scope.isClassificarProcessoDocumento = true; + var processo = {}; + angular.copy($scope.processo, processo); + if($scope.processo.documentos){ + processo.documentos = []; + angular.forEach($scope.processo.documentos, function(item) { + if(item.status.codigo == 0){ + var documento = item; + processo.documentos.push(documento); + } + }); + + } $timeout( function () { - angular.element( "#classificarDocumento" ).scope().getProcesso( $scope.processo ); - } ); + angular.element( "#classificarDocumento" ).scope().iniciar(processo); + }); }; // REMOVER DOCUMENTO @@ -634,26 +645,34 @@ citApp.controller('GerenciarProcessoController', [ '$scope', '$translate', '$tim if ( $scope.task != null ) { $scope.initialize(); } + + $scope.getProcesso = function (processo) { - $scope.getProcesso = function ( processo ) { - - $scope.setLoadingGet( true ); + $scope.setLoadingGet(true); ProcessoRepository.getProcessoGerenciamento(processo.id).then(function(result) { - $scope.processo = result.originalElement; - - + //Processo do scopo do gerenciamento + $scope.processo = result.originalElement; + //Processo que sera avaliado + var processo = result.originalElement; + processo.documentos = []; DocumentoGedRepository.findByProcessoSigilo(processo.id).then(function(result) { - $scope.processo.documentos = result; + + angular.forEach(result, function(item) { + + var documento = item.originalElement; + + processo.documentos.push(documento); + }); + + $timeout( function () { + angular.element( "#classificarDocumento" ).scope().iniciar(processo); + } ); }); $scope.setLoading(false); }); - $timeout( function () { - angular.element( "#classificarDocumento" ).scope().iniciar(processo); - } ); - $scope.isHistoricoProcesso = false; $scope.isClassificarProcessoDocumento = true; diff --git a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/SolrSearchController.js b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/SolrSearchController.js index 3be0df3..9be00e0 100644 --- a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/SolrSearchController.js +++ b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/SolrSearchController.js @@ -123,7 +123,7 @@ citApp.controller('SolrSearchController', ['$scope','$attrs','$location','$route $scope.handleSetPage = function() { $scope.timeout = $timeout(function () { - var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg"); + var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg"); query.setOption("rows", "10"); query.setOption("facet", "true"); query.setOption("facet.limit", $scope.maxHints); @@ -330,7 +330,7 @@ citApp.controller('SolrSearchController', ['$scope','$attrs','$location','$route if ($scope.userQuery && $scope.userQuery.length >= $scope.minSearchLength) { if ($scope.timeout) $timeout.cancel($scope.timeout); $scope.timeout = $timeout(function () { - var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg"); + var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg"); query.setOption("rows", "10"); query.setOption("facet", "true"); query.setOption("facet.limit", $scope.maxHints); @@ -409,7 +409,7 @@ citApp.controller('SolrSearchController', ['$scope','$attrs','$location','$route $scope.userQuery = "*:*"; } $scope.timeout = $timeout(function () { - var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg"); + var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg"); query.setOption("rows", "10"); query.setOption("facet", "true"); query.setOption("facet.limit", $scope.maxHints); @@ -440,7 +440,7 @@ citApp.controller('SolrSearchController', ['$scope','$attrs','$location','$route valueFilter = "*:*"; } $scope.timeout = $timeout(function () { - var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg"); + var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg"); query.setOption("rows", "10"); query.setOption("facet", "true"); query.setOption("facet.limit", $scope.maxHints); diff --git a/cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumento.html b/cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumento.html index d7511a1..f5093b1 100644 --- a/cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumento.html +++ b/cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumento.html @@ -1,5 +1,4 @@ -
@@ -19,87 +18,77 @@
-
- ECM.LABEL.INFORMACAODOPROCESSO -
+ ECM.LABEL.INFORMACAODOPROCESSO
-
-
- ECM.LABEL.PROTOCOLO   - {{processo.nup}} -
+
+
+ ECM.LABEL.PROTOCOLO   {{processoValidacao.nup}}
+
-
-
- ECM.LABEL.NIVEL_ACESSO_ORIGINAL   - {{processo.nivelAcessoOriginal.nivelAcesso.descricao}} -
- -
- ECM.LABEL.NIVEL_SIGILO_ORIGINAL   - {{processo.sigiloOriginal.tipoSigilo.descricao}} -
- +
+
+ ECM.LABEL.NIVEL_ACESSO_ORIGINAL   {{processoValidacao.nivelAcessoOriginal.nivelAcesso.descricao}} +
+ +
+ ECM.LABEL.NIVEL_SIGILO_ORIGINAL   {{processoValidacao.sigiloOriginal.tipoSigilo.descricao}}
+
+

- -
+ +
- ECM.LABEL.NIVEL_ACESSO   - {{processo.nivelAcesso.nivelAcesso.descricao}} + ECM.LABEL.NIVEL_ACESSO   {{processoValidacao.nivelAcesso.nivelAcesso.descricao}}
- +
- ECM.LABEL.NIVEL_SIGILO   - {{processo.sigilo.tipoSigilo.descricao}} + ECM.LABEL.NIVEL_SIGILO   {{processoValidacao.sigilo.tipoSigilo.descricao}}
- +
-
+
-
-
+
- - -
+ + +
- +
- +
- +
-
- ECM.LABEL.DOCUMENTOS -
+ ECM.LABEL.DOCUMENTOS
@@ -111,35 +100,34 @@ - + - - - - - + + + - + - + @@ -154,7 +142,8 @@
- diff --git a/cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumentoList.html b/cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumentoList.html index 13497fd..4efc47e 100644 --- a/cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumentoList.html +++ b/cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumentoList.html @@ -1,345 +1,29 @@ - - - - +
- -
+ +
-
-
-
- -
-
-
-
-
- -
- -
-
-
- - -
-
- -
- -
- - -
ECM.LABEL.PROTOCOLO ECM.LABEL.NUM_DOCUMENTOECM.LABEL.TIPODOCUMENTO ECM.LABEL.NIVEL_PROPOSTO ECM.LABEL.NIVEL_REVISADO
{{processo.nup}}{{processo.id}}{{documento.nivelAcesso.nivelAcesso.descricao}} +
{{documentoValidacao.numero}}{{documentoValidacao.tipoDocumento.nome}}
- +
-
- +
+ +
- +
{{documento.sigilo.tipoSigilo.descricao}}{{documentoValidacao.sigilo.tipoSigilo.descricao}} {{documentoValidacao.nivelAcesso.nivelAcesso.descricao}}
LABEL.TABELA_VAZIA
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ECM.LABEL.PROTOCOLOECM.LABEL.PROPOSTAECM.LABEL.NIVEL_FINALECM.LABEL.PRAZO_SIGILO
-
-
- LABEL.MOSTRANDO - {{filterCriteria.start}} - LABEL.ATE - {{filterCriteria.limit > totalItens ? totalItens : filterCriteria.limit}} - LABEL.DE - ({{totalItens}}) - ESI.TAREFAS - . -
-
- -
- -
-
-
-
- -
- -
-
-
-
- -
- -
-
-
-
- -
- -
-
-
-
- -
- -
-
- - {{processo.nup}}  - - - - - - {{processo['sigiloOriginal.tipoSigilo.descricao']}}{{processo['sigilo.tipoSigilo.descricao']}}{{processo.prazoSigilo | date:'dd-MM-yyyy'}}
  - -
- MSG.AGUARDE - -
-
- -
- -
- -
-
- {{documento.tipoDocumento.nome}} - {{documento.numero}} -
- -
- {{documento.dataCriacao | date: 'dd/MM/yyyy HH:mm:ss'}} -
- -
{{documento.assuntoComplementar}}
- -
- {{documento.sigilo.tipoSigilo.descricao}} {{documento.sigilo.tipoSigilo.descricao}} {{documento.sigilo.tipoSigilo.descricao}} - {{documento.nivelAcesso.nivelAcesso.descricao}} {{documento.nivelAcesso.nivelAcesso.descricao}} Anexado Assinado Habilitado Ciência - Cancelado -
-
-
-
-
-
MSG.NENHUM_REGISTRO_ENCONTRADO
- -
-
- - - - - - + +
+
+ \ No newline at end of file diff --git a/cit-ecm-web/src/main/webapp/html/documentoGed/metadadosDocumentoEdit.html b/cit-ecm-web/src/main/webapp/html/documentoGed/metadadosDocumentoEdit.html index f43b99e..98b7cff 100644 --- a/cit-ecm-web/src/main/webapp/html/documentoGed/metadadosDocumentoEdit.html +++ b/cit-ecm-web/src/main/webapp/html/documentoGed/metadadosDocumentoEdit.html @@ -63,8 +63,8 @@
- +
@@ -128,8 +128,8 @@
- +
diff --git a/cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeDocumentosProcesso.html b/cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeDocumentosProcesso.html index 5cb714c..5027ada 100644 --- a/cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeDocumentosProcesso.html +++ b/cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeDocumentosProcesso.html @@ -34,7 +34,7 @@