Commit be45c26a3065bd35d5ca54cae86a583f1205c151

Authored by rogerio.costa
2 parents 56ee39ee 6d5592c7
Exists in master

Merge branch 'desenvolvimento' of http://ferramentasgo.centralit.com.br:8080/scm…

…/git/cit-grp-ecm into desenvolvimento
Showing 36 changed files with 1516 additions and 146 deletions   Show diff stats
cit-ecm-api/src/main/java/br/com/centralit/api/dao/TarjaAssinaturaDao.java
1 1 package br.com.centralit.api.dao;
2 2  
  3 +import br.com.centralit.api.model.TarjaAssinatura;
3 4 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
  5 +import br.com.centralit.framework.model.Dominio;
4 6  
5 7  
6 8 /**
... ... @@ -16,4 +18,13 @@ import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
16 18 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
17 19 *
18 20 */
19   -public interface TarjaAssinaturaDao extends CitGenericDAO {}
  21 +public interface TarjaAssinaturaDao extends CitGenericDAO {
  22 +
  23 + /**
  24 + * Método responsável por obter tarja assinatura interna
  25 + * @author rogerio.cassimiro
  26 + * @param dominio
  27 + * @return {@link TarjaAssinatura}
  28 + */
  29 + TarjaAssinatura getTarjaAssinaturaInterna(Dominio dominio);
  30 +}
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/dao/TarjaAssinaturaDaoHibernate.java
... ... @@ -4,6 +4,8 @@ import org.springframework.stereotype.Repository;
4 4  
5 5 import br.com.centralit.api.model.TarjaAssinatura;
6 6 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
  7 +import br.com.centralit.framework.dao.arquitetura.SearchSeven;
  8 +import br.com.centralit.framework.model.Dominio;
7 9  
8 10 /**
9 11 * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
... ... @@ -25,4 +27,16 @@ public class TarjaAssinaturaDaoHibernate extends CitGenericDAOImpl implements Ta
25 27 super(TarjaAssinatura.class);
26 28 }
27 29  
  30 + /**
  31 + * Método responsável por obter tarja assinatura interna
  32 + * @author rogerio.cassimiro
  33 + * @param dominio
  34 + * @return {@link TarjaAssinatura}
  35 + */
  36 + @Override
  37 + public TarjaAssinatura getTarjaAssinaturaInterna(Dominio dominio){
  38 + SearchSeven searchSeven = new SearchSeven(Boolean.TRUE);
  39 + searchSeven.addFilterEqual("tipoAssinatura.id", dominio.getId());
  40 + return searchUnique(searchSeven);
  41 + }
28 42 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/Assinatura.java
1 1 package br.com.centralit.api.model;
2 2  
  3 +import javax.persistence.CascadeType;
3 4 import javax.persistence.Entity;
4 5 import javax.persistence.FetchType;
5 6 import javax.persistence.GeneratedValue;
6 7 import javax.persistence.GenerationType;
7 8 import javax.persistence.Id;
8 9 import javax.persistence.ManyToOne;
  10 +import javax.persistence.OneToOne;
9 11 import javax.persistence.Transient;
10 12  
11 13 import br.com.centralit.api.framework.json.ViewsEcm;
... ... @@ -66,6 +68,7 @@ public class Assinatura extends PersistentObjectAudit {
66 68 private Usuario usuario;
67 69  
68 70 /** Atributo documentoGed. */
  71 + @JsonView({ ViewsEcm.AssinaturaEdit.class })
69 72 @ManyToOne(fetch = FetchType.LAZY)
70 73 private DocumentoGed documentoGed;
71 74  
... ... @@ -79,9 +82,24 @@ public class Assinatura extends PersistentObjectAudit {
79 82 @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.DocumentoGedEdit.class })
80 83 private Funcao funcao;
81 84  
  85 + /** Atributo idTask. */
82 86 @Transient
83 87 private Long idTask;
84 88  
  89 + /** Atributo password. */
  90 + @Transient
  91 + private String password;
  92 +
  93 + /** Atributo conteudoTarja. */
  94 + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  95 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class })
  96 + private ConteudoTarja conteudoTarja;
  97 +
  98 + /** Atributo pessoa. */
  99 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.DocumentoGedEdit.class })
  100 + @ManyToOne(fetch = FetchType.LAZY)
  101 + private Pessoa pessoa;
  102 +
85 103 /**
86 104 * Retorna o valor do atributo <code>id</code>
87 105 *
... ... @@ -202,4 +220,64 @@ public class Assinatura extends PersistentObjectAudit {
202 220 this.idTask = idTask;
203 221 }
204 222  
  223 + /**
  224 + * Retorna o valor do atributo <code>conteudoTarja</code>
  225 + *
  226 + * @return <code>ConteudoTarja</code>
  227 + */
  228 + public ConteudoTarja getConteudoTarja() {
  229 +
  230 + return conteudoTarja;
  231 + }
  232 +
  233 + /**
  234 + * Define o valor do atributo <code>conteudoTarja</code>.
  235 + *
  236 + * @param conteudoTarja
  237 + */
  238 + public void setConteudoTarja(ConteudoTarja conteudoTarja) {
  239 +
  240 + this.conteudoTarja = conteudoTarja;
  241 + }
  242 +
  243 + /**
  244 + * Retorna o valor do atributo <code>password</code>
  245 + *
  246 + * @return <code>String</code>
  247 + */
  248 + public String getPassword() {
  249 +
  250 + return password;
  251 + }
  252 +
  253 + /**
  254 + * Define o valor do atributo <code>password</code>.
  255 + *
  256 + * @param password
  257 + */
  258 + public void setPassword(String password) {
  259 +
  260 + this.password = password;
  261 + }
  262 +
  263 + /**
  264 + * Retorna o valor do atributo <code>pessoa</code>
  265 + *
  266 + * @return <code>Pessoa</code>
  267 + */
  268 + public Pessoa getPessoa() {
  269 +
  270 + return pessoa;
  271 + }
  272 +
  273 + /**
  274 + * Define o valor do atributo <code>pessoa</code>.
  275 + *
  276 + * @param pessoa
  277 + */
  278 + public void setPessoa(Pessoa pessoa) {
  279 +
  280 + this.pessoa = pessoa;
  281 + }
  282 +
205 283 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/ConteudoTarja.java 0 → 100644
... ... @@ -0,0 +1,158 @@
  1 +package br.com.centralit.api.model;
  2 +
  3 +import javax.persistence.Basic;
  4 +import javax.persistence.Entity;
  5 +import javax.persistence.FetchType;
  6 +import javax.persistence.GeneratedValue;
  7 +import javax.persistence.GenerationType;
  8 +import javax.persistence.Id;
  9 +import javax.persistence.Lob;
  10 +import javax.persistence.OneToOne;
  11 +import javax.persistence.Transient;
  12 +
  13 +import org.hibernate.annotations.Type;
  14 +
  15 +import br.com.centralit.api.framework.json.ViewsEcm;
  16 +import br.com.centralit.framework.json.Views;
  17 +import br.com.centralit.framework.model.AnexoImagem;
  18 +
  19 +import com.fasterxml.jackson.annotation.JsonView;
  20 +
  21 +/**
  22 + * <p>
  23 + * <b>Title: </b>
  24 + * </p>
  25 + * <p>
  26 + * <b>Description: </b>
  27 + * </p>
  28 + *
  29 + * @since 27/04/2016 - 08:22:01
  30 + * @author rogerio.cassimiro
  31 + *
  32 + */
  33 +@Entity
  34 +public class ConteudoTarja {
  35 +
  36 + /** Atributo id. */
  37 + @Id
  38 + @GeneratedValue(strategy = GenerationType.AUTO)
  39 + @JsonView({ Views.GenericView.class })
  40 + private Long id;
  41 +
  42 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class })
  43 + @Transient
  44 + private String conteudo;
  45 +
  46 + @Lob
  47 + @Basic(fetch = FetchType.LAZY)
  48 + @Type(type = "org.hibernate.type.BinaryType")
  49 + private byte[] conteudoCriptografado;
  50 +
  51 + @OneToOne
  52 + @JsonView({ ViewsEcm.AssinaturaEdit.class })
  53 + private AnexoImagem anexoImagem;
  54 +
  55 + @Transient
  56 + private Long idTarjaAssinatura;
  57 +
  58 + /**
  59 + * Retorna o valor do atributo <code>id</code>
  60 + *
  61 + * @return <code>Long</code>
  62 + */
  63 + public Long getId() {
  64 +
  65 + return id;
  66 + }
  67 +
  68 + /**
  69 + * Define o valor do atributo <code>id</code>.
  70 + *
  71 + * @param id
  72 + */
  73 + public void setId(Long id) {
  74 +
  75 + this.id = id;
  76 + }
  77 +
  78 + /**
  79 + * Retorna o valor do atributo <code>conteudo</code>
  80 + *
  81 + * @return <code>String</code>
  82 + */
  83 + public String getConteudo() {
  84 +
  85 + return conteudo;
  86 + }
  87 +
  88 + /**
  89 + * Define o valor do atributo <code>conteudo</code>.
  90 + *
  91 + * @param conteudo
  92 + */
  93 + public void setConteudo(String conteudo) {
  94 +
  95 + this.conteudo = conteudo;
  96 + }
  97 +
  98 + /**
  99 + * Retorna o valor do atributo <code>conteudoCriptografado</code>
  100 + *
  101 + * @return <code>byte[]</code>
  102 + */
  103 + public byte[] getConteudoCriptografado() {
  104 +
  105 + return conteudoCriptografado;
  106 + }
  107 +
  108 + /**
  109 + * Define o valor do atributo <code>conteudoCriptografado</code>.
  110 + *
  111 + * @param conteudoCriptografado
  112 + */
  113 + public void setConteudoCriptografado(byte[] conteudoCriptografado) {
  114 +
  115 + this.conteudoCriptografado = conteudoCriptografado;
  116 + }
  117 +
  118 + /**
  119 + * Retorna o valor do atributo <code>idTarjaAssinatura</code>
  120 + *
  121 + * @return <code>Long</code>
  122 + */
  123 + public Long getIdTarjaAssinatura() {
  124 +
  125 + return idTarjaAssinatura;
  126 + }
  127 +
  128 + /**
  129 + * Define o valor do atributo <code>idTarjaAssinatura</code>.
  130 + *
  131 + * @param idTarjaAssinatura
  132 + */
  133 + public void setIdTarjaAssinatura(Long idTarjaAssinatura) {
  134 +
  135 + this.idTarjaAssinatura = idTarjaAssinatura;
  136 + }
  137 +
  138 + /**
  139 + * Retorna o valor do atributo <code>anexoImagem</code>
  140 + *
  141 + * @return <code>AnexoImagem</code>
  142 + */
  143 + public AnexoImagem getAnexoImagem() {
  144 +
  145 + return anexoImagem;
  146 + }
  147 +
  148 + /**
  149 + * Define o valor do atributo <code>anexoImagem</code>.
  150 + *
  151 + * @param anexoImagem
  152 + */
  153 + public void setAnexoImagem(AnexoImagem anexoImagem) {
  154 +
  155 + this.anexoImagem = anexoImagem;
  156 + }
  157 +
  158 +}
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java
... ... @@ -120,6 +120,12 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
120 120 @Type(type = "org.hibernate.type.BinaryType")
121 121 private byte[] conteudoCriptografado;
122 122  
  123 + /** Atributo conteudoAssinado. */
  124 + @Lob
  125 + @Basic(fetch = FetchType.LAZY)
  126 + @Type(type = "org.hibernate.type.BinaryType")
  127 + private byte[] conteudoAssinado;
  128 +
123 129 /** Atributo icon. */
124 130 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class, Views.ProcessoVHView.class})
125 131 private String icon;
... ... @@ -141,7 +147,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
141 147 @JsonView({ ViewsEcm.DocumentoGedEdit.class })
142 148 private Boolean aprovado;
143 149  
144   - /** Atributo formaCriacao. */
  150 + /** Atributo formaCriacao. Online/Anexo */
145 151 @ManyToOne(fetch = FetchType.LAZY)
146 152 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, Views.ProcessoVHView.class})
147 153 private Dominio formaCriacao;
... ... @@ -151,7 +157,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
151 157 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class })
152 158 private Dominio status;
153 159  
154   - /** Atributo estado. */
  160 + /** Atributo estado. Minuta/Copia/Original */
155 161 @ManyToOne(fetch = FetchType.LAZY)
156 162 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class })
157 163 private Dominio estado;
... ... @@ -244,6 +250,14 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
244 250 @JsonView({ Views.DocumentoGedEdit.class, Views.ProcessoEdit.class })
245 251 private Collection<Assinatura> assinaturas;
246 252  
  253 + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  254 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class })
  255 + private ConteudoTarja conteudoTarja;
  256 +
  257 + @Transient
  258 + @JsonView({ Views.ProcessoEdit.class, Views.DocumentoGedEdit.class })
  259 + private String tresAssinaturas;
  260 +
247 261 /**
248 262 * @return the novaVersao
249 263 */
... ... @@ -1022,4 +1036,64 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
1022 1036 this.assinaturas = assinaturas;
1023 1037 }
1024 1038  
  1039 + /**
  1040 + * Retorna o valor do atributo <code>conteudoTarja</code>
  1041 + *
  1042 + * @return <code>ConteudoTarja</code>
  1043 + */
  1044 + public ConteudoTarja getConteudoTarja() {
  1045 +
  1046 + return conteudoTarja;
  1047 + }
  1048 +
  1049 + /**
  1050 + * Define o valor do atributo <code>conteudoTarja</code>.
  1051 + *
  1052 + * @param conteudoTarja
  1053 + */
  1054 + public void setConteudoTarja(ConteudoTarja conteudoTarja) {
  1055 +
  1056 + this.conteudoTarja = conteudoTarja;
  1057 + }
  1058 +
  1059 + /**
  1060 + * Retorna o valor do atributo <code>tresAssinaturas</code>
  1061 + *
  1062 + * @return <code>String</code>
  1063 + */
  1064 + public String getTresAssinaturas() {
  1065 +
  1066 + return tresAssinaturas;
  1067 + }
  1068 +
  1069 + /**
  1070 + * Define o valor do atributo <code>tresAssinaturas</code>.
  1071 + *
  1072 + * @param tresAssinaturas
  1073 + */
  1074 + public void setTresAssinaturas(String tresAssinaturas) {
  1075 +
  1076 + this.tresAssinaturas = tresAssinaturas;
  1077 + }
  1078 +
  1079 + /**
  1080 + * Retorna o valor do atributo <code>conteudoAssinado</code>
  1081 + *
  1082 + * @return <code>byte[]</code>
  1083 + */
  1084 + public byte[] getConteudoAssinado() {
  1085 +
  1086 + return conteudoAssinado;
  1087 + }
  1088 +
  1089 + /**
  1090 + * Define o valor do atributo <code>conteudoAssinado</code>.
  1091 + *
  1092 + * @param conteudoAssinado
  1093 + */
  1094 + public void setConteudoAssinado(byte[] conteudoAssinado) {
  1095 +
  1096 + this.conteudoAssinado = conteudoAssinado;
  1097 + }
  1098 +
1025 1099 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/TarjaAssinatura.java
... ... @@ -43,6 +43,13 @@ public class TarjaAssinatura extends PersistentObjectAudit{
43 43 @OneToOne
44 44 @JsonView({ ViewsEcm.TarjaAssinaturaEditview.class })
45 45 private AnexoImagem anexoImagem;
  46 +
  47 + public static String LOGO = "@logo@";
  48 + public static String NOME_ASSINANTE = "@nome_assinante@";
  49 + public static String FUNCAO_ASSINANTE = "@funcao_assinante@";
  50 + public static String DATA_ASSINATURA = "@data_assinatura@";
  51 + public static String HORA_ASSINATURA = "@hora_assinatura@";
  52 + public static String CODIGO_ASSINATURA = "@codigo_assinatura@";
46 53  
47 54 public Long getId() {
48 55  
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/AssinaturaUtilService.java 0 → 100644
... ... @@ -0,0 +1,96 @@
  1 +package br.com.centralit.api.service;
  2 +
  3 +import java.security.NoSuchAlgorithmException;
  4 +
  5 +/**
  6 + * <p>
  7 + * <img src="http://centralit.com.br/images/logo_central.png">
  8 + * </p>
  9 + *
  10 + * <p>
  11 + * <b>Company: </b> Central IT - Governança Corporativa -
  12 + * </p>
  13 + *
  14 + * <p>
  15 + * <b>Title: </b>
  16 + * </p>
  17 + *
  18 + * <p>
  19 + * <b>Description: </b>
  20 + * </p>
  21 + *
  22 + * <p>
  23 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  24 + * </p>
  25 + *
  26 + * <p>
  27 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  28 + * </p>
  29 + *
  30 + * @since 30/04/2016 - 13:47:33
  31 + *
  32 + * @version 1.0.0
  33 + *
  34 + * @author rogerio.costa
  35 + *
  36 + */
  37 +public interface AssinaturaUtilService {
  38 +
  39 + /**
  40 + * <p>
  41 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  42 + * </p>
  43 + *
  44 + * <p>
  45 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  46 + * </p>
  47 + *
  48 + * Método responsável por assinar o documento
  49 + *
  50 + * @author rogerio.costa
  51 + *
  52 + * @param mensagem
  53 + * @return byte[]
  54 + * @throws Exception
  55 + */
  56 + byte[] geraAssinatura(byte[] conteudo) throws Exception;
  57 +
  58 + /**
  59 + * <p>
  60 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  61 + * </p>
  62 + *
  63 + * <p>
  64 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  65 + * </p>
  66 + *
  67 + * Método responsável por gerar o hash do documento
  68 + *
  69 + * @author rogerio.costa
  70 + *
  71 + * @param doc
  72 + * @return
  73 + * @throws NoSuchAlgorithmException
  74 + */
  75 + byte[] gerarHash(byte[] doc) throws NoSuchAlgorithmException;
  76 +
  77 + /**
  78 + * <p>
  79 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  80 + * </p>
  81 + *
  82 + * <p>
  83 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  84 + * </p>
  85 + *
  86 + * Método responsável por por gerar o hash do documento
  87 + *
  88 + * @author rogerio.costa
  89 + *
  90 + * @param doc
  91 + * @return
  92 + * @throws NoSuchAlgorithmException
  93 + */
  94 + String gerarHash(String doc) throws NoSuchAlgorithmException;
  95 +
  96 +}
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/DocumentoGedService.java
... ... @@ -78,4 +78,10 @@ public interface DocumentoGedService extends GenericService&lt;DocumentoGed, Long&gt;
78 78 */
79 79 Collection<DocumentoGed> atualizarSigiloDocumentos(Collection<DocumentoGed> listaDocumentos);
80 80  
  81 + /**
  82 + * Método responsável por montar as três primeiras assinaturas por documento para apresentação no tooltip da tela de execução de tarefa
  83 + * @author rogerio.cassimiro
  84 + * @param documentos
  85 + */
  86 + void montarTresAssinantesPorDocumento(Collection<DocumentoGed> documentos);
81 87 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/TarjaAssinaturaService.java
... ... @@ -2,30 +2,37 @@ package br.com.centralit.api.service;
2 2  
3 3 import org.springframework.web.multipart.MultipartFile;
4 4  
  5 +import br.com.centralit.api.model.Assinatura;
5 6 import br.com.centralit.api.model.TarjaAssinatura;
6 7 import br.com.centralit.framework.service.arquitetura.GenericService;
7 8  
8 9 /**
9   - * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
10   - *
11   - * <p><b>Company: </b> Central IT - Governan&ccedil;a Corporativa - </p>
12   - *
13   - * <p><b>Description: </b></p>
  10 + * <p>
  11 + * <img src="http://centralit.com.br/images/logo_central.png">
  12 + * </p>
  13 + *
  14 + * <p>
  15 + * <b>Company: </b> Central IT - Governan&ccedil;a Corporativa -
  16 + * </p>
  17 + *
  18 + * <p>
  19 + * <b>Description: </b>
  20 + * </p>
14 21 * Classe de servi&ccedil;os para a entidade TarjaAssinatura, a qual mant&eacute;m as regras de neg&oacute;cio.
15   - *
  22 + *
16 23 * @since 13 de abr de 2016 - 13:40:36
17 24 * @version 1.0.0
18 25 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
19   - *
  26 + *
20 27 */
21 28 public interface TarjaAssinaturaService extends GenericService<TarjaAssinatura, Long> {
22 29  
23 30 /**
24   - *
  31 + *
25 32 * M&eacute;todo respons&aacute;vel por fazer o upload da imagem do logotipo de uma tarja de assinatura.
26   - *
  33 + *
27 34 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
28   - *
  35 + *
29 36 * @param file
30 37 * @param idOrganizacao
31 38 * @param idConfiguracao
... ... @@ -33,25 +40,57 @@ public interface TarjaAssinaturaService extends GenericService&lt;TarjaAssinatura,
33 40 void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idConfiguracao);
34 41  
35 42 /**
36   - *
  43 + *
37 44 * M&eacute;todo respons&aacute;vel por salvar os dois tipos de tarjas de assinatura ao mesmo tempo
38   - *
  45 + *
39 46 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
40   - *
  47 + *
41 48 * @param tarjaAssinaturaVH
42 49 * @return
43 50 */
44   - TarjaAssinatura save (TarjaAssinatura tarjaAssinatura);
45   -
  51 + TarjaAssinatura save(TarjaAssinatura tarjaAssinatura);
46 52  
47 53 /**
48   - *
  54 + *
49 55 * M&eacute;todo respons&aacute;vel por remover a imagem associada a uma tarja de assinatura.
50   - *
  56 + *
51 57 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
52   - *
  58 + *
53 59 * @param tarjaAssinatura
54 60 * @return
55 61 */
56   - TarjaAssinatura removeImagem (TarjaAssinatura tarjaAssinatura);
  62 + TarjaAssinatura removeImagem(TarjaAssinatura tarjaAssinatura);
  63 +
  64 + /**
  65 + * Método responsável por obter tarja assinatura interna
  66 + *
  67 + * @author rogerio.cassimiro
  68 + * @return {@link TarjaAssinatura}
  69 + */
  70 + TarjaAssinatura getTarjaAssinaturaInterna();
  71 +
  72 + /**
  73 + * Método responsável por gerar assinatura interna por usuário e por documento
  74 + *
  75 + * @author rogerio.cassimiro
  76 + * @param assinatura
  77 + * @param formaCriacao
  78 + */
  79 + void gerarAssinaturaInternaUsuario(Assinatura assinatura, Long formaCriacao);
  80 +
  81 + /**
  82 + * Método responsável por criptografar o texto através da chave
  83 + * @author rogerio.cassimiro
  84 + * @param text
  85 + * @return {@link Byte}
  86 + */
  87 + byte[] encrypted(String text);
  88 +
  89 + /**
  90 + * Método responsável por descriptografar texto
  91 + * @author rogerio.cassimiro
  92 + * @param text
  93 + * @return {@link String}
  94 + */
  95 + String decrypted(byte[] text);
57 96 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AnexoGedServiceImpl.java
... ... @@ -107,7 +107,7 @@ public class AnexoGedServiceImpl extends GenericServiceImpl&lt;AnexoGed, Long&gt; impl
107 107  
108 108 documentoGed.setConteudo(this.gedFileService.doOcr(anexo));
109 109  
110   - this.solrService.addDocumento(documentoGed);
  110 +// this.solrService.addDocumento(documentoGed);
111 111  
112 112 anexo.setDocumentoGed(documentoGed);
113 113  
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaServiceImpl.java
1 1 package br.com.centralit.api.service.impl;
2 2  
3 3 import org.springframework.beans.factory.annotation.Autowired;
  4 +import org.springframework.beans.factory.annotation.Value;
4 5 import org.springframework.security.core.context.SecurityContextHolder;
5 6 import org.springframework.stereotype.Service;
6 7  
7 8 import br.com.centralit.api.dao.AssinaturaDao;
8 9 import br.com.centralit.api.model.Assinatura;
  10 +import br.com.centralit.api.model.DocumentoGed;
9 11 import br.com.centralit.api.service.AssinaturaService;
10 12 import br.com.centralit.api.service.DocumentoGedService;
11 13 import br.com.centralit.api.service.DominioService;
12 14 import br.com.centralit.api.service.FuncaoService;
13 15 import br.com.centralit.api.service.HistoricoAlteracaoProcessoService;
  16 +import br.com.centralit.api.service.PessoaService;
  17 +import br.com.centralit.api.service.TarjaAssinaturaService;
14 18 import br.com.centralit.api.service.UsuarioService;
  19 +import br.com.centralit.framework.exception.BusinessException;
  20 +import br.com.centralit.framework.exception.CodigoErro;
15 21 import br.com.centralit.framework.model.Dominio;
16 22 import br.com.centralit.framework.model.Usuario;
17 23 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
18   -
  24 +import br.com.centralit.framework.util.UtilObjeto;
  25 +import br.com.centralit.framework.util.UtilString;
19 26  
20 27 /**
21   - * <p><b>Title: </b></p>
22   - * <p><b>Description: </b></p>
  28 + * <p>
  29 + * <b>Title: </b>
  30 + * </p>
  31 + * <p>
  32 + * <b>Description: </b>
  33 + * </p>
23 34 *
24 35 * @since 22/04/2016 - 11:50:56
25 36 * @author rogerio.cassimiro
26   - *
  37 + *
27 38 */
28 39 @Service("assinaturaService")
29 40 public class AssinaturaServiceImpl extends GenericServiceImpl<Assinatura, Long> implements AssinaturaService {
30 41  
31 42 @Autowired
32 43 private AssinaturaDao assinaturaDao;
33   -
  44 +
34 45 @Autowired
35 46 private DocumentoGedService documentoGedService;
36   -
  47 +
37 48 @Autowired
38 49 private UsuarioService usuarioService;
39   -
  50 +
40 51 @Autowired
41 52 private DominioService dominioService;
42   -
  53 +
43 54 @Autowired
44 55 private FuncaoService funcaoService;
45   -
  56 +
  57 + @Autowired
  58 + private PessoaService pessoaService;
  59 +
46 60 @Autowired
47 61 private HistoricoAlteracaoProcessoService historicoAlteracaoProcessoService;
48   -
  62 +
  63 + @Autowired
  64 + private TarjaAssinaturaService tarjaAssinaturaService;
  65 +
  66 + @Value("${metodo.autenticacao.ldap}")
  67 + private String ldap;
  68 +
49 69 @Autowired
50   - public AssinaturaServiceImpl( AssinaturaDao assinaturaDao) {
  70 + public AssinaturaServiceImpl( AssinaturaDao assinaturaDao ) {
  71 +
51 72 this.dao = assinaturaDao;
52 73 }
53   -
  74 +
54 75 /**
55 76 * Salva assinatura do documento e gera histórico
56 77 */
57 78 @Override
58 79 public Assinatura saveAssinaturaInterna(Assinatura assinatura) {
  80 +
  81 + Usuario usuario = (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
  82 + validarSenha(assinatura.getPassword(), usuario);
  83 + montarTransients(assinatura, usuario);
  84 + historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura);
  85 + tarjaAssinaturaService.gerarAssinaturaInternaUsuario(assinatura, assinatura.getDocumentoGed().getFormaCriacao().getCodigo());
  86 + alterarEstadoDocumento(assinatura.getDocumentoGed());
  87 + return super.save(assinatura);
  88 + }
  89 +
  90 + /**
  91 + * Método responsável por alterar estado do documento se a forma for online
  92 + *
  93 + * @author rogerio.cassimiro
  94 + * @param documentoGed
  95 + */
  96 + private void alterarEstadoDocumento(DocumentoGed documentoGed) {
  97 +
  98 + if (documentoGed.getFormaCriacao().getCodigo().equals(1L) && !documentoGed.getEstado().getCodigo().equals(2L))
  99 + documentoGed.setEstado(dominioService.findByChaveAndCodigo("estadoDocumentoGed", 2L));
  100 + }
  101 +
  102 + /**
  103 + * Método responsável por montar transients da assinatura
  104 + *
  105 + * @author rogerio.cassimiro
  106 + * @param assinatura
  107 + * @param usuario
  108 + */
  109 + private void montarTransients(Assinatura assinatura, Usuario usuario) {
  110 +
59 111 assinatura.setDocumentoGed(this.documentoGedService.getReference(assinatura.getDocumentoGed().getId()));
60   - assinatura.setUsuario((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal());
  112 + assinatura.setUsuario(usuario);
  113 + assinatura.setPessoa(this.pessoaService.getReference(assinatura.getPessoa().getId()));
61 114 assinatura.setTipoAssinatura(dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA));
62 115 assinatura.setFuncao(funcaoService.getReference(assinatura.getFuncao().getId()));
63   - historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura);
64   - return super.save(assinatura);
  116 + }
  117 +
  118 + /**
  119 + * Método responsável por validar senha para assinar o documento
  120 + *
  121 + * @author rogerio.cassimiro
  122 + * @param password
  123 + * @param usuario
  124 + */
  125 + private void validarSenha(String password, Usuario usuario) {
  126 +
  127 + if (!UtilString.isNullOrEmpty(ldap) && ldap.equals("false")) {
  128 +
  129 + if (UtilString.isNullOrEmpty(password))
  130 + throw new BusinessException("ECM.VALIDACAO.SENHA_ASSINATURA", CodigoErro.REGRA_NEGOCIO.getValue(), "");
  131 +
  132 + if (!UtilObjeto.isReferencia(this.usuarioService.loadUserByUsernamePasswordMobile(usuario.getUsername(), password)))
  133 + throw new BusinessException("ECM.VALIDACAO.SENHA_ASSINATURA_INVALIDA", CodigoErro.REGRA_NEGOCIO.getValue(), "");
  134 +
  135 + } else {
  136 + // TODO LDAP validação
  137 + }
65 138 }
66 139  
67 140 /**
68 141 * Método responsável por validar se o usuário já teve assinatura anterior para o documento informado
  142 + *
69 143 * @author rogerio.cassimiro
70 144 * @return {@link Boolean}
71 145 */
72 146 @Override
73 147 public Boolean validarAssinaturaPorUsuario(Long idDocumento) {
74   - return this.assinaturaDao.validarAssinaturaPorUsuario(idDocumento, ((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId());
  148 +
  149 + return this.assinaturaDao.validarAssinaturaPorUsuario(idDocumento, ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId());
75 150 }
  151 +
  152 + @Override
  153 + public Assinatura getReference(Long id) {
  154 +
  155 + Assinatura assinatura = (Assinatura) this.assinaturaDao.getReference(id);
  156 + assinatura.getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getConteudoTarja().getConteudoCriptografado()));
  157 + if (UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())) {
  158 + assinatura.getDocumentoGed().getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado()));
  159 + }
  160 + return assinatura;
  161 + }
  162 +
76 163 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaUtilServiceImpl.java 0 → 100644
... ... @@ -0,0 +1,276 @@
  1 +package br.com.centralit.api.service.impl;
  2 +
  3 +import java.io.DataInputStream;
  4 +import java.io.File;
  5 +import java.io.FileInputStream;
  6 +import java.security.InvalidKeyException;
  7 +import java.security.KeyFactory;
  8 +import java.security.MessageDigest;
  9 +import java.security.NoSuchAlgorithmException;
  10 +import java.security.PrivateKey;
  11 +import java.security.PublicKey;
  12 +import java.security.Signature;
  13 +import java.security.spec.PKCS8EncodedKeySpec;
  14 +import java.security.spec.X509EncodedKeySpec;
  15 +
  16 +import org.springframework.beans.factory.annotation.Value;
  17 +import org.springframework.stereotype.Service;
  18 +
  19 +import br.com.centralit.api.service.AssinaturaUtilService;
  20 +
  21 +/**
  22 + * <p>
  23 + * <img src="http://centralit.com.br/images/logo_central.png">
  24 + * </p>
  25 + *
  26 + * <p>
  27 + * <b>Company: </b> Central IT - Governança Corporativa -
  28 + * </p>
  29 + *
  30 + * <p>
  31 + * <b>Title: </b>AssinaturaUtilServiceImpl
  32 + * </p>
  33 + *
  34 + * <p>
  35 + * <b>Description: </b> Classe responsável por assinar e validar autenticidade do documento.
  36 + * </p>
  37 + *
  38 + * <p>
  39 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  40 + * </p>
  41 + *
  42 + * <p>
  43 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  44 + * </p>
  45 + *
  46 + * @since 30/04/2016 - 13:47:59
  47 + *
  48 + * @version 1.0.0
  49 + *
  50 + * @author rogerio.costa
  51 + *
  52 + */
  53 +@Service("assinaturaUtilService")
  54 +public class AssinaturaUtilServiceImpl implements AssinaturaUtilService {
  55 +
  56 + /** Atributo publicKeyFile. */
  57 + @Value("${ecm.signature.publicKeyFile}")
  58 + private File publicKeyFile;
  59 +
  60 + /** Atributo privateKeyFile. */
  61 + @Value("${ecm.signature.privateKeyFile}")
  62 + private File privateKeyFile;
  63 +
  64 + /**
  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 + *
  73 + * Método responsável por assinar o documento
  74 + *
  75 + * @author rogerio.costa
  76 + *
  77 + * @param mensagem
  78 + * @return byte[]
  79 + * @throws InvalidKeyException
  80 + * @throws Exception
  81 + */
  82 + public byte[] geraAssinatura(byte[] conteudo) throws Exception {
  83 +
  84 + Signature sig = Signature.getInstance("SHA1withRSA");
  85 +
  86 + // Inicializando Obj Signature com a Chave Privada
  87 + sig.initSign(this.getPrivateKey());
  88 +
  89 + // Gerar assinatura
  90 + sig.update(this.gerarHash(conteudo));
  91 +
  92 + byte[] assinatura = sig.sign();
  93 +
  94 + return assinatura;
  95 + }
  96 +
  97 + /**
  98 + * <p>
  99 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  100 + * </p>
  101 + *
  102 + * <p>
  103 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  104 + * </p>
  105 + *
  106 + * Método responsável por
  107 + *
  108 + * @author rogerio.costa
  109 + *
  110 + * @param conteudo
  111 + * @param assinatura
  112 + * @throws Exception
  113 + */
  114 + public Boolean validarAutenticidade(byte[] conteudo, byte[] assinatura) throws Exception {
  115 +
  116 + Signature clientSig = Signature.getInstance("SHA1withRSA");
  117 +
  118 + clientSig.initVerify(getPublicKey());
  119 +
  120 + clientSig.update(this.gerarHash(conteudo));
  121 +
  122 + return clientSig.verify(assinatura);
  123 +
  124 + }
  125 +
  126 + /**
  127 + * <p>
  128 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  129 + * </p>
  130 + *
  131 + * <p>
  132 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  133 + * </p>
  134 + *
  135 + * Método responsável por obter a chave privada
  136 + *
  137 + * @author rogerio.costa
  138 + *
  139 + * @return PrivateKey
  140 + *
  141 + * @throws Exception
  142 + */
  143 + public PrivateKey getPrivateKey() throws Exception {
  144 +
  145 + FileInputStream fis = new FileInputStream(this.privateKeyFile);
  146 +
  147 + DataInputStream dataInputStream = new DataInputStream(fis);
  148 +
  149 + byte[] keyBytes = new byte[(int) this.privateKeyFile.length()];
  150 +
  151 + dataInputStream.readFully(keyBytes);
  152 +
  153 + dataInputStream.close();
  154 +
  155 + PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
  156 +
  157 + KeyFactory keyFactory = KeyFactory.getInstance("RSA");
  158 +
  159 + return keyFactory.generatePrivate(spec);
  160 +
  161 + }
  162 +
  163 + /**
  164 + * <p>
  165 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  166 + * </p>
  167 + *
  168 + * <p>
  169 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  170 + * </p>
  171 + *
  172 + * Método responsável por obter a chace pública
  173 + *
  174 + * @author rogerio.costa
  175 + *
  176 + * @return
  177 + * @throws Exception
  178 + */
  179 + public PublicKey getPublicKey() throws Exception {
  180 +
  181 + FileInputStream fis = new FileInputStream(this.publicKeyFile);
  182 +
  183 + DataInputStream dataInputStream = new DataInputStream(fis);
  184 +
  185 + byte[] keyBytes = new byte[(int) this.publicKeyFile.length()];
  186 +
  187 + dataInputStream.readFully(keyBytes);
  188 +
  189 + dataInputStream.close();
  190 +
  191 + X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
  192 +
  193 + KeyFactory keyFactory = KeyFactory.getInstance("RSA");
  194 +
  195 + return keyFactory.generatePublic(spec);
  196 + }
  197 +
  198 + /**
  199 + * <p>
  200 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  201 + * </p>
  202 + *
  203 + * <p>
  204 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  205 + * </p>
  206 + *
  207 + * Método responsável por gerar o hash do documento
  208 + *
  209 + * @author rogerio.costa
  210 + *
  211 + * @param doc
  212 + * @return
  213 + * @throws NoSuchAlgorithmException
  214 + */
  215 + public byte[] gerarHash(byte[] doc) throws NoSuchAlgorithmException {
  216 +
  217 + MessageDigest md = MessageDigest.getInstance("SHA-1");
  218 +
  219 + md.update(doc);
  220 +
  221 + return md.digest();
  222 + }
  223 +
  224 + /**
  225 + * <p>
  226 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  227 + * </p>
  228 + *
  229 + * <p>
  230 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  231 + * </p>
  232 + *
  233 + * Método responsável por por gerar o hash do documento
  234 + *
  235 + * @author rogerio.costa
  236 + *
  237 + * @param doc
  238 + * @return
  239 + * @throws NoSuchAlgorithmException
  240 + */
  241 + public String gerarHash(String doc) throws NoSuchAlgorithmException {
  242 +
  243 + MessageDigest digest = MessageDigest.getInstance("SHA-1");
  244 +
  245 + digest.update(doc.getBytes());
  246 +
  247 + return convertByteArrayToHexString(digest.digest());
  248 + }
  249 +
  250 + /**
  251 + * <p>
  252 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  253 + * </p>
  254 + *
  255 + * <p>
  256 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  257 + * </p>
  258 + *
  259 + * Método responsável por converter byte para String
  260 + *
  261 + * @author rogerio.costa
  262 + *
  263 + * @param arrayBytes
  264 + *
  265 + * @return String
  266 + */
  267 + private static String convertByteArrayToHexString(byte[] arrayBytes) {
  268 +
  269 + StringBuffer stringBuffer = new StringBuffer();
  270 + for (int i = 0; i < arrayBytes.length; i++) {
  271 + stringBuffer.append(Integer.toString(( arrayBytes[i] & 0xff ) + 0x100, 16).substring(1));
  272 + }
  273 + return stringBuffer.toString();
  274 + }
  275 +
  276 +}
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/DocumentoGedServiceImpl.java
... ... @@ -22,6 +22,7 @@ import org.springframework.web.multipart.MultipartFile;
22 22  
23 23 import br.com.centralit.api.dao.DocumentoGedDao;
24 24 import br.com.centralit.api.model.AnexoGed;
  25 +import br.com.centralit.api.model.Assinatura;
25 26 import br.com.centralit.api.model.DocumentoGed;
26 27 import br.com.centralit.api.model.InteressadoDocumento;
27 28 import br.com.centralit.api.model.Processo;
... ... @@ -243,7 +244,7 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
243 244 // Verifica se o documento é sigiloso
244 245 if (!UtilObjeto.isReferencia(entity.getSigilo())) {
245 246  
246   - this.solrService.addDocumento(entity);
  247 + //this.solrService.addDocumento(entity);
247 248 }
248 249  
249 250 } catch (Exception e) {
... ... @@ -1092,5 +1093,32 @@ public class DocumentoGedServiceImpl extends GenericServiceImpl&lt;DocumentoGed, Lo
1092 1093  
1093 1094 return this.documentoGedDao.findPorPlanoClassificacao(idPlanoClassificacao);
1094 1095 }
  1096 +
  1097 + /**
  1098 + * Método responsável por montar as três primeiras assinaturas por documento para apresentação no tooltip da tela de execução de tarefa
  1099 + * @author rogerio.cassimiro
  1100 + * @param documentos
  1101 + */
  1102 + @Override
  1103 + public void montarTresAssinantesPorDocumento(Collection<DocumentoGed> documentos) {
  1104 +
  1105 + if(!UtilColecao.isVazio(documentos)){
  1106 + for (DocumentoGed documentoGed : documentos) {
  1107 + if(!UtilColecao.isVazio(documentoGed.getAssinaturas())){
  1108 + int maxAssinatura = 0;
  1109 + StringBuilder tresAssinaturas = new StringBuilder("Assinador por: ");
  1110 + for (Assinatura assinatura : documentoGed.getAssinaturas()) {
  1111 + if(++maxAssinatura < 4)
  1112 + tresAssinaturas.append(UtilObjeto.isReferencia(assinatura.getPessoa()) ? assinatura.getPessoa().getNome() : "").append(" / ").append(assinatura.getFuncao().getNome()).append(". ");
  1113 + else {
  1114 + tresAssinaturas.append("...");
  1115 + break;
  1116 + }
  1117 + }
  1118 + documentoGed.setTresAssinaturas(tresAssinaturas.toString());
  1119 + }
  1120 + }
  1121 + }
  1122 + }
1095 1123  
1096 1124 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/HistoricoAlteracaoProcessoServiceImpl.java
... ... @@ -235,7 +235,7 @@ public class HistoricoAlteracaoProcessoServiceImpl extends GenericServiceImpl&lt;Hi
235 235 mapaAtributos.put("tipo_documento", null);
236 236 mapaAtributos.put("numero_documento", null);
237 237 HistoricoAlteracaoProcesso hap = new HistoricoAlteracaoProcesso(assinatura.getDocumentoGed().getProcesso(), Calendar.getInstance(),
238   - usuario.getUnidade().getNome(), usuario.getUsername(), assinatura.getIdTask(), AcaoHistoricoAlteracaoProcesso.ASSINAR_DOCUMENTO_DESCRICAO,
  238 + UtilObjeto.isReferencia(usuario.getUnidade()) ? usuario.getUnidade().getNome() : null, usuario.getUsername(), assinatura.getIdTask(), AcaoHistoricoAlteracaoProcesso.ASSINAR_DOCUMENTO_DESCRICAO,
239 239 AcaoHistoricoAlteracaoProcesso.ASSINAR_DOCUMENTO_CHAVE, assinatura.getDocumentoGed(), mapaAtributos);
240 240 hap.setAutor(usuario);
241 241 this.saveWithParams(hap);
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/ProcessoServiceImpl.java
... ... @@ -786,6 +786,8 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
786 786 Processo processo = super.getReference(id);
787 787  
788 788 processo.setDocumentos(this.documentoGedService.findByIdProcessoUltimaVersao(id));
  789 +
  790 + this.documentoGedService.montarTresAssinantesPorDocumento(processo.getDocumentos());
789 791  
790 792 return processo;
791 793 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java
1 1 package br.com.centralit.api.service.impl;
2 2  
3 3 import java.io.IOException;
  4 +import java.security.Key;
  5 +
  6 +import javax.crypto.Cipher;
  7 +import javax.crypto.spec.SecretKeySpec;
4 8  
5 9 import org.apache.log4j.Logger;
6 10 import org.springframework.beans.factory.annotation.Autowired;
7 11 import org.springframework.beans.factory.annotation.Qualifier;
  12 +import org.springframework.beans.factory.annotation.Value;
8 13 import org.springframework.stereotype.Service;
9 14 import org.springframework.validation.Validator;
10 15 import org.springframework.web.multipart.MultipartFile;
11 16  
12 17 import br.com.centralit.api.dao.TarjaAssinaturaDao;
  18 +import br.com.centralit.api.model.Assinatura;
  19 +import br.com.centralit.api.model.ConteudoTarja;
13 20 import br.com.centralit.api.model.TarjaAssinatura;
14 21 import br.com.centralit.api.service.AnexoImagemService;
  22 +import br.com.centralit.api.service.AssinaturaUtilService;
  23 +import br.com.centralit.api.service.DominioService;
15 24 import br.com.centralit.api.service.OrganizacaoService;
16 25 import br.com.centralit.api.service.TarjaAssinaturaService;
  26 +import br.com.centralit.api.util.UtilBase64;
17 27 import br.com.centralit.framework.model.AnexoImagem;
  28 +import br.com.centralit.framework.model.Dominio;
18 29 import br.com.centralit.framework.model.Organizacao;
19 30 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
  31 +import br.com.centralit.framework.util.UtilDate;
  32 +import br.com.centralit.framework.util.UtilObjeto;
  33 +
  34 +import com.ibm.icu.util.Calendar;
  35 +import com.lowagie.text.DocumentException;
20 36  
21 37 /**
22   - * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
23   - *
24   - * <p><b>Company: </b> Central IT - Governan&ccedil;a Corporativa - </p>
25   - *
26   - * <p><b>Description: </b></p>
  38 + * <p>
  39 + * <img src="http://centralit.com.br/images/logo_central.png">
  40 + * </p>
  41 + *
  42 + * <p>
  43 + * <b>Company: </b> Central IT - Governan&ccedil;a Corporativa -
  44 + * </p>
  45 + *
  46 + * <p>
  47 + * <b>Description: </b>
  48 + * </p>
27 49 * Classe de servi&ccedil;os para a entidade TarjaAssinatura, a qual mant&eacute;m as regras de neg&oacute;cio.
28   - *
  50 + *
29 51 * @since 13 de abr de 2016 - 13:40:36
30 52 * @version 1.0.0
31 53 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
32   - *
  54 + *
33 55 */
  56 +
34 57 @Service("tarjaAssinaturaService")
35 58 public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatura, Long> implements TarjaAssinaturaService {
36 59  
... ... @@ -44,37 +67,51 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
44 67  
45 68 private TarjaAssinaturaDao tarjaAssinaturaDao;
46 69  
  70 + /** Atributo assinaturaUtilService. */
  71 + @Autowired
  72 + private AssinaturaUtilService assinaturaUtilService;
  73 +
  74 + @Autowired
  75 + private DominioService dominioService;
  76 +
  77 + @Value("${ecm.doc.key.decrypted.document}")
  78 + public String keyDocument;
  79 +
47 80 @Autowired
48   - public TarjaAssinaturaServiceImpl (TarjaAssinaturaDao tarjaAssinaturaDao, @Qualifier("tarjaAssinaturaValidator") Validator validator) {
  81 + public TarjaAssinaturaServiceImpl( TarjaAssinaturaDao tarjaAssinaturaDao, @Qualifier("tarjaAssinaturaValidator") Validator validator ) {
  82 +
49 83 this.dao = tarjaAssinaturaDao;
50 84 this.tarjaAssinaturaDao = tarjaAssinaturaDao;
51 85 this.validator = validator;
52 86 }
53 87  
54   - public TarjaAssinatura save (TarjaAssinatura tarjaAssinatura){
  88 + public TarjaAssinatura save(TarjaAssinatura tarjaAssinatura) {
  89 +
55 90 return this.merge(tarjaAssinatura);
56 91 }
57 92  
58 93 @Override
59 94 public TarjaAssinatura merge(TarjaAssinatura tarjaAssinatura) {
  95 +
60 96 this.validarEntidade(tarjaAssinatura, this.validator);
61 97 return super.merge(tarjaAssinatura);
62 98 }
63 99  
64 100 @Override
65   - public TarjaAssinatura removeImagem (TarjaAssinatura tarjaAssinatura) {
66   - if(tarjaAssinatura.getAnexoImagem() != null) {
  101 + public TarjaAssinatura removeImagem(TarjaAssinatura tarjaAssinatura) {
  102 +
  103 + if (tarjaAssinatura.getAnexoImagem() != null) {
67 104 anexoImagemService.removeById(tarjaAssinatura.getAnexoImagem().getId());
68 105 tarjaAssinatura.setAnexoImagem(null);
69 106 }
70 107 return this.merge(tarjaAssinatura);
71 108 }
72 109  
73   - /**{@inheritDoc}*/
  110 + /** {@inheritDoc} */
74 111 @Override
75 112 public void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idTarjaAssinatura) {
76 113  
77   - AnexoImagem anexoImagem = new AnexoImagem ();
  114 + AnexoImagem anexoImagem = new AnexoImagem();
78 115 try {
79 116 Organizacao organizacao = (Organizacao) this.organizacaoService.find(idOrganizacao);
80 117 anexoImagem.setAnexo(file.getBytes());
... ... @@ -86,8 +123,190 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
86 123 tarjaAssinatura.setAnexoImagem(anexoImagemSaved);
87 124 this.merge(tarjaAssinatura);
88 125 } catch (IOException ioe) {
89   - LOG.error("N\u00e3o consegui anexar a imagem \u00e0 entidade TarjaAssinatura. Verifique a exce\u00e7\u00e3o para "
90   - + "identificar a causa: ", ioe.getCause());
  126 + LOG.error("N\u00e3o consegui anexar a imagem \u00e0 entidade TarjaAssinatura. Verifique a exce\u00e7\u00e3o para " + "identificar a causa: ", ioe.getCause());
  127 + }
  128 + }
  129 +
  130 + /**
  131 + * Método responsável por obter tarja assinatura interna
  132 + *
  133 + * @author rogerio.cassimiro
  134 + * @return {@link TarjaAssinatura}
  135 + */
  136 + @Override
  137 + public TarjaAssinatura getTarjaAssinaturaInterna() {
  138 +
  139 + Dominio dominio = dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA);
  140 + return this.tarjaAssinaturaDao.getTarjaAssinaturaInterna(dominio);
  141 + }
  142 +
  143 + /**
  144 + * Método responsável por gerar assinatura interna por usuário e por documento
  145 + *
  146 + * @author rogerio.cassimiro
  147 + * @param assinatura
  148 + * @param formaCriacao
  149 + */
  150 + @Override
  151 + public void gerarAssinaturaInternaUsuario(Assinatura assinatura, Long formaCriacao) {
  152 +
  153 + TarjaAssinatura tarjaAssinatura = (TarjaAssinatura) tarjaAssinaturaDao.getReference(assinatura.getConteudoTarja().getIdTarjaAssinatura());
  154 + String conteudoAssinatura = getConteudoTarja(assinatura, tarjaAssinatura.getConteudo(), tarjaAssinatura);
  155 +
  156 + gerarAssinaturaDocAnexo(assinatura, tarjaAssinatura.getAnexoImagem(), conteudoAssinatura, formaCriacao);
  157 + if (formaCriacao == 1)
  158 + gerarAssinaturaDocOnline(assinatura, tarjaAssinatura.getAnexoImagem(), conteudoAssinatura);
  159 + }
  160 +
  161 + /**
  162 + * Método responsável por montar o conteúdo substituindo as chaves
  163 + *
  164 + * @author rogerio.cassimiro
  165 + * @param assinatura
  166 + * @param conteudoAssinatura
  167 + * @return {@link String}
  168 + */
  169 + private String getConteudoTarja(Assinatura assinatura, String conteudoAssinatura, TarjaAssinatura tarjaAssinatura) {
  170 +
  171 + conteudoAssinatura = conteudoAssinatura.replaceAll(TarjaAssinatura.NOME_ASSINANTE, assinatura.getPessoa().getNome()).replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getFuncao().getNome()).replaceAll(TarjaAssinatura.DATA_ASSINATURA, UtilDate.getDataSemHorasString(Calendar.getInstance().getTime())).replaceAll(TarjaAssinatura.HORA_ASSINATURA, UtilDate.getHoraAtualHHMMSS()).replaceAll(TarjaAssinatura.LOGO, getStringBase64(tarjaAssinatura));
  172 + return conteudoAssinatura;
  173 + }
  174 +
  175 + /**
  176 + * Método responsável por obter string em formato Base64 para apresentação no html
  177 + *
  178 + * @author rogerio.cassimiro
  179 + * @param assinatura
  180 + * @return {@link String}
  181 + */
  182 + private String getStringBase64(TarjaAssinatura tarjaAssinatura) {
  183 +
  184 + StringBuilder imgBase64 = new StringBuilder("");
  185 + if (tarjaAssinatura.getConteudo().contains("@logo@") && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem()) && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem().getAnexo())) {
  186 + imgBase64.append("<img src='data:image/png;base64, ");
  187 + imgBase64.append(UtilBase64.byteToBase64(tarjaAssinatura.getAnexoImagem().getAnexo()));
  188 + imgBase64.append("' height='60' width='60' />");
  189 + }
  190 + return imgBase64.toString();
  191 + }
  192 +
  193 + /**
  194 + * Método responsável por gerar assinatura em documento anexo
  195 + *
  196 + * @author rogerio.cassimiro
  197 + * @param assinatura
  198 + * @param tarjaAssinatura
  199 + * @param conteudoAssinatura
  200 + * @throws DocumentException
  201 + * @throws IOException
  202 + */
  203 +
  204 + private void gerarAssinaturaDocAnexo(Assinatura assinatura, AnexoImagem anexoImagem, String conteudoAssinatura, Long formaCriacao) {
  205 +
  206 + if(formaCriacao == 1){
  207 + assinatura.getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoAssinatura));
  208 + assinatura.getConteudoTarja().setAnexoImagem(anexoImagem);
  209 +
  210 + } else if(formaCriacao == 2) {
  211 + try {
  212 + conteudoAssinatura = conteudoAssinatura.replaceAll(TarjaAssinatura.CODIGO_ASSINATURA, "<br /><b>".concat(this.assinaturaUtilService.gerarHash(conteudoAssinatura)).concat("</b>"));
  213 + assinatura.getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoAssinatura));
  214 + assinatura.getConteudoTarja().setAnexoImagem(anexoImagem);
  215 + } catch (Exception e) {
  216 + e.printStackTrace();
  217 + }
  218 +
  219 + StringBuilder conteudoOriginalDocAnexo = new StringBuilder();
  220 + if (UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())) {
  221 + conteudoOriginalDocAnexo.append(decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado()));
  222 + } else {
  223 + assinatura.getDocumentoGed().setConteudoTarja(new ConteudoTarja());
  224 + }
  225 + conteudoOriginalDocAnexo.append(conteudoAssinatura);
  226 +
  227 + assinatura.getDocumentoGed().getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoOriginalDocAnexo.toString()));
  228 + }
  229 + }
  230 +
  231 + /**
  232 + * Método responsável por gerar assinatura em documento online
  233 + *
  234 + * @author rogerio.cassimiro
  235 + * @param assinatura
  236 + * @param tarjaAssinatura
  237 + * @param conteudoAssinatura
  238 + */
  239 + private void gerarAssinaturaDocOnline(Assinatura assinatura, AnexoImagem anexoImagem, String conteudoAssinatura) {
  240 +
  241 + StringBuilder conteudoOriginalDocOnLine = new StringBuilder();
  242 +
  243 + if (UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())) {
  244 + conteudoOriginalDocOnLine.append(decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado()));
  245 + } else {
  246 + assinatura.getDocumentoGed().setConteudoTarja(new ConteudoTarja());
  247 + conteudoOriginalDocOnLine.append(decrypted(assinatura.getDocumentoGed().getConteudoCriptografado()));
  248 + }
  249 + conteudoOriginalDocOnLine.append("<br />").append(conteudoAssinatura);
  250 + try {
  251 + // Assinar documento
  252 + assinatura.getDocumentoGed().setConteudoAssinado(this.assinaturaUtilService.geraAssinatura(conteudoOriginalDocOnLine.toString().getBytes()));
  253 +
  254 + String conteudo = conteudoOriginalDocOnLine.toString().replaceAll(TarjaAssinatura.CODIGO_ASSINATURA, "<br /><b>".concat(this.assinaturaUtilService.gerarHash(conteudoOriginalDocOnLine.toString()).concat("</b>")));
  255 +
  256 + assinatura.getDocumentoGed().getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudo));
  257 +
  258 + } catch (Exception e) {
  259 + e.printStackTrace();
  260 + }
  261 + }
  262 +
  263 + /**
  264 + * Método responsável por criptografar o texto através da chave
  265 + *
  266 + * @author rogerio.costa
  267 + * @param text
  268 + * @return {@link Byte}
  269 + */
  270 + @Override
  271 + public byte[] encrypted(String text) {
  272 +
  273 + try {
  274 + byte[] encrypted = null;
  275 + Key aesKey = new SecretKeySpec(this.keyDocument.getBytes(), "AES");
  276 + Cipher cipher = Cipher.getInstance("AES");
  277 + cipher.init(Cipher.ENCRYPT_MODE, aesKey);
  278 + encrypted = cipher.doFinal(text.getBytes());
  279 +
  280 + return encrypted;
  281 +
  282 + } catch (Exception e) {
  283 + e.printStackTrace();
  284 + }
  285 + return null;
  286 + }
  287 +
  288 + /**
  289 + * Método responsável por descriptografar texto
  290 + *
  291 + * @author rogerio.cassimiro
  292 + * @param text
  293 + * @return {@link String}
  294 + */
  295 + @Override
  296 + public String decrypted(byte[] text) {
  297 +
  298 + try {
  299 + Cipher cipher = Cipher.getInstance("AES");
  300 + Key aesKey = new SecretKeySpec(this.keyDocument.getBytes(), "AES");
  301 +
  302 + cipher.init(Cipher.DECRYPT_MODE, aesKey);
  303 + String decrypted = new String(cipher.doFinal(text));
  304 +
  305 + return decrypted;
  306 +
  307 + } catch (Exception e) {
  308 + e.printStackTrace();
91 309 }
  310 + return null;
92 311 }
93 312 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/util/UtilBase64.java 0 → 100644
... ... @@ -0,0 +1,32 @@
  1 +package br.com.centralit.api.util;
  2 +
  3 +import org.apache.commons.codec.binary.Base64;
  4 +
  5 +/**
  6 + * <p>
  7 + * <b>Title: UtilBase64</b>
  8 + * </p>
  9 + * <p>
  10 + * <b>Description: </b>
  11 + * </p>
  12 + *
  13 + * @since 29/04/2016 - 14:30:14
  14 + * @author rogerio.cassimiro
  15 + *
  16 + */
  17 +@SuppressWarnings({"static-access", "unused"})
  18 +public class UtilBase64 {
  19 +
  20 + public static byte[] base64ToByte(String data) throws Exception {
  21 +
  22 + Base64 base64 = new Base64();
  23 + return Base64.decodeBase64(data);
  24 + }
  25 +
  26 + public static String byteToBase64(byte[] data) {
  27 +
  28 + Base64 base64 = new Base64();
  29 + return base64.encodeBase64String(data);
  30 + }
  31 +
  32 +}
0 33 \ No newline at end of file
... ...
cit-ecm-api/src/main/resources/keys/private_key.der 0 → 100644
No preview for this file type
cit-ecm-api/src/main/resources/keys/private_key.pem 0 → 100644
... ... @@ -0,0 +1,27 @@
  1 +-----BEGIN RSA PRIVATE KEY-----
  2 +MIIEowIBAAKCAQEAuz6F91j0K2cogHAWhvTON6TKqHwxn97zA4U2TrjuczwQxAnz
  3 +Z/EzxbNKwxpMktuoVMTRYrqRAPWEK4mEMC4yQnH0O5NmwVtqf1/URd3CuNwszWRC
  4 +EXY1H1e4K26aLFQHaudBkVxkAPdzozX1guJWrG7y6pKn2RNt17h0DLJGvf21RFKl
  5 +7M06UewXartSF0VtxiOXA5RktmNh/E7zwaY/y7CBEoiYR/Vhg+xv1a9x1TwslbR5
  6 +/KpVDiarLXJ4ssU0Zx/dT7l9wdx8wNox2SpkrC6jHyum8v++3vV1qMIbQ91nkyaD
  7 +qQ4QRhGxd35iqSIolbkP3eq63zX8kHw/RxwP6wIDAQABAoIBAHkIDxw1GY88nQd4
  8 +bHdLokiBcqW5sXH/cOGjp9j23NsLxmKRdA6J8Mcn/3lhdIGxDnvMxPOmWLhf+tER
  9 +kKp8Eey1MAOaYd82Mf6neNS4ZXeMikExPyt+VxQtZVRdp7Zjkm/dj5pgOBwP12V2
  10 +KX4yw4euJ8LMjUZZsrSv/AOA8Q045tVpcN7u53gMJ6PmmSA1CGYM0UXBZ7tuLzIj
  11 +YiSwSL6ANtAYjbRy5ZZlYDAWUg7c+XG1+i85AsCiblJUQFvGje1eqPzgK+qAB/TO
  12 +AfJLYCZewOL8ZA3cY8zPZHl1qA48Pj6pJxYx+FwutILO7ufxzJBnI1BT4yt1QYAT
  13 +4ckes/ECgYEA89PuCxHAC32AgTBSwxRKedOQQuqv55idNluEbKn13wnHni5gBl2u
  14 +d4z1qzUVjLaWUzLiybijmdsW0sjsCDOd3QlBFdg3R2x5qJbI2FLv2PDNuQCohqRr
  15 +N0pwscBpJCgboI+nADdxTu3RJZplIro6jbrhneV0HkWA1T7KTkY/XtUCgYEAxJd3
  16 +YqPXte/SertCUs4Nq8L45+jF2mGaWpHAlDfDcQVYcnA7ALdgwRS9H/2v0ZTC1Iwf
  17 +GhkmIbGGnJKt5aYpqeR1stzMBL1HvZgaCQQAu/59BQl2VSWRlSVUWhMk8uD91NKm
  18 +Hl63DTvUrxkieSsswnj371U7BGbMLBXMkYDgk78CgYBMnoIk9FT2x19EOV0odA3b
  19 +LoIcpQbVrf1pAWUhiF780WPq7wO5vGKAqsjgHfRBnXarekgNv3mZdWE8p2qUQTQQ
  20 +K0JKjQEB7rJkKc2/PICmGTVsNyq99JjEbR3wnVfsxrW3xKxjwwhWFyErwdKaEQ8p
  21 +TlprdZkBkjGj0PFdm3F6aQKBgQCgrFaztMspdI+nJYMoYCZGOnzqNZH3UQwxd6xY
  22 +t1ax+bd3GIjwpe+a/tMv4UwgU6AEzVziHKnQoeIt96fO6MZmh0U24USRnw2SRE0L
  23 +D012WKFfS4N+Rc09g5v0Xm81XnO2zE9exPSBCWRjk3xcYdAcRXgGELfCei3m3g4q
  24 +4ZUqywKBgCk/PdKa3xNQRYX5V29Jlgn+NiJgcgKPmW56QFT55H6AOaJM4h0Q6P5F
  25 +UVV6se5HRIne+5rf2Lh1nyldW4qp9Ujeo7Ku8uqivgqXxTsb/BdNvhSU9xR8G/0w
  26 +8HgFEMKqZ1njJhLUTa4547bSwf3VAwmoWcsaEl/b5dyGN/f4lBxP
  27 +-----END RSA PRIVATE KEY-----
... ...
cit-ecm-api/src/main/resources/keys/public_key.der 0 → 100644
No preview for this file type
cit-ecm-api/src/main/resources/scripts/2.0.0-alpha.1/01-cit-ecm-2.0.0-alpha1-postgres.sql 0 → 100644
... ... @@ -0,0 +1,69 @@
  1 +-- CIRO - 18/04/2016 - INICIO
  2 +
  3 +ALTER TABLE anexoimagem DROP CONSTRAINT fk_jrmn20bykidk1pkxu492d4bmx;
  4 +ALTER TABLE tarjaassinatura DROP CONSTRAINT fk_9ybqh1qpbp9udjoi9y2jh6sf9;
  5 +ALTER TABLE configuracao DROP CONSTRAINT fk_jfyy1uygxmqqng72p83k88q4e;
  6 +
  7 +DROP TABLE anexoimagem;
  8 +
  9 +CREATE TABLE anexoimagem
  10 +(
  11 + id bigint NOT NULL,
  12 + databloqueio date,
  13 + datainativo date,
  14 + datacriacao timestamp without time zone NOT NULL,
  15 + dataedicao timestamp without time zone NOT NULL,
  16 + version bigint,
  17 + anexo bytea,
  18 + descricao character varying(300),
  19 + inativador_id bigint,
  20 + autor_id bigint,
  21 + editor_id bigint,
  22 + organizacao_id bigint,
  23 + CONSTRAINT anexoimagem_pkey PRIMARY KEY (id),
  24 + CONSTRAINT fk_5hyw0geaeeh6hnssbssi7htvb FOREIGN KEY (editor_id)
  25 + REFERENCES seguranca_usuario (id) MATCH SIMPLE
  26 + ON UPDATE NO ACTION ON DELETE NO ACTION,
  27 + CONSTRAINT fk_76rf21tx2q8px4fjbsavu4kva FOREIGN KEY (inativador_id)
  28 + REFERENCES seguranca_usuario (id) MATCH SIMPLE
  29 + ON UPDATE NO ACTION ON DELETE NO ACTION,
  30 + CONSTRAINT fk_cx5i3h3y5675r622to4rddra3 FOREIGN KEY (autor_id)
  31 + REFERENCES seguranca_usuario (id) MATCH SIMPLE
  32 + ON UPDATE NO ACTION ON DELETE NO ACTION,
  33 + CONSTRAINT fk_few35t9tvbqe49wakqts3mt4l FOREIGN KEY (organizacao_id)
  34 + REFERENCES organizacao (id) MATCH SIMPLE
  35 + ON UPDATE NO ACTION ON DELETE NO ACTION
  36 +);
  37 +
  38 +INSERT INTO tarjaassinatura(id, databloqueio, datainativo, datacriacao, dataedicao, version, conteudo, descricao, inativador_id, autor_id, editor_id, anexoimagem_id, tipoassinatura_id)
  39 +VALUES (NEXTVAL('hibernate_sequence'), NULL, NULL, LOCALTIMESTAMP, LOCALTIMESTAMP, 0, '', '', null, (select id from seguranca_usuario where username = 'admin'), null, null, (select id from dominio where chave = 'tipoAssinatura' and codigo = 1));
  40 +INSERT INTO tarjaassinatura(id, databloqueio, datainativo, datacriacao, dataedicao, version, conteudo, descricao, inativador_id, autor_id, editor_id, anexoimagem_id, tipoassinatura_id)
  41 +VALUES (NEXTVAL('hibernate_sequence'), NULL, NULL, LOCALTIMESTAMP, LOCALTIMESTAMP, 0, '', '', null, (select id from seguranca_usuario where username = 'admin'), null, null, (select id from dominio where chave = 'tipoAssinatura' and codigo = 2));
  42 +
  43 +update dominio set chave='estadoDocumentoGed' where chave = 'statusDocumentoGed';
  44 +-- CIRO - 18/04/2016 - FIM
  45 +
  46 +-- 27/04/2016 ROGERIO CASSIMIRO TARJA PARA DOC E ASSINATURA
  47 +CREATE TABLE public.conteudotarja
  48 +(
  49 + id bigint NOT NULL,
  50 + conteudocriptografado bytea,
  51 + CONSTRAINT conteudotarja_pkey PRIMARY KEY (id)
  52 +)
  53 +WITH (
  54 + OIDS=FALSE
  55 +);
  56 +ALTER TABLE public.conteudotarja
  57 + OWNER TO postgres;
  58 +
  59 +ALTER TABLE assinatura ADD COLUMN conteudotarja_id bigint,
  60 + ADD CONSTRAINT fk_conteudo_tarja FOREIGN KEY (conteudotarja_id)
  61 + REFERENCES conteudotarja (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION;
  62 +
  63 +ALTER TABLE documentoged
  64 + ADD COLUMN conteudotarja_id bigint,
  65 + ADD CONSTRAINT fk_conteudo_tarja FOREIGN KEY (conteudotarja_id)
  66 + REFERENCES conteudotarja (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION;
  67 + -- 27/04/2016 ROGERIO CASSIMIRO
  68 +
  69 +
... ...
cit-ecm-api/src/main/resources/scripts/v1.0.0-alpha9/01-cit-ecm-1.0.0-ALFA-3-postgres.sql
... ... @@ -1,44 +0,0 @@
1   --- CIRO - 18/04/2016 - INICIO
2   -
3   -ALTER TABLE anexoimagem DROP CONSTRAINT fk_jrmn20bykidk1pkxu492d4bmx;
4   -DROP TABLE anexoimagem;
5   -
6   -CREATE TABLE anexoimagem
7   -(
8   - id bigint NOT NULL,
9   - databloqueio date,
10   - datainativo date,
11   - datacriacao timestamp without time zone NOT NULL,
12   - dataedicao timestamp without time zone NOT NULL,
13   - version bigint,
14   - anexo bytea,
15   - descricao character varying(300),
16   - inativador_id bigint,
17   - autor_id bigint,
18   - editor_id bigint,
19   - organizacao_id bigint,
20   - CONSTRAINT anexoimagem_pkey PRIMARY KEY (id),
21   - CONSTRAINT fk_5hyw0geaeeh6hnssbssi7htvb FOREIGN KEY (editor_id)
22   - REFERENCES seguranca_usuario (id) MATCH SIMPLE
23   - ON UPDATE NO ACTION ON DELETE NO ACTION,
24   - CONSTRAINT fk_76rf21tx2q8px4fjbsavu4kva FOREIGN KEY (inativador_id)
25   - REFERENCES seguranca_usuario (id) MATCH SIMPLE
26   - ON UPDATE NO ACTION ON DELETE NO ACTION,
27   - CONSTRAINT fk_cx5i3h3y5675r622to4rddra3 FOREIGN KEY (autor_id)
28   - REFERENCES seguranca_usuario (id) MATCH SIMPLE
29   - ON UPDATE NO ACTION ON DELETE NO ACTION,
30   - CONSTRAINT fk_few35t9tvbqe49wakqts3mt4l FOREIGN KEY (organizacao_id)
31   - REFERENCES organizacao (id) MATCH SIMPLE
32   - ON UPDATE NO ACTION ON DELETE NO ACTION
33   -);
34   -
35   -INSERT INTO tarjaassinatura(id, databloqueio, datainativo, datacriacao, dataedicao, version, conteudo, descricao, inativador_id, autor_id, editor_id, anexoimagem_id, tipoassinatura_id)
36   -VALUES (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, NULL, LOCALTIMESTAMP, LOCALTIMESTAMP, 0, '', '', null, (select id from seguranca_usuario where username = 'admin'), null, null, (select id from dominio where chave = 'tipoAssinatura' and codigo = 1));
37   -INSERT INTO tarjaassinatura(id, databloqueio, datainativo, datacriacao, dataedicao, version, conteudo, descricao, inativador_id, autor_id, editor_id, anexoimagem_id, tipoassinatura_id)
38   -VALUES (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, NULL, LOCALTIMESTAMP, LOCALTIMESTAMP, 0, '', '', null, (select id from seguranca_usuario where username = 'admin'), null, null, (select id from dominio where chave = 'tipoAssinatura' and codigo = 2));
39   -
40   -update dominio set chave='estadoDocumentoGed' where chave = 'statusDocumentoGed';
41   --- CIRO - 18/04/2016 - FIM
42   -
43   -
44   -
cit-ecm-web/src/main/java/br/com/centralit/controller/AssinaturaController.java
... ... @@ -2,6 +2,7 @@ package br.com.centralit.controller;
2 2  
3 3 import org.springframework.beans.factory.annotation.Autowired;
4 4 import org.springframework.stereotype.Controller;
  5 +import org.springframework.web.bind.annotation.PathVariable;
5 6 import org.springframework.web.bind.annotation.RequestBody;
6 7 import org.springframework.web.bind.annotation.RequestMapping;
7 8 import org.springframework.web.bind.annotation.RequestMethod;
... ... @@ -69,4 +70,14 @@ public class AssinaturaController extends GenericController&lt;Assinatura&gt;{
69 70 return ViewsEcm.DocumentoGedEdit.class;
70 71 }
71 72  
  73 + @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  74 + @ResponseBody
  75 + public ResponseBodyWrapper getObject(@PathVariable("id") Long id) {
  76 + ResultResponseVH<Assinatura> resultResponseVH = new ResultResponseVH<Assinatura>(genericService.getReference(id));
  77 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(resultResponseVH, ViewsEcm.AssinaturaEdit.class);
  78 + return responseBody;
  79 + }
  80 +
  81 +
  82 +
72 83 }
... ...
cit-ecm-web/src/main/java/br/com/centralit/controller/DocumentoGedController.java
1 1 package br.com.centralit.controller;
2 2  
  3 +import java.util.ArrayList;
3 4 import java.util.Collection;
  5 +import java.util.List;
4 6  
5 7 import org.springframework.beans.factory.annotation.Autowired;
6 8 import org.springframework.stereotype.Controller;
  9 +import org.springframework.web.bind.annotation.PathVariable;
7 10 import org.springframework.web.bind.annotation.RequestMapping;
8 11 import org.springframework.web.bind.annotation.RequestMethod;
9 12 import org.springframework.web.bind.annotation.RequestParam;
... ... @@ -192,4 +195,15 @@ public class DocumentoGedController extends GenericController&lt;DocumentoGed&gt; {
192 195  
193 196 return ViewsEcm.DocumentoGedList.class;
194 197 }
  198 +
  199 + @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  200 + @ResponseBody
  201 + public ResponseBodyWrapper getObject(@PathVariable("id") Long id) {
  202 + ResultResponseVH<DocumentoGed> resultResponseVH = new ResultResponseVH<DocumentoGed>(genericService.getReference(id));
  203 + List<DocumentoGed> list = new ArrayList<DocumentoGed>();
  204 + list.add(resultResponseVH.getPayload());
  205 + this.documentoGedService.montarTresAssinantesPorDocumento(list);
  206 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(resultResponseVH, this.getEditView());
  207 + return responseBody;
  208 + }
195 209 }
... ...
cit-ecm-web/src/main/java/br/com/centralit/controller/TarjaAssinaturaController.java
... ... @@ -16,6 +16,7 @@ import br.com.centralit.api.model.TarjaAssinatura;
16 16 import br.com.centralit.api.service.TarjaAssinaturaService;
17 17 import br.com.centralit.framework.controller.GenericController;
18 18 import br.com.centralit.framework.json.ResponseBodyWrapper;
  19 +import br.com.centralit.framework.view.ResultResponseVH;
19 20  
20 21 @Controller
21 22 @RequestMapping("/rest/tarjaAssinatura")
... ... @@ -61,5 +62,13 @@ public class TarjaAssinaturaController extends GenericController&lt;TarjaAssinatura
61 62  
62 63 return responseBody;
63 64 }
  65 +
  66 + @RequestMapping(value = "/getTarjaAssinaturaInterna", method = RequestMethod.GET)
  67 + @ResponseBody
  68 + public ResponseBodyWrapper getTarjaAssinaturaInterna() {
  69 + ResultResponseVH<TarjaAssinatura> resultResponseVH = new ResultResponseVH<TarjaAssinatura>(tarjaAssinaturaService.getTarjaAssinaturaInterna());
  70 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(resultResponseVH, this.getEditView());
  71 + return responseBody;
  72 + }
64 73  
65 74 }
... ...
cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java
... ... @@ -458,6 +458,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
458 458 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ASSINATURA_DO_DOCUMENTO", "Assinatura do Documento", dominio, modulo));
459 459 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DOCUMENTO_SEM_ASSINATURA", "Documento sem assinaturas!", dominio, modulo));
460 460 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DADOS_PROCESSO_ANEXADO", "Dados do Processo Anexado", dominio, modulo));
  461 + internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.VISUALIZAR_ASSINATURAS", "Visualizar Assinaturas", dominio, modulo));
461 462  
462 463 }
463 464  
... ... @@ -493,8 +494,8 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
493 494 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));
494 495 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));
495 496 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));
496   -
497 497 internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.SENHA_ASSINATURA", "Informe sua senha para assinar!", dominio, modulo));
  498 + internacionalizacaoList.add(new Internacionalizacao("ECM.VALIDACAO.SENHA_ASSINATURA_INVALIDA", "Senha do usuário inválida!", dominio, modulo));
498 499 }
499 500  
500 501 /**
... ... @@ -578,5 +579,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
578 579 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_SEM_ASSINATURAS", "Esta versão do Documento não possui assinaturas!", dominio, modulo));
579 580 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_JA_ASSINADO", "Documento já foi assinado por este usuário!", dominio, modulo));
580 581 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.INFORMACAO_RESTRITA", "Informação restrita", dominio, modulo));
  582 + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.CONFIRMAR_ASSINATURA", "Deseja realmente assinar este documento? Após esta ação, não será possível cancelar!", dominio, modulo));
  583 +
581 584 }
582 585 }
... ...
cit-ecm-web/src/main/webapp/assets/css/gerenciarProcesso.css
... ... @@ -212,9 +212,8 @@ background-color: #f2f2f2;
212 212 background-color: rgba(245, 245, 245, 0.61);
213 213 }
214 214  
215   - .versoes {
  215 +.versoes {
216 216 font-size : x-small;
217 217 font-weight : bold;
218 218 text-align : right !important;
219   -}
220   -
  219 +}
221 220 \ No newline at end of file
... ...
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/AssinarDocumentoController.js
1 1 'use strict';
2 2  
3 3  
4   -citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'GerenciarProcessoRepository', 'DocumentoGedRepository', 'HistoricoAlteracaoProcessoRepository', 'PessoaRepository', '$q', 'AssinaturaRepository',
5   - function AssinarDocumentoController($scope, $translate, GerenciarProcessoRepository, DocumentoGedRepository, HistoricoAlteracaoProcessoRepository, PessoaRepository, $q, AssinaturaRepository) {
  4 +citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'GerenciarProcessoRepository', 'DocumentoGedRepository', 'HistoricoAlteracaoProcessoRepository', '$q', 'AssinaturaRepository', 'TarjaAssinaturaRepository', '$timeout',
  5 + function AssinarDocumentoController($scope, $translate, GerenciarProcessoRepository, DocumentoGedRepository, HistoricoAlteracaoProcessoRepository, $q, AssinaturaRepository, TarjaAssinaturaRepository, $timeout) {
6 6  
7 7 /*
8 8 * Abre panel assinar documento
... ... @@ -10,6 +10,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
10 10 $scope.abrirAssinarDocumento = function(documento) {
11 11 $scope.documentoSelecionado = null;
12 12 $scope.exibirDocJaAssinado = false;
  13 + $scope.autenticacao = null;
13 14 DocumentoGedRepository.get(documento.id).then(function(result) {
14 15 $scope.documentoSelecionado = result.originalElement;
15 16 if(documento.formaCriacao.codigo === 1){
... ... @@ -26,7 +27,8 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
26 27 _exibirNenhumaAssinatura();
27 28 _validarAssinaturaPorUsuario(documento.id).then(function(exibirIncluirAssinatura){
28 29 $scope.exibirIncluirAssinatura = !(exibirIncluirAssinatura == true);
29   - //_obterPermissaoAssinaturaDocumentoExterno();
  30 + $scope.exibirDocJaAssinado = !$scope.exibirIncluirAssinatura;
  31 + _getTarjaAssinaturaInterna();
30 32 });
31 33 });
32 34 }
... ... @@ -38,7 +40,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
38 40 _validarAssinaturaPorUsuario(documento.id).then(function(exibirIncluirAssinatura){
39 41 $scope.exibirIncluirAssinatura = !(exibirIncluirAssinatura == true);
40 42 $scope.exibirDocJaAssinado = !$scope.exibirIncluirAssinatura;
41   - //_obterPermissaoAssinaturaDocumentoExterno();
  43 + _getTarjaAssinaturaInterna();
42 44 });
43 45 });
44 46 };
... ... @@ -73,23 +75,59 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
73 75 $scope.showAlert("error", $translate.instant('ECM.VALIDACAO.SENHA_ASSINATURA'));
74 76 return;
75 77 }
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'));
  78 +
  79 + $scope.$openModalConfirm({
  80 + message: $translate.instant("ECM.MSG.CONFIRMAR_ASSINATURA"),
  81 + callback: function () {
  82 + $scope.setLoadingGet(true);
  83 + AssinaturaRepository.saveAssinaturaInterna(_getAssinatura()).then(function(result){
  84 + _atualizarDocumentoSelecionadoAposAssinar(result.originalElement);
  85 + _resetAssinar();
  86 + _atualizarDocDoProcessoAposAssinar();
  87 + $scope.$modalConfirmInstance.dismiss('cancel');
  88 + $scope.setLoading(false);
  89 + $scope.showAlert("success", $translate.instant('ECM.ASSINADO_SUCESSO'));
  90 + });
  91 + }
88 92 });
  93 +
89 94 };
90 95  
91 96 function _getAssinatura(){
92   - return {documentoGed : { id : $scope.documentoSelecionado.id }, funcao : {id : _getFuncaoChecked()}, idTask : $scope.$parent.task.id };
  97 + return {
  98 + documentoGed : { id : $scope.documentoSelecionado.id },
  99 + funcao : {id : _getFuncaoChecked()},
  100 + idTask : $scope.$parent.task.id,
  101 + password : $scope.autenticacao,
  102 + pessoa : { id : $scope.pessoa.id},
  103 + conteudoTarja : { idTarjaAssinatura : $scope.tarjaAssinatura.id}};
  104 + };
  105 +
  106 + function _atualizarDocumentoSelecionadoAposAssinar(assinatura){
  107 + if($scope.documentoSelecionado.assinaturas)
  108 + $scope.documentoSelecionado.assinaturas.push(assinatura);
  109 + $scope.documentosSelecionados.forEach(function(doc){
  110 + if(doc.id == $scope.documentoSelecionado.id)
  111 + doc.assinaturas = $scope.documentoSelecionado.assinaturas;
  112 + });
  113 + };
  114 +
  115 + function _resetAssinar() {
  116 + $scope.autenticacao = null;
  117 + $scope.exibirIncluirAssinatura = false;
  118 + $scope.nenhumaAssinatura = false;
  119 + };
  120 +
  121 + function _atualizarDocDoProcessoAposAssinar() {
  122 + DocumentoGedRepository.get($scope.documentoSelecionado.id).then(function(result){
  123 + $scope.processo.documentos.forEach(function(doc){
  124 + if(doc.id == result.originalElement.id) {
  125 + doc.assinaturas = result.originalElement.assinaturas;
  126 + doc.tresAssinaturas = result.originalElement.tresAssinaturas;
  127 + doc.estado = result.originalElement.estado;
  128 + }
  129 + });
  130 + });
93 131 };
94 132  
95 133 function _getFuncaoChecked(){
... ... @@ -106,6 +144,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
106 144 $scope.documentoSelecionado = documento;
107 145 $scope.exibirIncluirAssinatura = false;
108 146 $scope.exibirDocJaAssinado = false;
  147 + $scope.setLoadingGet(true);
109 148 _obterAssinaturasDocumento(documento).then(function(documentosSelecionados){
110 149 $scope.documentosSelecionados = documentosSelecionados;
111 150 $scope.documentosSelecionados.forEach(function(doc){
... ... @@ -113,6 +152,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
113 152 $scope.documentoSelecionado = doc;
114 153 });
115 154 _exibirNenhumaAssinatura();
  155 + $scope.setLoading(false);
116 156 if($scope.documentoSelecionado.assinaturas && $scope.documentoSelecionado.assinaturas.length == 0)
117 157 $scope.showAlert("warning", $translate.instant('ECM.MSG.DOCUMENTO_SEM_ASSINATURAS'));
118 158 });
... ... @@ -120,8 +160,54 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
120 160  
121 161 function _exibirNenhumaAssinatura(){
122 162 $scope.nenhumaAssinatura = $scope.documentosSelecionados.some(function(doc){
123   - return doc.assinaturas.length > 0;
  163 + return doc.assinaturas.length == 0;
  164 + });
  165 + };
  166 +
  167 + $scope.visualizarAssinatura = function(docSelecionado, assinatura){
  168 + var valorOriginal = assinatura.isVisualizarAssinatura;
  169 + var idAssinaturaSelecionada = null;
  170 + if(valorOriginal)
  171 + assinatura.isVisualizarAssinatura = false;
  172 + else
  173 + $scope.setLoadingGet(true);
  174 + DocumentoGedRepository.get(docSelecionado.id).then(function(result){
  175 + $scope.doc = result.originalElement;
  176 + $scope.documentosSelecionados.forEach(function(doc){
  177 + doc.assinaturas.forEach(function(ass){
  178 + ass.isVisualizarAssinatura = false;
  179 + });
  180 + if(doc.id == docSelecionado.id)
  181 + doc.assinaturas.forEach(function(ass){
  182 + if(ass.id != assinatura.id)
  183 + ass.isVisualizarAssinatura = false;
  184 + else {
  185 + ass.isVisualizarAssinatura = valorOriginal != true;
  186 + idAssinaturaSelecionada = angular.copy(ass.id);
  187 + }
  188 + });
  189 +
  190 + $scope.setLoading(false);
  191 + });
  192 +
  193 + $scope.visualizarAssinaturaOnLine = $scope.doc.formaCriacao.codigo == 1;
  194 + _getTarjaDaAssinatura(idAssinaturaSelecionada);
  195 + });
  196 + };
  197 +
  198 + function _getTarjaAssinaturaInterna(){
  199 + $scope.tarjaAssinatura = null;
  200 + TarjaAssinaturaRepository.getTarjaAssinaturaInterna().then(function(result){
  201 + $timeout(function(){
  202 + $scope.tarjaAssinatura = result.originalElement;
  203 + },200);
124 204 });
125 205 };
126 206  
  207 + function _getTarjaDaAssinatura(idAssinaturaSelecionada){
  208 + AssinaturaRepository.get(idAssinaturaSelecionada).then(function(result){
  209 + $scope.assinaturaSelecionada = result.originalElement;
  210 + });
  211 + }
  212 +
127 213 }] );
128 214 \ No newline at end of file
... ...
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoListUnidadeController.js
... ... @@ -69,10 +69,13 @@ citApp.controller(&#39;GerenciarProcessoListUnidadeController&#39;, [&#39;$scope&#39;, &#39;workflow
69 69 };
70 70  
71 71 $scope.obterTransclude = function() {
  72 + $scope.setLoadingGet(true);
72 73 _getProcesso();
73 74 if($scope.modelSelecionado){
74 75 _getFilterCriteriaTarefa();
75 76 _fetchBusinessProcess();
  77 + } else {
  78 + $scope.setLoading(true);
76 79 }
77 80 };
78 81  
... ... @@ -114,8 +117,10 @@ citApp.controller(&#39;GerenciarProcessoListUnidadeController&#39;, [&#39;$scope&#39;, &#39;workflow
114 117 $scope.assignments = result.originalElement.objects;
115 118 if($scope.assignments.length > 0)
116 119 _recuperarPermissoes($scope.assignments[0].id);
117   - else
  120 + else {
118 121 $scope.modelSelecionado.$expandido = !$scope.modelSelecionado.$expandido;
  122 + $scope.setLoading(false);
  123 + }
119 124 });
120 125 };
121 126  
... ... @@ -126,6 +131,7 @@ citApp.controller(&#39;GerenciarProcessoListUnidadeController&#39;, [&#39;$scope&#39;, &#39;workflow
126 131 $scope.btnAction = !(!$scope.workItem.execute && !$scope.workItem.suspend && !$scope.workItem.delegate && !$scope.workItem.restart && !$scope.workItem.visualize);
127 132 $scope.modelSelecionado.$expandido = !$scope.modelSelecionado.$expandido;
128 133 $scope.modelSelecionado.workItem = $scope.workItem;
  134 + $scope.setLoading(false);
129 135 });
130 136 };
131 137  
... ...
cit-ecm-web/src/main/webapp/assets/js/angular/custom/repository/TarjaAssinaturaRepository.js
... ... @@ -11,6 +11,11 @@ citApp.factory(&#39;TarjaAssinaturaRepository&#39;, [&#39;RestangularEcm&#39;, &#39;AbstractReposito
11 11 this.removeImagem = function(tarjaAssinatura) {
12 12 return restangularEcm.all(this.route + "/removeImagem").post(tarjaAssinatura).then();
13 13 };
  14 +
  15 + this.getTarjaAssinaturaInterna = function() {
  16 + return this.restangular.one(this.route + "/getTarjaAssinaturaInterna").get();
  17 + };
  18 +
14 19 }
15 20  
16 21 AbstractRepository.extend(TarjaAssinaturaRepository);
... ...
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaEdit.html
... ... @@ -28,6 +28,9 @@
28 28 <div class="col-sm-4" >
29 29 <label-input ng-type="password" ng-id="autenticacao" ng-disabled="false" ng-model="$parent.autenticacao" />
30 30 </div>
  31 + <div class="col-sm-7">
  32 + <div ng-include src="'/cit-ecm-web/html/assinatura/documentoBtnAssinar.html'" ng-show="exibirIncluirAssinatura"/>
  33 + </div>
31 34 <!-- <div class="col-sm-4" style="margin-top: 5px; !important"> -->
32 35 <!-- <label> -->
33 36 <!-- <translate>ECM.LABEL.OU</translate> -->
... ... @@ -37,4 +40,6 @@
37 40 <!-- <i class="glyphicon glyphicon-info-sign blue" tooltip="{{$translate.instant('ECM.LABEL.CERTIFICADO_DIGITAL')}}" style="margin-left: 5px;"></i> -->
38 41 <!-- </label> -->
39 42 <!-- </div> -->
40   -</div>
41 43 \ No newline at end of file
  44 +</div>
  45 +
  46 +<div ng-include src="'/cit-ecm-web/html/assinatura/documentoTarjaAssinaturaInterna.html'" ng-show="exibirIncluirAssinatura"/>
... ...
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaView.html
... ... @@ -2,11 +2,11 @@
2 2 <div class="widget-header">
3 3 <h2 class="widget-title">
4 4 <div ng-if="exibirIncluirAssinatura">
5   - <translate>ECM.LABEL.ASSINATURA_DO_DOCUMENTO</translate> : {{documentoSelecionado.numero}}
  5 + <translate>ECM.LABEL.ASSINATURA_DO_DOCUMENTO</translate> : {{documentoSelecionado.tipoDocumento.nome}} - {{documentoSelecionado.numero}}
6 6 <translate style="margin-left: 20px;">ECM.LABEL.VERSAO_ATUAL</translate> : {{documentoSelecionado.versaoDocumento | limitTo:3}}
7 7 </div>
8 8 <div ng-if="!exibirIncluirAssinatura">
9   - <translate>ECM.LABEL.ASSINATURAS_DOCUMENTO</translate> : {{documentoSelecionado.numero}}
  9 + <translate>ECM.LABEL.ASSINATURAS_DOCUMENTO</translate> : {{documentoSelecionado.tipoDocumento.nome}} - {{documentoSelecionado.numero}}
10 10 <translate style="margin-left: 20px;">ECM.LABEL.VERSAO_ATUAL</translate> : {{documentoSelecionado.versaoDocumento | limitTo:3}}
11 11 </div>
12 12 </h2>
... ... @@ -29,15 +29,8 @@
29 29  
30 30 <div ng-include src="'/cit-ecm-web/html/assinatura/documentoAssinaturas.html'" />
31 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 32 </div>
41 33 </div>
42 34 </div>
  35 +
43 36 </div>
44 37 \ No newline at end of file
... ...
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturas.html
... ... @@ -9,10 +9,11 @@
9 9 <th><small><translate>LABEL.UNIDADE</translate></small></th>
10 10 <th><small><translate>ECM.LABEL.TIPO_ASSINATURA</translate></small></th>
11 11 <th><small><translate>ECM.LABEL.DATA_DA_ASSINATURA</translate></small></th>
  12 + <th></th>
12 13 </tr>
13 14 </thead>
14 15 <tbody ng-repeat="docSelecionado in documentosSelecionados">
15   - <tr ng-repeat="assinatura in docSelecionado.assinaturas">
  16 + <tr ng-repeat-start="assinatura in docSelecionado.assinaturas">
16 17 <td>
17 18 <small>{{docSelecionado.versaoDocumento}}</small>
18 19 </td>
... ... @@ -31,11 +32,29 @@
31 32 <td>
32 33 <small>{{assinatura.dataCriacao | date : 'dd/MM/yyyy HH:mm:ss'}}</small>
33 34 </td>
  35 + <td class="text-center">
  36 + <button type="button" class="btn btn-success btn-sm" ng-click="visualizarAssinatura(docSelecionado, assinatura);" style="padding-top: 0px; padding-bottom: 0px; !important">
  37 + <translate ng-if="assinatura.isVisualizarAssinatura">LABEL.FECHAR</translate>
  38 + <translate ng-hide="assinatura.isVisualizarAssinatura">LABEL.VISUALIZAR</translate>
  39 + </button>
  40 + </td>
  41 + </tr>
  42 + <tr ng-repeat-end ng-show="assinatura.isVisualizarAssinatura">
  43 + <td colspan="7">
  44 + <iframe id="conteudoPrototipo" srcdoc="{{assinaturaSelecionada.documentoGed.conteudoTarja.conteudo}}" allowfullscreen class="iframe-assinatura" ng-if="visualizarAssinaturaOnLine"></iframe>
  45 + <div class="row" style="margin-top: 10px; margin-bottom: 10px;" ng-hide="visualizarAssinaturaOnLine">
  46 + <div class="col-md-12">
  47 + <iframe id="conteudoAssinado" srcdoc="{{assinaturaSelecionada.conteudoTarja.conteudo}}" allowfullscreen class="iframe-assinatura"
  48 + style="min-height: 80px !important; max-height: 120px !important;">
  49 + </iframe>
  50 + </div>
  51 + </div>
  52 + </td>
34 53 </tr>
35 54 </tbody>
36 55 <tfoot>
37   - <tr ng-hide="nenhumaAssinatura">
38   - <td colspan="6">
  56 + <tr ng-show="nenhumaAssinatura">
  57 + <td colspan="7">
39 58 <strong><translate>ECM.LABEL.DOCUMENTO_SEM_ASSINATURA</translate></strong>
40 59 </td>
41 60 </tr>
... ...
cit-ecm-web/src/main/webapp/html/assinatura/documentoBtnAssinar.html 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +<div class="col-md-6" ng-if="exibirIncluirAssinatura">
  2 + <button ng-click="assinar()"
  3 + title="{{$translate.instant('ECM.LABEL.ASSINAR')}}"
  4 + alt="{{$translate.instant('ECM.LABEL.ASSINAR')}}" type="button"
  5 + class="btn btn-sm btn-primary">
  6 + <translate>ECM.LABEL.ASSINAR</translate>
  7 + </button>
  8 +</div>
0 9 \ No newline at end of file
... ...
cit-ecm-web/src/main/webapp/html/assinatura/documentoTarjaAssinaturaInterna.html 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +<div class="row" style="margin-bottom: 10px;">
  2 + <div class="col-sm-2">
  3 + <img ng-src="data:image/JPEG;base64,{{tarjaAssinatura.anexoImagem.anexo}}" class="img-thumbnail" style="max-width: 80px; height: 80px;"
  4 + ng-show="tarjaAssinatura.anexoImagem.anexo">
  5 + </div>
  6 + <div class="col-md-10">
  7 + <iframe id="visualizacaoConteudoTarjaAssinaturaDocumento" srcdoc="{{tarjaAssinatura.conteudo}}"
  8 + allowfullscreen class="iframe-assinatura" ng-show="!edit" style="min-height: 80px !important; max-height: 120px !important;" />
  9 + </div>
  10 +</div>
0 11 \ No newline at end of file
... ...
cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeDocumentosProcesso.html
... ... @@ -19,12 +19,35 @@
19 19 <div class="text ellipsis" tooltip="{{documento.assuntoComplementar}}">{{documento.assuntoComplementar}}</div>
20 20  
21 21 <div class="itemdiv-informacoes">
22   - <span class="label label-gray" ng-show="documento.sigilo.tipoSigilo.codigo == 0 ">{{documento.sigilo.tipoSigilo.descricao}}</span> <span class="label label-danger"
23   - 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>
24   - <span class="label label-warning" ng-show="documento.nivelAcesso.nivelAcesso.codigo == 1">{{documento.nivelAcesso.nivelAcesso.descricao}}</span> <span class="label label-success"
25   - ng-show="documento.nivelAcesso.nivelAcesso.codigo == 2">{{documento.nivelAcesso.nivelAcesso.descricao}}</span> <span class="label label-info" ng-show="documento.origem">Anexado</span> <span
26   - 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
27   - class="label label-danger" ng-show="documento.cancelado">Cancelado</span>
  22 + <span class="label label-gray" ng-show="documento.sigilo.tipoSigilo.codigo == 0 ">
  23 + {{documento.sigilo.tipoSigilo.descricao}}
  24 + </span>
  25 + <span class="label label-danger"ng-show="documento.sigilo.tipoSigilo.codigo == 1 ">
  26 + {{documento.sigilo.tipoSigilo.descricao}}
  27 + </span>
  28 + <span class="label label-black" ng-show="documento.sigilo.tipoSigilo.codigo == 2 ">
  29 + {{documento.sigilo.tipoSigilo.descricao}}
  30 + </span>
  31 + <span class="label label-warning" ng-show="documento.nivelAcesso.nivelAcesso.codigo == 1">
  32 + {{documento.nivelAcesso.nivelAcesso.descricao}}
  33 + </span>
  34 + <span class="label label-success" ng-show="documento.nivelAcesso.nivelAcesso.codigo == 2">
  35 + {{documento.nivelAcesso.nivelAcesso.descricao}}
  36 + </span>
  37 + <span class="label label-info" ng-show="documento.origem">
  38 + Anexado
  39 + </span>
  40 + <span class="label" style="background : #0000FF" tooltip="{{documento.tresAssinaturas}}"
  41 + ng-show="documento.assinaturas && documento.assinaturas.length > 0">
  42 + Assinado
  43 + </span>
  44 + <span class="label label-success" ng-show="false">
  45 + Habilitado
  46 + </span>
  47 + <span class="label label-warning" ng-show="false">
  48 + Ci&#xEA;ncia
  49 + </span>
  50 + <span class="label label-danger" ng-show="documento.cancelado">Cancelado</span>
28 51  
29 52 </div>
30 53  
... ... @@ -37,13 +60,13 @@
37 60 </button>
38 61  
39 62 <ul class="dropdown-menu-center dropdown-menu dropdown-caret" role="menu">
40   - <li ng-if='!documento.cancelado && documento.status.codigo != 0'><a href="#void" ng-click="editDocument(documento, true);"><translate>LABEL.EDITAR</translate></a></li>
  63 + <li ng-if='!documento.cancelado && documento.status.codigo != 0 && documento.assinaturas && documento.assinaturas.length == 0'><a href="#void" ng-click="editDocument(documento, true);"><translate>LABEL.EDITAR</translate></a></li>
41 64 <li ng-if='!processo.tramitado && (!documento.cancelado && documento.unidade.id === usuarioLogado.unidade.id)'><a href="#void" ng-click="removeDocumento(documento, $index);"><translate>LABEL.REMOVER</translate></a></li>
42 65 <li ng-if='processo.tramitado && (!documento.cancelado && documento.unidade.id === usuarioLogado.unidade.id)'><a href="#void" ng-click='cancelarDocumento(documento)'> <translate>ECM.LABEL.CANCELARDOCUMENTO</translate></a></li>
43 66 <li ng-if='!documento.cancelado'><a href="#void" ng-click="visualizarVersoes(documento);"> <translate>ECM.LABEL.VERSOESDODOCUMENTO</translate></a></li>
44 67 <li ><a ng-if='documento.cancelado'href="#void" ng-click="getCancelamentoDocumento(documento);"> <translate>ECM.LABEL.JUSTIFICATIVA_CANCELAMENTO</translate></a></li>
45   -<!-- <li ><a href="#void" ng-click="abrirAssinarDocumento(documento)"> <translate>ECM.LABEL.ASSINARDOCUMENTO</translate></a></li>
46   - <li ><a href="#void" ng-click="visualizarAssinaturasDocumento(documento)"> <translate>ECM.LABEL.ASSINATURAS_DOCUMENTO</translate></a></li> -->
  68 + <li ><a href="#void" ng-click="abrirAssinarDocumento(documento)"> <translate>ECM.LABEL.ASSINARDOCUMENTO</translate></a></li>
  69 + <li ><a href="#void" ng-click="visualizarAssinaturasDocumento(documento)"> <translate>ECM.LABEL.VISUALIZAR_ASSINATURAS</translate></a></li>
47 70 </ul>
48 71  
49 72 </div>
... ...