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,34 +120,43 @@ public interface DocumentoGedDao extends CitGenericDAO {
120 * @return Collection<Processo> 120 * @return Collection<Processo>
121 */ 121 */
122 Collection<DocumentoGed> findPorPlanoClassificacao(Long idPlanoClassificacao); 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 * Método responsável por 134 * Método responsável por
131 - * 135 + *
132 * @author andre.silva 136 * @author andre.silva
133 - * 137 + *
134 * @param idProcesso 138 * @param idProcesso
135 * @return 139 * @return
136 */ 140 */
137 Collection<DocumentoGed> findByProcessoSigilo(Long idProcesso); 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,5 +155,23 @@ public interface ProcessoDao extends CitGenericDAO {
155 * @return <RT> SearchResult<RT> 155 * @return <RT> SearchResult<RT>
156 */ 156 */
157 <RT> SearchResult<RT> searchAndCountPorSigilo(ISearch search); 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,14 +2,14 @@ package br.com.centralit.api.dao;
2 2
3 import java.util.Collection; 3 import java.util.Collection;
4 4
5 -import com.googlecode.genericdao.search.ISearch;  
6 -import com.googlecode.genericdao.search.SearchResult;  
7 -  
8 import br.com.centralit.api.model.Processo; 5 import br.com.centralit.api.model.Processo;
9 import br.com.centralit.api.model.UnidadeProcesso; 6 import br.com.centralit.api.model.UnidadeProcesso;
10 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO; 7 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
11 import br.com.centralit.framework.model.Usuario; 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 * <p> 14 * <p>
15 * <img src="http://centralit.com.br/images/logo_central.png"> 15 * <img src="http://centralit.com.br/images/logo_central.png">
@@ -118,9 +118,10 @@ public interface UnidadeProcessoDao extends CitGenericDAO { @@ -118,9 +118,10 @@ public interface UnidadeProcessoDao extends CitGenericDAO {
118 * @return UnidadeProcesso 118 * @return UnidadeProcesso
119 */ 119 */
120 UnidadeProcesso obterPorUnidadeEProcesso(Long idProcesso, Long idUnidade); 120 UnidadeProcesso obterPorUnidadeEProcesso(Long idProcesso, Long idUnidade);
121 - 121 +
122 /** 122 /**
123 * Método responsável por listar processos através da unidade do usuário 123 * Método responsável por listar processos através da unidade do usuário
  124 + *
124 * @author rogerio.cassimiro 125 * @author rogerio.cassimiro
125 * @param search 126 * @param search
126 * @param usuario 127 * @param usuario
@@ -128,5 +129,24 @@ public interface UnidadeProcessoDao extends CitGenericDAO { @@ -128,5 +129,24 @@ public interface UnidadeProcessoDao extends CitGenericDAO {
128 * @return <RT> SearchResult<RT> 129 * @return <RT> SearchResult<RT>
129 */ 130 */
130 <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus); 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,13 +16,50 @@ import br.com.centralit.api.model.SigiloPrivilegio;
16 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; 16 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
17 import br.com.centralit.framework.dao.arquitetura.SearchSeven; 17 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
18 import br.com.centralit.framework.model.Usuario; 18 import br.com.centralit.framework.model.Usuario;
  19 +import br.com.centralit.framework.util.UtilObjeto;
19 20
20 import com.googlecode.genericdao.search.Filter; 21 import com.googlecode.genericdao.search.Filter;
21 import com.googlecode.genericdao.search.Sort; 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 @Repository("documentoGedDao") 56 @Repository("documentoGedDao")
  57 +@SuppressWarnings("unchecked")
24 public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements DocumentoGedDao { 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 public DocumentoGedDaoHibernate() { 63 public DocumentoGedDaoHibernate() {
27 64
28 super(DocumentoGed.class); 65 super(DocumentoGed.class);
@@ -69,6 +106,7 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum @@ -69,6 +106,7 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum
69 searchSeven.addFilterOr(Filter.equal("id", id), Filter.equal("idRaiz", id)); 106 searchSeven.addFilterOr(Filter.equal("id", id), Filter.equal("idRaiz", id));
70 107
71 searchSeven.addSort(Sort.asc("versaoDocumento")); 108 searchSeven.addSort(Sort.asc("versaoDocumento"));
  109 +
72 searchSeven.addFilterNotEmpty("dataInativo"); 110 searchSeven.addFilterNotEmpty("dataInativo");
73 111
74 return this.search(searchSeven); 112 return this.search(searchSeven);
@@ -168,25 +206,38 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum @@ -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 @Override 241 @Override
191 public Collection<DocumentoGed> findByProcessoSigilo(Long idProcesso) { 242 public Collection<DocumentoGed> findByProcessoSigilo(Long idProcesso) {
192 243
@@ -206,11 +257,16 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum @@ -206,11 +257,16 @@ public class DocumentoGedDaoHibernate extends CitGenericDAOImpl implements Docum
206 257
207 criteriaPrivilegio.add(Restrictions.eq("grupoUsuario.usuario.id", idUsuario)); 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 criteria.add(Restrictions.eq("processo.id", idProcesso)); 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 criteria.add(Restrictions.in("sigilo.id", criteriaPrivilegio.list())); 270 criteria.add(Restrictions.in("sigilo.id", criteriaPrivilegio.list()));
215 271
216 return criteria.list(); 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,10 +3,16 @@ package br.com.centralit.api.dao.impl;
3 import java.util.Calendar; 3 import java.util.Calendar;
4 import java.util.Collection; 4 import java.util.Collection;
5 5
  6 +import javax.persistence.FetchType;
  7 +
6 import org.hibernate.Criteria; 8 import org.hibernate.Criteria;
7 import org.hibernate.Session; 9 import org.hibernate.Session;
  10 +import org.hibernate.criterion.DetachedCriteria;
8 import org.hibernate.criterion.Projections; 11 import org.hibernate.criterion.Projections;
9 import org.hibernate.criterion.Restrictions; 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 import org.springframework.security.core.context.SecurityContextHolder; 16 import org.springframework.security.core.context.SecurityContextHolder;
11 import org.springframework.stereotype.Repository; 17 import org.springframework.stereotype.Repository;
12 18
@@ -16,6 +22,7 @@ import br.com.centralit.api.model.SigiloPrivilegio; @@ -16,6 +22,7 @@ import br.com.centralit.api.model.SigiloPrivilegio;
16 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; 22 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
17 import br.com.centralit.framework.dao.arquitetura.SearchSeven; 23 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
18 import br.com.centralit.framework.model.Usuario; 24 import br.com.centralit.framework.model.Usuario;
  25 +import br.com.centralit.framework.util.UtilObjeto;
19 26
20 import com.googlecode.genericdao.search.Filter; 27 import com.googlecode.genericdao.search.Filter;
21 import com.googlecode.genericdao.search.ISearch; 28 import com.googlecode.genericdao.search.ISearch;
@@ -191,25 +198,53 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD @@ -191,25 +198,53 @@ public class ProcessoDaoHibernate extends CitGenericDAOImpl implements ProcessoD
191 198
192 Long idUsuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId(); 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 return super.searchAndCount(search); 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,7 +17,6 @@ import br.com.centralit.api.model.SigiloPrivilegio;
17 import br.com.centralit.api.model.UnidadeProcesso; 17 import br.com.centralit.api.model.UnidadeProcesso;
18 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; 18 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
19 import br.com.centralit.framework.dao.arquitetura.SearchSeven; 19 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
20 -import br.com.centralit.framework.model.GrupoPrivilegio;  
21 import br.com.centralit.framework.model.Usuario; 20 import br.com.centralit.framework.model.Usuario;
22 import br.com.centralit.framework.util.UtilColecao; 21 import br.com.centralit.framework.util.UtilColecao;
23 import br.com.centralit.framework.util.UtilObjeto; 22 import br.com.centralit.framework.util.UtilObjeto;
@@ -160,6 +159,35 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un @@ -160,6 +159,35 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
160 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> 159 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
161 * </p> 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 * Método responsável por obter através da unidade e processo 191 * Método responsável por obter através da unidade e processo
164 * 192 *
165 * @author rogerio.costa 193 * @author rogerio.costa
@@ -193,8 +221,8 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un @@ -193,8 +221,8 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
193 */ 221 */
194 @Override 222 @Override
195 public <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search, Usuario usuario, Long idStatus) { 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 DetachedCriteria detachedCriteriaPrivilegio = findSigiloUsuarioContemPermissaoAtravesDosGrupos(usuario); 226 DetachedCriteria detachedCriteriaPrivilegio = findSigiloUsuarioContemPermissaoAtravesDosGrupos(usuario);
199 227
200 // Filtro da credencial do processo 228 // Filtro da credencial do processo
@@ -253,7 +281,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un @@ -253,7 +281,7 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
253 detachedCredencialProcesso.add(Restrictions.or(Restrictions.eq("grupoUsuario.usuario.id", usuario.getId()), Restrictions.eq("usuario.id", usuario.getId()))); 281 detachedCredencialProcesso.add(Restrictions.or(Restrictions.eq("grupoUsuario.usuario.id", usuario.getId()), Restrictions.eq("usuario.id", usuario.getId())));
254 282
255 detachedCredencialProcesso.add(Restrictions.isNull("dataInativo")); 283 detachedCredencialProcesso.add(Restrictions.isNull("dataInativo"));
256 - 284 +
257 return detachedCredencialProcesso; 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,6 +151,11 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
151 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) 151 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class })
152 private Dominio status; 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 /** Atributo tramitarDocumento. */ 159 /** Atributo tramitarDocumento. */
155 @ManyToOne(fetch = FetchType.LAZY) 160 @ManyToOne(fetch = FetchType.LAZY)
156 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) 161 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class })
@@ -973,4 +978,24 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -973,4 +978,24 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
973 this.tipoSuporteDocumento = tipoSuporteDocumento; 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,6 +27,7 @@ import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer;
27 import br.com.centralit.framework.json.Views; 27 import br.com.centralit.framework.json.Views;
28 import br.com.centralit.framework.model.Dominio; 28 import br.com.centralit.framework.model.Dominio;
29 import br.com.centralit.framework.util.UtilColecao; 29 import br.com.centralit.framework.util.UtilColecao;
  30 +import br.com.centralit.framework.util.UtilObjeto;
30 31
31 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 32 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
32 import com.fasterxml.jackson.annotation.JsonView; 33 import com.fasterxml.jackson.annotation.JsonView;
@@ -70,9 +71,9 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; @@ -70,9 +71,9 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
70 public class Processo extends PersistentObjectUnidade { 71 public class Processo extends PersistentObjectUnidade {
71 72
72 public static final String GRID_PROCESSO_NA_UNIDADE = "GRID_PROCESSO_NA_UNIDADE"; 73 public static final String GRID_PROCESSO_NA_UNIDADE = "GRID_PROCESSO_NA_UNIDADE";
73 - 74 +
74 public static final String GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO = "GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO"; 75 public static final String GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO = "GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO";
75 - 76 +
76 /** Atributo serialVersionUID. */ 77 /** Atributo serialVersionUID. */
77 private static final long serialVersionUID = -6167513900417461697L; 78 private static final long serialVersionUID = -6167513900417461697L;
78 79
@@ -90,7 +91,7 @@ public class Processo extends PersistentObjectUnidade { @@ -90,7 +91,7 @@ public class Processo extends PersistentObjectUnidade {
90 @Temporal(TemporalType.TIMESTAMP) 91 @Temporal(TemporalType.TIMESTAMP)
91 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) 92 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
92 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) 93 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
93 - @JsonView({Views.UnidadeProcessoListView.class}) 94 + @JsonView({ Views.UnidadeProcessoListView.class })
94 private Calendar dataReferencia; 95 private Calendar dataReferencia;
95 96
96 /** Atributo dataConclusao. */ 97 /** Atributo dataConclusao. */
@@ -110,15 +111,33 @@ public class Processo extends PersistentObjectUnidade { @@ -110,15 +111,33 @@ public class Processo extends PersistentObjectUnidade {
110 @Transient 111 @Transient
111 private Long idTask; 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 /** Atributo observacaoGeral. */ 114 /** Atributo observacaoGeral. */
119 @JsonView({ Views.ProcessoEdit.class }) 115 @JsonView({ Views.ProcessoEdit.class })
120 private String observacaoGeral; 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 /** Atributo status. */ 141 /** Atributo status. */
123 @ManyToOne(fetch = FetchType.LAZY) 142 @ManyToOne(fetch = FetchType.LAZY)
124 @JsonView({ Views.ProcessoEdit.class, Views.UnidadeProcessoListView.class }) 143 @JsonView({ Views.ProcessoEdit.class, Views.UnidadeProcessoListView.class })
@@ -139,16 +158,9 @@ public class Processo extends PersistentObjectUnidade { @@ -139,16 +158,9 @@ public class Processo extends PersistentObjectUnidade {
139 @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) 158 @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class })
140 private PlanoClassificacao assunto; 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 /** Atributo nivelAcesso. */ 161 /** Atributo nivelAcesso. */
150 @ManyToOne(fetch = FetchType.LAZY) 162 @ManyToOne(fetch = FetchType.LAZY)
151 - @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) 163 + @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class })
152 private NivelAcessoTipoProcesso nivelAcesso; 164 private NivelAcessoTipoProcesso nivelAcesso;
153 165
154 @ManyToOne(fetch = FetchType.LAZY) 166 @ManyToOne(fetch = FetchType.LAZY)
@@ -209,17 +221,6 @@ public class Processo extends PersistentObjectUnidade { @@ -209,17 +221,6 @@ public class Processo extends PersistentObjectUnidade {
209 @JoinTable(name = "processo_anexado", joinColumns = { @JoinColumn(name = "processo_id") }, inverseJoinColumns = { @JoinColumn(name = "processo_anexado_id") }) 221 @JoinTable(name = "processo_anexado", joinColumns = { @JoinColumn(name = "processo_id") }, inverseJoinColumns = { @JoinColumn(name = "processo_anexado_id") })
210 private Collection<AnexoProcesso> anexados; 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 /** Atributo credenciais. */ 224 /** Atributo credenciais. */
224 @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL) 225 @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL)
225 private Collection<CredencialProcesso> credenciais; 226 private Collection<CredencialProcesso> credenciais;
@@ -814,23 +815,29 @@ public class Processo extends PersistentObjectUnidade { @@ -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 * @return <code>Boolean</code> 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,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 * Verifica se o processo foi tramitado. Levando em consideração a unidadeProcesso criada apartir da criação do processo. 872 * Verifica se o processo foi tramitado. Levando em consideração a unidadeProcesso criada apartir da criação do processo.
862 - * 873 + *
863 * @author maycon.silva 874 * @author maycon.silva
864 - * 875 + *
865 * @return boolean 876 * @return boolean
866 */ 877 */
867 - /*@JsonView({ Views.ProcessoEdit.class })*/ 878 + /* @JsonView({ Views.ProcessoEdit.class }) */
868 public boolean isTramitado() { 879 public boolean isTramitado() {
869 880
870 return !UtilColecao.isVazio(this.getUnidadesProcesso()) && this.getUnidadesProcesso().size() > 1; 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,8 +4,10 @@ import java.util.Collection;
4 4
5 import br.com.centralit.api.model.CredencialProcesso; 5 import br.com.centralit.api.model.CredencialProcesso;
6 import br.com.centralit.api.model.Processo; 6 import br.com.centralit.api.model.Processo;
  7 +import br.com.centralit.api.model.Sigilo;
7 import br.com.centralit.api.viewHelper.GrupoUsuarioVH; 8 import br.com.centralit.api.viewHelper.GrupoUsuarioVH;
8 import br.com.centralit.api.viewHelper.HerancaSistemaVH; 9 import br.com.centralit.api.viewHelper.HerancaSistemaVH;
  10 +import br.com.centralit.framework.model.Grupo;
9 import br.com.centralit.framework.service.arquitetura.GenericService; 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,4 +202,23 @@ public interface CredencialProcessoService extends GenericService&lt;CredencialProc
200 */ 202 */
201 boolean contemPermissaoProcesso(Long idProcesso); 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,9 +3,7 @@ package br.com.centralit.api.service;
3 import java.util.Collection; 3 import java.util.Collection;
4 4
5 import br.com.centralit.api.model.DocumentoGed; 5 import br.com.centralit.api.model.DocumentoGed;
6 -import br.com.centralit.framework.model.Dominio;  
7 import br.com.centralit.api.model.Processo; 6 import br.com.centralit.api.model.Processo;
8 -import br.com.centralit.api.viewHelper.AnexarProcessoVH;  
9 import br.com.centralit.framework.model.Dominio; 7 import br.com.centralit.framework.model.Dominio;
10 import br.com.centralit.framework.service.arquitetura.GenericService; 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,7 +38,7 @@ public interface DocumentoGedService extends GenericService&lt;DocumentoGed, Long&gt;
40 void saveIconeDocumento(DocumentoGed documentoGed, Dominio tipoAnexo); 38 void saveIconeDocumento(DocumentoGed documentoGed, Dominio tipoAnexo);
41 39
42 void anexarDocumento(Processo processoDestinoAnexo, Processo processoOrigem); 40 void anexarDocumento(Processo processoDestinoAnexo, Processo processoOrigem);
43 - 41 +
44 Collection<DocumentoGed> findByProcessoSigilo(Long idProcesso); 42 Collection<DocumentoGed> findByProcessoSigilo(Long idProcesso);
45 43
46 /** 44 /**
@@ -61,19 +59,23 @@ public interface DocumentoGedService extends GenericService&lt;DocumentoGed, Long&gt; @@ -61,19 +59,23 @@ public interface DocumentoGedService extends GenericService&lt;DocumentoGed, Long&gt;
61 * @return Collection<Processo> 59 * @return Collection<Processo>
62 */ 60 */
63 Collection<DocumentoGed> findPorPlanoClassificacao(Long idPlanoClassificacao); 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 * Método responsável por 73 * Método responsável por
72 - * 74 + *
73 * @author andre.silva 75 * @author andre.silva
74 - * 76 + *
75 * @param listaDocumentos 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,10 +174,30 @@ public interface UnidadeProcessoService extends GenericService&lt;UnidadeProcesso,
174 174
175 /** 175 /**
176 * Método responsável por listar processos através da unidade do usuário 176 * Método responsável por listar processos através da unidade do usuário
  177 + *
177 * @author rogerio.cassimiro 178 * @author rogerio.cassimiro
178 * @param search 179 * @param search
179 * @return <RT> SearchResult<RT> 180 * @return <RT> SearchResult<RT>
180 */ 181 */
181 <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search); 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,7 +543,7 @@ public class CredencialProcessoServiceImpl extends GenericServiceImpl&lt;Credencial
543 * 543 *
544 * @return Collection<Grupo> 544 * @return Collection<Grupo>
545 */ 545 */
546 - private Collection<Grupo> findGrupoPorSigilo(Sigilo sigilo) { 546 + public Collection<Grupo> findGrupoPorSigilo(Sigilo sigilo) {
547 547
548 Collection<Long> idPrivilegios = this.getPrivilegios(sigilo); 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,6 +34,7 @@ import br.com.centralit.api.service.ProcessoService;
34 import br.com.centralit.api.service.SigiloService; 34 import br.com.centralit.api.service.SigiloService;
35 import br.com.centralit.api.service.SolrService; 35 import br.com.centralit.api.service.SolrService;
36 import br.com.centralit.api.service.TipoDocumentoService; 36 import br.com.centralit.api.service.TipoDocumentoService;
  37 +import br.com.centralit.api.service.UnidadeProcessoService;
37 import br.com.centralit.framework.exception.BusinessException; 38 import br.com.centralit.framework.exception.BusinessException;
38 import br.com.centralit.framework.exception.CodigoErro; 39 import br.com.centralit.framework.exception.CodigoErro;
39 import br.com.centralit.framework.model.Dominio; 40 import br.com.centralit.framework.model.Dominio;
@@ -82,7 +83,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo @@ -82,7 +83,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
82 83
83 private static final String VALIDAR_NIVEL_ACESSO = "ECM.VALIDACAO.VALIDAR_NIVEL_ACESSO"; 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 /** Atributo documentoGedDao. */ 88 /** Atributo documentoGedDao. */
88 private DocumentoGedDao documentoGedDao; 89 private DocumentoGedDao documentoGedDao;
@@ -119,6 +120,10 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo @@ -119,6 +120,10 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
119 @Autowired 120 @Autowired
120 private SigiloService sigiloService; 121 private SigiloService sigiloService;
121 122
  123 + /** Atributo unidadeProcessoService. */
  124 + @Autowired
  125 + private UnidadeProcessoService unidadeProcessoService;
  126 +
122 /** Atributo solrService. */ 127 /** Atributo solrService. */
123 @Autowired 128 @Autowired
124 private SolrService solrService; 129 private SolrService solrService;
@@ -269,6 +274,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo @@ -269,6 +274,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
269 if (UtilObjeto.isReferencia(entity.getSigilo()) && UtilObjeto.isReferencia(entity.getSigilo().getId())) { 274 if (UtilObjeto.isReferencia(entity.getSigilo()) && UtilObjeto.isReferencia(entity.getSigilo().getId())) {
270 275
271 entity.setSigilo(this.sigiloService.getReference(entity.getSigilo().getId())); 276 entity.setSigilo(this.sigiloService.getReference(entity.getSigilo().getId()));
  277 + entity.setStatus(this.dominioService.findByChaveAndCodigo("statusDocumentoGed", 0L));
272 this.atribuirPrazoPadraoDocumento(entity); 278 this.atribuirPrazoPadraoDocumento(entity);
273 } else { 279 } else {
274 280
@@ -380,11 +386,12 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo @@ -380,11 +386,12 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
380 */ 386 */
381 private void validarAbertosEmOutrasUnidades(DocumentoGed entity) { 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,25 +809,25 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
802 * @param listaDocumentos 809 * @param listaDocumentos
803 */ 810 */
804 @Override 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 if (!UtilColecao.isVazio(listaDocumentos)) { 816 if (!UtilColecao.isVazio(listaDocumentos)) {
808 for (DocumentoGed documento : listaDocumentos) { 817 for (DocumentoGed documento : listaDocumentos) {
809 DocumentoGed entity = (DocumentoGed) this.documentoGedDao.getReference(documento.getId()); 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,7 +246,7 @@ public class InicializarEcmServiceImpl extends UtilStartup {
246 pgProcessoDocumentoSigiloso = this.paginaService.saveIfNotExist(pgProcessoDocumentoSigiloso); 246 pgProcessoDocumentoSigiloso = this.paginaService.saveIfNotExist(pgProcessoDocumentoSigiloso);
247 247
248 Menu menuProcessoDocumentoSigiloso = new Menu("Processos e Documentos Sigilosos", pgProcessoDocumentoSigiloso, menuProcesso, 2, 5, null, null, null, null, modulo, "CLASSIFICAR_PROCESSO_DOCUMENTO"); 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 this.menuService.mergeIfNotExist(menuProcessoDocumentoSigiloso); 250 this.menuService.mergeIfNotExist(menuProcessoDocumentoSigiloso);
251 251
252 Pagina pgGerenciarProcessoListUnidade = new Pagina("Processos Abertos na Unidade", "/cit-ecm-web/html/gerenciarProcesso/gerenciarProcessoListUnidade.html"); 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,6 +34,7 @@ import br.com.centralit.api.service.DocumentoGedService;
34 import br.com.centralit.api.service.DominioService; 34 import br.com.centralit.api.service.DominioService;
35 import br.com.centralit.api.service.GrupoService; 35 import br.com.centralit.api.service.GrupoService;
36 import br.com.centralit.api.service.HistoricoAtribuicaoProcessoService; 36 import br.com.centralit.api.service.HistoricoAtribuicaoProcessoService;
  37 +import br.com.centralit.api.service.NotificacaoService;
37 import br.com.centralit.api.service.PlanoClassificacaoService; 38 import br.com.centralit.api.service.PlanoClassificacaoService;
38 import br.com.centralit.api.service.ProcessoService; 39 import br.com.centralit.api.service.ProcessoService;
39 import br.com.centralit.api.service.SigiloService; 40 import br.com.centralit.api.service.SigiloService;
@@ -46,9 +47,13 @@ import br.com.centralit.framework.esi.environment.EnvironmentOutput; @@ -46,9 +47,13 @@ import br.com.centralit.framework.esi.environment.EnvironmentOutput;
46 import br.com.centralit.framework.esi.environment.EnvironmentVariable; 47 import br.com.centralit.framework.esi.environment.EnvironmentVariable;
47 import br.com.centralit.framework.exception.BusinessException; 48 import br.com.centralit.framework.exception.BusinessException;
48 import br.com.centralit.framework.exception.CodigoErro; 49 import br.com.centralit.framework.exception.CodigoErro;
  50 +import br.com.centralit.framework.model.Dominio;
49 import br.com.centralit.framework.model.Grupo; 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 import br.com.centralit.framework.model.Unidade; 54 import br.com.centralit.framework.model.Unidade;
51 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl; 55 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
  56 +import br.com.centralit.framework.util.Util;
52 import br.com.centralit.framework.util.UtilColecao; 57 import br.com.centralit.framework.util.UtilColecao;
53 import br.com.centralit.framework.util.UtilDate; 58 import br.com.centralit.framework.util.UtilDate;
54 import br.com.centralit.framework.util.UtilObjeto; 59 import br.com.centralit.framework.util.UtilObjeto;
@@ -91,7 +96,8 @@ import com.googlecode.genericdao.search.SearchResult; @@ -91,7 +96,8 @@ import com.googlecode.genericdao.search.SearchResult;
91 @Service("processoService") 96 @Service("processoService")
92 public class ProcessoServiceImpl extends GenericServiceImpl<Processo, Long> implements ProcessoService { 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 private final ProcessoDao processoDao; 102 private final ProcessoDao processoDao;
97 103
@@ -141,6 +147,10 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -141,6 +147,10 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
141 @Autowired 147 @Autowired
142 private HttpServletRequest request; 148 private HttpServletRequest request;
143 149
  150 + /** Atributo notificacaoService. */
  151 + @Autowired
  152 + private NotificacaoService notificacaoService;
  153 +
144 @Autowired 154 @Autowired
145 public ProcessoServiceImpl( final ProcessoDao processoDao, @Qualifier("processoValidator") final Validator validator ) { 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,7 +163,6 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
153 public Processo save(Processo entity) { 163 public Processo save(Processo entity) {
154 164
155 this.validarEntidade(entity, this.validator); 165 this.validarEntidade(entity, this.validator);
156 -  
157 this.validarUnidade(); 166 this.validarUnidade();
158 167
159 this.montarEntidade(entity); 168 this.montarEntidade(entity);
@@ -170,22 +179,76 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -170,22 +179,76 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
170 179
171 this.saveSolr(processo); 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 this.startBusinessProcess(processo); 185 this.startBusinessProcess(processo);
  186 + } else {
  187 +
  188 + this.enviarNotificacaoProcessoSigiloso(processo);
175 } 189 }
176 190
177 return processo; 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 * Método responsável por validar a unidade vigente 248 * Método responsável por validar a unidade vigente
186 - * 249 + *
187 * @author rogerio.costa 250 * @author rogerio.costa
188 - * 251 + *
189 */ 252 */
190 private void validarUnidade() { 253 private void validarUnidade() {
191 254
@@ -195,14 +258,18 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -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 * Método responsável por 269 * Método responsável por
203 - * 270 + *
204 * @author rogerio.costa 271 * @author rogerio.costa
205 - * 272 + *
206 * @param processo 273 * @param processo
207 */ 274 */
208 private void saveSolr(Processo processo) { 275 private void saveSolr(Processo processo) {
@@ -242,25 +309,28 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -242,25 +309,28 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
242 309
243 Processo processo = (Processo) this.processoDao.getReference(entity.getId()); 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 return processo; 334 return processo;
265 } 335 }
266 336
@@ -271,11 +341,9 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -271,11 +341,9 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
271 341
272 this.montarEntidade(processo); 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 return super.merge(processo); 348 return super.merge(processo);
281 } 349 }
@@ -426,9 +494,18 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -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 // Verifica se o sigilo foi selecionado 503 // Verifica se o sigilo foi selecionado
430 if (UtilObjeto.isReferencia(processo.getSigilo()) && UtilObjeto.isReferencia(processo.getSigilo().getId())) { 504 if (UtilObjeto.isReferencia(processo.getSigilo()) && UtilObjeto.isReferencia(processo.getSigilo().getId())) {
431 processo.setSigilo(this.sigiloService.getReference(processo.getSigilo().getId())); 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 this.atribuirPrazoPadraoProcesso(processo); 509 this.atribuirPrazoPadraoProcesso(processo);
433 } else { 510 } else {
434 processo.setSigilo(null); 511 processo.setSigilo(null);
@@ -978,15 +1055,14 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -978,15 +1055,14 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
978 * @param entity 1055 * @param entity
979 * História de usuário #3216_CA007 1056 * História de usuário #3216_CA007
980 */ 1057 */
981 - @SuppressWarnings("unused")  
982 private void validarAbertosEmOutrasUnidades(Processo entity) { 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,5 +1183,5 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
1107 1183
1108 return this.processoDao.getProcessoByProtocolo(nup); 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,7 +105,7 @@ public class UnidadeProcessoServiceImpl extends GenericServiceImpl&lt;UnidadeProces
105 /** Atributo historicoAtribuicaoProcessoService. */ 105 /** Atributo historicoAtribuicaoProcessoService. */
106 @Autowired 106 @Autowired
107 private HistoricoAtribuicaoProcessoService historicoAtribuicaoProcessoService; 107 private HistoricoAtribuicaoProcessoService historicoAtribuicaoProcessoService;
108 - 108 +
109 /** 109 /**
110 * Responsável pela criação de novas instâncias desta classe. 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,18 +325,43 @@ public class UnidadeProcessoServiceImpl extends GenericServiceImpl&lt;UnidadeProces
325 325
326 return this.unidadeProcessoDao.obterPorUnidadeEProcesso(idProcesso, idUnidade); 326 return this.unidadeProcessoDao.obterPorUnidadeEProcesso(idProcesso, idUnidade);
327 } 327 }
328 - 328 +
329 /** 329 /**
330 * Método responsável por listar processos através da unidade do usuário 330 * Método responsável por listar processos através da unidade do usuário
  331 + *
331 * @author rogerio.cassimiro 332 * @author rogerio.cassimiro
332 * @param search 333 * @param search
333 * @return <RT> SearchResult<RT> 334 * @return <RT> SearchResult<RT>
334 */ 335 */
335 @Override 336 @Override
336 public <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search) { 337 public <RT> SearchResult<RT> searchAndCountPorUnidade(ISearch search) {
  338 +
337 Dominio dominioStatusProcesso = dominioService.findByChaveAndCodigo(Dominio.TIPO_STATUS_PROCESSO_ECM, Dominio.TIPO_STATUS_PROCESSO_ECM_CONCLUIDO); 339 Dominio dominioStatusProcesso = dominioService.findByChaveAndCodigo(Dominio.TIPO_STATUS_PROCESSO_ECM, Dominio.TIPO_STATUS_PROCESSO_ECM_CONCLUIDO);
338 Usuario usuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ); 340 Usuario usuario = ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() );
339 return this.unidadeProcessoDao.searchAndCountPorUnidade(search, usuario, dominioStatusProcesso.getId()); 341 return this.unidadeProcessoDao.searchAndCountPorUnidade(search, usuario, dominioStatusProcesso.getId());
340 } 342 }
341 -  
342 -}  
343 \ No newline at end of file 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,12 +16,50 @@ import br.com.centralit.framework.controller.GenericController;
16 import br.com.centralit.framework.json.ResponseBodyWrapper; 16 import br.com.centralit.framework.json.ResponseBodyWrapper;
17 import br.com.centralit.framework.view.ResultResponseVH; 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 @Controller 51 @Controller
20 @RequestMapping("/rest/documentoGed") 52 @RequestMapping("/rest/documentoGed")
21 public class DocumentoGedController extends GenericController<DocumentoGed> { 53 public class DocumentoGedController extends GenericController<DocumentoGed> {
22 54
  55 + /** Atributo documentoGedService. */
23 private DocumentoGedService documentoGedService; 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 @Autowired 63 @Autowired
26 public DocumentoGedController( DocumentoGedService documentoGedService ) { 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,9 +167,9 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
167 167
168 List<Dominio> list = new ArrayList<Dominio>(); 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 list.add(new Dominio("tipoDestinacao", "Guardar Permanente", "GUARDAR_PERMANENTE", 1L)); 174 list.add(new Dominio("tipoDestinacao", "Guardar Permanente", "GUARDAR_PERMANENTE", 1L));
175 list.add(new Dominio("tipoDestinacao", "Eliminação", "ELIMINAR", 2L)); 175 list.add(new Dominio("tipoDestinacao", "Eliminação", "ELIMINAR", 2L));
@@ -203,6 +203,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -203,6 +203,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
203 203
204 list.add(new Dominio("statusProcesso", "Concluído", "CONCLUIDO", 1L)); 204 list.add(new Dominio("statusProcesso", "Concluído", "CONCLUIDO", 1L));
205 list.add(new Dominio("statusProcesso", "Em andamento", "EM_ANDAMENTO", 2L)); 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 list.add(new Dominio("filtroPesquisa", "Ambos", "AMBOS", 0L)); 212 list.add(new Dominio("filtroPesquisa", "Ambos", "AMBOS", 0L));
208 list.add(new Dominio("filtroPesquisa", "Processo", "PROCESSO", 1L)); 213 list.add(new Dominio("filtroPesquisa", "Processo", "PROCESSO", 1L));
@@ -439,7 +444,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -439,7 +444,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
439 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.UNIDADE_GESTORA ", "Unidade gestora", dominio, modulo)); 444 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.UNIDADE_GESTORA ", "Unidade gestora", dominio, modulo));
440 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_CRIACAO ", "Data criação", dominio, modulo)); 445 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_CRIACAO ", "Data criação", dominio, modulo));
441 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)); 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,6 +482,8 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
473 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)); 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 internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.PERMISSAO_OPERACAO", "Você não tem permissão para executar a operação.", dominio, modulo)); 483 internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.PERMISSAO_OPERACAO", "Você não tem permissão para executar a operação.", dominio, modulo));
475 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)); 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,5 +561,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
550 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.TAREFA_SOBRESTADA_SUCESSO", "Tarefa sobrestada com sucesso!", dominio, modulo)); 561 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.TAREFA_SOBRESTADA_SUCESSO", "Tarefa sobrestada com sucesso!", dominio, modulo));
551 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.CONFIRMA_REATIVACAO_TAREFA", "Confirma reativação da tarefa?", dominio, modulo)); 562 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.CONFIRMA_REATIVACAO_TAREFA", "Confirma reativação da tarefa?", dominio, modulo));
552 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.TAREFA_REATIVADA", "Tarefa reativada com sucesso", dominio, modulo)); 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 'use strict'; 1 'use strict';
2 2
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) { 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 $scope.removerAtributos = function(){ 31 $scope.removerAtributos = function(){
104 - angular.forEach($scope.processo.documentos, function (item) { 32 + angular.forEach($scope.processoValidacao.documentos, function (item) {
105 delete item.autorUserName; 33 delete item.autorUserName;
106 delete item.unidadeNome; 34 delete item.unidadeNome;
107 delete item.documentoVersao; 35 delete item.documentoVersao;
108 delete item.originalElement; 36 delete item.originalElement;
  37 + delete item.nivelAcessoList;
109 38
110 if(item.nivelAcesso != undefined && item.nivelAcesso.sigilos != null){ 39 if(item.nivelAcesso != undefined && item.nivelAcesso.sigilos != null){
111 angular.forEach(item.nivelAcesso.sigilos, function (item) { 40 angular.forEach(item.nivelAcesso.sigilos, function (item) {
@@ -132,22 +61,19 @@ citApp.controller(&#39;ClassificarDocumentoProcessoController&#39;, [&#39;$scope&#39;, &#39;Processo @@ -132,22 +61,19 @@ citApp.controller(&#39;ClassificarDocumentoProcessoController&#39;, [&#39;$scope&#39;, &#39;Processo
132 if($scope.classificarDocumentoProcessoForm.$valid){ 61 if($scope.classificarDocumentoProcessoForm.$valid){
133 62
134 $scope.setLoadingSalva(true); 63 $scope.setLoadingSalva(true);
135 -  
136 $scope.removerAtributos(); 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 $scope.historicoAlteracao(result.originalElement); 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 $scope.classificarDocumentoProcessoForm.$submitted = false; 68 $scope.classificarDocumentoProcessoForm.$submitted = false;
148 $scope.atualizaProcesso(); 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 }else{ 77 }else{
152 //Mensagem de erro de campos obrigatorios não preenchidos 78 //Mensagem de erro de campos obrigatorios não preenchidos
153 $scope.showAlert('error', $translate.instant('MSG.MN001'), " ", false); 79 $scope.showAlert('error', $translate.instant('MSG.MN001'), " ", false);
@@ -173,70 +99,44 @@ citApp.controller(&#39;ClassificarDocumentoProcessoController&#39;, [&#39;$scope&#39;, &#39;Processo @@ -173,70 +99,44 @@ citApp.controller(&#39;ClassificarDocumentoProcessoController&#39;, [&#39;$scope&#39;, &#39;Processo
173 $scope.closeWidget = function() { 99 $scope.closeWidget = function() {
174 angular.element("#searchGerenciarProcesso").scope().closeWidget(); 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 NivelAcessoTipoProcessoRepository.findPorIdTipoProcesso(idTipoProcesso).then(function(result) { 137 NivelAcessoTipoProcessoRepository.findPorIdTipoProcesso(idTipoProcesso).then(function(result) {
220 $scope.nivelAcessoList = result; 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 'use strict'; 1 'use strict';
2 2
3 citApp.controller('ClassificarDocumentoProcessoListController', ['$scope', 'ProcessoRepository', '$translate', '$timeout', 'DominioRepository', '$compile', '$injector', 'DocumentoGedRepository', 'appService', function ClassificarDocumentoProcessoListController($scope, ProcessoRepository, $translate, $timeout, DominioRepository, $compile, $injector, DocumentoGedRepository, appService) { 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 $scope.filterCriteria = { 11 $scope.filterCriteria = {
43 start : 1, 12 start : 1,
@@ -52,115 +21,68 @@ citApp.controller(&#39;ClassificarDocumentoProcessoListController&#39;, [&#39;$scope&#39;, &#39;Proc @@ -52,115 +21,68 @@ citApp.controller(&#39;ClassificarDocumentoProcessoListController&#39;, [&#39;$scope&#39;, &#39;Proc
52 {type : 'date', field : 'prazoSigilo' }] 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 // ABRI Processo SELECIONADA 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 $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange'); 48 $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange');
120 $timeout(function() { 49 $timeout(function() {
121 - angular.element('#searchGerenciarProcesso').scope().getProcesso(processo); 50 + angular.element('#searchGerenciarProcesso').scope().getProcesso($scope.modelSelecionado);
122 51
123 }, 100); 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 //adiciona a lista de documentos ao processo 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,7 +190,7 @@ citApp.controller(&#39;DocumentoGedController&#39;, [&#39;$scope&#39;, &#39;DocumentoGedRepository&#39;,
190 processo : $scope.documentoGed.processo, 190 processo : $scope.documentoGed.processo,
191 autor : $scope.usuarioLogado, 191 autor : $scope.usuarioLogado,
192 acaoAlteracao : "INCLUSAO_DOCUMENTO", 192 acaoAlteracao : "INCLUSAO_DOCUMENTO",
193 - idTask : $scope.task.id, 193 + idTask : $scope.task ? $scope.task.id : null,
194 mapaAtributos : {"tipo_documento" : $scope.documentoGed.tipoDocumento.nome, "numero_documento" : $scope.documentoGed.numero} 194 mapaAtributos : {"tipo_documento" : $scope.documentoGed.tipoDocumento.nome, "numero_documento" : $scope.documentoGed.numero}
195 }; 195 };
196 HistoricoAlteracaoProcessoRepository.saveParams(historicoAlteracaoProcesso).then(function(result){ 196 HistoricoAlteracaoProcessoRepository.saveParams(historicoAlteracaoProcesso).then(function(result){
@@ -203,7 +203,7 @@ citApp.controller(&#39;DocumentoGedController&#39;, [&#39;$scope&#39;, &#39;DocumentoGedRepository&#39;, @@ -203,7 +203,7 @@ citApp.controller(&#39;DocumentoGedController&#39;, [&#39;$scope&#39;, &#39;DocumentoGedRepository&#39;,
203 processo : $scope.documentoGed.processo, 203 processo : $scope.documentoGed.processo,
204 autor : $scope.usuarioLogado, 204 autor : $scope.usuarioLogado,
205 acaoAlteracao : "CRIACAO_NOVA_VERSAO_DOCUMENTO", 205 acaoAlteracao : "CRIACAO_NOVA_VERSAO_DOCUMENTO",
206 - idTask : $scope.task.id, 206 + idTask : $scope.task ? $scope.task.id : null,
207 mapaAtributos : {"tipo_documento" : $scope.documentoGed.tipoDocumento.nome, "numero_documento" : $scope.documentoGed.numero, "numero_versao" : $scope.documentoGed.versaoDocumento.toFixed(1)} 207 mapaAtributos : {"tipo_documento" : $scope.documentoGed.tipoDocumento.nome, "numero_documento" : $scope.documentoGed.numero, "numero_versao" : $scope.documentoGed.versaoDocumento.toFixed(1)}
208 }; 208 };
209 HistoricoAlteracaoProcessoRepository.saveParams(historicoAlteracaoProcesso).then(function(result){ 209 HistoricoAlteracaoProcessoRepository.saveParams(historicoAlteracaoProcesso).then(function(result){
@@ -241,17 +241,17 @@ citApp.controller(&#39;DocumentoGedController&#39;, [&#39;$scope&#39;, &#39;DocumentoGedRepository&#39;, @@ -241,17 +241,17 @@ citApp.controller(&#39;DocumentoGedController&#39;, [&#39;$scope&#39;, &#39;DocumentoGedRepository&#39;,
241 $scope.mantido = false; 241 $scope.mantido = false;
242 $scope.documentoGed.localizacao = null; 242 $scope.documentoGed.localizacao = null;
243 $scope.documentoGed.numero = null; 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 }else{ 248 }else{
249 249
250 $scope.documentoGed.conteudo = {}; 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,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 //SET HIPOTESE LEGAL #INICIO 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,7 +13,6 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
13 13
14 //INICIALIZA VARIAVEIS PARA HABILITAR E FECHAR DIVS DE AÇÕES DO PROCESSO 14 //INICIALIZA VARIAVEIS PARA HABILITAR E FECHAR DIVS DE AÇÕES DO PROCESSO
15 15
16 - $scope.isHistoricoProcesso = true;  
17 $scope.fecharPagina = function() { 16 $scope.fecharPagina = function() {
18 $scope.isProcessoRelacionado = false; 17 $scope.isProcessoRelacionado = false;
19 $scope.isDocumentoEdit = false; 18 $scope.isDocumentoEdit = false;
@@ -339,9 +338,21 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim @@ -339,9 +338,21 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
339 $scope.classificarDocumentoProceso = function () { 338 $scope.classificarDocumentoProceso = function () {
340 $scope.fecharPagina(); 339 $scope.fecharPagina();
341 $scope.isClassificarProcessoDocumento = true; 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 $timeout( function () { 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 // REMOVER DOCUMENTO 358 // REMOVER DOCUMENTO
@@ -634,26 +645,34 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim @@ -634,26 +645,34 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
634 if ( $scope.task != null ) { 645 if ( $scope.task != null ) {
635 $scope.initialize(); 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 ProcessoRepository.getProcessoGerenciamento(processo.id).then(function(result) { 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 DocumentoGedRepository.findByProcessoSigilo(processo.id).then(function(result) { 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 $scope.setLoading(false); 673 $scope.setLoading(false);
651 }); 674 });
652 675
653 - $timeout( function () {  
654 - angular.element( "#classificarDocumento" ).scope().iniciar(processo);  
655 - } );  
656 -  
657 676
658 $scope.isHistoricoProcesso = false; 677 $scope.isHistoricoProcesso = false;
659 $scope.isClassificarProcessoDocumento = true; 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,7 +123,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
123 $scope.handleSetPage = function() { 123 $scope.handleSetPage = function() {
124 124
125 $scope.timeout = $timeout(function () { 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 query.setOption("rows", "10"); 127 query.setOption("rows", "10");
128 query.setOption("facet", "true"); 128 query.setOption("facet", "true");
129 query.setOption("facet.limit", $scope.maxHints); 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,7 +330,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
330 if ($scope.userQuery && $scope.userQuery.length >= $scope.minSearchLength) { 330 if ($scope.userQuery && $scope.userQuery.length >= $scope.minSearchLength) {
331 if ($scope.timeout) $timeout.cancel($scope.timeout); 331 if ($scope.timeout) $timeout.cancel($scope.timeout);
332 $scope.timeout = $timeout(function () { 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 query.setOption("rows", "10"); 334 query.setOption("rows", "10");
335 query.setOption("facet", "true"); 335 query.setOption("facet", "true");
336 query.setOption("facet.limit", $scope.maxHints); 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,7 +409,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
409 $scope.userQuery = "*:*"; 409 $scope.userQuery = "*:*";
410 } 410 }
411 $scope.timeout = $timeout(function () { 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 query.setOption("rows", "10"); 413 query.setOption("rows", "10");
414 query.setOption("facet", "true"); 414 query.setOption("facet", "true");
415 query.setOption("facet.limit", $scope.maxHints); 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,7 +440,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
440 valueFilter = "*:*"; 440 valueFilter = "*:*";
441 } 441 }
442 $scope.timeout = $timeout(function () { 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 query.setOption("rows", "10"); 444 query.setOption("rows", "10");
445 query.setOption("facet", "true"); 445 query.setOption("facet", "true");
446 query.setOption("facet.limit", $scope.maxHints); 446 query.setOption("facet.limit", $scope.maxHints);
cit-ecm-web/src/main/webapp/html/classificarProcessoDocumento/classificarProcessoDocumento.html
1 1
2 -  
3 <div id="classificarDocumento" ng-controller="ClassificarDocumentoProcessoController as classificarDocumentoProcessoController"> 2 <div id="classificarDocumento" ng-controller="ClassificarDocumentoProcessoController as classificarDocumentoProcessoController">
4 <form name="classificarDocumentoProcessoForm" novalidate autocomplete="off"> 3 <form name="classificarDocumentoProcessoForm" novalidate autocomplete="off">
5 4
@@ -19,87 +18,77 @@ @@ -19,87 +18,77 @@
19 <!-- Informações do processo --> 18 <!-- Informações do processo -->
20 <fieldset> 19 <fieldset>
21 <legend> 20 <legend>
22 - <h5>  
23 - <translate>ECM.LABEL.INFORMACAODOPROCESSO</translate>  
24 - </h5> 21 + <translate>ECM.LABEL.INFORMACAODOPROCESSO</translate>
25 </legend> 22 </legend>
26 23
27 <!-- <div class="profile-user-info"> --> 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 </div> 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 </div> 38 </div>
47 39
  40 + </div>
  41 +
48 <!-- </div> --> 42 <!-- </div> -->
49 43
50 <br></br> 44 <br></br>
51 -  
52 - <div ng-show='processo.aprovado'> 45 +
  46 + <div ng-show='processoValidacao.validado'>
53 <div class="row"> 47 <div class="row">
54 <div class="col-md-6"> 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 </div> 50 </div>
58 - 51 +
59 <div class="col-md-6"> 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 </div> 54 </div>
63 - 55 +
64 </div> 56 </div>
65 </div> 57 </div>
66 58
67 - <div class="row" ng-show='!processo.aprovado'> 59 + <div class="row" ng-show='!processoValidacao.validado'>
68 <div class="col-md-4"> 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 form="classificarDocumentoclassificarDocumentoProcessoForm" ng-obrigatorio="true" 62 form="classificarDocumentoclassificarDocumentoProcessoForm" ng-obrigatorio="true"
71 ng-custom-options="nivelAcessoTipoProcesso.originalElement as nivelAcessoTipoProcesso.nivelAcesso.descricao for nivelAcessoTipoProcesso" track-by="track by nivelAcessoTipoProcesso.id" 63 ng-custom-options="nivelAcessoTipoProcesso.originalElement as nivelAcessoTipoProcesso.nivelAcesso.descricao for nivelAcessoTipoProcesso" track-by="track by nivelAcessoTipoProcesso.id"
72 ng-list="nivelAcessoList" /> 64 ng-list="nivelAcessoList" />
73 </div> 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 <div class="form-group"> 68 <div class="form-group">
77 <label class="control-label block" 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 <translate>ECM.LABEL.SIGILO</translate> <span class="red">*</span> <i 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 class='fa fa-warning red' tooltip="{{$translate.instant('LABEL.SIGILO') + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}" tooltip-placement='top'></i> 73 class='fa fa-warning red' tooltip="{{$translate.instant('LABEL.SIGILO') + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}" tooltip-placement='top'></i>
82 </label> 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 </div> 79 </div>
89 - 80 +
90 <div class="col-md-4"> 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 </div> 83 </div>
93 </div> 84 </div>
94 - 85 +
95 </fieldset> 86 </fieldset>
96 <!-- fim informações do processo --> 87 <!-- fim informações do processo -->
97 88
98 <fieldset> 89 <fieldset>
99 <legend> 90 <legend>
100 - <h5>  
101 - <translate>ECM.LABEL.DOCUMENTOS</translate>  
102 - </h5> 91 + <translate>ECM.LABEL.DOCUMENTOS</translate>
103 </legend> 92 </legend>
104 93
105 <div class="row"> 94 <div class="row">
@@ -111,35 +100,34 @@ @@ -111,35 +100,34 @@
111 <table class="table table-striped table-bordered table-hover"> 100 <table class="table table-striped table-bordered table-hover">
112 <thead> 101 <thead>
113 <tr> 102 <tr>
114 - <th style="width: 20%;" class="text-center"><translate>ECM.LABEL.PROTOCOLO</translate></th>  
115 <th style="width: 15%;" class="text-center"><translate>ECM.LABEL.NUM_DOCUMENTO</translate></th> 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 <th class="text-center"><translate>ECM.LABEL.NIVEL_PROPOSTO</translate></th> 105 <th class="text-center"><translate>ECM.LABEL.NIVEL_PROPOSTO</translate></th>
117 <th class="text-center"><translate>ECM.LABEL.NIVEL_REVISADO</translate></th> 106 <th class="text-center"><translate>ECM.LABEL.NIVEL_REVISADO</translate></th>
118 107
119 </tr> 108 </tr>
120 </thead> 109 </thead>
121 <tbody> 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 <div class="row"> 115 <div class="row">
128 <div class="col-md-6"> 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 </div> 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 </div> 125 </div>
138 - 126 + </div>
139 </td> 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 </tr> 129 </tr>
142 - <tr ng-hide="processo.documentos.length > 0"> 130 + <tr ng-hide="processoValidacao.documentos.length > 0">
143 <td colspan="5" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td> 131 <td colspan="5" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td>
144 </tr> 132 </tr>
145 </tbody> 133 </tbody>
@@ -154,7 +142,8 @@ @@ -154,7 +142,8 @@
154 142
155 <div class="row"> 143 <div class="row">
156 <div class="col-md-12"> 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 <translate>LABEL.SALVAR</translate> 147 <translate>LABEL.SALVAR</translate>
159 </button> 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 <div id="idClassificarDocumentoProcesso" class="page-content" ng-controller="ClassificarDocumentoProcessoListController"> 2 <div id="idClassificarDocumentoProcesso" class="page-content" ng-controller="ClassificarDocumentoProcessoListController">
145 <div class="bar-buttons-action fixed"> 3 <div class="bar-buttons-action fixed">
146 <div class="row"> 4 <div class="row">
147 <div class="col-sm-9 text-left"> 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 <i class="fa fa-refresh purple"></i> 7 <i class="fa fa-refresh purple"></i>
150 <translate>LABEL.ATUALIZAR</translate> 8 <translate>LABEL.ATUALIZAR</translate>
151 </button> 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 <div class="col-sm-3 text-right"> 16 <div class="col-sm-3 text-right">
155 <favorito /> 17 <favorito />
156 -  
157 <help-button workspace="workspace" /> 18 <help-button workspace="workspace" />
158 </div> 19 </div>
159 - <!-- .col -->  
160 </div> 20 </div>
161 - <!-- .row -->  
162 </div> 21 </div>
163 - <!-- .bar-buttons-action -->  
164 22
165 <breadcrumb ng-workspace="workspace"></breadcrumb> 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 \ No newline at end of file 30 \ No newline at end of file
cit-ecm-web/src/main/webapp/html/documentoGed/metadadosDocumentoEdit.html
@@ -63,8 +63,8 @@ @@ -63,8 +63,8 @@
63 <div class="row"> 63 <div class="row">
64 64
65 <div class="col-md-4"> 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 </div> 68 </div>
69 69
70 <div class="col-md-8"> 70 <div class="col-md-8">
@@ -128,8 +128,8 @@ @@ -128,8 +128,8 @@
128 128
129 <div class="row"> 129 <div class="row">
130 <div class="col-sm-6" ng-show='documentoGed.nivelAcesso.nivelAcesso.codigo == 1 || documentoGed.sigilo.id'> 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 </div> 133 </div>
134 </div> 134 </div>
135 135
cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeDocumentosProcesso.html
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 </button> 34 </button>
35 35
36 <ul class="dropdown-menu-center dropdown-menu dropdown-caret" role="menu"> 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 <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> 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 <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> 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 <li ng-if='!documento.cancelado'><a href="#void" ng-click="visualizarVersoes(documento);"> <translate>ECM.LABEL.VERSOESDODOCUMENTO</translate></a></li> 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,7 +125,7 @@
125 125
126 <div class="row"> 126 <div class="row">
127 <div class="col-sm-6" ng-show='processo.nivelAcesso.nivelAcesso.codigo == 1 || processo.sigilo.id'> 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 ng-custom-options="hipoteseLegal.originalElement as hipoteseLegal.nome for hipoteseLegal" ng-obrigatorio='true' track-by="track by hipoteseLegal.id" ng-disabled='!edit'> </label-select> 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 </div> 130 </div>
131 </div> 131 </div>