Commit 506a3c81e4b563c50285eaa4fa94a2ae344ca775

Authored by gabriel.damasceno
2 parents 5686a9b8 6f2828f1
Exists in master

Merge branch 'tarefa-4583' into desenvolvimento

Showing 24 changed files with 818 additions and 70 deletions   Show diff stats
cit-ecm-api/src/main/java/br/com/centralit/api/dao/AssinaturaDao.java 0 → 100644
@@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
  1 +package br.com.centralit.api.dao;
  2 +
  3 +import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
  4 +
  5 +
  6 +/**
  7 + * <p><b>Title: </b></p>
  8 + * <p><b>Description: </b></p>
  9 + *
  10 + * @since 22/04/2016 - 11:52:08
  11 + * @author rogerio.cassimiro
  12 + *
  13 + */
  14 +public interface AssinaturaDao extends CitGenericDAO{
  15 +
  16 + /**
  17 + * Método responsável por validar se o usuário já teve assinatura anterior para o documento informado
  18 + * @author rogerio.cassimiro
  19 + * @param idDocumento
  20 + * @param idUsuario
  21 + * @return {@link Boolean}
  22 + */
  23 + Boolean validarAssinaturaPorUsuario(Long idDocumento, Long idUsuario);
  24 +
  25 +}
cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/AssinaturaDaoHibernate.java 0 → 100644
@@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
  1 +package br.com.centralit.api.dao.impl;
  2 +
  3 +import org.springframework.stereotype.Repository;
  4 +
  5 +import br.com.centralit.api.dao.AssinaturaDao;
  6 +import br.com.centralit.api.model.Assinatura;
  7 +import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
  8 +import br.com.centralit.framework.dao.arquitetura.SearchSeven;
  9 +
  10 +
  11 +/**
  12 + * <p><b>Title: </b></p>
  13 + * <p><b>Description: </b></p>
  14 + *
  15 + * @since 22/04/2016 - 11:54:06
  16 + * @author rogerio.cassimiro
  17 + *
  18 + */
  19 +@Repository("assinaturaDao")
  20 +public class AssinaturaDaoHibernate extends CitGenericDAOImpl implements AssinaturaDao{
  21 +
  22 + public AssinaturaDaoHibernate() {
  23 + super(Assinatura.class);
  24 + }
  25 +
  26 + /**
  27 + * Método responsável por validar se o usuário já teve assinatura anterior para o documento informado
  28 + * @author rogerio.cassimiro
  29 + * @param idDocumento
  30 + * @param idUsuario
  31 + * @return {@link Boolean}
  32 + */
  33 + @Override
  34 + public Boolean validarAssinaturaPorUsuario(Long idDocumento, Long idUsuario) {
  35 + SearchSeven searchSeven = new SearchSeven();
  36 + searchSeven.addFilterEqual("documentoGed.id", idDocumento);
  37 + searchSeven.addFilterEqual("usuario.id", idUsuario);
  38 + return this.count(searchSeven) > 0;
  39 + }
  40 +
  41 +}
0 \ No newline at end of file 42 \ No newline at end of file
cit-ecm-api/src/main/java/br/com/centralit/api/model/AcaoHistoricoAlteracaoProcesso.java
@@ -59,6 +59,10 @@ public class AcaoHistoricoAlteracaoProcesso extends PersistentObject { @@ -59,6 +59,10 @@ public class AcaoHistoricoAlteracaoProcesso extends PersistentObject {
59 private String acao; 59 private String acao;
60 60
61 private String descricao; 61 private String descricao;
  62 +
  63 + public static String ASSINAR_DOCUMENTO_CHAVE = "ASSINAR_DOCUMENTO";
  64 + public static String ASSINAR_DOCUMENTO_ACAO = "Assinatura de documento";
  65 + public static String ASSINAR_DOCUMENTO_DESCRICAO = "O documento <<tipo_documento>> <<numero_documento>> foi assinado por <<usuario>>.";
62 66
63 public AcaoHistoricoAlteracaoProcesso() { 67 public AcaoHistoricoAlteracaoProcesso() {
64 68
cit-ecm-api/src/main/java/br/com/centralit/api/model/Assinatura.java
@@ -6,8 +6,11 @@ import javax.persistence.GeneratedValue; @@ -6,8 +6,11 @@ import javax.persistence.GeneratedValue;
6 import javax.persistence.GenerationType; 6 import javax.persistence.GenerationType;
7 import javax.persistence.Id; 7 import javax.persistence.Id;
8 import javax.persistence.ManyToOne; 8 import javax.persistence.ManyToOne;
  9 +import javax.persistence.Transient;
9 10
  11 +import br.com.centralit.api.framework.json.ViewsEcm;
10 import br.com.centralit.framework.json.Views; 12 import br.com.centralit.framework.json.Views;
  13 +import br.com.centralit.framework.model.Dominio;
11 import br.com.centralit.framework.model.Usuario; 14 import br.com.centralit.framework.model.Usuario;
12 import br.com.centralit.framework.model.arquitetura.PersistentObjectAudit; 15 import br.com.centralit.framework.model.arquitetura.PersistentObjectAudit;
13 16
@@ -58,12 +61,26 @@ public class Assinatura extends PersistentObjectAudit { @@ -58,12 +61,26 @@ public class Assinatura extends PersistentObjectAudit {
58 private Long id; 61 private Long id;
59 62
60 /** Atributo usuario. */ 63 /** Atributo usuario. */
  64 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.DocumentoGedEdit.class })
61 @ManyToOne(fetch = FetchType.LAZY) 65 @ManyToOne(fetch = FetchType.LAZY)
62 private Usuario usuario; 66 private Usuario usuario;
63 67
64 - /** Atributo documento. */ 68 + /** Atributo documentoGed. */
65 @ManyToOne(fetch = FetchType.LAZY) 69 @ManyToOne(fetch = FetchType.LAZY)
66 - private Documento documento; 70 + private DocumentoGed documentoGed;
  71 +
  72 + /** Atributo tipoAssinatura. */
  73 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.DocumentoGedEdit.class })
  74 + @ManyToOne(fetch = FetchType.LAZY)
  75 + private Dominio tipoAssinatura;
  76 +
  77 + /** Atributo funcao. */
  78 + @ManyToOne(fetch = FetchType.LAZY)
  79 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.DocumentoGedEdit.class })
  80 + private Funcao funcao;
  81 +
  82 + @Transient
  83 + private Long idTask;
67 84
68 /** 85 /**
69 * Retorna o valor do atributo <code>id</code> 86 * Retorna o valor do atributo <code>id</code>
@@ -106,23 +123,83 @@ public class Assinatura extends PersistentObjectAudit { @@ -106,23 +123,83 @@ public class Assinatura extends PersistentObjectAudit {
106 } 123 }
107 124
108 /** 125 /**
109 - * Retorna o valor do atributo <code>documento</code> 126 + * Retorna o valor do atributo <code>documentoGed</code>
  127 + *
  128 + * @return <code>DocumentoGed</code>
  129 + */
  130 + public DocumentoGed getDocumentoGed() {
  131 +
  132 + return documentoGed;
  133 + }
  134 +
  135 + /**
  136 + * Define o valor do atributo <code>documentoGed</code>.
  137 + *
  138 + * @param documentoGed
  139 + */
  140 + public void setDocumentoGed(DocumentoGed documentoGed) {
  141 +
  142 + this.documentoGed = documentoGed;
  143 + }
  144 +
  145 + /**
  146 + * Retorna o valor do atributo <code>tipoAssinatura</code>
  147 + *
  148 + * @return <code>Dominio</code>
  149 + */
  150 + public Dominio getTipoAssinatura() {
  151 +
  152 + return tipoAssinatura;
  153 + }
  154 +
  155 + /**
  156 + * Define o valor do atributo <code>tipoAssinatura</code>.
110 * 157 *
111 - * @return <code>Documento</code> 158 + * @param tipoAssinatura
  159 + */
  160 + public void setTipoAssinatura(Dominio tipoAssinatura) {
  161 +
  162 + this.tipoAssinatura = tipoAssinatura;
  163 + }
  164 +
  165 + /**
  166 + * Retorna o valor do atributo <code>funcao</code>
  167 + *
  168 + * @return <code>Funcao</code>
  169 + */
  170 + public Funcao getFuncao() {
  171 +
  172 + return funcao;
  173 + }
  174 +
  175 + /**
  176 + * Define o valor do atributo <code>funcao</code>.
  177 + *
  178 + * @param funcao
  179 + */
  180 + public void setFuncao(Funcao funcao) {
  181 +
  182 + this.funcao = funcao;
  183 + }
  184 +
  185 + /**
  186 + * Retorna o valor do atributo <code>idTask</code>
  187 + *
  188 + * @return <code>Long</code>
112 */ 189 */
113 - public Documento getDocumento() { 190 + public Long getIdTask() {
114 191
115 - return documento; 192 + return idTask;
116 } 193 }
117 194
118 /** 195 /**
119 - * Define o valor do atributo <code>documento</code>. 196 + * Define o valor do atributo <code>idTask</code>.
120 * 197 *
121 - * @param documento 198 + * @param idTask
122 */ 199 */
123 - public void setDocumento(Documento documento) { 200 + public void setIdTask(Long idTask) {
124 201
125 - this.documento = documento; 202 + this.idTask = idTask;
126 } 203 }
127 204
128 } 205 }
cit-ecm-api/src/main/java/br/com/centralit/api/model/Assunto.java
1 package br.com.centralit.api.model; 1 package br.com.centralit.api.model;
2 2
3 -import javax.persistence.Entity;  
4 import javax.persistence.FetchType; 3 import javax.persistence.FetchType;
5 import javax.persistence.GeneratedValue; 4 import javax.persistence.GeneratedValue;
6 import javax.persistence.GenerationType; 5 import javax.persistence.GenerationType;
cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java
@@ -95,7 +95,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -95,7 +95,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
95 private Boolean novaVersao; 95 private Boolean novaVersao;
96 96
97 /** Atributo versaoDocumento. */ 97 /** Atributo versaoDocumento. */
98 - @JsonView({ Views.DocumentoGedEdit.class }) 98 + @JsonView({ Views.DocumentoGedEdit.class, Views.ProcessoEdit.class })
99 private Double versaoDocumento; 99 private Double versaoDocumento;
100 100
101 /** Atributo cancelado. */ 101 /** Atributo cancelado. */
@@ -240,6 +240,10 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -240,6 +240,10 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
240 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) 240 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class })
241 private Collection<InteressadoDocumento> interessados; 241 private Collection<InteressadoDocumento> interessados;
242 242
  243 + @OneToMany(fetch = FetchType.LAZY, mappedBy = "documentoGed")
  244 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class })
  245 + private Collection<Assinatura> assinaturas;
  246 +
243 /** 247 /**
244 * @return the novaVersao 248 * @return the novaVersao
245 */ 249 */
@@ -986,6 +990,14 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -986,6 +990,14 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
986 public Dominio getEstado() { 990 public Dominio getEstado() {
987 991
988 return estado; 992 return estado;
  993 + /**
  994 + * Retorna o valor do atributo <code>assinaturas</code>
  995 + *
  996 + * @return <code>Collection<Assinatura></code>
  997 + */
  998 + public Collection<Assinatura> getAssinaturas() {
  999 +
  1000 + return assinaturas;
989 } 1001 }
990 1002
991 /** 1003 /**
@@ -999,3 +1011,15 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -999,3 +1011,15 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
999 } 1011 }
1000 1012
1001 } 1013 }
  1014 +
  1015 + /**
  1016 + * Define o valor do atributo <code>assinaturas</code>.
  1017 + *
  1018 + * @param assinaturas
  1019 + */
  1020 + public void setAssinaturas(Collection<Assinatura> assinaturas) {
  1021 +
  1022 + this.assinaturas = assinaturas;
  1023 + }
  1024 +
  1025 +}
cit-ecm-api/src/main/java/br/com/centralit/api/model/HistoricoAlteracaoProcesso.java
@@ -101,6 +101,24 @@ public class HistoricoAlteracaoProcesso extends PersistentObjectAudit { @@ -101,6 +101,24 @@ public class HistoricoAlteracaoProcesso extends PersistentObjectAudit {
101 101
102 @Transient 102 @Transient
103 private Map<String, String> mapaAtributos; 103 private Map<String, String> mapaAtributos;
  104 +
  105 + public HistoricoAlteracaoProcesso(){
  106 + super();
  107 + }
  108 +
  109 + public HistoricoAlteracaoProcesso( Processo processo, Calendar dataRegistro, String nomeUnidadeVigente, String nomeUsuario, Long idTask, String descricaoAcao, String acaoAlteracao, DocumentoGed documentoGed, Map<String, String> mapaAtributos) {
  110 +
  111 + super();
  112 + this.processo = processo;
  113 + this.dataRegistro = dataRegistro;
  114 + this.nomeUnidadeVigente = nomeUnidadeVigente;
  115 + this.nomeUsuario = nomeUsuario;
  116 + this.idTask = idTask;
  117 + this.descricaoAcao = descricaoAcao;
  118 + this.acaoAlteracao = acaoAlteracao;
  119 + this.documentoGed = documentoGed;
  120 + this.mapaAtributos = mapaAtributos;
  121 + }
104 122
105 public Calendar getDataRegistro() { 123 public Calendar getDataRegistro() {
106 124
cit-ecm-api/src/main/java/br/com/centralit/api/service/AssinaturaService.java 0 → 100644
@@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
  1 +package br.com.centralit.api.service;
  2 +
  3 +import br.com.centralit.api.model.Assinatura;
  4 +import br.com.centralit.framework.service.arquitetura.GenericService;
  5 +
  6 +
  7 +/**
  8 + * <p><b>Title: </b></p>
  9 + * <p><b>Description: </b></p>
  10 + *
  11 + * @since 22/04/2016 - 11:48:53
  12 + * @author rogerio.cassimiro
  13 + *
  14 + */
  15 +public interface AssinaturaService extends GenericService<Assinatura, Long>{
  16 +
  17 + Assinatura saveAssinaturaInterna(Assinatura entity);
  18 +
  19 + /**
  20 + * Método responsável por validar se o usuário já teve assinatura anterior para o documento informado
  21 + * @author rogerio.cassimiro
  22 + * @return {@link Boolean}
  23 + */
  24 + Boolean validarAssinaturaPorUsuario(Long idDocumento);
  25 +}
0 \ No newline at end of file 26 \ No newline at end of file
cit-ecm-api/src/main/java/br/com/centralit/api/service/HistoricoAlteracaoProcessoService.java
@@ -2,6 +2,7 @@ package br.com.centralit.api.service; @@ -2,6 +2,7 @@ package br.com.centralit.api.service;
2 2
3 import java.util.Collection; 3 import java.util.Collection;
4 4
  5 +import br.com.centralit.api.model.Assinatura;
5 import br.com.centralit.api.model.HistoricoAlteracaoProcesso; 6 import br.com.centralit.api.model.HistoricoAlteracaoProcesso;
6 import br.com.centralit.framework.service.arquitetura.GenericService; 7 import br.com.centralit.framework.service.arquitetura.GenericService;
7 8
@@ -95,4 +96,10 @@ public interface HistoricoAlteracaoProcessoService extends GenericService&lt;Histor @@ -95,4 +96,10 @@ public interface HistoricoAlteracaoProcessoService extends GenericService&lt;Histor
95 */ 96 */
96 boolean saveWithParams(HistoricoAlteracaoProcesso historicoView); 97 boolean saveWithParams(HistoricoAlteracaoProcesso historicoView);
97 98
  99 + /**
  100 + * Método responsável por gerar histórico de alteração do processo por assinatura de documento
  101 + * @author rogerio.cassimiro
  102 + * @param assinatura
  103 + */
  104 + void gerarHistoricoAssinatura(Assinatura assinatura);
98 } 105 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaServiceImpl.java 0 → 100644
@@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
  1 +package br.com.centralit.api.service.impl;
  2 +
  3 +import org.springframework.beans.factory.annotation.Autowired;
  4 +import org.springframework.security.core.context.SecurityContextHolder;
  5 +import org.springframework.stereotype.Service;
  6 +
  7 +import br.com.centralit.api.dao.AssinaturaDao;
  8 +import br.com.centralit.api.model.Assinatura;
  9 +import br.com.centralit.api.service.AssinaturaService;
  10 +import br.com.centralit.api.service.DocumentoGedService;
  11 +import br.com.centralit.api.service.DominioService;
  12 +import br.com.centralit.api.service.FuncaoService;
  13 +import br.com.centralit.api.service.HistoricoAlteracaoProcessoService;
  14 +import br.com.centralit.api.service.UsuarioService;
  15 +import br.com.centralit.framework.model.Dominio;
  16 +import br.com.centralit.framework.model.Usuario;
  17 +import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
  18 +
  19 +
  20 +/**
  21 + * <p><b>Title: </b></p>
  22 + * <p><b>Description: </b></p>
  23 + *
  24 + * @since 22/04/2016 - 11:50:56
  25 + * @author rogerio.cassimiro
  26 + *
  27 + */
  28 +@Service("assinaturaService")
  29 +public class AssinaturaServiceImpl extends GenericServiceImpl<Assinatura, Long> implements AssinaturaService {
  30 +
  31 + @Autowired
  32 + private AssinaturaDao assinaturaDao;
  33 +
  34 + @Autowired
  35 + private DocumentoGedService documentoGedService;
  36 +
  37 + @Autowired
  38 + private UsuarioService usuarioService;
  39 +
  40 + @Autowired
  41 + private DominioService dominioService;
  42 +
  43 + @Autowired
  44 + private FuncaoService funcaoService;
  45 +
  46 + @Autowired
  47 + private HistoricoAlteracaoProcessoService historicoAlteracaoProcessoService;
  48 +
  49 + @Autowired
  50 + public AssinaturaServiceImpl( AssinaturaDao assinaturaDao) {
  51 + this.dao = assinaturaDao;
  52 + }
  53 +
  54 + /**
  55 + * Salva assinatura do documento e gera histórico
  56 + */
  57 + @Override
  58 + public Assinatura saveAssinaturaInterna(Assinatura assinatura) {
  59 + assinatura.setDocumentoGed(this.documentoGedService.getReference(assinatura.getDocumentoGed().getId()));
  60 + assinatura.setUsuario((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal());
  61 + assinatura.setTipoAssinatura(dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA));
  62 + assinatura.setFuncao(funcaoService.getReference(assinatura.getFuncao().getId()));
  63 + historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura);
  64 + return super.save(assinatura);
  65 + }
  66 +
  67 + /**
  68 + * Método responsável por validar se o usuário já teve assinatura anterior para o documento informado
  69 + * @author rogerio.cassimiro
  70 + * @return {@link Boolean}
  71 + */
  72 + @Override
  73 + public Boolean validarAssinaturaPorUsuario(Long idDocumento) {
  74 + return this.assinaturaDao.validarAssinaturaPorUsuario(idDocumento, ((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId());
  75 + }
  76 +}
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/HistoricoAlteracaoProcessoServiceImpl.java
@@ -8,14 +8,17 @@ import java.util.Map.Entry; @@ -8,14 +8,17 @@ import java.util.Map.Entry;
8 8
9 import org.apache.commons.lang.StringUtils; 9 import org.apache.commons.lang.StringUtils;
10 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
  11 +import org.springframework.security.core.context.SecurityContextHolder;
11 import org.springframework.stereotype.Service; 12 import org.springframework.stereotype.Service;
12 13
13 import br.com.centralit.api.dao.HistoricoAlteracaoProcessoDao; 14 import br.com.centralit.api.dao.HistoricoAlteracaoProcessoDao;
14 import br.com.centralit.api.model.AcaoHistoricoAlteracaoProcesso; 15 import br.com.centralit.api.model.AcaoHistoricoAlteracaoProcesso;
  16 +import br.com.centralit.api.model.Assinatura;
15 import br.com.centralit.api.model.HistoricoAlteracaoProcesso; 17 import br.com.centralit.api.model.HistoricoAlteracaoProcesso;
16 import br.com.centralit.api.service.AcaoHistoricoAlteracaoProcessoService; 18 import br.com.centralit.api.service.AcaoHistoricoAlteracaoProcessoService;
17 import br.com.centralit.api.service.HistoricoAlteracaoProcessoService; 19 import br.com.centralit.api.service.HistoricoAlteracaoProcessoService;
18 import br.com.centralit.api.service.ProcessoService; 20 import br.com.centralit.api.service.ProcessoService;
  21 +import br.com.centralit.framework.model.Usuario;
19 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl; 22 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
20 import br.com.centralit.framework.util.UtilObjeto; 23 import br.com.centralit.framework.util.UtilObjeto;
21 24
@@ -105,6 +108,7 @@ public class HistoricoAlteracaoProcessoServiceImpl extends GenericServiceImpl&lt;Hi @@ -105,6 +108,7 @@ public class HistoricoAlteracaoProcessoServiceImpl extends GenericServiceImpl&lt;Hi
105 toSave.setIdTask(historicoView.getIdTask()); 108 toSave.setIdTask(historicoView.getIdTask());
106 toSave.setAcaoAlteracao(acao.getAcao()); 109 toSave.setAcaoAlteracao(acao.getAcao());
107 toSave.setDataRegistro(Calendar.getInstance()); 110 toSave.setDataRegistro(Calendar.getInstance());
  111 + toSave.setDocumentoGed(historicoView.getDocumentoGed());
108 112
109 toSave = (HistoricoAlteracaoProcesso) historicoAlteracaoProcessoDao.save(toSave); 113 toSave = (HistoricoAlteracaoProcesso) historicoAlteracaoProcessoDao.save(toSave);
110 114
@@ -118,7 +122,7 @@ public class HistoricoAlteracaoProcessoServiceImpl extends GenericServiceImpl&lt;Hi @@ -118,7 +122,7 @@ public class HistoricoAlteracaoProcessoServiceImpl extends GenericServiceImpl&lt;Hi
118 122
119 return ( (HistoricoAlteracaoProcesso) historicoAlteracaoProcessoDao.save(toSave) ) != null ? true : false; 123 return ( (HistoricoAlteracaoProcesso) historicoAlteracaoProcessoDao.save(toSave) ) != null ? true : false;
120 } 124 }
121 - 125 +
122 private void produceViewParams(HistoricoAlteracaoProcesso historico, HistoricoAlteracaoProcesso toSave) { 126 private void produceViewParams(HistoricoAlteracaoProcesso historico, HistoricoAlteracaoProcesso toSave) {
123 127
124 Map<String, String> mapaAtributos; 128 Map<String, String> mapaAtributos;
@@ -195,5 +199,23 @@ public class HistoricoAlteracaoProcessoServiceImpl extends GenericServiceImpl&lt;Hi @@ -195,5 +199,23 @@ public class HistoricoAlteracaoProcessoServiceImpl extends GenericServiceImpl&lt;Hi
195 } 199 }
196 historico.setDescricaoAcao(descricaoAcao); 200 historico.setDescricaoAcao(descricaoAcao);
197 } 201 }
198 - 202 +
  203 + /**
  204 + * Método responsável por gerar histórico de alteração do processo por assinatura de documento
  205 + * @author rogerio.cassimiro
  206 + * @param assinatura
  207 + */
  208 + @Override
  209 + public void gerarHistoricoAssinatura(Assinatura assinatura) {
  210 +
  211 + Usuario usuario = (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
  212 + Map<String, String> mapaAtributos = new HashMap<String, String>();
  213 + mapaAtributos.put("tipo_documento", null);
  214 + mapaAtributos.put("numero_documento", null);
  215 + HistoricoAlteracaoProcesso hap = new HistoricoAlteracaoProcesso(assinatura.getDocumentoGed().getProcesso(), Calendar.getInstance(),
  216 + usuario.getUnidade().getNome(), usuario.getUsername(), assinatura.getIdTask(), AcaoHistoricoAlteracaoProcesso.ASSINAR_DOCUMENTO_DESCRICAO,
  217 + AcaoHistoricoAlteracaoProcesso.ASSINAR_DOCUMENTO_CHAVE, assinatura.getDocumentoGed(), mapaAtributos);
  218 + hap.setAutor(usuario);
  219 + this.saveWithParams(hap);
  220 + }
199 } 221 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/InicializarEcmServiceImpl.java
@@ -140,7 +140,9 @@ public class InicializarEcmServiceImpl extends UtilStartup { @@ -140,7 +140,9 @@ public class InicializarEcmServiceImpl extends UtilStartup {
140 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/ConfiguracaoUsuarioUnidadeRepository.js", this.dominioJS, menuCadastroProcesso)); 140 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/ConfiguracaoUsuarioUnidadeRepository.js", this.dominioJS, menuCadastroProcesso));
141 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/EstruturaOrganizacionalECMRepository.js", this.dominioJS, menuCadastroProcesso)); 141 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/EstruturaOrganizacionalECMRepository.js", this.dominioJS, menuCadastroProcesso));
142 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/ConfiguracaoUsuarioUnidadeRepository.min.js", this.dominioJS, menuCadastroProcesso)); 142 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/ConfiguracaoUsuarioUnidadeRepository.min.js", this.dominioJS, menuCadastroProcesso));
143 - 143 +
  144 + filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/controller/AssinarDocumentoController.js", this.dominioJS, menuCadastroProcesso));
  145 + filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/AssinaturaRepository.js", this.dominioJS, menuCadastroProcesso));
144 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/DocumentoGedRepository.js", this.dominioJS, menuCadastroProcesso)); 146 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/DocumentoGedRepository.js", this.dominioJS, menuCadastroProcesso));
145 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/DocumentoGedRepository.min.js", this.dominioJS, menuCadastroProcesso)); 147 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/repository/DocumentoGedRepository.min.js", this.dominioJS, menuCadastroProcesso));
146 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/controller/GerenciarProcessoController.js", this.dominioJS, menuCadastroProcesso)); 148 filesProcesso.add(new MenuFile("/cit-ecm-web/assets/js/angular/custom/controller/GerenciarProcessoController.js", this.dominioJS, menuCadastroProcesso));
cit-ecm-web/src/main/java/br/com/centralit/controller/AssinaturaController.java 0 → 100644
@@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
  1 +package br.com.centralit.controller;
  2 +
  3 +import org.springframework.beans.factory.annotation.Autowired;
  4 +import org.springframework.stereotype.Controller;
  5 +import org.springframework.web.bind.annotation.RequestBody;
  6 +import org.springframework.web.bind.annotation.RequestMapping;
  7 +import org.springframework.web.bind.annotation.RequestMethod;
  8 +import org.springframework.web.bind.annotation.RequestParam;
  9 +import org.springframework.web.bind.annotation.ResponseBody;
  10 +
  11 +import br.com.centralit.api.framework.json.ViewsEcm;
  12 +import br.com.centralit.api.model.Assinatura;
  13 +import br.com.centralit.api.service.AssinaturaService;
  14 +import br.com.centralit.framework.controller.GenericController;
  15 +import br.com.centralit.framework.json.ResponseBodyWrapper;
  16 +import br.com.centralit.framework.json.Views.GenericView;
  17 +import br.com.centralit.framework.view.ResultResponseVH;
  18 +
  19 +/**
  20 + * <p><b>Title: </b>AssinaturaController</p>
  21 + * <p><b>Description: </b></p>
  22 + *
  23 + * @since 22/04/2016 - 11:47:45
  24 + * @author rogerio.cassimiro
  25 + *
  26 + */
  27 +@Controller
  28 +@RequestMapping("/rest/assinatura")
  29 +public class AssinaturaController extends GenericController<Assinatura>{
  30 +
  31 + private AssinaturaService assinaturaService;
  32 +
  33 + @Autowired
  34 + public AssinaturaController(AssinaturaService assinaturaService){
  35 + super(assinaturaService);
  36 + this.assinaturaService = assinaturaService;
  37 + }
  38 +
  39 + /**
  40 + * Método responsável por salvar assinatura interna
  41 + * @author rogerio.cassimiro
  42 + * @param assinatura
  43 + * @return {@link ResponseBody}
  44 + * @throws Exception
  45 + */
  46 + @RequestMapping(method = RequestMethod.POST, value = "/saveAssinaturaInterna")
  47 + @ResponseBody
  48 + public ResponseBodyWrapper saveAssinaturaInterna(@RequestBody Assinatura assinatura) throws Exception {
  49 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(this.assinaturaService.saveAssinaturaInterna(assinatura), getEditView());
  50 + return responseBody;
  51 + }
  52 +
  53 + /**
  54 + * Método responsável por validar se o usuário já teve uma assinatura para o documento selecionado
  55 + * @author rogerio.cassimiro
  56 + * @param idDocumento
  57 + * @return {@link Boolean}
  58 + */
  59 + @RequestMapping(value = "/validarAssinaturaPorUsuario", method = RequestMethod.GET)
  60 + @ResponseBody
  61 + public ResponseBodyWrapper validarAssinaturaPorUsuario(@RequestParam(value = "idDocumento") Long idDocumento) {
  62 + ResultResponseVH<Boolean> resultResponseVH = new ResultResponseVH<Boolean>(this.assinaturaService.validarAssinaturaPorUsuario(idDocumento));
  63 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(resultResponseVH, this.getEditView());
  64 + return responseBody;
  65 + }
  66 +
  67 + @Override
  68 + public Class<? extends GenericView> getEditView() {
  69 + return ViewsEcm.DocumentoGedEdit.class;
  70 + }
  71 +
  72 +}
cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java
@@ -76,15 +76,15 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -76,15 +76,15 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
76 * <p> 76 * <p>
77 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> 77 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
78 * </p> 78 * </p>
79 - * 79 + *
80 * <p> 80 * <p>
81 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> 81 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
82 * </p> 82 * </p>
83 - * 83 + *
84 * Método responsável por criar as regras de acesso 84 * Método responsável por criar as regras de acesso
85 - * 85 + *
86 * @author rogerio.costa 86 * @author rogerio.costa
87 - * 87 + *
88 */ 88 */
89 private void criarRegraDeAcesso() { 89 private void criarRegraDeAcesso() {
90 90
@@ -107,9 +107,9 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -107,9 +107,9 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
107 107
108 /** 108 /**
109 * Método responsável por criar domínios específicos ECM 109 * Método responsável por criar domínios específicos ECM
110 - * 110 + *
111 * @author halan.lima 111 * @author halan.lima
112 - * 112 + *
113 */ 113 */
114 protected void popularAcoesAlteracaoProcesso() { 114 protected void popularAcoesAlteracaoProcesso() {
115 115
@@ -141,6 +141,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -141,6 +141,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
141 list.add(new AcaoHistoricoAlteracaoProcesso("ACAO_PROCESSO", "Ação", "<<acao>> , protocolo <<protocolo>>.")); 141 list.add(new AcaoHistoricoAlteracaoProcesso("ACAO_PROCESSO", "Ação", "<<acao>> , protocolo <<protocolo>>."));
142 list.add(new AcaoHistoricoAlteracaoProcesso("VALIDAR_PROCESSO", "Validar Processo", "O processo <<protocolo>> foi validado e seus documentos.")); 142 list.add(new AcaoHistoricoAlteracaoProcesso("VALIDAR_PROCESSO", "Validar Processo", "O processo <<protocolo>> foi validado e seus documentos."));
143 list.add(new AcaoHistoricoAlteracaoProcesso("ATRIBUICAO_PROCESSO", "Atribuição de processo", "O processo <<protocolo>> foi atribuido para <<usuario>>.")); 143 list.add(new AcaoHistoricoAlteracaoProcesso("ATRIBUICAO_PROCESSO", "Atribuição de processo", "O processo <<protocolo>> foi atribuido para <<usuario>>."));
  144 + list.add(new AcaoHistoricoAlteracaoProcesso("ASSINAR_DOCUMENTO", "Assinatura de documento", "O documento <<tipo_documento>> <<numero_documento>> foi assinado por <<usuario>>."));
144 145
145 try { 146 try {
146 this.acaoHistoricoAlteracaoProcessoService.saveListIfNotExist(list); 147 this.acaoHistoricoAlteracaoProcessoService.saveListIfNotExist(list);
@@ -153,15 +154,15 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -153,15 +154,15 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
153 * <p> 154 * <p>
154 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> 155 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
155 * </p> 156 * </p>
156 - * 157 + *
157 * <p> 158 * <p>
158 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> 159 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
159 * </p> 160 * </p>
160 - * 161 + *
161 * Método responsável por incluir dominios 162 * Método responsável por incluir dominios
162 - * 163 + *
163 * @author rogerio.costa 164 * @author rogerio.costa
164 - * 165 + *
165 */ 166 */
166 private void criarDominios() { 167 private void criarDominios() {
167 168
@@ -197,7 +198,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -197,7 +198,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
197 198
198 list.add(new Dominio("tipoProtocoloNup", "Automático", "EXTERNO", 1L, Boolean.FALSE)); 199 list.add(new Dominio("tipoProtocoloNup", "Automático", "EXTERNO", 1L, Boolean.FALSE));
199 list.add(new Dominio("tipoProtocoloNup", "Informado", "NUP_NOVO", 2L, Boolean.FALSE)); 200 list.add(new Dominio("tipoProtocoloNup", "Informado", "NUP_NOVO", 2L, Boolean.FALSE));
200 - 201 +
201 list.add(new Dominio("formaNumeracao", "Sequencial por ano", "SEQUENCIAL_ANO", 1L)); 202 list.add(new Dominio("formaNumeracao", "Sequencial por ano", "SEQUENCIAL_ANO", 1L));
202 list.add(new Dominio("formaNumeracao", "Sequencial único", "SEQUENCIAL_UNICO", 2L)); 203 list.add(new Dominio("formaNumeracao", "Sequencial único", "SEQUENCIAL_UNICO", 2L));
203 204
@@ -205,7 +206,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -205,7 +206,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
205 list.add(new Dominio("statusProcesso", "Em andamento", "EM_ANDAMENTO", 2L)); 206 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", "Aguardando Validação", "AGUARDANDO_VALIDACAO", 3L));
207 list.add(new Dominio("statusProcesso", "Validado", "VALIDADO", 4L)); 208 list.add(new Dominio("statusProcesso", "Validado", "VALIDADO", 4L));
208 - 209 +
209 list.add(new Dominio("statusDocumentoGed", "Aguardando Validação", "AGUARDANDO_VALIDACAO", 0L)); 210 list.add(new Dominio("statusDocumentoGed", "Aguardando Validação", "AGUARDANDO_VALIDACAO", 0L));
210 list.add(new Dominio("statusDocumentoGed", "Validado", "VALIDADO", 1L)); 211 list.add(new Dominio("statusDocumentoGed", "Validado", "VALIDADO", 1L));
211 212
@@ -229,11 +230,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -229,11 +230,11 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
229 } 230 }
230 231
231 /** 232 /**
232 - * 233 + *
233 * Método responsável por gerar internacionalização do módulo ECM 234 * Método responsável por gerar internacionalização do módulo ECM
234 - * 235 + *
235 * @author rogerio.cassimiro 236 * @author rogerio.cassimiro
236 - * 237 + *
237 */ 238 */
238 private void gerarInternacionalizacao() { 239 private void gerarInternacionalizacao() {
239 240
@@ -253,15 +254,15 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -253,15 +254,15 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
253 * <p> 254 * <p>
254 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> 255 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
255 * </p> 256 * </p>
256 - * 257 + *
257 * <p> 258 * <p>
258 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> 259 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
259 * </p> 260 * </p>
260 - * 261 + *
261 * Método responsável por criar labels 262 * Método responsável por criar labels
262 - * 263 + *
263 * @author Rogério Gomes 264 * @author Rogério Gomes
264 - * 265 + *
265 * @param dominio 266 * @param dominio
266 * @param modulo 267 * @param modulo
267 * @param internacionalizacaoList 268 * @param internacionalizacaoList
@@ -449,6 +450,10 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -449,6 +450,10 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
449 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ESTADO", "Estado", dominio, modulo)); 450 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.VALIDAR", "Validar", dominio, modulo));
451 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NAO_CONTEM_DOCUMENTOS", "Não contém documentos", dominio, modulo)); 452 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.NAO_CONTEM_DOCUMENTOS", "Não contém documentos", dominio, modulo));
  453 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DATA_DA_ASSINATURA", "Data da assinatura", dominio, modulo));
  454 + internacionalizacaoList.add(new Internacionalizacao("ECM.ASSINADO_SUCESSO", "Documento assinado com sucesso!", dominio, modulo));
  455 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ASSINATURA_DO_DOCUMENTO", "Assinatura do Documento", dominio, modulo));
  456 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DOCUMENTO_SEM_ASSINATURA", "Documento sem assinaturas!", dominio, modulo));
452 457
453 } 458 }
454 459
@@ -456,15 +461,15 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -456,15 +461,15 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
456 * <p> 461 * <p>
457 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> 462 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
458 * </p> 463 * </p>
459 - * 464 + *
460 * <p> 465 * <p>
461 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> 466 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
462 * </p> 467 * </p>
463 - * 468 + *
464 * Método responsável por 469 * Método responsável por
465 - * 470 + *
466 * @author Rogério Gomes 471 * @author Rogério Gomes
467 - * 472 + *
468 * @param dominio 473 * @param dominio
469 * @param modulo 474 * @param modulo
470 * @param internacionalizacaoList 475 * @param internacionalizacaoList
@@ -485,21 +490,22 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -485,21 +490,22 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
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)); 490 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)); 491 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));
487 492
  493 + internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.SENHA_ASSINATURA", "Informe sua senha para assinar!", dominio, modulo));
488 } 494 }
489 495
490 /** 496 /**
491 * <p> 497 * <p>
492 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> 498 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
493 * </p> 499 * </p>
494 - * 500 + *
495 * <p> 501 * <p>
496 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> 502 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
497 * </p> 503 * </p>
498 - * 504 + *
499 * Método responsável por 505 * Método responsável por
500 - * 506 + *
501 * @author Rogério Gomes 507 * @author Rogério Gomes
502 - * 508 + *
503 * @param dominio 509 * @param dominio
504 * @param modulo 510 * @param modulo
505 * @param internacionalizacaoList 511 * @param internacionalizacaoList
@@ -563,5 +569,9 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -563,5 +569,9 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
563 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.TAREFA_REATIVADA", "Tarefa reativada com sucesso", dominio, modulo)); 569 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)); 570 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)); 571 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.SELECIONE_UM_ITEM_PARA_VALIDACAO", "Selecione um item para validar.", dominio, modulo));
  572 + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.ERRO_PERMISSAO_ASSINAR", "Erro! Para assinar documentos é necessário possuir o papel “Servidor” ou “Terceirizado” com “Função” preenchida no Cadastro de Pessoas!", dominio, modulo));
  573 + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.USUARIO_SEM_PESSOA", "Usuário não está presente no Cadastro de Pessoa!", dominio, modulo));
  574 + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_SEM_ASSINATURAS", "Esta versão do Documento não possui assinaturas!", dominio, modulo));
  575 + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_JA_ASSINADO", "Documento já foi assinado por este usuário!", dominio, modulo));
566 } 576 }
567 } 577 }
cit-ecm-web/src/main/webapp/assets/css/gerenciarProcesso.css
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
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. 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 */ 5 */
6 .itemdiv { 6 .itemdiv {
7 - min-height: 66px; 7 + min-height: 80px;
8 border: 1px solid #ccc; 8 border: 1px solid #ccc;
9 padding: 10px; 9 padding: 10px;
10 position: relative; 10 position: relative;
@@ -212,4 +212,9 @@ background-color: #f2f2f2; @@ -212,4 +212,9 @@ background-color: #f2f2f2;
212 background-color: rgba(245, 245, 245, 0.61); 212 background-color: rgba(245, 245, 245, 0.61);
213 } 213 }
214 214
215 -  
216 \ No newline at end of file 215 \ No newline at end of file
  216 + .versoes {
  217 + font-size : x-small;
  218 + font-weight : bold;
  219 + text-align : right !important;
  220 +}
  221 +
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/AssinarDocumentoController.js 0 → 100644
@@ -0,0 +1,127 @@ @@ -0,0 +1,127 @@
  1 +'use strict';
  2 +
  3 +
  4 +citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'GerenciarProcessoRepository', 'DocumentoGedRepository', 'HistoricoAlteracaoProcessoRepository', 'PessoaRepository', '$q', 'AssinaturaRepository',
  5 + function AssinarDocumentoController($scope, $translate, GerenciarProcessoRepository, DocumentoGedRepository, HistoricoAlteracaoProcessoRepository, PessoaRepository, $q, AssinaturaRepository) {
  6 +
  7 + /*
  8 + * Abre panel assinar documento
  9 + */
  10 + $scope.abrirAssinarDocumento = function(documento) {
  11 + $scope.documentoSelecionado = null;
  12 + $scope.exibirDocJaAssinado = false;
  13 + DocumentoGedRepository.get(documento.id).then(function(result) {
  14 + $scope.documentoSelecionado = result.originalElement;
  15 + if(documento.formaCriacao.codigo === 1){
  16 + __abrirAssinarDocOnline(documento);
  17 + } else if(documento.formaCriacao.codigo === 2){
  18 + __abrirAssinarDocAnexo(documento);
  19 + }
  20 + });
  21 + };
  22 +
  23 + function __abrirAssinarDocOnline(documento){
  24 + _obterAssinaturasDocumento(documento).then(function(documentosSelecionados){
  25 + $scope.documentosSelecionados = documentosSelecionados;
  26 + _exibirNenhumaAssinatura();
  27 + _validarAssinaturaPorUsuario(documento.id).then(function(exibirIncluirAssinatura){
  28 + $scope.exibirIncluirAssinatura = !(exibirIncluirAssinatura == true);
  29 + //_obterPermissaoAssinaturaDocumentoExterno();
  30 + });
  31 + });
  32 + }
  33 +
  34 + function __abrirAssinarDocAnexo(documento){
  35 + _obterAssinaturasDocumento(documento).then(function(documentosSelecionados){
  36 + $scope.documentosSelecionados = documentosSelecionados;
  37 + _exibirNenhumaAssinatura();
  38 + _validarAssinaturaPorUsuario(documento.id).then(function(exibirIncluirAssinatura){
  39 + $scope.exibirIncluirAssinatura = !(exibirIncluirAssinatura == true);
  40 + $scope.exibirDocJaAssinado = !$scope.exibirIncluirAssinatura;
  41 + //_obterPermissaoAssinaturaDocumentoExterno();
  42 + });
  43 + });
  44 + };
  45 +
  46 + function _validarAssinaturaPorUsuario(idDocumento){
  47 + var deferred = $q.defer();
  48 + AssinaturaRepository.validarAssinaturaPorUsuario(idDocumento).then(function(result){
  49 + deferred.resolve(result);
  50 + });
  51 + return deferred.promise;
  52 + }
  53 +
  54 + function _obterAssinaturasDocumento(documento) {
  55 + var deferred = $q.defer();
  56 + var idRaiz = documento.idRaiz;
  57 + if ( !idRaiz )
  58 + idRaiz = documento.id;
  59 + DocumentoGedRepository.findByIdDocumentoTodasVersoes(idRaiz).then(function(result) {
  60 + var results = [];
  61 + if(result.length>0){
  62 + result.forEach(function(item){
  63 + results.push(item.originalElement);
  64 + });
  65 + }
  66 + deferred.resolve(results);
  67 + });
  68 + return deferred.promise;
  69 + }
  70 +
  71 + $scope.assinar = function() {
  72 + if(!$scope.autenticacao){
  73 + $scope.showAlert("error", $translate.instant('ECM.VALIDACAO.SENHA_ASSINATURA'));
  74 + return;
  75 + }
  76 +
  77 + AssinaturaRepository.saveAssinaturaInterna(_getAssinatura()).then(function(result){
  78 + if($scope.documentoSelecionado.assinaturas)
  79 + $scope.documentoSelecionado.assinaturas.push(result.originalElement);
  80 + $scope.autenticacao = null;
  81 + $scope.exibirIncluirAssinatura = false;
  82 + $scope.nenhumaAssinatura = false;
  83 + $scope.documentosSelecionados.forEach(function(doc){
  84 + if(doc.id == $scope.documentoSelecionado.id)
  85 + doc.assinaturas = $scope.documentoSelecionado.assinaturas;
  86 + });
  87 + $scope.showAlert("success", $translate.instant('ECM.ASSINADO_SUCESSO'));
  88 + });
  89 + };
  90 +
  91 + function _getAssinatura(){
  92 + return {documentoGed : { id : $scope.documentoSelecionado.id }, funcao : {id : _getFuncaoChecked()}, idTask : $scope.$parent.task.id };
  93 + };
  94 +
  95 + function _getFuncaoChecked(){
  96 + for(var pos = 0; pos < $scope.funcoes.length; pos++){
  97 + if($scope.funcoes[pos].isServidor)
  98 + return $scope.funcoes[pos].id;
  99 + }
  100 + };
  101 +
  102 + /*
  103 + * Abre panel visualizar assinaturas
  104 + */
  105 + $scope.visualizarAssinaturasDocumento = function(documento){
  106 + $scope.documentoSelecionado = documento;
  107 + $scope.exibirIncluirAssinatura = false;
  108 + $scope.exibirDocJaAssinado = false;
  109 + _obterAssinaturasDocumento(documento).then(function(documentosSelecionados){
  110 + $scope.documentosSelecionados = documentosSelecionados;
  111 + $scope.documentosSelecionados.forEach(function(doc){
  112 + if(doc.id == $scope.documentoSelecionado.id)
  113 + $scope.documentoSelecionado = doc;
  114 + });
  115 + _exibirNenhumaAssinatura();
  116 + if($scope.documentoSelecionado.assinaturas && $scope.documentoSelecionado.assinaturas.length == 0)
  117 + $scope.showAlert("warning", $translate.instant('ECM.MSG.DOCUMENTO_SEM_ASSINATURAS'));
  118 + });
  119 + };
  120 +
  121 + function _exibirNenhumaAssinatura(){
  122 + $scope.nenhumaAssinatura = $scope.documentosSelecionados.some(function(doc){
  123 + return doc.assinaturas.length > 0;
  124 + });
  125 + };
  126 +
  127 +}] );
0 \ No newline at end of file 128 \ No newline at end of file
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoController.js
1 'use strict'; 1 'use strict';
2 2
3 3
4 -citApp.controller('GerenciarProcessoController', [ '$scope', '$translate', '$timeout','GerenciarProcessoRepository', 'ProcessoRepository', 'RuntimeManagerRepository','$rootScope', 'DocumentoGedRepository', 'HistoricoAlteracaoProcessoRepository','UnidadeRepository','UnidadeProcessoRepository','CredencialProcessoRepository',  
5 - function GerenciarProcessoController($scope, $translate, $timeout, GerenciarProcessoRepository, ProcessoRepository, RuntimeManagerRepository,$rootScope, DocumentoGedRepository, HistoricoAlteracaoProcessoRepository,UnidadeRepository, UnidadeProcessoRepository,CredencialProcessoRepository ) { 4 +citApp.controller('GerenciarProcessoController', [ '$scope', '$translate', '$timeout','GerenciarProcessoRepository', 'ProcessoRepository', 'RuntimeManagerRepository','$rootScope', 'DocumentoGedRepository', 'HistoricoAlteracaoProcessoRepository','UnidadeRepository','UnidadeProcessoRepository','CredencialProcessoRepository', 'PessoaRepository',
  5 + function GerenciarProcessoController($scope, $translate, $timeout, GerenciarProcessoRepository, ProcessoRepository, RuntimeManagerRepository,$rootScope, DocumentoGedRepository, HistoricoAlteracaoProcessoRepository,UnidadeRepository, UnidadeProcessoRepository,CredencialProcessoRepository, PessoaRepository) {
6 6
7 $scope.processo = {}; 7 $scope.processo = {};
8 $scope.iconAnexo = {}; 8 $scope.iconAnexo = {};
@@ -29,6 +29,7 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim @@ -29,6 +29,7 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
29 $scope.isGerenciarCredencialProcesso = false; 29 $scope.isGerenciarCredencialProcesso = false;
30 $scope.isClassificarProcessoDocumento = false; 30 $scope.isClassificarProcessoDocumento = false;
31 $scope.isAtribuirProcesso = false; 31 $scope.isAtribuirProcesso = false;
  32 + $scope.exibirAssinarDocAnexo = false;
32 }; 33 };
33 34
34 // CRIAR RELACIONAMENTO DE PROCESSO 35 // CRIAR RELACIONAMENTO DE PROCESSO
@@ -618,23 +619,25 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim @@ -618,23 +619,25 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
618 619
619 ProcessoRepository.getProcessoGerenciamento($scope.idProcesso).then( function ( result ) { 620 ProcessoRepository.getProcessoGerenciamento($scope.idProcesso).then( function ( result ) {
620 $scope.processo = result.originalElement; 621 $scope.processo = result.originalElement;
621 - $scope.apresentarCabecalho = true;  
622 - $scope.processo.idTask = $scope.task.id;  
623 -  
624 - $scope.atualizarAtribuicaoProcesso($scope.idProcesso);  
625 -  
626 - if ( $scope.$parent != undefined ) {  
627 - $scope.$parent.idProcesso = $scope.idProcesso;  
628 - }  
629 -  
630 - if ( angular.element( '#viewGerenciarProcesso' ).scope() != undefined ) {  
631 - var workspace = angular.element( '#viewGerenciarProcesso' ).scope().workspace;  
632 - angular.element( "#citapp-controller" ).scope().removeWorkspace( workspace.id );  
633 - }  
634 -  
635 - $scope.tratimitado();  
636 -  
637 - $scope.setLoading( false ); 622 +
  623 + $scope.apresentarCabecalho = true;
  624 + $scope.processo.idTask = $scope.task.id;
  625 +
  626 + $scope.atualizarAtribuicaoProcesso($scope.idProcesso);
  627 +
  628 + if ( $scope.$parent != undefined ) {
  629 + $scope.$parent.idProcesso = $scope.idProcesso;
  630 + }
  631 +
  632 + if ( angular.element( '#viewGerenciarProcesso' ).scope() != undefined ) {
  633 + var workspace = angular.element( '#viewGerenciarProcesso' ).scope().workspace;
  634 + angular.element( "#citapp-controller" ).scope().removeWorkspace( workspace.id );
  635 + }
  636 +
  637 + $scope.tratimitado();
  638 +
  639 + $scope.setLoading( false );
  640 +
638 } ); 641 } );
639 642
640 }, 400 ); 643 }, 400 );
@@ -709,6 +712,59 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim @@ -709,6 +712,59 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
709 } 712 }
710 713
711 }); 714 });
  715 + };
  716 +
  717 + $scope.abrirAssinarDocumento = function(documento) {
  718 + $scope.fecharPagina();
  719 + $scope.pessoa = {};
  720 + PessoaRepository.getPermissaoAssinaturaDocumento().then(function(result){
  721 + $scope.exibirAssinarDocAnexo = result.originalElement.exibirAssinarDocAnexo;
  722 + $scope.pessoa = result.originalElement;
  723 + if(!$scope.exibirAssinarDocAnexo) {
  724 + $scope.showAlert("error", $translate.instant('ECM.MSG.ERRO_PERMISSAO_ASSINAR'));
  725 + return;
  726 + }
  727 + _montarParceiros();
  728 + $timeout( function () {
  729 + angular.element( "#documentoAssinatura" ).scope().abrirAssinarDocumento(documento);
  730 + } );
  731 + });
  732 + };
  733 +
  734 + function _montarParceiros() {
  735 + delete $scope.isFuncaoServidor;
  736 + $scope.funcoes =[];
  737 + $scope.pessoa.parceiros.forEach(function(parceiro){
  738 + if(parceiro.dataInativo === null && parceiro.classeParceiro.dominioTipoParceiro.codigo == 1){
  739 + $scope.funcoes.push(_getFuncao(parceiro, true));
  740 + } else if(parceiro.dataInativo === null && parceiro.classeParceiro.dominioTipoParceiro.codigo == 6){
  741 + $scope.funcoes.push(_getFuncao(parceiro, false));
  742 + }
  743 + });
  744 +
  745 + if($scope.funcoes.length === 1) {
  746 + $scope.funcoes.forEach(function(funcao){
  747 + funcao.isServidor = true;
  748 + });
  749 + }
712 } 750 }
713 - 751 +
  752 + function _getFuncao(parceiro, isServidor) {
  753 + var funcao = {id : parceiro.funcao.id, nome : '', isServidor : isServidor};
  754 + if(parceiro.cargo)
  755 + funcao.nome = funcao.nome.concat(parceiro.cargo).concat(' / ').concat(parceiro.funcao.nome);
  756 + else
  757 + funcao.nome = funcao.nome.concat(parceiro.funcao.nome);
  758 + return funcao;
  759 + };
  760 +
  761 + $scope.visualizarAssinaturasDocumento = function(documento){
  762 + $scope.fecharPagina();
  763 + $scope.exibirAssinarDocAnexo = true;
  764 + $timeout( function () {
  765 + angular.element( "#documentoAssinatura" ).scope().visualizarAssinaturasDocumento(documento);
  766 + } );
  767 + };
  768 +
  769 +
714 }] ); 770 }] );
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoListUnidadeController.js
@@ -29,8 +29,8 @@ citApp.controller(&#39;GerenciarProcessoListUnidadeController&#39;, [&#39;$scope&#39;, &#39;workflow @@ -29,8 +29,8 @@ citApp.controller(&#39;GerenciarProcessoListUnidadeController&#39;, [&#39;$scope&#39;, &#39;workflow
29 $scope.filterCriteria = { 29 $scope.filterCriteria = {
30 nome : 'GRID_PROCESSO_NA_UNIDADE', 30 nome : 'GRID_PROCESSO_NA_UNIDADE',
31 start : 1, 31 start : 1,
32 - dir : 'asc',  
33 - sort : 'processo.nup', 32 + dir : 'desc',
  33 + sort : 'processo.dataCriacao',
34 limit : 10, 34 limit : 10,
35 fields: ['id', 'processo.nup', 'processo.tipoProcesso.descricao', 'processo.assuntoComplementar','usuarioResponsavel.username', 'processo.status.descricao', 'processo.nivelAcesso.nivelAcesso.descricao', 'processo.dataCriacao', 'processo.idProcessInstance', 'processo.dataReferencia', 'processo.assunto'], 35 fields: ['id', 'processo.nup', 'processo.tipoProcesso.descricao', 'processo.assuntoComplementar','usuarioResponsavel.username', 'processo.status.descricao', 'processo.nivelAcesso.nivelAcesso.descricao', 'processo.dataCriacao', 'processo.idProcessInstance', 'processo.dataReferencia', 'processo.assunto'],
36 filters : [ 36 filters : [
@@ -134,7 +134,9 @@ citApp.controller(&#39;GerenciarProcessoListUnidadeController&#39;, [&#39;$scope&#39;, &#39;workflow @@ -134,7 +134,9 @@ citApp.controller(&#39;GerenciarProcessoListUnidadeController&#39;, [&#39;$scope&#39;, &#39;workflow
134 assignment.workItem = $scope.workItem; 134 assignment.workItem = $scope.workItem;
135 assignment.checked = false; 135 assignment.checked = false;
136 }); 136 });
137 - $scope.assignments[0].checked = true; 137 + if($scope.assignments.length > 0){
  138 + $scope.assignments[0].checked = true;
  139 + }
138 }; 140 };
139 141
140 $scope.selectAssignment = function(assignmentSelect) { 142 $scope.selectAssignment = function(assignmentSelect) {
cit-ecm-web/src/main/webapp/assets/js/angular/custom/repository/AssinaturaRepository.js 0 → 100644
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +'use strict';
  2 +
  3 +citApp.factory('AssinaturaRepository', ['RestangularEcm', 'AbstractRepository', function (restangularEcm, AbstractRepository) {
  4 +
  5 + function AssinaturaRepository() {
  6 + AbstractRepository.call(this, restangularEcm, 'rest/assinatura');
  7 +
  8 + this.saveAssinaturaInterna = function(assinatura) {
  9 + return this.restangular.all(this.route + '/saveAssinaturaInterna').post(assinatura);
  10 + };
  11 +
  12 + this.validarAssinaturaPorUsuario = function(idDocumento) {
  13 + return this.restangular.one(this.route + '/validarAssinaturaPorUsuario').get({idDocumento:idDocumento});
  14 + };
  15 + }
  16 +
  17 + AbstractRepository.extend(AssinaturaRepository);
  18 +
  19 + return new AssinaturaRepository();
  20 +}]);
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaEdit.html 0 → 100644
@@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
  1 +<div class="row">
  2 + <div class="col-sm-12">
  3 + <label-input ng-type="text" ng-id="assinante" ng-label="ECM.LABEL.ASSINANTE" ng-disabled="true" ng-model="pessoa.nome" />
  4 + </div>
  5 +</div>
  6 +<div class="row">
  7 + <div class="col-sm-12">
  8 + <strong><label><translate>ECM.LABEL.CARGO_FUNCAO</translate></label></strong>
  9 + </div>
  10 +</div>
  11 +<div class="row">
  12 + <div class="col-sm-12">
  13 + <div class="form-group" style="padding: 4px;">
  14 + <label data-ng-repeat="funcao in funcoes">
  15 + <input type="radio" name="response" data-ng-model="funcao.isServidor" data-ng-value="true" class="radio-group-inline" style="margin-left: 20px;"/>
  16 + {{funcao.nome}}
  17 + </label>
  18 + </div>
  19 + </div>
  20 +</div>
  21 +
  22 +<div class="row">
  23 + <div class="col-sm-1" style="margin-top: 5px; !important">
  24 + <label>
  25 + <translate>PORTAL.LABEL.SENHA</translate>
  26 + </label>
  27 + </div>
  28 + <div class="col-sm-4" >
  29 + <label-input ng-type="password" ng-id="autenticacao" ng-disabled="false" ng-model="$parent.autenticacao" />
  30 + </div>
  31 +<!-- <div class="col-sm-4" style="margin-top: 5px; !important"> -->
  32 +<!-- <label> -->
  33 +<!-- <translate>ECM.LABEL.OU</translate> -->
  34 +<!-- </label> -->
  35 +<!-- <label style="margin-left: 5px; font-weight: bold"> -->
  36 +<!-- <translate>ECM.LABEL.CERTIFICADO_DIGITAL</translate> -->
  37 +<!-- <i class="glyphicon glyphicon-info-sign blue" tooltip="{{$translate.instant('ECM.LABEL.CERTIFICADO_DIGITAL')}}" style="margin-left: 5px;"></i> -->
  38 +<!-- </label> -->
  39 +<!-- </div> -->
  40 +</div>
0 \ No newline at end of file 41 \ No newline at end of file
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaView.html 0 → 100644
@@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
  1 +<div id="documentoAssinatura" class="widget-box margin-bottom" ng-controller="AssinarDocumentoController as assinarDocumentoController">
  2 + <div class="widget-header">
  3 + <h2 class="widget-title">
  4 + <div ng-if="exibirIncluirAssinatura">
  5 + <translate>ECM.LABEL.ASSINATURA_DO_DOCUMENTO</translate> : {{documentoSelecionado.numero}}
  6 + <translate style="margin-left: 20px;">ECM.LABEL.VERSAO_ATUAL</translate> : {{documentoSelecionado.versaoDocumento | limitTo:3}}
  7 + </div>
  8 + <div ng-if="!exibirIncluirAssinatura">
  9 + <translate>ECM.LABEL.ASSINATURAS_DOCUMENTO</translate> : {{documentoSelecionado.numero}}
  10 + <translate style="margin-left: 20px;">ECM.LABEL.VERSAO_ATUAL</translate> : {{documentoSelecionado.versaoDocumento | limitTo:3}}
  11 + </div>
  12 + </h2>
  13 + <div class="widget-toolbar">
  14 + <a href="#void" ng-click="widgetAssinarDocIsCollapsed = !widgetAssinarDocIsCollapsed">
  15 + <i class="fa" ng-class="{'fa-chevron-up': !widgetAssinarDocIsCollapsed, 'fa-chevron-down': widgetAssinarDocIsCollapsed}"></i>
  16 + </a>
  17 + <a href="#void" ng-click="$parent.closeWidget('documentoAssinatura');"> <i class="fa fa-close"></i></a>
  18 + </div>
  19 + </div>
  20 +
  21 + <div class="widget-body" collapse="widgetAssinarDocIsCollapsed">
  22 + <div class="widget-main clearfix">
  23 + <div class="page-content clearfix">
  24 + <div ng-if="exibirDocJaAssinado" class="alert alert-success" role="alert">
  25 + <span class="small"><translate>ECM.MSG.DOCUMENTO_JA_ASSINADO</translate></span>
  26 + </div>
  27 +
  28 + <div ng-include src="'/cit-ecm-web/html/assinatura/documentoAssinaturaEdit.html'" ng-show="exibirIncluirAssinatura"/>
  29 +
  30 + <div ng-include src="'/cit-ecm-web/html/assinatura/documentoAssinaturas.html'" />
  31 +
  32 + <div class="row" ng-if="exibirIncluirAssinatura">
  33 + <div class="col-md-12">
  34 + <button ng-click="assinar()" title="{{$translate.instant('ECM.LABEL.ASSINAR')}}" alt="{{$translate.instant('ECM.LABEL.ASSINAR')}}" type="button" class="btn btn-sm btn-primary">
  35 + <translate>ECM.LABEL.ASSINAR</translate>
  36 + </button>
  37 + </div>
  38 + </div>
  39 +
  40 + </div>
  41 + </div>
  42 + </div>
  43 +</div>
0 \ No newline at end of file 44 \ No newline at end of file
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturas.html 0 → 100644
@@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
  1 +<div class="row" ng-if="documentosSelecionados.length > 0">
  2 + <div class="col-sm-12">
  3 + <table class="table table-striped table-bordered table-hover">
  4 + <thead>
  5 + <tr>
  6 + <th><small><translate>LABEL.VERSAO</translate></small></th>
  7 + <th><small><translate>LABEL.USUARIO</translate></small></th>
  8 + <th><small><translate>CORPORATIVO.LABEL.FUNCAO</translate></small></th>
  9 + <th><small><translate>LABEL.UNIDADE</translate></small></th>
  10 + <th><small><translate>ECM.LABEL.TIPO_ASSINATURA</translate></small></th>
  11 + <th><small><translate>ECM.LABEL.DATA_DA_ASSINATURA</translate></small></th>
  12 + </tr>
  13 + </thead>
  14 + <tbody ng-repeat="docSelecionado in documentosSelecionados">
  15 + <tr ng-repeat="assinatura in docSelecionado.assinaturas">
  16 + <td>
  17 + <small>{{docSelecionado.versaoDocumento}}</small>
  18 + </td>
  19 + <td>
  20 + <small>{{assinatura.usuario.username}}</small>
  21 + </td>
  22 + <td>
  23 + <small>{{assinatura.funcao.nome}}</small>
  24 + </td>
  25 + <td>
  26 + <small>{{docSelecionado.unidadeNome}}</small>
  27 + </td>
  28 + <td>
  29 + <small>{{assinatura.tipoAssinatura.descricao}}</small>
  30 + </td>
  31 + <td>
  32 + <small>{{assinatura.dataCriacao | date : 'dd/MM/yyyy HH:mm:ss'}}</small>
  33 + </td>
  34 + </tr>
  35 + </tbody>
  36 + <tfoot>
  37 + <tr ng-hide="nenhumaAssinatura">
  38 + <td colspan="6">
  39 + <strong><translate>ECM.LABEL.DOCUMENTO_SEM_ASSINATURA</translate></strong>
  40 + </td>
  41 + </tr>
  42 + </tfoot>
  43 + </table>
  44 + </div>
  45 +</div>
0 \ No newline at end of file 46 \ No newline at end of file
cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeAcaoProcesso.html
@@ -23,7 +23,8 @@ @@ -23,7 +23,8 @@
23 23
24 <div ng-include src="'/cit-ecm-web/html/atribuirProcesso/atribuir.html'" ng-show="isAtribuirProcesso" /> 24 <div ng-include src="'/cit-ecm-web/html/atribuirProcesso/atribuir.html'" ng-show="isAtribuirProcesso" />
25 25
26 - 26 +<!-- Assinatura documento -->
  27 +<div ng-include src="'/cit-ecm-web/html/assinatura/documentoAssinaturaView.html'" ng-show="exibirAssinarDocAnexo" />
27 28
28 <div id="widget-processo" ng-show="isProcessoEdit" class="widget-box margin-bottom"> 29 <div id="widget-processo" ng-show="isProcessoEdit" class="widget-box margin-bottom">
29 <div class="widget-header"> 30 <div class="widget-header">
cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeDocumentosProcesso.html
@@ -21,12 +21,13 @@ @@ -21,12 +21,13 @@
21 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> 21 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>
22 <span class="label label-warning" ng-show="documento.nivelAcesso.nivelAcesso.codigo == 1">{{documento.nivelAcesso.nivelAcesso.descricao}}</span> <span class="label label-success" 22 <span class="label label-warning" ng-show="documento.nivelAcesso.nivelAcesso.codigo == 1">{{documento.nivelAcesso.nivelAcesso.descricao}}</span> <span class="label label-success"
23 ng-show="documento.nivelAcesso.nivelAcesso.codigo == 2">{{documento.nivelAcesso.nivelAcesso.descricao}}</span> <span class="label label-info" ng-show="documento.origem">Anexado</span> <span 23 ng-show="documento.nivelAcesso.nivelAcesso.codigo == 2">{{documento.nivelAcesso.nivelAcesso.descricao}}</span> <span class="label label-info" ng-show="documento.origem">Anexado</span> <span
24 - class="label label-info" ng-show="false">Assinado</span> <span class="label label-success" ng-show="false">Habilitado</span> <span class="label label-warning" ng-show="false">Ci&#xEA;ncia</span> <span 24 + class="label label-info" ng-show="documento.assinaturas && documento.assinaturas.length > 0">Assinado</span> <span class="label label-success" ng-show="false">Habilitado</span> <span class="label label-warning" ng-show="false">Ci&#xEA;ncia</span> <span
25 class="label label-danger" ng-show="documento.cancelado">Cancelado</span> 25 class="label label-danger" ng-show="documento.cancelado">Cancelado</span>
  26 +
26 </div> 27 </div>
  28 +
27 </div> 29 </div>
28 30
29 -  
30 <div ng-if="!isProcessoView" class="tools btn-group dropdown" role="group" dropdown> 31 <div ng-if="!isProcessoView" class="tools btn-group dropdown" role="group" dropdown>
31 <button type="button" class="btn btn-success btn-xs" dropdown-toggle> 32 <button type="button" class="btn btn-success btn-xs" dropdown-toggle>
32 <translate>LABEL.ACOES</translate> 33 <translate>LABEL.ACOES</translate>
@@ -39,7 +40,13 @@ @@ -39,7 +40,13 @@
39 <li ng-if='processo.isTramitado && (!documento.cancelado && documento.unidade.id === usuarioLogado.unidade.id)'><a href="#void" ng-click='cancelarDocumento(documento)'> <translate>ECM.LABEL.CANCELARDOCUMENTO</translate></a></li> 40 <li ng-if='processo.isTramitado && (!documento.cancelado && documento.unidade.id === usuarioLogado.unidade.id)'><a href="#void" ng-click='cancelarDocumento(documento)'> <translate>ECM.LABEL.CANCELARDOCUMENTO</translate></a></li>
40 <li ng-if='!documento.cancelado'><a href="#void" ng-click="visualizarVersoes(documento);"> <translate>ECM.LABEL.VERSOESDODOCUMENTO</translate></a></li> 41 <li ng-if='!documento.cancelado'><a href="#void" ng-click="visualizarVersoes(documento);"> <translate>ECM.LABEL.VERSOESDODOCUMENTO</translate></a></li>
41 <li ><a ng-if='documento.cancelado'href="#void" ng-click="getCancelamentoDocumento(documento);"> <translate>ECM.LABEL.JUSTIFICATIVA_CANCELAMENTO</translate></a></li> 42 <li ><a ng-if='documento.cancelado'href="#void" ng-click="getCancelamentoDocumento(documento);"> <translate>ECM.LABEL.JUSTIFICATIVA_CANCELAMENTO</translate></a></li>
  43 + <li ><a href="#void" ng-click="abrirAssinarDocumento(documento)"> <translate>ECM.LABEL.ASSINARDOCUMENTO</translate></a></li>
  44 + <li ><a href="#void" ng-click="visualizarAssinaturasDocumento(documento)"> <translate>ECM.LABEL.ASSINATURAS_DOCUMENTO</translate></a></li>
42 </ul> 45 </ul>
43 46
44 </div> 47 </div>
  48 +
  49 + <div class="versoes">
  50 + <span><translate>ECM.LABEL.VERSAO_ATUAL</translate>: {{documento.versaoDocumento | limitTo:3}}</span>
  51 + </div>
45 </div> 52 </div>
46 \ No newline at end of file 53 \ No newline at end of file