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