Commit 63142b11d7a5d9b5f217ab4152af760079280794

Authored by rogerio.costa
1 parent 101b0870
Exists in master

#3216 - Classificar a Informação de Documentos e Processos

Showing 28 changed files with 803 additions and 885 deletions   Show diff stats
cit-ecm-api/src/main/java/br/com/centralit/api/dao/DocumentoGedDao.java
... ... @@ -120,34 +120,43 @@ public interface DocumentoGedDao extends CitGenericDAO {
120 120 * @return Collection<Processo>
121 121 */
122 122 Collection<DocumentoGed> findPorPlanoClassificacao(Long idPlanoClassificacao);
123   -
  123 +
124 124 /**
125 125 *
126   - * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
127   - *
128   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
129   - *
  126 + * <p>
  127 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  128 + * </p>
  129 + *
  130 + * <p>
  131 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  132 + * </p>
  133 + *
130 134 * Método responsável por
131   - *
  135 + *
132 136 * @author andre.silva
133   - *
  137 + *
134 138 * @param idProcesso
135 139 * @return
136 140 */
137 141 Collection<DocumentoGed> findByProcessoSigilo(Long idProcesso);
138 142  
139 143 /**
  144 + * <p>
  145 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  146 + * </p>
140 147 *
141   - * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
142   - *
143   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
144   - *
145   - * Método responsável por
146   - *
147   - * @author andre.silva
148   - *
149   - * @param documentoGed
150   - * @return
  148 + * <p>
  149 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  150 + * </p>
  151 + *
  152 + * Método responsável por verificar se o documento é sigiloso através do id
  153 + *
  154 + * @author rogerio.costa
  155 + *
  156 + * @param id
  157 + *
  158 + * @return Sigilo
151 159 */
152   - Boolean isDocumentoAbertoEmOutrasUnidades(DocumentoGed documentoGed);
  160 + Boolean isSigiloso(Long id);
  161 +
153 162 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/dao/ProcessoDao.java
... ... @@ -155,5 +155,23 @@ public interface ProcessoDao extends CitGenericDAO {
155 155 * @return <RT> SearchResult<RT>
156 156 */
157 157 <RT> SearchResult<RT> searchAndCountPorSigilo(ISearch search);
158   -
  158 +
  159 + /**
  160 + * <p>
  161 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  162 + * </p>
  163 + *
  164 + * <p>
  165 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  166 + * </p>
  167 + *
  168 + * Método responsável por verificar se o processo é sigiloso
  169 + *
  170 + * @author rogerio.costa
  171 + *
  172 + * @param id
  173 + * @return
  174 + */
  175 + boolean isSigiloso(Long id);
  176 +
159 177 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/dao/UnidadeProcessoDao.java
... ... @@ -2,14 +2,14 @@ package br.com.centralit.api.dao;
2 2  
3 3 import java.util.Collection;
4 4  
5   -import com.googlecode.genericdao.search.ISearch;
6   -import com.googlecode.genericdao.search.SearchResult;
7   -
8 5 import br.com.centralit.api.model.Processo;
9 6 import br.com.centralit.api.model.UnidadeProcesso;
10 7 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
11 8 import br.com.centralit.framework.model.Usuario;
12 9  
  10 +import com.googlecode.genericdao.search.ISearch;
  11 +import com.googlecode.genericdao.search.SearchResult;
  12 +
13 13 /**
14 14 * <p>
15 15 * <img src="http://centralit.com.br/images/logo_central.png">
... ... @@ -118,9 +118,10 @@ public interface UnidadeProcessoDao extends CitGenericDAO {
118 118 * @return UnidadeProcesso
119 119 */
120 120 UnidadeProcesso obterPorUnidadeEProcesso(Long idProcesso, Long idUnidade);
121   -
  121 +
122 122 /**
123 123 * Método responsável por listar processos através da unidade do usuário
  124 + *
124 125 * @author rogerio.cassimiro
125 126 * @param search
126 127 * @param usuario
... ... @@ -128,5 +129,24 @@ public interface UnidadeProcessoDao extends CitGenericDAO {
128 129 * @return <RT> SearchResult<RT>
129 130 */
130 131 <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus);
131   -
  132 +
  133 + /**
  134 + * <p>
  135 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  136 + * </p>
  137 + *
  138 + * <p>
  139 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  140 + * </p>
  141 + *
  142 + * Método responsável por verificar se o processo foi enviado para outra unidade
  143 + *
  144 + * @author rogerio.costa
  145 + *
  146 + * @param idProcesso
  147 + *
  148 + * @return Boolean
  149 + */
  150 + Boolean isProcessoEnviado(Long idProcesso);
  151 +
132 152 }
... ...
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;
16 16 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
17 17 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
18 18 import br.com.centralit.framework.model.Usuario;
  19 +import br.com.centralit.framework.util.UtilObjeto;
19 20  
20 21 import com.googlecode.genericdao.search.Filter;
21 22 import com.googlecode.genericdao.search.Sort;
22 23  
  24 +/**
  25 + * <p>
  26 + * <img src="http://centralit.com.br/images/logo_central.png">
  27 + * </p>
  28 + *
  29 + * <p>
  30 + * <b>Company: </b> Central IT - Governança Corporativa -
  31 + * </p>
  32 + *
  33 + * <p>
  34 + * <b>Title: </b>
  35 + * </p>
  36 + *
  37 + * <p>
  38 + * <b>Description: </b>
  39 + * </p>
  40 + *
  41 + * <p>
  42 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  43 + * </p>
  44 + *
  45 + * <p>
  46 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  47 + * </p>
  48 + *
  49 + * @since 23/04/2016 - 16:52:47
  50 + *
  51 + * @version 1.0.0
  52 + *
  53 + * @author rogerio.costa
  54 + *
  55 + */
23 56 @Repository("documentoGedDao")
  57 +@SuppressWarnings("unchecked")
24 58 public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements DocumentoGedDao {
25 59  
  60 + /**
  61 + * Responsável pela criação de novas instâncias desta classe.
  62 + */
26 63 public DocumentoGedDaoHibernate() {
27 64  
28 65 super(DocumentoGed.class);
... ... @@ -69,6 +106,7 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum
69 106 searchSeven.addFilterOr(Filter.equal("id", id), Filter.equal("idRaiz", id));
70 107  
71 108 searchSeven.addSort(Sort.asc("versaoDocumento"));
  109 +
72 110 searchSeven.addFilterNotEmpty("dataInativo");
73 111  
74 112 return this.search(searchSeven);
... ... @@ -168,25 +206,38 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum
168 206 }
169 207  
170 208 /**
  209 + * <p>
  210 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  211 + * </p>
  212 + *
  213 + * <p>
  214 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  215 + * </p>
  216 + *
  217 + * Método responsável por verificar se o documento é sigiloso através do id
  218 + *
  219 + * @author rogerio.costa
171 220 *
  221 + * @param id
  222 + *
  223 + * @return Sigilo
172 224 */
173   - @Override
174   - public Boolean isDocumentoAbertoEmOutrasUnidades(DocumentoGed documentoGed) {
  225 + public Boolean isSigiloso(Long id) {
175 226  
176   - Session session = (Session) this.em().getDelegate();
  227 + Criteria criteria = this.newCriteria();
177 228  
178   - Criteria criteria = session.createCriteria(persistentClass);
  229 + criteria.setProjection(Projections.id());
179 230  
180   - criteria.setProjection(Projections.rowCount());
  231 + criteria.add(Restrictions.eq("id", id));
  232 +
  233 + criteria.add(Restrictions.isNotNull("sigilo"));
181 234  
182   - criteria.add(Restrictions.eq("id", documentoGed.getId()));
183   - criteria.add(Restrictions.ne("unidade.id", documentoGed.getUnidade().getId()));
  235 + criteria.setMaxResults(1);
184 236  
185   - return (Long) criteria.uniqueResult() > 0;
  237 + return UtilObjeto.isReferencia(criteria.uniqueResult());
186 238  
187 239 }
188 240  
189   - @SuppressWarnings("unchecked")
190 241 @Override
191 242 public Collection<DocumentoGed> findByProcessoSigilo(Long idProcesso) {
192 243  
... ... @@ -206,11 +257,16 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum
206 257  
207 258 criteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", idUsuario));
208 259  
209   - Session session = (Session) this.em().getDelegate();
210   -
211   - Criteria criteria = session.createCriteria(persistentClass);
  260 + Criteria criteria = this.newCriteria();
212 261  
213 262 criteria.add(Restrictions.eq("processo.id", idProcesso));
  263 +
  264 + criteria.add(Restrictions.isNull("dataInativo"));
  265 +
  266 + criteria.createAlias("status", "status");
  267 +
  268 + criteria.add(Restrictions.eq("status.codigo", 0L));
  269 +
214 270 criteria.add(Restrictions.in("sigilo.id", criteriaPrivilegio.list()));
215 271  
216 272 return criteria.list();
... ...
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;
3 3 import java.util.Calendar;
4 4 import java.util.Collection;
5 5  
  6 +import javax.persistence.FetchType;
  7 +
6 8 import org.hibernate.Criteria;
7 9 import org.hibernate.Session;
  10 +import org.hibernate.criterion.DetachedCriteria;
8 11 import org.hibernate.criterion.Projections;
9 12 import org.hibernate.criterion.Restrictions;
  13 +import org.hibernate.criterion.Subqueries;
  14 +import org.hibernate.sql.JoinType;
  15 +import org.hibernate.transform.ResultTransformer;
10 16 import org.springframework.security.core.context.SecurityContextHolder;
11 17 import org.springframework.stereotype.Repository;
12 18  
... ... @@ -16,6 +22,7 @@ import br.com.centralit.api.model.SigiloPrivilegio;
16 22 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
17 23 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
18 24 import br.com.centralit.framework.model.Usuario;
  25 +import br.com.centralit.framework.util.UtilObjeto;
19 26  
20 27 import com.googlecode.genericdao.search.Filter;
21 28 import com.googlecode.genericdao.search.ISearch;
... ... @@ -191,25 +198,53 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD
191 198  
192 199 Long idUsuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId();
193 200  
194   - Criteria criteriaPrivilegio = this.newCriteria(SigiloPrivilegio.class);
  201 + Criteria criteria = this.newCriteria();
  202 +
  203 + DetachedCriteria detachedCriteriaPrivilegio = DetachedCriteria.forClass(SigiloPrivilegio.class);
  204 +
  205 + detachedCriteriaPrivilegio.setProjection(Projections.property("sigilo.id"));
  206 +
  207 + detachedCriteriaPrivilegio.createAlias("privilegio", "privilegio");
195 208  
196   - criteriaPrivilegio.setProjection(Projections.property("sigilo.id"));
  209 + detachedCriteriaPrivilegio.createAlias("privilegio.grupoPrivilegios", "grupoPrivilegio");
197 210  
198   - criteriaPrivilegio.createAlias("privilegio", "privilegio");
  211 + detachedCriteriaPrivilegio.add(Restrictions.isNull("grupoPrivilegio.dataInativo"));
199 212  
200   - criteriaPrivilegio.createAlias("privilegio.grupoPrivilegios", "grupoPrivilegio");
  213 + detachedCriteriaPrivilegio.createCriteria("grupoPrivilegio.grupo").createAlias("grupoUsuarios", "grupoUsuario");
201 214  
202   - criteriaPrivilegio.add(Restrictions.isNull("grupoPrivilegio.dataInativo"));
  215 + detachedCriteriaPrivilegio.add(Restrictions.isNull("grupoUsuario.dataInativo"));
203 216  
204   - criteriaPrivilegio.createCriteria("grupoPrivilegio.grupo").createAlias("grupoUsuarios", "grupoUsuario");
  217 + detachedCriteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", idUsuario));
205 218  
206   - criteriaPrivilegio.add(Restrictions.isNull("grupoUsuario.dataInativo"));
  219 + criteria.add(Subqueries.propertyIn("sigilo.id", detachedCriteriaPrivilegio));
207 220  
208   - criteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", idUsuario));
  221 + criteria.createAlias("documentos", "documentos", JoinType.LEFT_OUTER_JOIN);
  222 +
  223 + criteria.createAlias("documentos.status", "statusDocumento", JoinType.LEFT_OUTER_JOIN);
  224 +
  225 + criteria.add(Restrictions.or(Restrictions.eq("statusDocumento.codigo", 0L), Restrictions.isNull("validado"), Restrictions.eq("validado", false)));
209 226  
210   - search.getFilters().add(Filter.in("sigilo.id", criteriaPrivilegio.list()));
  227 + criteria.setProjection(Projections.distinct(Projections.property("id")));
  228 +
  229 + search.getFilters().add(Filter.in("id", criteria.list()));
211 230  
212 231 return super.searchAndCount(search);
213 232 }
214   -
  233 +
  234 + @Override
  235 + public boolean isSigiloso(Long id) {
  236 +
  237 + Criteria criteria = this.newCriteria();
  238 +
  239 + criteria.setProjection(Projections.id());
  240 +
  241 + criteria.add(Restrictions.eq("id", id));
  242 +
  243 + criteria.add(Restrictions.isNotNull("sigilo"));
  244 +
  245 + criteria.setMaxResults(1);
  246 +
  247 + return UtilObjeto.isReferencia(criteria.uniqueResult());
  248 + }
  249 +
215 250 }
... ...
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;
17 17 import br.com.centralit.api.model.UnidadeProcesso;
18 18 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
19 19 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
20   -import br.com.centralit.framework.model.GrupoPrivilegio;
21 20 import br.com.centralit.framework.model.Usuario;
22 21 import br.com.centralit.framework.util.UtilColecao;
23 22 import br.com.centralit.framework.util.UtilObjeto;
... ... @@ -160,6 +159,35 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
160 159 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
161 160 * </p>
162 161 *
  162 + * Método responsável por verificar se o processo foi enviado para outra unidade
  163 + *
  164 + * @author rogerio.costa
  165 + *
  166 + * @param idProcesso
  167 + *
  168 + * @return Boolean
  169 + */
  170 + public Boolean isProcessoEnviado(Long idProcesso) {
  171 +
  172 + Criteria criteria = this.newCriteria();
  173 +
  174 + criteria.setProjection(Projections.id());
  175 + criteria.add(Restrictions.eq("processo.id", idProcesso));
  176 + criteria.add(Restrictions.isNull("dataInativo"));
  177 +
  178 + return criteria.list().size() > 1;
  179 +
  180 + }
  181 +
  182 + /**
  183 + * <p>
  184 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  185 + * </p>
  186 + *
  187 + * <p>
  188 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  189 + * </p>
  190 + *
163 191 * Método responsável por obter através da unidade e processo
164 192 *
165 193 * @author rogerio.costa
... ... @@ -193,8 +221,8 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
193 221 */
194 222 @Override
195 223 public <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus) {
196   -
197   - //Filtro de permissões herdadas através de grupos
  224 +
  225 + // Filtro de permissões herdadas através de grupos
198 226 DetachedCriteria detachedCriteriaPrivilegio = findSigiloUsuarioContemPermissaoAtravesDosGrupos(usuario);
199 227  
200 228 // Filtro da credencial do processo
... ... @@ -253,7 +281,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
253 281 detachedCredencialProcesso.add(Restrictions.or(Restrictions.eq("grupoUsuario.usuario.id", usuario.getId()), Restrictions.eq("usuario.id", usuario.getId())));
254 282  
255 283 detachedCredencialProcesso.add(Restrictions.isNull("dataInativo"));
256   -
  284 +
257 285 return detachedCredencialProcesso;
258 286 }
259 287  
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java
... ... @@ -151,6 +151,11 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
151 151 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class })
152 152 private Dominio status;
153 153  
  154 + /** Atributo estado. */
  155 + @ManyToOne(fetch = FetchType.LAZY)
  156 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class })
  157 + private Dominio estado;
  158 +
154 159 /** Atributo tramitarDocumento. */
155 160 @ManyToOne(fetch = FetchType.LAZY)
156 161 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class })
... ... @@ -973,4 +978,24 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
973 978 this.tipoSuporteDocumento = tipoSuporteDocumento;
974 979 }
975 980  
  981 + /**
  982 + * Retorna o valor do atributo <code>estado</code>
  983 + *
  984 + * @return <code>Dominio</code>
  985 + */
  986 + public Dominio getEstado() {
  987 +
  988 + return estado;
  989 + }
  990 +
  991 + /**
  992 + * Define o valor do atributo <code>estado</code>.
  993 + *
  994 + * @param estado
  995 + */
  996 + public void setEstado(Dominio estado) {
  997 +
  998 + this.estado = estado;
  999 + }
  1000 +
976 1001 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/Processo.java
... ... @@ -27,6 +27,7 @@ import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer;
27 27 import br.com.centralit.framework.json.Views;
28 28 import br.com.centralit.framework.model.Dominio;
29 29 import br.com.centralit.framework.util.UtilColecao;
  30 +import br.com.centralit.framework.util.UtilObjeto;
30 31  
31 32 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
32 33 import com.fasterxml.jackson.annotation.JsonView;
... ... @@ -70,9 +71,9 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
70 71 public class Processo extends PersistentObjectUnidade {
71 72  
72 73 public static final String GRID_PROCESSO_NA_UNIDADE = "GRID_PROCESSO_NA_UNIDADE";
73   -
  74 +
74 75 public static final String GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO = "GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO";
75   -
  76 +
76 77 /** Atributo serialVersionUID. */
77 78 private static final long serialVersionUID = -6167513900417461697L;
78 79  
... ... @@ -90,7 +91,7 @@ public class Processo extends PersistentObjectUnidade {
90 91 @Temporal(TemporalType.TIMESTAMP)
91 92 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
92 93 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
93   - @JsonView({Views.UnidadeProcessoListView.class})
  94 + @JsonView({ Views.UnidadeProcessoListView.class })
94 95 private Calendar dataReferencia;
95 96  
96 97 /** Atributo dataConclusao. */
... ... @@ -110,15 +111,33 @@ public class Processo extends PersistentObjectUnidade {
110 111 @Transient
111 112 private Long idTask;
112 113  
113   - /** Atributo nup. */
114   - @JsonView({ Views.ProcessoEdit.class})
115   - @ManyToOne(fetch = FetchType.LAZY)
116   - private Dominio tipoProtocolo;
117   -
118 114 /** Atributo observacaoGeral. */
119 115 @JsonView({ Views.ProcessoEdit.class })
120 116 private String observacaoGeral;
121 117  
  118 + @JsonView({ Views.ProcessoEdit.class })
  119 + private String tipoAssunto;
  120 +
  121 + /** Atributo idProcessInstance. */
  122 + @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class })
  123 + private Long idProcessInstance;
  124 +
  125 + /** Atributo aprovado. */
  126 + @JsonView({ ViewsEcm.ProcessoList.class })
  127 + private Boolean validado;
  128 +
  129 + /** Atributo prazoSigilo. */
  130 + @Temporal(TemporalType.TIMESTAMP)
  131 + @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
  132 + @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
  133 + @JsonView({ ViewsEcm.ProcessoList.class })
  134 + private Calendar prazoSigilo;
  135 +
  136 + /** Atributo nup. */
  137 + @JsonView({ Views.ProcessoEdit.class })
  138 + @ManyToOne(fetch = FetchType.LAZY)
  139 + private Dominio tipoProtocolo;
  140 +
122 141 /** Atributo status. */
123 142 @ManyToOne(fetch = FetchType.LAZY)
124 143 @JsonView({ Views.ProcessoEdit.class, Views.UnidadeProcessoListView.class })
... ... @@ -139,16 +158,9 @@ public class Processo extends PersistentObjectUnidade {
139 158 @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class })
140 159 private PlanoClassificacao assunto;
141 160  
142   - @JsonView({ Views.ProcessoEdit.class })
143   - private String tipoAssunto;
144   -
145   - /** Atributo idProcessInstance. */
146   - @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class })
147   - private Long idProcessInstance;
148   -
149 161 /** Atributo nivelAcesso. */
150 162 @ManyToOne(fetch = FetchType.LAZY)
151   - @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class })
  163 + @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class })
152 164 private NivelAcessoTipoProcesso nivelAcesso;
153 165  
154 166 @ManyToOne(fetch = FetchType.LAZY)
... ... @@ -209,17 +221,6 @@ public class Processo extends PersistentObjectUnidade {
209 221 @JoinTable(name = "processo_anexado", joinColumns = { @JoinColumn(name = "processo_id") }, inverseJoinColumns = { @JoinColumn(name = "processo_anexado_id") })
210 222 private Collection<AnexoProcesso> anexados;
211 223  
212   - /** Atributo prazoSigilo. */
213   - @Temporal(TemporalType.TIMESTAMP)
214   - @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
215   - @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
216   - @JsonView({ ViewsEcm.ProcessoList.class })
217   - private Calendar prazoSigilo;
218   -
219   - /** Atributo aprovado. */
220   - @JsonView({ ViewsEcm.ProcessoList.class })
221   - private Boolean aprovado;
222   -
223 224 /** Atributo credenciais. */
224 225 @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL)
225 226 private Collection<CredencialProcesso> credenciais;
... ... @@ -814,23 +815,29 @@ public class Processo extends PersistentObjectUnidade {
814 815 }
815 816  
816 817 /**
817   - * Retorna o valor do atributo <code>aprovado</code>
  818 + * Retorna o valor do atributo <code>validado</code>
818 819 *
819 820 * @return <code>Boolean</code>
820 821 */
821   - public Boolean getAprovado() {
  822 + public Boolean getValidado() {
  823 +
  824 + if (!UtilObjeto.isReferencia(this.validado)) {
822 825  
823   - return aprovado;
  826 + this.validado = Boolean.FALSE;
  827 +
  828 + }
  829 +
  830 + return validado;
824 831 }
825 832  
826 833 /**
827   - * Define o valor do atributo <code>aprovado</code>.
  834 + * Define o valor do atributo <code>validado</code>.
828 835 *
829   - * @param aprovado
  836 + * @param validado
830 837 */
831   - public void setAprovado(Boolean aprovado) {
  838 + public void setValidado(Boolean validado) {
832 839  
833   - this.aprovado = aprovado;
  840 + this.validado = validado;
834 841 }
835 842  
836 843 /**
... ... @@ -854,17 +861,21 @@ public class Processo extends PersistentObjectUnidade {
854 861 }
855 862  
856 863 /**
857   - * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
858   - *
859   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
860   - *
  864 + * <p>
  865 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  866 + * </p>
  867 + *
  868 + * <p>
  869 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  870 + * </p>
  871 + *
861 872 * Verifica se o processo foi tramitado. Levando em consideração a unidadeProcesso criada apartir da criação do processo.
862   - *
  873 + *
863 874 * @author maycon.silva
864   - *
  875 + *
865 876 * @return boolean
866 877 */
867   - /*@JsonView({ Views.ProcessoEdit.class })*/
  878 + /* @JsonView({ Views.ProcessoEdit.class }) */
868 879 public boolean isTramitado() {
869 880  
870 881 return !UtilColecao.isVazio(this.getUnidadesProcesso()) && this.getUnidadesProcesso().size() > 1;
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/CredencialProcessoService.java
... ... @@ -4,8 +4,10 @@ import java.util.Collection;
4 4  
5 5 import br.com.centralit.api.model.CredencialProcesso;
6 6 import br.com.centralit.api.model.Processo;
  7 +import br.com.centralit.api.model.Sigilo;
7 8 import br.com.centralit.api.viewHelper.GrupoUsuarioVH;
8 9 import br.com.centralit.api.viewHelper.HerancaSistemaVH;
  10 +import br.com.centralit.framework.model.Grupo;
9 11 import br.com.centralit.framework.service.arquitetura.GenericService;
10 12  
11 13 /**
... ... @@ -200,4 +202,23 @@ public interface CredencialProcessoService extends GenericService&lt;CredencialProc
200 202 */
201 203 boolean contemPermissaoProcesso(Long idProcesso);
202 204  
  205 + /**
  206 + * <p>
  207 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  208 + * </p>
  209 + *
  210 + * <p>
  211 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  212 + * </p>
  213 + *
  214 + * Método responsável por obter grupos através do sigilo
  215 + *
  216 + * @author rogerio.costa
  217 + *
  218 + * @param sigilo
  219 + *
  220 + * @return Collection<Grupo>
  221 + */
  222 + Collection<Grupo> findGrupoPorSigilo(Sigilo sigilo);
  223 +
203 224 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/DocumentoGedService.java
... ... @@ -3,9 +3,7 @@ package br.com.centralit.api.service;
3 3 import java.util.Collection;
4 4  
5 5 import br.com.centralit.api.model.DocumentoGed;
6   -import br.com.centralit.framework.model.Dominio;
7 6 import br.com.centralit.api.model.Processo;
8   -import br.com.centralit.api.viewHelper.AnexarProcessoVH;
9 7 import br.com.centralit.framework.model.Dominio;
10 8 import br.com.centralit.framework.service.arquitetura.GenericService;
11 9  
... ... @@ -40,7 +38,7 @@ public interface DocumentoGedService extends GenericService&lt;DocumentoGed, Long&gt;
40 38 void saveIconeDocumento(DocumentoGed documentoGed, Dominio tipoAnexo);
41 39  
42 40 void anexarDocumento(Processo processoDestinoAnexo, Processo processoOrigem);
43   -
  41 +
44 42 Collection<DocumentoGed> findByProcessoSigilo(Long idProcesso);
45 43  
46 44 /**
... ... @@ -61,19 +59,23 @@ public interface DocumentoGedService extends GenericService&lt;DocumentoGed, Long&gt;
61 59 * @return Collection<Processo>
62 60 */
63 61 Collection<DocumentoGed> findPorPlanoClassificacao(Long idPlanoClassificacao);
64   -
  62 +
65 63 /**
66 64 *
67   - * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
68   - *
69   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
70   - *
  65 + * <p>
  66 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  67 + * </p>
  68 + *
  69 + * <p>
  70 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  71 + * </p>
  72 + *
71 73 * Método responsável por
72   - *
  74 + *
73 75 * @author andre.silva
74   - *
  76 + *
75 77 * @param listaDocumentos
76 78 */
77   - void atualizarSigiloDocumentos(Collection<DocumentoGed> listaDocumentos);
  79 + Collection<DocumentoGed> atualizarSigiloDocumentos(Collection<DocumentoGed> listaDocumentos);
78 80  
79 81 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/UnidadeProcessoService.java
... ... @@ -174,10 +174,30 @@ public interface UnidadeProcessoService extends GenericService&lt;UnidadeProcesso,
174 174  
175 175 /**
176 176 * Método responsável por listar processos através da unidade do usuário
  177 + *
177 178 * @author rogerio.cassimiro
178 179 * @param search
179 180 * @return <RT> SearchResult<RT>
180 181 */
181 182 <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search);
182   -
  183 +
  184 + /**
  185 + * <p>
  186 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  187 + * </p>
  188 + *
  189 + * <p>
  190 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  191 + * </p>
  192 + *
  193 + * Método responsável por verificar se o processo foi enviado para outra unidade
  194 + *
  195 + * @author rogerio.costa
  196 + *
  197 + * @param idProcesso
  198 + *
  199 + * @return Boolean
  200 + */
  201 + Boolean isProcessoEnviado(Long idProcesso);
  202 +
183 203 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/CredencialProcessoServiceImpl.java
... ... @@ -543,7 +543,7 @@ public class CredencialProcessoServiceImpl extends GenericServiceImpl&lt;Credencial
543 543 *
544 544 * @return Collection<Grupo>
545 545 */
546   - private Collection<Grupo> findGrupoPorSigilo(Sigilo sigilo) {
  546 + public Collection<Grupo> findGrupoPorSigilo(Sigilo sigilo) {
547 547  
548 548 Collection<Long> idPrivilegios = this.getPrivilegios(sigilo);
549 549  
... ...
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;
34 34 import br.com.centralit.api.service.SigiloService;
35 35 import br.com.centralit.api.service.SolrService;
36 36 import br.com.centralit.api.service.TipoDocumentoService;
  37 +import br.com.centralit.api.service.UnidadeProcessoService;
37 38 import br.com.centralit.framework.exception.BusinessException;
38 39 import br.com.centralit.framework.exception.CodigoErro;
39 40 import br.com.centralit.framework.model.Dominio;
... ... @@ -82,7 +83,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
82 83  
83 84 private static final String VALIDAR_NIVEL_ACESSO = "ECM.VALIDACAO.VALIDAR_NIVEL_ACESSO";
84 85  
85   - private static final String VALIDAR_OUTRAS_UNIDADES = "ECM.VALIDACAO.VALIDAR_OUTRAS_UNIDADES";
  86 + private static final String VALIDAR_OUTRAS_UNIDADES = "ECM.VALIDACAO.VALIDAR_ALTERACAO_NIVEL_ACESSO_OUTRAS_UNIDADES";
86 87  
87 88 /** Atributo documentoGedDao. */
88 89 private DocumentoGedDao documentoGedDao;
... ... @@ -119,6 +120,10 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
119 120 @Autowired
120 121 private SigiloService sigiloService;
121 122  
  123 + /** Atributo unidadeProcessoService. */
  124 + @Autowired
  125 + private UnidadeProcessoService unidadeProcessoService;
  126 +
122 127 /** Atributo solrService. */
123 128 @Autowired
124 129 private SolrService solrService;
... ... @@ -269,6 +274,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
269 274 if (UtilObjeto.isReferencia(entity.getSigilo()) && UtilObjeto.isReferencia(entity.getSigilo().getId())) {
270 275  
271 276 entity.setSigilo(this.sigiloService.getReference(entity.getSigilo().getId()));
  277 + entity.setStatus(this.dominioService.findByChaveAndCodigo("statusDocumentoGed", 0L));
272 278 this.atribuirPrazoPadraoDocumento(entity);
273 279 } else {
274 280  
... ... @@ -380,11 +386,12 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
380 386 */
381 387 private void validarAbertosEmOutrasUnidades(DocumentoGed entity) {
382 388  
383   - if (UtilObjeto.isReferencia(entity.getNivelAcesso().getNivelAcesso())) {
384   - if (entity.getNivelAcesso().getNivelAcesso().getCodigo() == 0L) {
385   - if (this.documentoGedDao.isDocumentoAbertoEmOutrasUnidades(entity)) {
386   - throw new BusinessException(DocumentoGedServiceImpl.VALIDAR_OUTRAS_UNIDADES, CodigoErro.REGRA_NEGOCIO.getValue());
387   - }
  389 + // verifica se o documento está passando a ser sigiloso
  390 + if (UtilObjeto.isReferencia(entity.getSigilo()) && !this.documentoGedDao.isSigiloso(entity.getId())) {
  391 +
  392 + if (this.unidadeProcessoService.isProcessoEnviado(entity.getProcesso().getId())) {
  393 +
  394 + throw new BusinessException(DocumentoGedServiceImpl.VALIDAR_OUTRAS_UNIDADES, CodigoErro.REGRA_NEGOCIO.getValue());
388 395 }
389 396 }
390 397 }
... ... @@ -802,25 +809,25 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
802 809 * @param listaDocumentos
803 810 */
804 811 @Override
805   - public void atualizarSigiloDocumentos(Collection<DocumentoGed> listaDocumentos) {
  812 + public Collection<DocumentoGed> atualizarSigiloDocumentos(Collection<DocumentoGed> listaDocumentos) {
  813 +
  814 + Collection<DocumentoGed> documentosAlterados = new LinkedList<DocumentoGed>();
806 815  
807 816 if (!UtilColecao.isVazio(listaDocumentos)) {
808 817 for (DocumentoGed documento : listaDocumentos) {
809 818 DocumentoGed entity = (DocumentoGed) this.documentoGedDao.getReference(documento.getId());
810   - if (documento.getSigilo() == null) {
811   - entity.setAprovado(Boolean.TRUE);
812   - } else {
813   - entity.setSigiloOriginal(documento.getSigilo());
814   - entity.setNivelAcessoOriginal(documento.getNivelAcesso());
815   - entity.setSigilo(documento.getSigilo());
816   - entity.setNivelAcesso(documento.getNivelAcesso());
817   - }
818   -
819   - super.merge(entity);
  819 + entity.setSigiloOriginal(documento.getSigilo());
  820 + entity.setNivelAcessoOriginal(documento.getNivelAcesso());
  821 + entity.setSigilo(documento.getSigilo());
  822 + entity.setNivelAcesso(documento.getNivelAcesso());
  823 + entity.setStatus(this.dominioService.findByChaveAndCodigo("statusDocumentoGed", 1L));
  824 + documentosAlterados.add(entity);
820 825 }
821 826  
822 827 }
823 828  
  829 + return documentosAlterados;
  830 +
824 831 }
825 832  
826 833 /**
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/InicializarEcmServiceImpl.java
... ... @@ -246,7 +246,7 @@ public class InicializarEcmServiceImpl extends UtilStartup {
246 246 pgProcessoDocumentoSigiloso = this.paginaService.saveIfNotExist(pgProcessoDocumentoSigiloso);
247 247  
248 248 Menu menuProcessoDocumentoSigiloso = new Menu("Processos e Documentos Sigilosos", pgProcessoDocumentoSigiloso, menuProcesso, 2, 5, null, null, null, null, modulo, "CLASSIFICAR_PROCESSO_DOCUMENTO");
249   - menuProcessoDocumentoSigiloso.setIncludes(this.gerarArquivosMenu(menuProcessoDocumentoSigiloso, this.CIT_ECM_WEB_ANGULAR, "ClassificarDocumentoProcesso", true, true, true));
  249 + menuProcessoDocumentoSigiloso.setIncludes(this.gerarArquivosMenu(menuProcessoDocumentoSigiloso, this.CIT_ECM_WEB_ANGULAR, "ClassificarDocumentoProcesso", true, true, false));
250 250 this.menuService.mergeIfNotExist(menuProcessoDocumentoSigiloso);
251 251  
252 252 Pagina pgGerenciarProcessoListUnidade = new Pagina("Processos Abertos na Unidade", "/cit-ecm-web/html/gerenciarProcesso/gerenciarProcessoListUnidade.html");
... ...
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;
34 34 import br.com.centralit.api.service.DominioService;
35 35 import br.com.centralit.api.service.GrupoService;
36 36 import br.com.centralit.api.service.HistoricoAtribuicaoProcessoService;
  37 +import br.com.centralit.api.service.NotificacaoService;
37 38 import br.com.centralit.api.service.PlanoClassificacaoService;
38 39 import br.com.centralit.api.service.ProcessoService;
39 40 import br.com.centralit.api.service.SigiloService;
... ... @@ -46,9 +47,13 @@ import br.com.centralit.framework.esi.environment.EnvironmentOutput;
46 47 import br.com.centralit.framework.esi.environment.EnvironmentVariable;
47 48 import br.com.centralit.framework.exception.BusinessException;
48 49 import br.com.centralit.framework.exception.CodigoErro;
  50 +import br.com.centralit.framework.model.Dominio;
49 51 import br.com.centralit.framework.model.Grupo;
  52 +import br.com.centralit.framework.model.Notificacao;
  53 +import br.com.centralit.framework.model.NotificacaoGrupo;
50 54 import br.com.centralit.framework.model.Unidade;
51 55 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
  56 +import br.com.centralit.framework.util.Util;
52 57 import br.com.centralit.framework.util.UtilColecao;
53 58 import br.com.centralit.framework.util.UtilDate;
54 59 import br.com.centralit.framework.util.UtilObjeto;
... ... @@ -91,7 +96,8 @@ import com.googlecode.genericdao.search.SearchResult;
91 96 @Service("processoService")
92 97 public class ProcessoServiceImpl extends GenericServiceImpl<Processo, Long> implements ProcessoService {
93 98  
94   - private static final String VALIDAR_PROCESSOS_OUTRAS_UNIDADES = "ECM.VALIDACAO.VALIDAR_PROCESSOS_OUTRAS_UNIDADES";
  99 + /** Cosntante VALIDAR_OUTRAS_UNIDADES. */
  100 + private static final String VALIDAR_OUTRAS_UNIDADES = "ECM.VALIDACAO.VALIDAR_ALTERACAO_NIVEL_ACESSO_OUTRAS_UNIDADES";
95 101  
96 102 private final ProcessoDao processoDao;
97 103  
... ... @@ -141,6 +147,10 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
141 147 @Autowired
142 148 private HttpServletRequest request;
143 149  
  150 + /** Atributo notificacaoService. */
  151 + @Autowired
  152 + private NotificacaoService notificacaoService;
  153 +
144 154 @Autowired
145 155 public ProcessoServiceImpl( final ProcessoDao processoDao, @Qualifier("processoValidator") final Validator validator ) {
146 156  
... ... @@ -153,7 +163,6 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
153 163 public Processo save(Processo entity) {
154 164  
155 165 this.validarEntidade(entity, this.validator);
156   -
157 166 this.validarUnidade();
158 167  
159 168 this.montarEntidade(entity);
... ... @@ -170,22 +179,76 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
170 179  
171 180 this.saveSolr(processo);
172 181  
173   - if (entity.getSigilo() == null) {
  182 + // Verifica se o processo é sigiloso, verdadeiro sejá estarta o businessProcess, falso envia uma notificação para os grupos responsáeis.
  183 + if (!UtilObjeto.isReferencia(processo.getSigilo())) {
  184 +
174 185 this.startBusinessProcess(processo);
  186 + } else {
  187 +
  188 + this.enviarNotificacaoProcessoSigiloso(processo);
175 189 }
176 190  
177 191 return processo;
178 192 }
179 193  
180 194 /**
181   - * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
182   - *
183   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
184   - *
  195 + * <p>
  196 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  197 + * </p>
  198 + *
  199 + * <p>
  200 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  201 + * </p>
  202 + *
  203 + * Método responsável por enviar notificação para os responsável sobre a criação do processo sigiloso
  204 + *
  205 + * @author rogerio.costa
  206 + *
  207 + * @param processo
  208 + */
  209 + private void enviarNotificacaoProcessoSigiloso(Processo processo) {
  210 +
  211 + StringBuilder sb = new StringBuilder();
  212 +
  213 + sb.append("O processo ").append(processo.getNup()).append(" foi criado como ").append(processo.getSigilo().getTipoSigilo().getDescricao());
  214 +
  215 + Dominio tipoNotificacao = this.dominioService.findByChaveAndCodigo("tipoNotificacao", 4L);
  216 +
  217 + Dominio tipoPrioridade = this.dominioService.findByChaveAndCodigo("tipoPrioridade", 2L);
  218 +
  219 + Notificacao notificacao = new Notificacao("Processo sigiloso", sb.toString(), tipoNotificacao, tipoPrioridade, null, null, null);
  220 +
  221 + Collection<Grupo> grupos = this.credencialProcessoService.findGrupoPorSigilo(processo.getSigilo());
  222 +
  223 + if (!UtilColecao.isVazio(grupos)) {
  224 +
  225 + notificacao.setNotificacaoGrupos(new LinkedList<NotificacaoGrupo>());
  226 +
  227 + for (Grupo grupo : grupos) {
  228 +
  229 + NotificacaoGrupo notificacaoGrupo = new NotificacaoGrupo(grupo, notificacao);
  230 +
  231 + notificacao.getNotificacaoGrupos().add(notificacaoGrupo);
  232 + }
  233 +
  234 + }
  235 +
  236 + this.notificacaoService.save(notificacao);
  237 + }
  238 +
  239 + /**
  240 + * <p>
  241 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  242 + * </p>
  243 + *
  244 + * <p>
  245 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  246 + * </p>
  247 + *
185 248 * Método responsável por validar a unidade vigente
186   - *
  249 + *
187 250 * @author rogerio.costa
188   - *
  251 + *
189 252 */
190 253 private void validarUnidade() {
191 254  
... ... @@ -195,14 +258,18 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
195 258 }
196 259  
197 260 /**
198   - * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
199   - *
200   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
201   - *
  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 + *
202 269 * Método responsável por
203   - *
  270 + *
204 271 * @author rogerio.costa
205   - *
  272 + *
206 273 * @param processo
207 274 */
208 275 private void saveSolr(Processo processo) {
... ... @@ -242,25 +309,28 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
242 309  
243 310 Processo processo = (Processo) this.processoDao.getReference(entity.getId());
244 311  
245   - this.validarEntidade(entity, this.validator);
  312 + if (entity.getStatus().getCodigo() == 3L) {
246 313  
247   - this.montarEntidade(processo);
  314 + this.validarEntidade(entity, this.validator);
248 315  
249   - processo.setSigiloOriginal(processo.getSigilo());
250   - processo.setNivelAcessoOriginal(processo.getNivelAcesso());
  316 + this.montarEntidade(processo);
251 317  
252   - processo.setSigilo(entity.getSigilo());
253   - processo.setNivelAcesso(entity.getNivelAcesso());
254   - processo.setAprovado(entity.getAprovado());
  318 + processo.setSigiloOriginal(processo.getSigilo());
  319 + processo.setNivelAcessoOriginal(processo.getNivelAcesso());
  320 + processo.setSigilo(entity.getSigilo());
  321 + processo.setNivelAcesso(entity.getNivelAcesso());
  322 + processo.setValidado(entity.getValidado());
  323 + processo.setStatus(this.dominioService.findByChaveAndCodigo("statusProcesso", 4L));
255 324  
256   - processo = super.merge(processo);
  325 + if (UtilObjeto.isReferencia(processo.getValidado()) && processo.getValidado()) {
257 326  
258   - this.documentoGedService.atualizarSigiloDocumentos(entity.getDocumentos());
259   -
260   - if (UtilObjeto.isReferencia(processo.getAprovado()) && processo.getAprovado()) {
  327 + this.startBusinessProcess(processo);
  328 + }
261 329  
262   - this.startBusinessProcess(processo);
263 330 }
  331 +
  332 + processo.setDocumentos(this.documentoGedService.atualizarSigiloDocumentos(entity.getDocumentos()));
  333 +
264 334 return processo;
265 335 }
266 336  
... ... @@ -271,11 +341,9 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
271 341  
272 342 this.montarEntidade(processo);
273 343  
274   - try {
275   -// this.solrService.addProcesso(processo);
276   - } catch (Exception e) {
277   - e.printStackTrace();
278   - }
  344 + // this.saveSolr(processo);
  345 +
  346 + this.validarAbertosEmOutrasUnidades(processo);
279 347  
280 348 return super.merge(processo);
281 349 }
... ... @@ -426,9 +494,18 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
426 494 }
427 495 }
428 496  
  497 + if (UtilObjeto.isReferencia(processo.getTipoProtocolo())) {
  498 +
  499 + processo.setTipoProtocolo(this.dominioService.findByChaveAndCodigo("tipoProtocoloNup", processo.getTipoProtocolo().getCodigo()));
  500 +
  501 + }
  502 +
429 503 // Verifica se o sigilo foi selecionado
430 504 if (UtilObjeto.isReferencia(processo.getSigilo()) && UtilObjeto.isReferencia(processo.getSigilo().getId())) {
431 505 processo.setSigilo(this.sigiloService.getReference(processo.getSigilo().getId()));
  506 + // Processo sigiloso inicia com o status Aguardando validação.
  507 + processo.setStatus(this.dominioService.findByChaveAndCodigo("statusProcesso", 3L));
  508 +
432 509 this.atribuirPrazoPadraoProcesso(processo);
433 510 } else {
434 511 processo.setSigilo(null);
... ... @@ -978,15 +1055,14 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
978 1055 * @param entity
979 1056 * História de usuário #3216_CA007
980 1057 */
981   - @SuppressWarnings("unused")
982 1058 private void validarAbertosEmOutrasUnidades(Processo entity) {
983 1059  
984   - if (UtilObjeto.isReferencia(entity.getNivelAcesso().getNivelAcesso())) {
985   - if (entity.getNivelAcesso().getNivelAcesso().getCodigo() == 0L) {
986   - Collection<UnidadeProcesso> listaUnidades = this.unidadeProcessoService.findProcesso(entity);
987   - if (listaUnidades != null && listaUnidades.size() > 0) {
988   - throw new BusinessException(ProcessoServiceImpl.VALIDAR_PROCESSOS_OUTRAS_UNIDADES, CodigoErro.REGRA_NEGOCIO.getValue());
989   - }
  1060 + // verifica se o documento está passando a ser sigiloso
  1061 + if (UtilObjeto.isReferencia(entity.getSigilo()) && !this.processoDao.isSigiloso(entity.getId())) {
  1062 +
  1063 + if (this.unidadeProcessoService.isProcessoEnviado(entity.getId())) {
  1064 +
  1065 + throw new BusinessException(VALIDAR_OUTRAS_UNIDADES, CodigoErro.REGRA_NEGOCIO.getValue());
990 1066 }
991 1067 }
992 1068 }
... ... @@ -1107,5 +1183,5 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
1107 1183  
1108 1184 return this.processoDao.getProcessoByProtocolo(nup);
1109 1185 }
1110   -
  1186 +
1111 1187 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/UnidadeProcessoServiceImpl.java
... ... @@ -105,7 +105,7 @@ public class UnidadeProcessoServiceImpl extends GenericServiceImpl&lt;UnidadeProces
105 105 /** Atributo historicoAtribuicaoProcessoService. */
106 106 @Autowired
107 107 private HistoricoAtribuicaoProcessoService historicoAtribuicaoProcessoService;
108   -
  108 +
109 109 /**
110 110 * Responsável pela criação de novas instâncias desta classe.
111 111 *
... ... @@ -325,18 +325,43 @@ public class UnidadeProcessoServiceImpl extends GenericServiceImpl&lt;UnidadeProces
325 325  
326 326 return this.unidadeProcessoDao.obterPorUnidadeEProcesso(idProcesso, idUnidade);
327 327 }
328   -
  328 +
329 329 /**
330 330 * Método responsável por listar processos através da unidade do usuário
  331 + *
331 332 * @author rogerio.cassimiro
332 333 * @param search
333 334 * @return <RT> SearchResult<RT>
334 335 */
335 336 @Override
336 337 public <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search) {
  338 +
337 339 Dominio dominioStatusProcesso = dominioService.findByChaveAndCodigo(Dominio.TIPO_STATUS_PROCESSO_ECM, Dominio.TIPO_STATUS_PROCESSO_ECM_CONCLUIDO);
338 340 Usuario usuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() );
339 341 return this.unidadeProcessoDao.searchAndCountPorUnidade(search, usuario, dominioStatusProcesso.getId());
340 342 }
341   -
342   -}
343 343 \ No newline at end of file
  344 +
  345 + /**
  346 + * <p>
  347 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  348 + * </p>
  349 + *
  350 + * <p>
  351 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  352 + * </p>
  353 + *
  354 + * Método responsável por verificar se o processo foi enviado para outra unidade
  355 + *
  356 + * @author rogerio.costa
  357 + *
  358 + * @param idProcesso
  359 + *
  360 + * @return Boolean
  361 + */
  362 + public Boolean isProcessoEnviado(Long idProcesso) {
  363 +
  364 + return this.unidadeProcessoDao.isProcessoEnviado(idProcesso);
  365 +
  366 + }
  367 +
  368 +}
... ...
cit-ecm-web/src/main/java/br/com/centralit/controller/DocumentoGedController.java
... ... @@ -16,12 +16,50 @@ import br.com.centralit.framework.controller.GenericController;
16 16 import br.com.centralit.framework.json.ResponseBodyWrapper;
17 17 import br.com.centralit.framework.view.ResultResponseVH;
18 18  
  19 +/**
  20 + * <p>
  21 + * <img src="http://centralit.com.br/images/logo_central.png">
  22 + * </p>
  23 + *
  24 + * <p>
  25 + * <b>Company: </b> Central IT - Governança Corporativa -
  26 + * </p>
  27 + *
  28 + * <p>
  29 + * <b>Title: </b>
  30 + * </p>
  31 + *
  32 + * <p>
  33 + * <b>Description: </b>
  34 + * </p>
  35 + *
  36 + * <p>
  37 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  38 + * </p>
  39 + *
  40 + * <p>
  41 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  42 + * </p>
  43 + *
  44 + * @since 25/04/2016 - 09:18:05
  45 + *
  46 + * @version 1.0.0
  47 + *
  48 + * @author rogerio.costa
  49 + *
  50 + */
19 51 @Controller
20 52 @RequestMapping("/rest/documentoGed")
21 53 public class DocumentoGedController extends GenericController<DocumentoGed> {
22 54  
  55 + /** Atributo documentoGedService. */
23 56 private DocumentoGedService documentoGedService;
24 57  
  58 + /**
  59 + * Responsável pela criação de novas instâncias desta classe.
  60 + *
  61 + * @param documentoGedService
  62 + */
25 63 @Autowired
26 64 public DocumentoGedController( DocumentoGedService documentoGedService ) {
27 65  
... ...
cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java
... ... @@ -167,9 +167,9 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
167 167  
168 168 List<Dominio> list = new ArrayList<Dominio>();
169 169  
170   - list.add(new Dominio("statusDocumentoGed", "Minuta", "MINUTA", 1L));
171   - list.add(new Dominio("statusDocumentoGed", "Original", "ORIGINAL", 2L));
172   - list.add(new Dominio("statusDocumentoGed", "Cópia", "COPIA", 3L));
  170 + list.add(new Dominio("estadoDocumentoGed", "Minuta", "MINUTA", 1L));
  171 + list.add(new Dominio("estadoDocumentoGed", "Original", "ORIGINAL", 2L));
  172 + list.add(new Dominio("estadoDocumentoGed", "Cópia", "COPIA", 3L));
173 173  
174 174 list.add(new Dominio("tipoDestinacao", "Guardar Permanente", "GUARDAR_PERMANENTE", 1L));
175 175 list.add(new Dominio("tipoDestinacao", "Eliminação", "ELIMINAR", 2L));
... ... @@ -203,6 +203,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
203 203  
204 204 list.add(new Dominio("statusProcesso", "Concluído", "CONCLUIDO", 1L));
205 205 list.add(new Dominio("statusProcesso", "Em andamento", "EM_ANDAMENTO", 2L));
  206 + list.add(new Dominio("statusProcesso", "Aguardando Validação", "AGUARDANDO_VALIDACAO", 3L));
  207 + list.add(new Dominio("statusProcesso", "Validado", "VALIDADO", 4L));
  208 +
  209 + list.add(new Dominio("statusDocumentoGed", "Aguardando Validação", "AGUARDANDO_VALIDACAO", 0L));
  210 + list.add(new Dominio("statusDocumentoGed", "Validado", "VALIDADO", 1L));
206 211  
207 212 list.add(new Dominio("filtroPesquisa", "Ambos", "AMBOS", 0L));
208 213 list.add(new Dominio("filtroPesquisa", "Processo", "PROCESSO", 1L));
... ... @@ -439,7 +444,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
439 444 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.UNIDADE_GESTORA ", "Unidade gestora", dominio, modulo));
440 445 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_CRIACAO ", "Data criação", dominio, modulo));
441 446 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));
442   - internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATE ", "Até", dominio, modulo));
  447 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ATE", "Até", dominio, modulo));
  448 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VALIDADO", "Validado", dominio, modulo));
  449 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ESTADO", "Estado", dominio, modulo));
  450 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VALIDAR", "Validar", dominio, modulo));
  451 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NAO_CONTEM_DOCUMENTOS", "Não contém documentos", dominio, modulo));
443 452  
444 453 }
445 454  
... ... @@ -473,6 +482,8 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
473 482 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));
474 483 internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.PERMISSAO_OPERACAO", "Você não tem permissão para executar a operação.", dominio, modulo));
475 484 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));
  485 + 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));
  486 + 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));
476 487  
477 488 }
478 489  
... ... @@ -550,5 +561,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
550 561 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.TAREFA_SOBRESTADA_SUCESSO", "Tarefa sobrestada com sucesso!", dominio, modulo));
551 562 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.CONFIRMA_REATIVACAO_TAREFA", "Confirma reativação da tarefa?", dominio, modulo));
552 563 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.TAREFA_REATIVADA", "Tarefa reativada com sucesso", dominio, modulo));
  564 + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.VALIDADO", "Validado com sucesso!", dominio, modulo));
  565 + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.SELECIONE_UM_ITEM_PARA_VALIDACAO", "Selecione um item para validar.", dominio, modulo));
553 566 }
554 567 }
... ...
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoController.js
1 1 'use strict';
2 2  
3 3 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) {
4   - $scope.$showAdvancedFilters = false;
5 4  
6   - $scope.totalPages = 10;
7   - $scope.totalItens = 0;
8   - $scope.limit = 10;
9   - $scope.processos = [];
10   - $scope.businessProcess = null;
11   - $scope.indexProcessoNegocio = null;
12   -
13   - $scope.idPainelItem = 0;
14   -
15   - $scope.tabAtual = 0;
16   -
17   - $scope.aprovado = null;
18   -
19   - $scope.tabs = [ {active: true}
20   - ,{active: false}
21   - ];
22   -
23   - $scope.showTaskTab = true;
24   - $scope.init = function(showTaskTab) {
25   - $scope.showTaskTab = showTaskTab;
26   - };
27   -
28   - $scope.setCurrentTab = function(tab) {
29   - $scope.tabAtual = tab;
30   - for (var i = 0; i < $scope.tabs.length; i++) {
31   - $scope.tabs[i].active = i == tab;
32   - }
33   - };
34   -
35   - $scope.resetForm = function() {
36   - angular.element("#editProcessoEcm").scope().resetForm();
37   - };
38   -
39   - $scope.headers = [{title : $translate.instant('ECM.LABEL.PROTOCOLO'), value : 'nup' },
40   - {title : $translate.instant('ECM.LABEL.NIVEL_FINAL'), value : 'nivelAcesso.nivelAcesso.descricao'} ,
41   - {title : $translate.instant('ECM.LABEL.PROPOSTA'), value : 'sigilo.tipoSigilo.descricao'},
42   - {title : $translate.instant('ECM.LABEL.PRAZO_SIGILO'), value : 'prazoSigilo', filter : 'dateBR' }];
43   -
44   - $scope.filterCriteria = {
45   - start : 1,
46   - dir : 'asc',
47   - sort : 'id',
48   - limit : 10,
49   - fields: ['id', 'nup', 'nivelAcesso.nivelAcesso.descricao', 'sigilo.tipoSigilo.descricao', 'nivelAcesso.nivelAcesso.descricao', 'prazoSigilo'],
50   - filters : [{type : 'string', field : 'nup' },
51   - {type : 'string', field : 'nivelAcesso.nivelAcesso.descricao' } ,
52   - {type : 'string', field : 'sigilo.tipoSigilo.descricao', comparison : 'nn'},
53   - {type : 'date', field : 'prazoSigilo' }]
54   - };
55   -
56   - // Will be called when filtering the grid, will reset the page number to one
57   - $scope.filterResult = function() {
58   -
59   - //Timeout adicionado para que os filtros de pesquisa funcionem
60   - $timeout(function(){
61   - $scope.filterCriteria.start = 1;
62   - $scope.fetchResult().then(function() {
63   - // The request fires correctly but sometimes the ui doesn't update,
64   - // that's a fix
65   - $scope.filterCriteria.start = 1;
66   - });
67   -
68   - });
69   - };
70   -
71   - // call back function that we passed to our custom directive sortBy, will be
72   - // called when clicking on any field to sort
73   - $scope.onSort = function(sortedBy, sortDir) {
74   - $scope.filterCriteria.dir = sortDir;
75   - $scope.filterCriteria.sort = sortedBy;
76   - $scope.filterCriteria.start = 1;
77   - $scope.fetchResult().then(function() {
78   - // The request fires correctly but sometimes the ui doesn't update,
79   - // that's a fix
80   - $scope.filterCriteria.start = 1;
81   - });
82   - };
83   -
84   -
85   - // RECUPERA LISTA DE TAREFAS E SETA RESULTADO NA GRID
86   - $scope.fetchResult = function(page) {
87   -
88   - $scope.setCurrentTab(0);
89   - $scope.setLoading(true);
90   -
91   - return ProcessoRepository.getListPage($scope.filterCriteria).then(function(result) {
92   - $scope.processos = result.originalElement.objects;
93   - $scope.totalPages = result.originalElement.totalPages;
94   - $scope.totalItens = result.originalElement.totalItens;
95   - $scope.setLoading(false);
96   - }, function() {
97   - $scope.totalPages = 0;
98   - $scope.totalItens = 0;
99   - $scope.setLoading(false);
100   - });
101   - };
  5 + //Iniciar classificação
  6 + $scope.iniciar = function(processo){
  7 +
  8 + $scope.setLoading(true);
  9 +
  10 + $scope.processoValidacao = processo;
  11 +
  12 + $scope.validado = $scope.processoValidacao.validado;
  13 +
  14 + $scope.contemDocumentoParaValidar = $.grep($scope.processoValidacao.documentos, function(e){ return e.status.codigo == 0; })[0] != null;
  15 +
  16 + $scope.findPorIdTipoProcesso(processo.tipoProcesso.id);
  17 +
  18 + if($scope.processoValidacao.documentos){
  19 +
  20 + angular.forEach($scope.processoValidacao.documentos, function (item) {
  21 +
  22 + $scope.findNivelAcessoTipoDocumento(item);
  23 +
  24 + });
  25 + };
  26 +
  27 + $scope.setLoading(false);
  28 +
  29 + };
102 30  
103 31 $scope.removerAtributos = function(){
104   - angular.forEach($scope.processo.documentos, function (item) {
  32 + angular.forEach($scope.processoValidacao.documentos, function (item) {
105 33 delete item.autorUserName;
106 34 delete item.unidadeNome;
107 35 delete item.documentoVersao;
108 36 delete item.originalElement;
  37 + delete item.nivelAcessoList;
109 38  
110 39 if(item.nivelAcesso != undefined && item.nivelAcesso.sigilos != null){
111 40 angular.forEach(item.nivelAcesso.sigilos, function (item) {
... ... @@ -132,22 +61,19 @@ citApp.controller(&#39;ClassificarDocumentoProcessoController&#39;, [&#39;$scope&#39;, &#39;Processo
132 61 if($scope.classificarDocumentoProcessoForm.$valid){
133 62  
134 63 $scope.setLoadingSalva(true);
135   -
136 64 $scope.removerAtributos();
137   -
138   - $scope.processo.aprovado = $scope.aprovado;
139   - ProcessoRepository.atualizarSigiloProcesso($scope.processo).then(function(result) {
140   - $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO'));
  65 + $scope.processoValidacao.validado = $scope.validado;
  66 + ProcessoRepository.atualizarSigiloProcesso($scope.processoValidacao).then(function(result) {
141 67 $scope.historicoAlteracao(result.originalElement);
142   - ProcessoRepository.get($scope.processo.id).then(function(result){
143   - $scope.processo = result.originalElement;
144   - $scope.aprovado = result.originalElement.aprovado;
145   - $scope.carregarListaDocumentos($scope.processo.id);
146   - });
147 68 $scope.classificarDocumentoProcessoForm.$submitted = false;
148 69 $scope.atualizaProcesso();
  70 + $scope.showAlert("success", $translate.instant('ECM.MSG.VALIDADO'));
  71 + $scope.setLoading(false);
  72 +
  73 + $timeout(function(){
  74 + $scope.$parent.$parent.closeWidget();
  75 + });
149 76 });
150   - $scope.setLoading(false);
151 77 }else{
152 78 //Mensagem de erro de campos obrigatorios não preenchidos
153 79 $scope.showAlert('error', $translate.instant('MSG.MN001'), " ", false);
... ... @@ -173,70 +99,44 @@ citApp.controller(&#39;ClassificarDocumentoProcessoController&#39;, [&#39;$scope&#39;, &#39;Processo
173 99 $scope.closeWidget = function() {
174 100 angular.element("#searchGerenciarProcesso").scope().closeWidget();
175 101 };
176   -
177   - $scope.initializeNivelAcessoDocumento = function(){
178   - $scope.nivelAcessoTipoDocumentoList = [];
179   - NivelAcessoTipoDocumentoRepository.findAll().then(function(result) {
180   - $scope.nivelAcessoTipoDocumentoList = result;
181   - });
182   - };
183   -
184   -
185   - $scope.initializeSigiloDocumento = function(){
186   - $scope.sigiloDocumentoList = [ ];
187   - SigiloRepository.getList().then(function(result) {
188   - $scope.sigilos = result;
189   - });
190   - };
191 102  
192   - $scope.iniciar = function(processo){
  103 + //Listar nivelAcessoTipoDocumento
  104 + $scope.findNivelAcessoTipoDocumento = function(documento){
193 105  
194   - ProcessoRepository.get(processo.id).then(function(result) {
195   - $scope.processo = result.originalElement;
196   - $scope.aprovado = result.originalElement.aprovado;
197   - $scope.carregarListaDocumentos(processo.id);
198   - });
199   -
200   - $scope.findNivelPorIdProcesso(processo.tipoProcesso.id);
201   -
  106 + documento.nivelAcessoList = [];
  107 +
  108 + return NivelAcessoTipoDocumentoRepository.findPorIdTipoDocumento(documento.tipoDocumento.id).then(function(result) {
  109 +
  110 + angular.forEach(result, function (nivelAcesso) {
  111 + //seta o originalElement do result
  112 + documento.nivelAcessoList.push(nivelAcesso.originalElement);
  113 + //substitui o nivelAcesso do documento
  114 + if(documento.nivelAcesso.id === nivelAcesso.originalElement.id){
  115 +
  116 + documento.nivelAcesso = nivelAcesso.originalElement;
  117 +
  118 + }
  119 +
  120 + });
  121 + });
202 122 };
203 123  
204   - $scope.carregarListaDocumentos = function(idProcesso){
205   - $scope.processo.documentos = [];
206   - DocumentoGedRepository.findByProcessoSigilo(idProcesso).then(function(result) {
207   - angular.forEach(result, function(item) {
208   -
209   - var documento = item.originalElement;
210   - $scope.processo.documentos.push(documento);
211   -
212   - });
213   - });
214   - } ;
215   -
216   -
217   - $scope.findNivelPorIdProcesso = function(idTipoProcesso){
  124 + $scope.limparSigilo = function(documento){
  125 +
  126 + $timeout(function(){
  127 + if(documento.nivelAcesso.nivelAcesso.codigo != 0){
  128 +
  129 + documento.sigilo = null;
  130 +
  131 + }
  132 + });
  133 + };
  134 +
  135 + $scope.findPorIdTipoProcesso = function(idTipoProcesso){
218 136  
219 137 NivelAcessoTipoProcessoRepository.findPorIdTipoProcesso(idTipoProcesso).then(function(result) {
220 138 $scope.nivelAcessoList = result;
221 139 });
222 140 };
223 141  
224   -
225   - // Consulta entidade e mostra no formulario
226   - $scope.getProcesso = function(processo){
227   - $scope.setLoadingGet(true);
228   -
229   - ProcessoRepository.get(processo.id).then(function(result) {
230   - $scope.processo = result.originalElement;
231   - $scope.aprovado = result.originalElement.aprovado;
232   - $scope.setLoading(false);
233   - $scope.constroiRelacionamentoTipoProcesso($scope.processo.tipoProcesso);
234   -
235   - });
236   - };
237   -
238   -
239   - $scope.initializeNivelAcessoDocumento();
240   - $scope.initializeSigiloDocumento();
241   - $scope.fetchResult();
242 142 }]);
... ...
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/ClassificarDocumentoProcessoListController.js
1 1 'use strict';
2 2  
3 3 citApp.controller('ClassificarDocumentoProcessoListController', ['$scope', 'ProcessoRepository', '$translate', '$timeout', 'DominioRepository', '$compile', '$injector', 'DocumentoGedRepository', 'appService', function ClassificarDocumentoProcessoListController($scope, ProcessoRepository, $translate, $timeout, DominioRepository, $compile, $injector, DocumentoGedRepository, appService) {
4   - $scope.$showAdvancedFilters = false;
5 4  
6   - $scope.totalPages = 10;
7   - $scope.totalItens = 0;
8   - $scope.limit = 10;
9   - $scope.processos = [];
10   - $scope.businessProcess = null;
11   - $scope.indexProcessoNegocio = null;
12   -
13   - $scope.idPainelItem = 0;
14   -
15   - $scope.tabAtual = 0;
16   -
17   - $scope.tabs = [ {active: true}
18   - ,{active: false}
19   - ];
20   -
21   - $scope.showTaskTab = true;
22   - $scope.init = function(showTaskTab) {
23   - $scope.showTaskTab = showTaskTab;
24   - };
25   -
26   - $scope.setCurrentTab = function(tab) {
27   - $scope.tabAtual = tab;
28   - for (var i = 0; i < $scope.tabs.length; i++) {
29   - $scope.tabs[i].active = i == tab;
30   - }
31   - };
32   -
33   - $scope.resetForm = function() {
34   - angular.element("#editProcessoEcm").scope().resetForm();
35   - };
36   -
37   - $scope.headers = [{title : $translate.instant('LABEL.PROTOCOLO'), value : 'nup' },
38   - {title : $translate.instant('LABEL.PROPOSTA'), value : 'sigiloOriginal.tipoSigilo.descricao'},
39   - {title : $translate.instant('LABEL.NIVEL_FINAL'), value : 'sigilo.tipoSigilo.descricao'} ,
40   - {title : $translate.instant('LABEL.PRAZO_SIGILO'), value : 'prazoSigilo', filter : 'dateBR' }];
  5 +
  6 + $scope.headers = [{title : $translate.instant('ECM.LABEL.PROTOCOLO'), value : 'nup' },
  7 + {title : $translate.instant('ECM.LABEL.PROPOSTA'), value : 'sigiloOriginal.tipoSigilo.descricao'},
  8 + {title : $translate.instant('ECM.LABEL.NIVEL_FINAL'), value : 'sigilo.tipoSigilo.descricao'} ,
  9 + {title : $translate.instant('ECM.LABEL.PRAZO_SIGILO'), value : 'prazoSigilo', filter : 'dateBR' }];
41 10  
42 11 $scope.filterCriteria = {
43 12 start : 1,
... ... @@ -52,115 +21,68 @@ citApp.controller(&#39;ClassificarDocumentoProcessoListController&#39;, [&#39;$scope&#39;, &#39;Proc
52 21 {type : 'date', field : 'prazoSigilo' }]
53 22 };
54 23  
55   - // Will be called when filtering the grid, will reset the page number to one
56   - $scope.filterResult = function() {
57   -
58   - //Timeout adicionado para que os filtros de pesquisa funcionem
59   - $timeout(function(){
60   - $scope.filterCriteria.start = 1;
61   - $scope.fetchResult().then(function() {
62   - // The request fires correctly but sometimes the ui doesn't update,
63   - // that's a fix
64   - $scope.filterCriteria.start = 1;
65   - });
66   -
67   - });
68   - };
69   -
70   - // call back function that we passed to our custom directive sortBy, will be
71   - // called when clicking on any field to sort
72   - $scope.onSort = function(sortedBy, sortDir) {
73   - $scope.filterCriteria.dir = sortDir;
74   - $scope.filterCriteria.sort = sortedBy;
75   - $scope.filterCriteria.start = 1;
76   - $scope.fetchResult().then(function() {
77   - // The request fires correctly but sometimes the ui doesn't update,
78   - // that's a fix
79   - $scope.filterCriteria.start = 1;
80   - });
81   - };
82   -
83   -
84   - // RECUPERA LISTA DE TAREFAS E SETA RESULTADO NA GRID
85   - $scope.fetchResult = function(page) {
86   -
87   - $scope.setCurrentTab(0);
88   - $scope.setLoading(true);
89   -
90   - return ProcessoRepository.getListPage($scope.filterCriteria).then(function(result) {
91   - $scope.processos = result.originalElement.objects;
92   - $scope.totalPages = result.originalElement.totalPages;
93   - $scope.totalItens = result.originalElement.totalItens;
94   - $scope.setLoading(false);
95   - }, function() {
96   - $scope.totalPages = 0;
97   - $scope.totalItens = 0;
98   - $scope.setLoading(false);
99   - });
  24 + $scope.atualizarGrid = function() {
  25 + $scope.filterResult();
100 26 };
101   -
  27 +
102 28  
103 29 // ABRI Processo SELECIONADA
104   - $scope.abrirVisualizar = function(processo){
105   -
106   - var pagina = '/cit-ecm-web/html/gerenciarProcesso/gerenciarProcesso.html';
  30 + $scope.abreValidar = function(){
107 31  
108   - ProcessoRepository.get(processo.id).then(function(result){
109   - processo = result.originalElement;
110   - DocumentoGedRepository.findByProcessoSigilo(processo.id).then(function(result) {
111   - processo.documentos = result;
112   - });
113   - });
114   -
115   - if (appService.existsWorkspace(pagina)) {
116   - $scope.$openModalConfirm({message:$translate.instant('ECM.MSG.EXISTE_PROCESSO_ABERTO'), callback: function(){
117   - $scope.$modalConfirmInstance.dismiss('cancel');
118   - $scope.setLoading(true);
  32 + if($scope.modelSelecionado && $scope.modelSelecionado.id){
  33 +
  34 + var pagina = '/cit-ecm-web/html/gerenciarProcesso/gerenciarProcesso.html';
  35 +
  36 + if (appService.existsWorkspace(pagina)) {
  37 + $scope.$openModalConfirm({message:$translate.instant('ECM.MSG.EXISTE_PROCESSO_ABERTO'), callback: function(){
  38 + $scope.$modalConfirmInstance.dismiss('cancel');
  39 + $scope.setLoading(true);
  40 + $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange');
  41 + $timeout(function() {
  42 + angular.element('#searchGerenciarProcesso').scope().getProcesso($scope.modelSelecionado);
  43 +
  44 + }, 100);
  45 + $scope.setLoading(false);
  46 + }});
  47 + }else{
119 48 $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange');
120 49 $timeout(function() {
121   - angular.element('#searchGerenciarProcesso').scope().getProcesso(processo);
  50 + angular.element('#searchGerenciarProcesso').scope().getProcesso($scope.modelSelecionado);
122 51  
123 52 }, 100);
124   - $scope.setLoading(false);
125   - }});
126   - }else{
127   - $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange');
128   - $timeout(function() {
129   - angular.element('#searchGerenciarProcesso').scope().getProcesso(processo);
130   -
131   - }, 100);
132   - }
  53 + }
  54 + }else{
  55 + $scope.showAlert('warning', $translate.instant('ECM.MSG.SELECIONE_UM_ITEM_PARA_VALIDACAO'));
  56 + }
133 57  
134 58 };
135 59  
136 60 //adiciona a lista de documentos ao processo
137   - $scope.retrieveAditionalHtml = function(processo) {
138   - processo.$show = !processo.$show;
139   - if (!processo.$show)
140   - return;
  61 + $scope.findDocumentos = function() {
141 62  
142   - if(!processo.documentos){
143   - DocumentoGedRepository.findByProcessoSigilo(processo.id).then(function(result) {
144   - processo.documentos = result;
145   - $scope.showAditionalHtml(processo);
146   - });
147   - }else{
148   - $scope.showAditionalHtml(processo);
  63 + _getProcesso();
  64 +
  65 + if($scope.modelSelecionado.id){
  66 +
  67 + DocumentoGedRepository.findByProcessoSigilo($scope.modelSelecionado.id).then(function(result) {
  68 + $scope.modelSelecionado.documentos = result;
  69 + });
149 70 }
150 71  
  72 + $scope.modelSelecionado.$expandido = !$scope.modelSelecionado.$expandido;
  73 +
  74 +
151 75 };
  76 +
  77 + function _getProcesso(){
  78 + $scope.modelSelecionado = {};
  79 + for(var count = 0; count < $scope.processos.length; count++){
  80 + if($scope.processos[count].$show) {
  81 + $scope.modelSelecionado = $scope.processos[count];
  82 + break;
  83 + };
  84 + };
152 85  
153   - //abre a div com os documentos
154   - $scope.showAditionalHtml = function(processo) {
155   - var id = "divHtmlAdicional_" + $scope.idPainelItem + "_" + processo.id;
156   -
157   - var el = document.getElementById(id);
158   - if (!el || el.innerHTML != '')
159   - return;
160   -
161   - var element = angular.element("#"+id);
162   - el.focus();
163 86 };
164   -
165   - $scope.fetchResult();
  87 +
166 88 }]);
... ...
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/DocumentoGedController.js
... ... @@ -190,7 +190,7 @@ citApp.controller(&#39;DocumentoGedController&#39;, [&#39;$scope&#39;, &#39;DocumentoGedRepository&#39;,
190 190 processo : $scope.documentoGed.processo,
191 191 autor : $scope.usuarioLogado,
192 192 acaoAlteracao : "INCLUSAO_DOCUMENTO",
193   - idTask : $scope.task.id,
  193 + idTask : $scope.task ? $scope.task.id : null,
194 194 mapaAtributos : {"tipo_documento" : $scope.documentoGed.tipoDocumento.nome, "numero_documento" : $scope.documentoGed.numero}
195 195 };
196 196 HistoricoAlteracaoProcessoRepository.saveParams(historicoAlteracaoProcesso).then(function(result){
... ... @@ -203,7 +203,7 @@ citApp.controller(&#39;DocumentoGedController&#39;, [&#39;$scope&#39;, &#39;DocumentoGedRepository&#39;,
203 203 processo : $scope.documentoGed.processo,
204 204 autor : $scope.usuarioLogado,
205 205 acaoAlteracao : "CRIACAO_NOVA_VERSAO_DOCUMENTO",
206   - idTask : $scope.task.id,
  206 + idTask : $scope.task ? $scope.task.id : null,
207 207 mapaAtributos : {"tipo_documento" : $scope.documentoGed.tipoDocumento.nome, "numero_documento" : $scope.documentoGed.numero, "numero_versao" : $scope.documentoGed.versaoDocumento.toFixed(1)}
208 208 };
209 209 HistoricoAlteracaoProcessoRepository.saveParams(historicoAlteracaoProcesso).then(function(result){
... ... @@ -241,17 +241,17 @@ citApp.controller(&#39;DocumentoGedController&#39;, [&#39;$scope&#39;, &#39;DocumentoGedRepository&#39;,
241 241 $scope.mantido = false;
242 242 $scope.documentoGed.localizacao = null;
243 243 $scope.documentoGed.numero = null;
244   - DominioRepository.findAllDominio('statusDocumentoGed').then(function(result) {
245   - $scope.statusList = result;
  244 + DominioRepository.findAllDominio('estadoDocumentoGed').then(function(result) {
  245 + $scope.estadoList = result;
246 246 });
247 247  
248 248 }else{
249 249  
250 250 $scope.documentoGed.conteudo = {};
251 251  
252   - if($.grep($scope.statusList, function(e){ return e.codigo === 3; })[0]){
  252 + if($.grep($scope.estadoList, function(e){ return e.codigo === 3; })[0]){
253 253  
254   - $scope.statusList.splice($.grep($scope.statusList, function(e){ return e.codigo === 3; })[0].$index, 1);
  254 + $scope.estadoList.splice($.grep($scope.estadoList, function(e){ return e.codigo === 3; })[0].$index, 1);
255 255 }
256 256 }
257 257  
... ... @@ -323,8 +323,8 @@ citApp.controller(&#39;DocumentoGedController&#39;, [&#39;$scope&#39;, &#39;DocumentoGedRepository&#39;,
323 323 });
324 324 };
325 325  
326   - DominioRepository.findAllDominio('statusDocumentoGed').then(function(result) {
327   - $scope.statusList = result;
  326 + DominioRepository.findAllDominio('estadoDocumentoGed').then(function(result) {
  327 + $scope.estadoList = result;
328 328 });
329 329  
330 330 //SET HIPOTESE LEGAL #INICIO
... ...
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoController.js
... ... @@ -13,7 +13,6 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
13 13  
14 14 //INICIALIZA VARIAVEIS PARA HABILITAR E FECHAR DIVS DE AÇÕES DO PROCESSO
15 15  
16   - $scope.isHistoricoProcesso = true;
17 16 $scope.fecharPagina = function() {
18 17 $scope.isProcessoRelacionado = false;
19 18 $scope.isDocumentoEdit = false;
... ... @@ -339,9 +338,21 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
339 338 $scope.classificarDocumentoProceso = function () {
340 339 $scope.fecharPagina();
341 340 $scope.isClassificarProcessoDocumento = true;
  341 + var processo = {};
  342 + angular.copy($scope.processo, processo);
  343 + if($scope.processo.documentos){
  344 + processo.documentos = [];
  345 + angular.forEach($scope.processo.documentos, function(item) {
  346 + if(item.status.codigo == 0){
  347 + var documento = item;
  348 + processo.documentos.push(documento);
  349 + }
  350 + });
  351 +
  352 + }
342 353 $timeout( function () {
343   - angular.element( "#classificarDocumento" ).scope().getProcesso( $scope.processo );
344   - } );
  354 + angular.element( "#classificarDocumento" ).scope().iniciar(processo);
  355 + });
345 356 };
346 357  
347 358 // REMOVER DOCUMENTO
... ... @@ -634,26 +645,34 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
634 645 if ( $scope.task != null ) {
635 646 $scope.initialize();
636 647 }
  648 +
  649 + $scope.getProcesso = function (processo) {
637 650  
638   - $scope.getProcesso = function ( processo ) {
639   -
640   - $scope.setLoadingGet( true );
  651 + $scope.setLoadingGet(true);
641 652  
642 653 ProcessoRepository.getProcessoGerenciamento(processo.id).then(function(result) {
643   - $scope.processo = result.originalElement;
644   -
645   -
  654 + //Processo do scopo do gerenciamento
  655 + $scope.processo = result.originalElement;
  656 + //Processo que sera avaliado
  657 + var processo = result.originalElement;
  658 + processo.documentos = [];
646 659 DocumentoGedRepository.findByProcessoSigilo(processo.id).then(function(result) {
647   - $scope.processo.documentos = result;
  660 +
  661 + angular.forEach(result, function(item) {
  662 +
  663 + var documento = item.originalElement;
  664 +
  665 + processo.documentos.push(documento);
  666 + });
  667 +
  668 + $timeout( function () {
  669 + angular.element( "#classificarDocumento" ).scope().iniciar(processo);
  670 + } );
648 671 });
649 672  
650 673 $scope.setLoading(false);
651 674 });
652 675  
653   - $timeout( function () {
654   - angular.element( "#classificarDocumento" ).scope().iniciar(processo);
655   - } );
656   -
657 676  
658 677 $scope.isHistoricoProcesso = false;
659 678 $scope.isClassificarProcessoDocumento = true;
... ...
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/SolrSearchController.js
... ... @@ -123,7 +123,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
123 123 $scope.handleSetPage = function() {
124 124  
125 125 $scope.timeout = $timeout(function () {
126   - var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg");
  126 + var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg");
127 127 query.setOption("rows", "10");
128 128 query.setOption("facet", "true");
129 129 query.setOption("facet.limit", $scope.maxHints);
... ... @@ -330,7 +330,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
330 330 if ($scope.userQuery && $scope.userQuery.length >= $scope.minSearchLength) {
331 331 if ($scope.timeout) $timeout.cancel($scope.timeout);
332 332 $scope.timeout = $timeout(function () {
333   - var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg");
  333 + var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg");
334 334 query.setOption("rows", "10");
335 335 query.setOption("facet", "true");
336 336 query.setOption("facet.limit", $scope.maxHints);
... ... @@ -409,7 +409,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
409 409 $scope.userQuery = "*:*";
410 410 }
411 411 $scope.timeout = $timeout(function () {
412   - var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg");
  412 + var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg");
413 413 query.setOption("rows", "10");
414 414 query.setOption("facet", "true");
415 415 query.setOption("facet.limit", $scope.maxHints);
... ... @@ -440,7 +440,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
440 440 valueFilter = "*:*";
441 441 }
442 442 $scope.timeout = $timeout(function () {
443   - var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg");
  443 + var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg");
444 444 query.setOption("rows", "10");
445 445 query.setOption("facet", "true");
446 446 query.setOption("facet.limit", $scope.maxHints);
... ...
cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumento.html
1 1  
2   -
3 2 <div id="classificarDocumento" ng-controller="ClassificarDocumentoProcessoController as classificarDocumentoProcessoController">
4 3 <form name="classificarDocumentoProcessoForm" novalidate autocomplete="off">
5 4  
... ... @@ -19,87 +18,77 @@
19 18 <!-- Informações do processo -->
20 19 <fieldset>
21 20 <legend>
22   - <h5>
23   - <translate>ECM.LABEL.INFORMACAODOPROCESSO</translate>
24   - </h5>
  21 + <translate>ECM.LABEL.INFORMACAODOPROCESSO</translate>
25 22 </legend>
26 23  
27 24 <!-- <div class="profile-user-info"> -->
28   - <div class="row">
29   - <div class="col-md-12">
30   - <span class="text-bold"><translate>ECM.LABEL.PROTOCOLO</translate></span>&nbsp;&nbsp;
31   - <span>{{processo.nup}}</span>
32   - </div>
  25 + <div class="row">
  26 + <div class="col-md-12">
  27 + <span class="text-bold"><translate>ECM.LABEL.PROTOCOLO</translate></span>&nbsp;&nbsp; <span>{{processoValidacao.nup}}</span>
33 28 </div>
  29 + </div>
34 30  
35   - <div class="row">
36   - <div class="col-md-6">
37   - <span class="text-bold"><translate>ECM.LABEL.NIVEL_ACESSO_ORIGINAL</translate></span>&nbsp;&nbsp;
38   - <span>{{processo.nivelAcessoOriginal.nivelAcesso.descricao}}</span>
39   - </div>
40   -
41   - <div class="col-md-6">
42   - <span class="text-bold" ><translate>ECM.LABEL.NIVEL_SIGILO_ORIGINAL</translate></span>&nbsp;&nbsp;
43   - <span>{{processo.sigiloOriginal.tipoSigilo.descricao}}</span>
44   - </div>
45   -
  31 + <div class="row">
  32 + <div class="col-md-6">
  33 + <span class="text-bold"><translate>ECM.LABEL.NIVEL_ACESSO_ORIGINAL</translate></span>&nbsp;&nbsp; <span>{{processoValidacao.nivelAcessoOriginal.nivelAcesso.descricao}}</span>
  34 + </div>
  35 +
  36 + <div class="col-md-6">
  37 + <span class="text-bold"><translate>ECM.LABEL.NIVEL_SIGILO_ORIGINAL</translate></span>&nbsp;&nbsp; <span>{{processoValidacao.sigiloOriginal.tipoSigilo.descricao}}</span>
46 38 </div>
47 39  
  40 + </div>
  41 +
48 42 <!-- </div> -->
49 43  
50 44 <br></br>
51   -
52   - <div ng-show='processo.aprovado'>
  45 +
  46 + <div ng-show='processoValidacao.validado'>
53 47 <div class="row">
54 48 <div class="col-md-6">
55   - <span class="text-bold"><translate>ECM.LABEL.NIVEL_ACESSO</translate></span>&nbsp;&nbsp;
56   - <span>{{processo.nivelAcesso.nivelAcesso.descricao}}</span>
  49 + <span class="text-bold"><translate>ECM.LABEL.NIVEL_ACESSO</translate></span>&nbsp;&nbsp; <span>{{processoValidacao.nivelAcesso.nivelAcesso.descricao}}</span>
57 50 </div>
58   -
  51 +
59 52 <div class="col-md-6">
60   - <span class="text-bold" ><translate>ECM.LABEL.NIVEL_SIGILO</translate></span>&nbsp;&nbsp;
61   - <span>{{processo.sigilo.tipoSigilo.descricao}}</span>
  53 + <span class="text-bold"><translate>ECM.LABEL.NIVEL_SIGILO</translate></span>&nbsp;&nbsp; <span>{{processoValidacao.sigilo.tipoSigilo.descricao}}</span>
62 54 </div>
63   -
  55 +
64 56 </div>
65 57 </div>
66 58  
67   - <div class="row" ng-show='!processo.aprovado'>
  59 + <div class="row" ng-show='!processoValidacao.validado'>
68 60 <div class="col-md-4">
69   - <label-select ng-id="processo.nivelAcesso" ng-label="ECM.LABEL.NIVEL_ACESSO" ng-model="processo.nivelAcesso"
  61 + <label-select ng-id="processoValidacao.nivelAcesso" ng-label="ECM.LABEL.NIVEL_ACESSO" ng-disabled="aprovado" ng-model="processoValidacao.nivelAcesso"
70 62 form="classificarDocumentoclassificarDocumentoProcessoForm" ng-obrigatorio="true"
71 63 ng-custom-options="nivelAcessoTipoProcesso.originalElement as nivelAcessoTipoProcesso.nivelAcesso.descricao for nivelAcessoTipoProcesso" track-by="track by nivelAcessoTipoProcesso.id"
72 64 ng-list="nivelAcessoList" />
73 65 </div>
74 66  
75   - <div class="col-md-4" ng-show="processo.nivelAcesso.nivelAcesso.codigo == 0">
  67 + <div class="col-md-4" ng-show="processoValidacao.nivelAcesso.nivelAcesso.codigo == 0">
76 68 <div class="form-group">
77 69 <label class="control-label block"
78   - ng-class="{'has-error': classificarDocumentoProcessoForm['processo.sigilo.id'].$error.required && (!classificarDocumentoProcessoForm['processo.sigilo.id'].$pristine || classificarDocumentoProcessoForm.$submitted)}">
  70 + ng-class="{'has-error': classificarDocumentoProcessoForm['processoValidacao.sigilo.id'].$error.required && (!classificarDocumentoProcessoForm['processoValidacao.sigilo.id'].$pristine || classificarDocumentoProcessoForm.$submitted)}">
79 71 <translate>ECM.LABEL.SIGILO</translate> <span class="red">*</span> <i
80   - ng-show="classificarDocumentoProcessoForm['processo.sigilo.id'].$error.required && (!classificarDocumentoProcessoForm['processo.sigilo.id'].$pristine || classificarDocumentoProcessoForm.$submitted)"
  72 + ng-show="classificarDocumentoProcessoForm['processoValidacao.sigilo.id'].$error.required && (!classificarDocumentoProcessoForm['processoValidacao.sigilo.id'].$pristine || classificarDocumentoProcessoForm.$submitted)"
81 73 class='fa fa-warning red' tooltip="{{$translate.instant('LABEL.SIGILO') + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}" tooltip-placement='top'></i>
82 74 </label>
83   -
84   - <label-select ng-id="processo.sigilo" ng-model="processo.sigilo" form="classificarDocumentoProcessoForm"
85   - ng-custom-options="sigilo.originalElement as sigilo.tipoSigilo.descricao for sigilo"
86   - track-by="track by sigilo.id" ng-list="sigilos" />
87   - </div>
  75 +
  76 + <label-select ng-id="processoValidacao.sigilo" ng-model="processoValidacao.sigilo" form="classificarDocumentoProcessoForm"
  77 + ng-custom-options="sigilo.originalElement as sigilo.tipoSigilo.descricao for sigilo" track-by="track by sigilo.id" ng-list="sigilos" ng-disabled="aprovado" />
  78 + </div>
88 79 </div>
89   -
  80 +
90 81 <div class="col-md-4">
91   - <label-input-checkbox ng-model="aprovado" ng-label="ECM.LABEL.APROVAR"></label-input-checkbox>
  82 + <label-input-checkbox ng-model="validado" ng-label="ECM.LABEL.VALIDADO"></label-input-checkbox>
92 83 </div>
93 84 </div>
94   -
  85 +
95 86 </fieldset>
96 87 <!-- fim informações do processo -->
97 88  
98 89 <fieldset>
99 90 <legend>
100   - <h5>
101   - <translate>ECM.LABEL.DOCUMENTOS</translate>
102   - </h5>
  91 + <translate>ECM.LABEL.DOCUMENTOS</translate>
103 92 </legend>
104 93  
105 94 <div class="row">
... ... @@ -111,35 +100,34 @@
111 100 <table class="table table-striped table-bordered table-hover">
112 101 <thead>
113 102 <tr>
114   - <th style="width: 20%;" class="text-center"><translate>ECM.LABEL.PROTOCOLO</translate></th>
115 103 <th style="width: 15%;" class="text-center"><translate>ECM.LABEL.NUM_DOCUMENTO</translate></th>
  104 + <th style="width: 20%;" class="text-center"><translate>ECM.LABEL.TIPODOCUMENTO</translate></th>
116 105 <th class="text-center"><translate>ECM.LABEL.NIVEL_PROPOSTO</translate></th>
117 106 <th class="text-center"><translate>ECM.LABEL.NIVEL_REVISADO</translate></th>
118 107  
119 108 </tr>
120 109 </thead>
121 110 <tbody>
122   - <tr ng-repeat="documento in processo.documentos">
123   - <td class="text-center">{{processo.nup}}</td>
124   - <td class="text-center">{{processo.id}}</td>
125   - <td class="text-center" ng-show="documento.aprovado">{{documento.nivelAcesso.nivelAcesso.descricao}}</td>
126   - <td ng-show="!documento.aprovado">
  111 + <tr ng-repeat="documentoValidacao in processoValidacao.documentos">
  112 + <td class="text-center">{{documentoValidacao.numero}}</td>
  113 + <td class="text-center">{{documentoValidacao.tipoDocumento.nome}}</td>
  114 + <td>
127 115 <div class="row">
128 116 <div class="col-md-6">
129   - <label-select ng-id="documento.nivelAcesso" ng-model="documento.nivelAcesso" form="classificarDocumentoProcessoForm"
130   - ng-custom-options="nivelAcessoTipoDocumento.originalElement as nivelAcessoTipoDocumento.nivelAcesso.descricao for nivelAcessoTipoDocumento"
131   - track-by="track by nivelAcessoTipoDocumento.id" ng-list="nivelAcessoTipoDocumentoList" />
  117 + <label-select ng-id="documentoValidacao.nivelAcesso" ng-model="documentoValidacao.nivelAcesso" form="classificarDocumentoProcessoForm"
  118 + ng-custom-options="nivelAcessoTipoDocumento as nivelAcessoTipoDocumento.nivelAcesso.descricao for nivelAcessoTipoDocumento"
  119 + track-by="track by nivelAcessoTipoDocumento.id" ng-list="documentoValidacao.nivelAcessoList" ng-custom-change="limparSigilo(documentoValidacao)"/>
132 120 </div>
133   - <div class="col-md-6">
134   - <label-select ng-id="documento.sigilo" ng-model="documento.sigilo" form="classificarDocumentoProcessoForm" ng-show="documento.nivelAcesso.nivelAcesso.codigo == 0"
135   - ng-custom-options="sigilo.originalElement as sigilo.tipoSigilo.descricao for sigilo"
136   - track-by="track by sigilo.id" ng-list="sigilos" />
  121 + <div class="col-md-6" ng-show='documentoValidacao.nivelAcesso.nivelAcesso.codigo == 0'>
  122 + <label-select ng-id="documentoValidacao.sigilo" ng-model="documentoValidacao.sigilo" form="classificarDocumentoProcessoForm"
  123 + ng-custom-options="sigiloTipoDocumento.sigilo as sigiloTipoDocumento.tipoSigiloDescricao for sigiloTipoDocumento" track-by="track by sigiloTipoDocumento.sigilo.id" ng-list="documentoValidacao.nivelAcesso.sigilos" />
  124 +
137 125 </div>
138   -
  126 + </div>
139 127 </td>
140   - <td class="text-center">{{documento.sigilo.tipoSigilo.descricao}}</td>
  128 + <td class="text-center"><span ng-if="documentoValidacao.nivelAcesso.nivelAcesso.codigo == 0">{{documentoValidacao.sigilo.tipoSigilo.descricao}}</span> <span ng-if="documentoValidacao.nivelAcesso.nivelAcesso.codigo != 0"> {{documentoValidacao.nivelAcesso.nivelAcesso.descricao}}</span></td>
141 129 </tr>
142   - <tr ng-hide="processo.documentos.length > 0">
  130 + <tr ng-hide="processoValidacao.documentos.length > 0">
143 131 <td colspan="5" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td>
144 132 </tr>
145 133 </tbody>
... ... @@ -154,7 +142,8 @@
154 142  
155 143 <div class="row">
156 144 <div class="col-md-12">
157   - <button class="btn btn-sm btn-primary" ng-click="saveOrUpdate()" type="button">
  145 + <button class="btn btn-sm btn-primary" ng-click="saveOrUpdate()" ng-if="processoValidacao.validado == false || contemDocumentoParaValidar" ng-disabled="!validado && !contemDocumentoParaValidar"
  146 + type="button">
158 147 <translate>LABEL.SALVAR</translate>
159 148 </button>
160 149  
... ...
cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumentoList.html
1   -
2   -<style type="text/css">
3   -/*
4   - * Os códigos abaixo devem ser colocados nos devidos lugares e/ou utilizados dos css corretos do template, utilizem assim por não conhecer onde estão os css da arquitetura.
5   - */
6   -.itemdiv {
7   - min-height: 66px;
8   - border: 1px solid #ccc;
9   - padding: 10px;
10   - position: relative;
11   - border-radius: 5px;
12   - margin-bottom: 5px;
13   -}
14   -
15   -.itemdiv>.user {
16   - display: inline-block;
17   - width: 42px;
18   - position: absolute;
19   - left: 10px;
20   -}
21   -
22   -.itemdiv .itemdiv-informacoes .label {
23   - margin-left: 2px;
24   -}
25   -
26   -.itemdiv>.body {
27   - width: auto;
28   - margin-left: 40px;
29   - margin-right: 12px;
30   - position: relative;
31   -}
32   -
33   -.itemdiv>.body>.name {
34   - display: block;
35   - color: #999;
36   -}
37   -
38   -.itemdiv>.body>.time {
39   - display: block;
40   - font-size: 11px;
41   - font-weight: 700;
42   - color: #666;
43   - position: absolute;
44   - right: 0;
45   - top: 0;
46   -}
47   -
48   -.itemdiv>.body>.text {
49   - display: block;
50   - position: relative;
51   - margin-top: 2px;
52   - font-size: 13px;
53   -}
54   -
55   -.itemdiv.commentdiv .tools {
56   - right: 15px;
57   -}
58   -
59   -.itemdiv .tools {
60   - position: absolute;
61   - top: 32px;
62   -}
63   -
64   -.itemdiv .tools a:hover {
65   - text-decoration: none;
66   -}
67   -
68   -.profile-user-info {
69   - display: table;
70   - width: 98%;
71   - width: calc(100% - 24px);
72   - margin: 0 auto;
73   -}
74   -
75   -.profile-info-row {
76   - display: table-row;
77   -}
78   -
79   -.profile-info-row:first-child .profile-info-name,.profile-info-row:first-child .profile-info-value
80   - {
81   - border-top: none;
82   -}
83   -
84   -.profile-info-name {
85   - text-align: right;
86   - padding: 6px 10px 6px 4px;
87   - font-weight: 400;
88   - color: #667E99;
89   - background-color: transparent;
90   - border-top: 1px dotted #D5E4F1;
91   - display: table-cell;
92   - width: 110px;
93   - vertical-align: middle;
94   -}
95   -
96   -.profile-info-row:first-child .profile-info-name,.profile-info-row:first-child .profile-info-value
97   - {
98   - border-top: none;
99   -}
100   -
101   -.profile-info-value {
102   - display: table-cell;
103   - padding: 6px 4px 6px 6px;
104   - border-top: 1px dotted #D5E4F1;
105   -}
106   -
107   -.ellipsis {
108   - white-space: nowrap;
109   - overflow: hidden;
110   - text-overflow: ellipsis;
111   - max-width: 65%;
112   -}
113   -
114   -.btn-group .btn {
115   - padding-top: 0;
116   - padding-bottom: 0;
117   -}
118   -
119   -#widget-historico .widget-main {
120   - padding: 0 16px 16px 0;
121   -}
122   -
123   -#painelProcesso .situacaoProcesso {
124   - background-color: red;
125   -}
126   -
127   -.documentos .widget-header .btn-group {
128   - margin: 6px 6px 0 0;
129   -}
130   -
131   -.labelOverflowLimit {
132   - text-overflow: ellipsis;
133   - overflow: hidden;
134   - white-space: nowrap;
135   - font-weight: bold;
136   -}
137   -
138   -#searchGerenciarProcesso {
139   - margin-top: 10px;
140   -}
141   -</style>
142   -
143   -<meta charset="UTF-8">
  1 +<link rel="stylesheet" href="/cit-ecm-web/assets/css/gerenciarProcesso.css" />
144 2 <div id="idClassificarDocumentoProcesso" class="page-content" ng-controller="ClassificarDocumentoProcessoListController">
145 3 <div class="bar-buttons-action fixed">
146 4 <div class="row">
147 5 <div class="col-sm-9 text-left">
148   - <button class="btn btn-clear" title="{{$translate.instant('LABEL.ATUALIZAR')}}" alt="{{$translate.instant('LABEL.ATUALIZAR')}}" ng-click="fetchResult()">
  6 + <button class="btn btn-clear" title="{{$translate.instant('LABEL.ATUALIZAR')}}" alt="{{$translate.instant('LABEL.ATUALIZAR')}}" ng-click="atualizarGrid();">
149 7 <i class="fa fa-refresh purple"></i>
150 8 <translate>LABEL.ATUALIZAR</translate>
151 9 </button>
152   - </div>
153 10  
  11 + <button class="btn btn-clear" title="{{$translate.instant('LABEL.VALIDAR')}}" alt="{{$translate.instant('LABEL.VALIDAR')}}" ng-click="abreValidar();">
  12 + <i class="fa fa-check"></i>
  13 + <translate>ECM.LABEL.VALIDAR</translate>
  14 + </button>
  15 + </div>
154 16 <div class="col-sm-3 text-right">
155 17 <favorito />
156   -
157 18 <help-button workspace="workspace" />
158 19 </div>
159   - <!-- .col -->
160 20 </div>
161   - <!-- .row -->
162 21 </div>
163   - <!-- .bar-buttons-action -->
164 22  
165 23 <breadcrumb ng-workspace="workspace"></breadcrumb>
166   - <div class="row">
167   - <div class="col-sm-12">
168   - <div class="table-container">
169   - <div class="table-header clearfix">
170   - <div class="table-header-right">
171   - <button class="btn btn-primary btn-inline btn-white table-header-item" ng-click="$showAdvancedFilters = !$showAdvancedFilters">
172   - <i class="fa fa-filter"></i>
173   - <translate>LABEL.FILTROS_AVANCADOS</translate>
174   - </button>
175   - </div>
176   - <!-- .table-header-right -->
177 24  
178   - <div class="table-header-left">
179   - <div class="form-group">
180   - <div class="input-group">
181   - <input type="text" class="form-control" placeholder="Digite uma palavra chave" on-enter-blur on-blur-change="filterResult(true)" ng-model="filterCriteria.keywordValue" /> <span
182   - class="input-group-addon"> <i class="fa fa-search fa-lg"></i>
183   - </span>
184   - </div>
185   - </div>
186   - <!-- .form-group -->
187   - </div>
188   - <!-- .table-header-left -->
189   - </div>
190   - <!-- .table-header -->
191   -
192   - <table class="table table-striped table-bordered table-hover">
193   -
194   -
195   - <thead>
196   - <tr>
197   - <th style="width: 5%;"><small><translate>ECM.LABEL.PROTOCOLO</translate></small></th>
198   - <th style="align: center; width: 5%;"><small><translate>ECM.LABEL.PROPOSTA</translate></small></th>
199   - <th style="width: 15%;"><small><translate>ECM.LABEL.NIVEL_FINAL</translate></small></th>
200   - <th style="align: center; width: 5%;"><small><translate>ECM.LABEL.PRAZO_SIGILO</translate></small></th>
201   - </tr>
202   - </thead>
203   -
204   -
205   - <tfoot ng-show="totalItens > 0">
206   - <tr>
207   - <td colspan="9">
208   - <div class="row">
209   - <div class='col-sm-4 table-showing'>
210   - <translate>LABEL.MOSTRANDO</translate>
211   - {{filterCriteria.start}}
212   - <translate>LABEL.ATE</translate>
213   - {{filterCriteria.limit > totalItens ? totalItens : filterCriteria.limit}}
214   - <translate>LABEL.DE</translate>
215   - ({{totalItens}})
216   - <translate>ESI.TAREFAS</translate>
217   - .
218   - </div>
219   - <div class="col-sm-8 text-right">
220   - <pagination rotate="true" total-items="totalItens" num-pages="totalPages" ng-model="filterCriteria.start" items-per-page="filterCriteria.limit" class="pagination-sm" boundary-links="true"
221   - ng-change="fetchResult()"></pagination>
222   - </div>
223   - <!-- .col -->
224   - </div> <!-- .row -->
225   - </td>
226   - </tr>
227   - </tfoot>
228   -
229   -
230   - <tbody>
231   - <tr ng-show="$showAdvancedFilters">
232   - <td style="width: 5%;">
233   - <div class="row">
234   - <div class="col-sm-12">
235   - <input class="form-control" ng-change="filterResult()" ng-model="filterCriteria.filters[0].value" type="text" integer />
236   - </div>
237   - <!-- .col -->
238   - </div> <!-- .row -->
239   - </td>
240   - <td>
241   - <div class="row">
242   - <div class="col-sm-12">
243   - <input class="form-control" ng-change="filterResult()" ng-model="filterCriteria.filters[1].value" type="text" />
244   - </div>
245   - <!-- .col -->
246   - </div> <!-- .row -->
247   - </td>
248   - <td style="width: 5%;">
249   - <div class="row">
250   - <div class="col-sm-12">
251   - <input class="form-control" ng-change="filterResult()" ng-model="filterCriteria.filters[2].value" type="text" />
252   - </div>
253   - <!-- .col -->
254   - </div> <!-- .row -->
255   - </td>
256   - <td>
257   - <div class="row">
258   - <div class="col-sm-12">
259   - <input class="form-control" ng-change="filterResult()" ng-model="filterCriteria.filters[3].value" type="date" />
260   - </div>
261   - <!-- .col -->
262   - </div> <!-- .row -->
263   - </td>
264   -
265   - </tr>
266   -
267   -
268   - <tr ng-repeat-start="processo in processos">
269   -
270   - <td style="width: 25%;">
271   - <a href="#void" ng-click="abrirVisualizar(processo)">
272   - <span class="small green">{{processo.nup}}&nbsp;
273   - <a href="javascript:;" class="blue" ng-click="retrieveAditionalHtml(processo)">
274   - <i class="fa fa-lg" ng-class="{'fa-caret-right': !processo.$show, 'fa-caret-down': processo.$show}"></i>
275   - </a>
276   - </span>
277   - </a>
278   - </td>
279   -
280   -
281   - <td style="width: 25%;"><span class="small green">{{processo['sigiloOriginal.tipoSigilo.descricao']}}</span></td>
282   -
283   - <td style="width: 25%;"><span class="small green">{{processo['sigilo.tipoSigilo.descricao']}}</span></td>
284   -
285   - <td style="width: 25%;"><span class="small green">{{processo.prazoSigilo | date:'dd-MM-yyyy'}}</span></td>
286   -
287   - </tr>
288   -
289   - <tr ng-show="processo.$show" ng-repeat-end>
290   - <td>&nbsp;</td>
291   -
292   - <td colspan="8">
293   -
294   - <div class="media media-card" id="divHtmlAdicional_{{idPainelItem}}_{{processo.id}}">
295   - <small ng-show="!processo.documentos"><font color="red"><b><translate>MSG.AGUARDE</translate></b></font></small>
296   - <!-- <a href="#void" ng-click="abrirVisualizar(processo)">{{processo.nup}}</a> -->
297   - <div class="widget-main clearfix" >
298   - <div class="itemdiv commentdiv" ng-repeat="documento in processo.documentos | orderBy:'-dataCriacao'" >
299   -
300   - <div class="user">
301   - <i class="{{documento.icon}}" title="{{documento.anexo.dominioTipoAnexo.descricao}}"></i>
302   - </div>
303   -
304   - <div class="body">
305   - <div class="text ellipsis">
306   - <span class="black">{{documento.tipoDocumento.nome}} - {{documento.numero}}</span>
307   - </div>
308   -
309   - <div class="time hidden-md">
310   - <i class="ace-icon fa fa-clock-o"></i> <span class="blue">{{documento.dataCriacao | date: 'dd/MM/yyyy HH:mm:ss'}}</span>
311   - </div>
312   -
313   - <div class="text ellipsis" tooltip="{{documento.assuntoComplementar}}">{{documento.assuntoComplementar}}</div>
314   -
315   - <div class="itemdiv-informacoes">
316   - <span class="label label-gray" ng-show="documento.sigilo.tipoSigilo.codigo == 0 ">{{documento.sigilo.tipoSigilo.descricao}}</span> <span class="label label-danger"
317   - ng-show="documento.sigilo.tipoSigilo.codigo == 1 ">{{documento.sigilo.tipoSigilo.descricao}}</span> <span class="label label-black" ng-show="documento.sigilo.tipoSigilo.codigo == 2 ">{{documento.sigilo.tipoSigilo.descricao}}</span>
318   - <span class="label label-warning" ng-show="documento.nivelAcesso.nivelAcesso.codigo == 1">{{documento.nivelAcesso.nivelAcesso.descricao}}</span> <span class="label label-success"
319   - ng-show="documento.nivelAcesso.nivelAcesso.codigo == 2">{{documento.nivelAcesso.nivelAcesso.descricao}}</span> <span class="label label-info" ng-show="documento.origem">Anexado</span> <span
320   - class="label label-info" ng-show="false">Assinado</span> <span class="label label-success" ng-show="false">Habilitado</span> <span class="label label-warning" ng-show="false">Ci&#xEA;ncia</span>
321   - <span class="label label-danger" ng-show="documento.cancelado">Cancelado</span>
322   - </div>
323   - </div>
324   - </div>
325   - </div>
326   - </div>
327   - </td>
328   - </tr>
329   -
330   - <tr ng-show="totalItens <= 0">
331   - <td colspan="9"><strong><translate>MSG.NENHUM_REGISTRO_ENCONTRADO</translate></strong></td>
332   - </tr>
333   -
334   - </tbody>
335   -
336   - </table>
337   -
338   - </div>
339   - </div>
340   - </div>
341   - </tabset>
342   -</div>
343   -<!-- .table-container -->
344   -</div>
345   -<!-- .page-content -->
  25 + <list-view ng-lista="processos" ng-repository="ProcessoRepository" ng-headers="headers" ng-filter-criteria="filterCriteria" ng-item-selecionado="modelSelecionado" transclude="classificarDocumentos.html"
  26 + ng-custom-transclude="findDocumentos()" ng-model-parent="modelSelecionado">
  27 + <div ng-include src="'/cit-ecm-web/html/classificarProcessoDocumento/classificarDocumentos.html'"></div>
  28 + </list-view>
  29 +</div>
346 30 \ No newline at end of file
... ...
cit-ecm-web/src/main/webapp/html/documentoGed/metadadosDocumentoEdit.html
... ... @@ -63,8 +63,8 @@
63 63 <div class="row">
64 64  
65 65 <div class="col-md-4">
66   - <label-select ng-id="documentoGed.status" ng-model="documentoGed.status" ng-label="ECM.LABEL.STATUS" ng-obrigatorio='true' form="documentoGedForm" ng-list="statusList"
67   - ng-custom-options="dominioStatus.originalElement as dominioStatus.descricao for dominioStatus" track-by="track by dominioStatus.id" ng-disabled='!edit'> </label-select>
  66 + <label-select ng-id="documentoGed.estado" ng-model="documentoGed.estado" ng-label="ECM.LABEL.ESTADO" ng-obrigatorio='true' form="documentoGedForm" ng-list="estadoList"
  67 + ng-custom-options="dominioEstado.originalElement as dominioEstado.descricao for dominioEstado" track-by="track by dominioEstado.id" ng-disabled='!edit'> </label-select>
68 68 </div>
69 69  
70 70 <div class="col-md-8">
... ... @@ -128,8 +128,8 @@
128 128  
129 129 <div class="row">
130 130 <div class="col-sm-6" ng-show='documentoGed.nivelAcesso.nivelAcesso.codigo == 1 || documentoGed.sigilo.id'>
131   - <label-select ng-id="documentoGed.hipoteseLegal" ng-model="documentoGed.hipoteseLegal" ng-label="ECM.LABEL.HIPOTESELEGAL" ng-obrigatorio='false' form="documentoGedForm" ng-list="hipoteses"
132   - ng-custom-options="hipoteseLegal.originalElement as hipoteseLegal.nome for hipoteseLegal" ng-obrigatorio='true' track-by="track by hipoteseLegal.id" ng-disabled='!edit'> </label-select>
  131 + <label-select ng-id="documentoGed.hipoteseLegal" ng-model="documentoGed.hipoteseLegal" ng-label="ECM.LABEL.HIPOTESELEGAL" ng-obrigatorio='documentoGed.nivelAcesso.nivelAcesso.codigo == 1 || documentoGed.sigilo.id' form="documentoGedForm" ng-list="hipoteses"
  132 + ng-custom-options="hipoteseLegal.originalElement as hipoteseLegal.nome for hipoteseLegal" track-by="track by hipoteseLegal.id" ng-disabled='!edit'> </label-select>
133 133 </div>
134 134 </div>
135 135  
... ...
cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeDocumentosProcesso.html
... ... @@ -34,7 +34,7 @@
34 34 </button>
35 35  
36 36 <ul class="dropdown-menu-center dropdown-menu dropdown-caret" role="menu">
37   - <li ng-if='!documento.cancelado'><a href="#void" ng-click="editDocument(documento, true);"><translate>LABEL.EDITAR</translate></a></li>
  37 + <li ng-if='!documento.cancelado && documento.status.codigo != 0'><a href="#void" ng-click="editDocument(documento, true);"><translate>LABEL.EDITAR</translate></a></li>
38 38 <li ng-if='!processo.isTramitado && (!documento.cancelado && documento.unidade.id === usuarioLogado.unidade.id)'><a href="#void" ng-click="removeDocumento(documento, $index);"><translate>LABEL.REMOVER</translate></a></li>
39 39 <li ng-if='processo.isTramitado && (!documento.cancelado && documento.unidade.id === usuarioLogado.unidade.id)'><a href="#void" ng-click='cancelarDocumento(documento)'> <translate>ECM.LABEL.CANCELARDOCUMENTO</translate></a></li>
40 40 <li ng-if='!documento.cancelado'><a href="#void" ng-click="visualizarVersoes(documento);"> <translate>ECM.LABEL.VERSOESDODOCUMENTO</translate></a></li>
... ...
cit-ecm-web/src/main/webapp/html/processo/processoEdit.html
... ... @@ -125,7 +125,7 @@
125 125  
126 126 <div class="row">
127 127 <div class="col-sm-6" ng-show='processo.nivelAcesso.nivelAcesso.codigo == 1 || processo.sigilo.id'>
128   - <label-select ng-id="processo.hipoteseLegal" ng-model="processo.hipoteseLegal" ng-label="ECM.LABEL.HIPOTESELEGAL" ng-obrigatorio='false' form="processoForm" ng-list="hipoteses"
  128 + <label-select ng-id="processo.hipoteseLegal" ng-model="processo.hipoteseLegal" ng-label="ECM.LABEL.HIPOTESELEGAL" ng-obrigatorio='processo.nivelAcesso.nivelAcesso.codigo == 1 || processo.sigilo.id' form="processoForm" ng-list="hipoteses"
129 129 ng-custom-options="hipoteseLegal.originalElement as hipoteseLegal.nome for hipoteseLegal" ng-obrigatorio='true' track-by="track by hipoteseLegal.id" ng-disabled='!edit'> </label-select>
130 130 </div>
131 131 </div>
... ...