Commit e3e6c05b967a39ddab26cfb2f8d10368e2913496

Authored by ROGERIO CASSIMIRO DE SOUZA
1 parent f45a2eca
Exists in master

redmine #4583 assinatura em documento anexo e online; visualizacao de assinatura…

…s de doc anexo e online;
cit-ecm-api/src/main/java/br/com/centralit/api/model/Assinatura.java
@@ -68,6 +68,7 @@ public class Assinatura extends PersistentObjectAudit { @@ -68,6 +68,7 @@ public class Assinatura extends PersistentObjectAudit {
68 private Usuario usuario; 68 private Usuario usuario;
69 69
70 /** Atributo documentoGed. */ 70 /** Atributo documentoGed. */
  71 + @JsonView({ ViewsEcm.AssinaturaEdit.class })
71 @ManyToOne(fetch = FetchType.LAZY) 72 @ManyToOne(fetch = FetchType.LAZY)
72 private DocumentoGed documentoGed; 73 private DocumentoGed documentoGed;
73 74
@@ -91,7 +92,7 @@ public class Assinatura extends PersistentObjectAudit { @@ -91,7 +92,7 @@ public class Assinatura extends PersistentObjectAudit {
91 92
92 /** Atributo conteudoTarja. */ 93 /** Atributo conteudoTarja. */
93 @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 94 @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
94 - @JsonView({ Views.DocumentoGedEdit.class }) 95 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class })
95 private ConteudoTarja conteudoTarja; 96 private ConteudoTarja conteudoTarja;
96 97
97 /** Atributo pessoa. */ 98 /** Atributo pessoa. */
cit-ecm-api/src/main/java/br/com/centralit/api/model/ConteudoTarja.java
@@ -7,11 +7,14 @@ import javax.persistence.GeneratedValue; @@ -7,11 +7,14 @@ import javax.persistence.GeneratedValue;
7 import javax.persistence.GenerationType; 7 import javax.persistence.GenerationType;
8 import javax.persistence.Id; 8 import javax.persistence.Id;
9 import javax.persistence.Lob; 9 import javax.persistence.Lob;
  10 +import javax.persistence.OneToOne;
10 import javax.persistence.Transient; 11 import javax.persistence.Transient;
11 12
12 import org.hibernate.annotations.Type; 13 import org.hibernate.annotations.Type;
13 14
  15 +import br.com.centralit.api.framework.json.ViewsEcm;
14 import br.com.centralit.framework.json.Views; 16 import br.com.centralit.framework.json.Views;
  17 +import br.com.centralit.framework.model.AnexoImagem;
15 18
16 import com.fasterxml.jackson.annotation.JsonView; 19 import com.fasterxml.jackson.annotation.JsonView;
17 20
@@ -36,7 +39,7 @@ public class ConteudoTarja { @@ -36,7 +39,7 @@ public class ConteudoTarja {
36 @JsonView({ Views.GenericView.class }) 39 @JsonView({ Views.GenericView.class })
37 private Long id; 40 private Long id;
38 41
39 - @JsonView({ Views.DocumentoGedEdit.class }) 42 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class })
40 @Transient 43 @Transient
41 private String conteudo; 44 private String conteudo;
42 45
@@ -45,6 +48,13 @@ public class ConteudoTarja { @@ -45,6 +48,13 @@ public class ConteudoTarja {
45 @Type(type = "org.hibernate.type.BinaryType") 48 @Type(type = "org.hibernate.type.BinaryType")
46 private byte[] conteudoCriptografado; 49 private byte[] conteudoCriptografado;
47 50
  51 + @OneToOne
  52 + @JsonView({ ViewsEcm.AssinaturaEdit.class })
  53 + private AnexoImagem anexoImagem;
  54 +
  55 + @Transient
  56 + private Long idTarjaAssinatura;
  57 +
48 /** 58 /**
49 * Retorna o valor do atributo <code>id</code> 59 * Retorna o valor do atributo <code>id</code>
50 * 60 *
@@ -105,4 +115,44 @@ public class ConteudoTarja { @@ -105,4 +115,44 @@ public class ConteudoTarja {
105 this.conteudoCriptografado = conteudoCriptografado; 115 this.conteudoCriptografado = conteudoCriptografado;
106 } 116 }
107 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 +
108 } 158 }
cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java
@@ -245,7 +245,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -245,7 +245,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
245 private Collection<Assinatura> assinaturas; 245 private Collection<Assinatura> assinaturas;
246 246
247 @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 247 @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
248 - @JsonView({ Views.DocumentoGedEdit.class }) 248 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class })
249 private ConteudoTarja conteudoTarja; 249 private ConteudoTarja conteudoTarja;
250 250
251 @Transient 251 @Transient
cit-ecm-api/src/main/java/br/com/centralit/api/model/TarjaAssinatura.java
@@ -46,8 +46,8 @@ public class TarjaAssinatura extends PersistentObjectAudit{ @@ -46,8 +46,8 @@ public class TarjaAssinatura extends PersistentObjectAudit{
46 46
47 public static String LOGO = "@logo@"; 47 public static String LOGO = "@logo@";
48 public static String NOME_ASSINANTE = "@nome_assinante@"; 48 public static String NOME_ASSINANTE = "@nome_assinante@";
49 - public static String FUNCAO_ASSINANTE = " @funcao_assinante@";  
50 - public static String DATA_ASSINATURA = " @data_assinatura@"; 49 + public static String FUNCAO_ASSINANTE = "@funcao_assinante@";
  50 + public static String DATA_ASSINATURA = "@data_assinatura@";
51 public static String HORA_ASSINATURA = "@hora_assinatura@"; 51 public static String HORA_ASSINATURA = "@hora_assinatura@";
52 public static String CODIGO_ASSINATURA = "@codigo_assinatura@"; 52 public static String CODIGO_ASSINATURA = "@codigo_assinatura@";
53 53
cit-ecm-api/src/main/java/br/com/centralit/api/service/TarjaAssinaturaService.java
@@ -7,26 +7,32 @@ import br.com.centralit.api.model.TarjaAssinatura; @@ -7,26 +7,32 @@ import br.com.centralit.api.model.TarjaAssinatura;
7 import br.com.centralit.framework.service.arquitetura.GenericService; 7 import br.com.centralit.framework.service.arquitetura.GenericService;
8 8
9 /** 9 /**
10 - * <p><img src="http://centralit.com.br/images/logo_central.png"></p>  
11 - *  
12 - * <p><b>Company: </b> Central IT - Governan&ccedil;a Corporativa - </p>  
13 - *  
14 - * <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>
15 * Classe de servi&ccedil;os para a entidade TarjaAssinatura, a qual mant&eacute;m as regras de neg&oacute;cio. 21 * Classe de servi&ccedil;os para a entidade TarjaAssinatura, a qual mant&eacute;m as regras de neg&oacute;cio.
16 - * 22 + *
17 * @since 13 de abr de 2016 - 13:40:36 23 * @since 13 de abr de 2016 - 13:40:36
18 * @version 1.0.0 24 * @version 1.0.0
19 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) 25 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
20 - * 26 + *
21 */ 27 */
22 public interface TarjaAssinaturaService extends GenericService<TarjaAssinatura, Long> { 28 public interface TarjaAssinaturaService extends GenericService<TarjaAssinatura, Long> {
23 29
24 /** 30 /**
25 - * 31 + *
26 * M&eacute;todo respons&aacute;vel por fazer o upload da imagem do logotipo de uma tarja de assinatura. 32 * M&eacute;todo respons&aacute;vel por fazer o upload da imagem do logotipo de uma tarja de assinatura.
27 - * 33 + *
28 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) 34 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
29 - * 35 + *
30 * @param file 36 * @param file
31 * @param idOrganizacao 37 * @param idOrganizacao
32 * @param idConfiguracao 38 * @param idConfiguracao
@@ -34,30 +40,30 @@ public interface TarjaAssinaturaService extends GenericService&lt;TarjaAssinatura, @@ -34,30 +40,30 @@ public interface TarjaAssinaturaService extends GenericService&lt;TarjaAssinatura,
34 void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idConfiguracao); 40 void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idConfiguracao);
35 41
36 /** 42 /**
37 - * 43 + *
38 * M&eacute;todo respons&aacute;vel por salvar os dois tipos de tarjas de assinatura ao mesmo tempo 44 * M&eacute;todo respons&aacute;vel por salvar os dois tipos de tarjas de assinatura ao mesmo tempo
39 - * 45 + *
40 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) 46 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
41 - * 47 + *
42 * @param tarjaAssinaturaVH 48 * @param tarjaAssinaturaVH
43 * @return 49 * @return
44 */ 50 */
45 - TarjaAssinatura save (TarjaAssinatura tarjaAssinatura);  
46 - 51 + TarjaAssinatura save(TarjaAssinatura tarjaAssinatura);
47 52
48 /** 53 /**
49 - * 54 + *
50 * M&eacute;todo respons&aacute;vel por remover a imagem associada a uma tarja de assinatura. 55 * M&eacute;todo respons&aacute;vel por remover a imagem associada a uma tarja de assinatura.
51 - * 56 + *
52 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) 57 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
53 - * 58 + *
54 * @param tarjaAssinatura 59 * @param tarjaAssinatura
55 * @return 60 * @return
56 */ 61 */
57 - TarjaAssinatura removeImagem (TarjaAssinatura tarjaAssinatura);  
58 - 62 + TarjaAssinatura removeImagem(TarjaAssinatura tarjaAssinatura);
  63 +
59 /** 64 /**
60 * Método responsável por obter tarja assinatura interna 65 * Método responsável por obter tarja assinatura interna
  66 + *
61 * @author rogerio.cassimiro 67 * @author rogerio.cassimiro
62 * @return {@link TarjaAssinatura} 68 * @return {@link TarjaAssinatura}
63 */ 69 */
@@ -65,8 +71,26 @@ public interface TarjaAssinaturaService extends GenericService&lt;TarjaAssinatura, @@ -65,8 +71,26 @@ public interface TarjaAssinaturaService extends GenericService&lt;TarjaAssinatura,
65 71
66 /** 72 /**
67 * Método responsável por gerar assinatura interna por usuário e por documento 73 * Método responsável por gerar assinatura interna por usuário e por documento
  74 + *
68 * @author rogerio.cassimiro 75 * @author rogerio.cassimiro
69 * @param assinatura 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}
70 */ 94 */
71 - void gerarAssinaturaInternaUsuario(Assinatura assinatura); 95 + String decrypted(byte[] text);
72 } 96 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaServiceImpl.java
@@ -73,24 +73,26 @@ public class AssinaturaServiceImpl extends GenericServiceImpl&lt;Assinatura, Long&gt; @@ -73,24 +73,26 @@ public class AssinaturaServiceImpl extends GenericServiceImpl&lt;Assinatura, Long&gt;
73 @Override 73 @Override
74 public Assinatura saveAssinaturaInterna(Assinatura assinatura) { 74 public Assinatura saveAssinaturaInterna(Assinatura assinatura) {
75 Usuario usuario = (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 75 Usuario usuario = (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
76 - this.validarSenha(assinatura.getPassword(), usuario); 76 + validarSenha(assinatura.getPassword(), usuario);
  77 + montarTransients(assinatura, usuario);
  78 + historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura);
  79 + tarjaAssinaturaService.gerarAssinaturaInternaUsuario(assinatura,assinatura.getDocumentoGed().getFormaCriacao().getCodigo());
  80 + return super.save(assinatura);
  81 + }
  82 +
  83 + /**
  84 + * Método responsável por montar transients da assinatura
  85 + * @author rogerio.cassimiro
  86 + * @param assinatura
  87 + * @param usuario
  88 + */
  89 + private void montarTransients(Assinatura assinatura, Usuario usuario) {
  90 +
77 assinatura.setDocumentoGed(this.documentoGedService.getReference(assinatura.getDocumentoGed().getId())); 91 assinatura.setDocumentoGed(this.documentoGedService.getReference(assinatura.getDocumentoGed().getId()));
78 assinatura.setUsuario(usuario); 92 assinatura.setUsuario(usuario);
79 assinatura.setPessoa(this.pessoaService.getReference(assinatura.getPessoa().getId())); 93 assinatura.setPessoa(this.pessoaService.getReference(assinatura.getPessoa().getId()));
80 assinatura.setTipoAssinatura(dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA)); 94 assinatura.setTipoAssinatura(dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA));
81 assinatura.setFuncao(funcaoService.getReference(assinatura.getFuncao().getId())); 95 assinatura.setFuncao(funcaoService.getReference(assinatura.getFuncao().getId()));
82 - historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura);  
83 - salvarTarjaAssinaturaPorTipoDocumento(assinatura);  
84 - return super.save(assinatura);  
85 - }  
86 -  
87 - private void salvarTarjaAssinaturaPorTipoDocumento(Assinatura assinatura) {  
88 - //OnLine  
89 - if(assinatura.getDocumentoGed().getFormaCriacao().getCodigo() == 1){  
90 - //TODO ON LINE  
91 - }else {  
92 - this.tarjaAssinaturaService.gerarAssinaturaInternaUsuario(assinatura);  
93 - }  
94 } 96 }
95 97
96 /** 98 /**
@@ -123,4 +125,14 @@ public class AssinaturaServiceImpl extends GenericServiceImpl&lt;Assinatura, Long&gt; @@ -123,4 +125,14 @@ public class AssinaturaServiceImpl extends GenericServiceImpl&lt;Assinatura, Long&gt;
123 public Boolean validarAssinaturaPorUsuario(Long idDocumento) { 125 public Boolean validarAssinaturaPorUsuario(Long idDocumento) {
124 return this.assinaturaDao.validarAssinaturaPorUsuario(idDocumento, ((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId()); 126 return this.assinaturaDao.validarAssinaturaPorUsuario(idDocumento, ((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId());
125 } 127 }
  128 +
  129 + @Override
  130 + public Assinatura getReference(Long id) {
  131 + Assinatura assinatura = (Assinatura) this.assinaturaDao.getReference(id);
  132 + assinatura.getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getConteudoTarja().getConteudoCriptografado()));
  133 + if(UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())){
  134 + assinatura.getDocumentoGed().getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado()));
  135 + }
  136 + return assinatura;
  137 + }
126 } 138 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java
1 package br.com.centralit.api.service.impl; 1 package br.com.centralit.api.service.impl;
2 2
3 import java.io.IOException; 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 import org.apache.log4j.Logger; 9 import org.apache.log4j.Logger;
6 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.beans.factory.annotation.Qualifier; 11 import org.springframework.beans.factory.annotation.Qualifier;
  12 +import org.springframework.beans.factory.annotation.Value;
8 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
9 import org.springframework.validation.Validator; 14 import org.springframework.validation.Validator;
10 import org.springframework.web.multipart.MultipartFile; 15 import org.springframework.web.multipart.MultipartFile;
11 16
12 -import com.ibm.icu.util.Calendar;  
13 -  
14 import br.com.centralit.api.dao.TarjaAssinaturaDao; 17 import br.com.centralit.api.dao.TarjaAssinaturaDao;
15 import br.com.centralit.api.model.Assinatura; 18 import br.com.centralit.api.model.Assinatura;
  19 +import br.com.centralit.api.model.ConteudoTarja;
16 import br.com.centralit.api.model.TarjaAssinatura; 20 import br.com.centralit.api.model.TarjaAssinatura;
17 import br.com.centralit.api.service.AnexoImagemService; 21 import br.com.centralit.api.service.AnexoImagemService;
18 import br.com.centralit.api.service.DominioService; 22 import br.com.centralit.api.service.DominioService;
@@ -22,19 +26,30 @@ import br.com.centralit.framework.model.AnexoImagem; @@ -22,19 +26,30 @@ import br.com.centralit.framework.model.AnexoImagem;
22 import br.com.centralit.framework.model.Dominio; 26 import br.com.centralit.framework.model.Dominio;
23 import br.com.centralit.framework.model.Organizacao; 27 import br.com.centralit.framework.model.Organizacao;
24 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl; 28 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
  29 +import br.com.centralit.framework.util.UtilDate;
  30 +import br.com.centralit.framework.util.UtilObjeto;
  31 +
  32 +import com.ibm.icu.util.Calendar;
  33 +import com.lowagie.text.DocumentException;
25 34
26 /** 35 /**
27 - * <p><img src="http://centralit.com.br/images/logo_central.png"></p>  
28 - *  
29 - * <p><b>Company: </b> Central IT - Governan&ccedil;a Corporativa - </p>  
30 - *  
31 - * <p><b>Description: </b></p> 36 + * <p>
  37 + * <img src="http://centralit.com.br/images/logo_central.png">
  38 + * </p>
  39 + *
  40 + * <p>
  41 + * <b>Company: </b> Central IT - Governan&ccedil;a Corporativa -
  42 + * </p>
  43 + *
  44 + * <p>
  45 + * <b>Description: </b>
  46 + * </p>
32 * Classe de servi&ccedil;os para a entidade TarjaAssinatura, a qual mant&eacute;m as regras de neg&oacute;cio. 47 * Classe de servi&ccedil;os para a entidade TarjaAssinatura, a qual mant&eacute;m as regras de neg&oacute;cio.
33 - * 48 + *
34 * @since 13 de abr de 2016 - 13:40:36 49 * @since 13 de abr de 2016 - 13:40:36
35 * @version 1.0.0 50 * @version 1.0.0
36 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) 51 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
37 - * 52 + *
38 */ 53 */
39 @Service("tarjaAssinaturaService") 54 @Service("tarjaAssinaturaService")
40 public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatura, Long> implements TarjaAssinaturaService { 55 public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatura, Long> implements TarjaAssinaturaService {
@@ -48,41 +63,48 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu @@ -48,41 +63,48 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
48 private AnexoImagemService anexoImagemService; 63 private AnexoImagemService anexoImagemService;
49 64
50 private TarjaAssinaturaDao tarjaAssinaturaDao; 65 private TarjaAssinaturaDao tarjaAssinaturaDao;
51 - 66 +
52 @Autowired 67 @Autowired
53 private DominioService dominioService; 68 private DominioService dominioService;
54 69
  70 + @Value("${ecm.doc.key.decrypted.document}")
  71 + public String keyDocument;
  72 +
55 @Autowired 73 @Autowired
56 - public TarjaAssinaturaServiceImpl (TarjaAssinaturaDao tarjaAssinaturaDao, @Qualifier("tarjaAssinaturaValidator") Validator validator) { 74 + public TarjaAssinaturaServiceImpl( TarjaAssinaturaDao tarjaAssinaturaDao, @Qualifier("tarjaAssinaturaValidator") Validator validator ) {
  75 +
57 this.dao = tarjaAssinaturaDao; 76 this.dao = tarjaAssinaturaDao;
58 this.tarjaAssinaturaDao = tarjaAssinaturaDao; 77 this.tarjaAssinaturaDao = tarjaAssinaturaDao;
59 this.validator = validator; 78 this.validator = validator;
60 } 79 }
61 80
62 - public TarjaAssinatura save (TarjaAssinatura tarjaAssinatura){ 81 + public TarjaAssinatura save(TarjaAssinatura tarjaAssinatura) {
  82 +
63 return this.merge(tarjaAssinatura); 83 return this.merge(tarjaAssinatura);
64 } 84 }
65 85
66 @Override 86 @Override
67 public TarjaAssinatura merge(TarjaAssinatura tarjaAssinatura) { 87 public TarjaAssinatura merge(TarjaAssinatura tarjaAssinatura) {
  88 +
68 this.validarEntidade(tarjaAssinatura, this.validator); 89 this.validarEntidade(tarjaAssinatura, this.validator);
69 return super.merge(tarjaAssinatura); 90 return super.merge(tarjaAssinatura);
70 } 91 }
71 92
72 @Override 93 @Override
73 - public TarjaAssinatura removeImagem (TarjaAssinatura tarjaAssinatura) {  
74 - if(tarjaAssinatura.getAnexoImagem() != null) { 94 + public TarjaAssinatura removeImagem(TarjaAssinatura tarjaAssinatura) {
  95 +
  96 + if (tarjaAssinatura.getAnexoImagem() != null) {
75 anexoImagemService.removeById(tarjaAssinatura.getAnexoImagem().getId()); 97 anexoImagemService.removeById(tarjaAssinatura.getAnexoImagem().getId());
76 tarjaAssinatura.setAnexoImagem(null); 98 tarjaAssinatura.setAnexoImagem(null);
77 } 99 }
78 return this.merge(tarjaAssinatura); 100 return this.merge(tarjaAssinatura);
79 } 101 }
80 102
81 - /**{@inheritDoc}*/ 103 + /** {@inheritDoc} */
82 @Override 104 @Override
83 public void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idTarjaAssinatura) { 105 public void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idTarjaAssinatura) {
84 106
85 - AnexoImagem anexoImagem = new AnexoImagem (); 107 + AnexoImagem anexoImagem = new AnexoImagem();
86 try { 108 try {
87 Organizacao organizacao = (Organizacao) this.organizacaoService.find(idOrganizacao); 109 Organizacao organizacao = (Organizacao) this.organizacaoService.find(idOrganizacao);
88 anexoImagem.setAnexo(file.getBytes()); 110 anexoImagem.setAnexo(file.getBytes());
@@ -94,35 +116,143 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu @@ -94,35 +116,143 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
94 tarjaAssinatura.setAnexoImagem(anexoImagemSaved); 116 tarjaAssinatura.setAnexoImagem(anexoImagemSaved);
95 this.merge(tarjaAssinatura); 117 this.merge(tarjaAssinatura);
96 } catch (IOException ioe) { 118 } catch (IOException ioe) {
97 - LOG.error("N\u00e3o consegui anexar a imagem \u00e0 entidade TarjaAssinatura. Verifique a exce\u00e7\u00e3o para "  
98 - + "identificar a causa: ", ioe.getCause()); 119 + LOG.error("N\u00e3o consegui anexar a imagem \u00e0 entidade TarjaAssinatura. Verifique a exce\u00e7\u00e3o para " + "identificar a causa: ", ioe.getCause());
99 } 120 }
100 } 121 }
101 - 122 +
102 /** 123 /**
103 * Método responsável por obter tarja assinatura interna 124 * Método responsável por obter tarja assinatura interna
  125 + *
104 * @author rogerio.cassimiro 126 * @author rogerio.cassimiro
105 * @return {@link TarjaAssinatura} 127 * @return {@link TarjaAssinatura}
106 */ 128 */
107 @Override 129 @Override
108 public TarjaAssinatura getTarjaAssinaturaInterna() { 130 public TarjaAssinatura getTarjaAssinaturaInterna() {
  131 +
109 Dominio dominio = dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA); 132 Dominio dominio = dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA);
110 return this.tarjaAssinaturaDao.getTarjaAssinaturaInterna(dominio); 133 return this.tarjaAssinaturaDao.getTarjaAssinaturaInterna(dominio);
111 } 134 }
112 - 135 +
113 /** 136 /**
114 * Método responsável por gerar assinatura interna por usuário e por documento 137 * Método responsável por gerar assinatura interna por usuário e por documento
  138 + *
115 * @author rogerio.cassimiro 139 * @author rogerio.cassimiro
116 * @param assinatura 140 * @param assinatura
  141 + * @param formaCriacao
117 */ 142 */
118 @Override 143 @Override
119 - public void gerarAssinaturaInternaUsuario(Assinatura assinatura) {  
120 - String conteudo = assinatura.getConteudoTarja().getConteudo();  
121 - conteudo = conteudo.replaceAll(TarjaAssinatura.DATA_ASSINATURA, Calendar.getInstance().toString())  
122 - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getPessoa().getNome())  
123 - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getPessoa().getNome())  
124 - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getPessoa().getNome())  
125 - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getPessoa().getNome());  
126 - 144 + public void gerarAssinaturaInternaUsuario(Assinatura assinatura, Long formaCriacao) {
  145 +
  146 + TarjaAssinatura tarjaAssinatura = (TarjaAssinatura) tarjaAssinaturaDao.getReference(assinatura.getConteudoTarja().getIdTarjaAssinatura());
  147 + String conteudoAssinatura = getConteudoTarja(assinatura, tarjaAssinatura.getConteudo());
  148 +
  149 + gerarAssinaturaDocAnexo(assinatura, tarjaAssinatura.getAnexoImagem(), conteudoAssinatura);
  150 + if (formaCriacao == 1)
  151 + gerarAssinaturaDocOnline(assinatura, tarjaAssinatura.getAnexoImagem(), conteudoAssinatura);
  152 + }
  153 +
  154 + /**
  155 + * Método responsável por montar o conteúdo substituindo as chaves
  156 + *
  157 + * @author rogerio.cassimiro
  158 + * @param assinatura
  159 + * @param conteudo
  160 + * @return {@link String}
  161 + */
  162 + private String getConteudoTarja(Assinatura assinatura, String conteudo) {
  163 +
  164 + conteudo = conteudo.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.CODIGO_ASSINATURA, "TODO ASSINATURA");
  165 + return conteudo;
  166 + }
  167 +
  168 + /**
  169 + * Método responsável por gerar assinatura em documento anexo
  170 + *
  171 + * @author rogerio.cassimiro
  172 + * @param assinatura
  173 + * @param tarjaAssinatura
  174 + * @param conteudo
  175 + * @throws DocumentException
  176 + * @throws IOException
  177 + */
  178 + private void gerarAssinaturaDocAnexo(Assinatura assinatura, AnexoImagem anexoImagem, String conteudo) {
  179 +
  180 + assinatura.getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudo));
  181 + assinatura.getConteudoTarja().setAnexoImagem(anexoImagem);
  182 + }
  183 +
  184 + /**
  185 + * Método responsável por gerar assinatura em documento online
  186 + *
  187 + * @author rogerio.cassimiro
  188 + * @param assinatura
  189 + * @param tarjaAssinatura
  190 + * @param conteudo
  191 + */
  192 + private void gerarAssinaturaDocOnline(Assinatura assinatura, AnexoImagem anexoImagem, String conteudo) {
  193 +
  194 + String conteudoOriginalDocOnLine = new String();
  195 +
  196 + if (UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())) {
  197 + conteudoOriginalDocOnLine = decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado());
  198 + } else {
  199 + assinatura.getDocumentoGed().setConteudoTarja(new ConteudoTarja());
  200 + conteudoOriginalDocOnLine = decrypted(assinatura.getDocumentoGed().getConteudoCriptografado());
  201 + }
  202 +
  203 + conteudoOriginalDocOnLine = conteudoOriginalDocOnLine.concat("<br/>");
  204 + conteudoOriginalDocOnLine = conteudoOriginalDocOnLine.concat(conteudo);
  205 +
  206 + assinatura.getDocumentoGed().getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoOriginalDocOnLine));
  207 + }
  208 +
  209 + /**
  210 + * Método responsável por criptografar o texto através da chave
  211 + *
  212 + * @author rogerio.costa
  213 + * @param text
  214 + * @return {@link Byte}
  215 + */
  216 + @Override
  217 + public byte[] encrypted(String text) {
  218 +
  219 + try {
  220 + byte[] encrypted = null;
  221 + Key aesKey = new SecretKeySpec(this.keyDocument.getBytes(), "AES");
  222 + Cipher cipher = Cipher.getInstance("AES");
  223 + cipher.init(Cipher.ENCRYPT_MODE, aesKey);
  224 + encrypted = cipher.doFinal(text.getBytes());
  225 +
  226 + return encrypted;
  227 +
  228 + } catch (Exception e) {
  229 + e.printStackTrace();
  230 + }
  231 + return null;
  232 + }
  233 +
  234 + /**
  235 + * Método responsável por descriptografar texto
  236 + *
  237 + * @author rogerio.cassimiro
  238 + * @param text
  239 + * @return {@link String}
  240 + */
  241 + @Override
  242 + public String decrypted(byte[] text) {
  243 +
  244 + try {
  245 + Cipher cipher = Cipher.getInstance("AES");
  246 + Key aesKey = new SecretKeySpec(this.keyDocument.getBytes(), "AES");
  247 +
  248 + cipher.init(Cipher.DECRYPT_MODE, aesKey);
  249 + String decrypted = new String(cipher.doFinal(text));
  250 +
  251 + return decrypted;
  252 +
  253 + } catch (Exception e) {
  254 + e.printStackTrace();
  255 + }
  256 + return null;
127 } 257 }
128 } 258 }
cit-ecm-web/src/main/java/br/com/centralit/controller/AssinaturaController.java
@@ -2,6 +2,7 @@ package br.com.centralit.controller; @@ -2,6 +2,7 @@ package br.com.centralit.controller;
2 2
3 import org.springframework.beans.factory.annotation.Autowired; 3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.stereotype.Controller; 4 import org.springframework.stereotype.Controller;
  5 +import org.springframework.web.bind.annotation.PathVariable;
5 import org.springframework.web.bind.annotation.RequestBody; 6 import org.springframework.web.bind.annotation.RequestBody;
6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.RequestMapping;
7 import org.springframework.web.bind.annotation.RequestMethod; 8 import org.springframework.web.bind.annotation.RequestMethod;
@@ -69,4 +70,14 @@ public class AssinaturaController extends GenericController&lt;Assinatura&gt;{ @@ -69,4 +70,14 @@ public class AssinaturaController extends GenericController&lt;Assinatura&gt;{
69 return ViewsEcm.DocumentoGedEdit.class; 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/listener/StartupListenerEcm.java
@@ -573,5 +573,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -573,5 +573,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
573 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.USUARIO_SEM_PESSOA", "Usuário não está presente no Cadastro de Pessoa!", dominio, modulo)); 573 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.USUARIO_SEM_PESSOA", "Usuário não está presente no Cadastro de Pessoa!", dominio, modulo));
574 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_SEM_ASSINATURAS", "Esta versão do Documento não possui assinaturas!", dominio, modulo)); 574 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_SEM_ASSINATURAS", "Esta versão do Documento não possui assinaturas!", dominio, modulo));
575 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_JA_ASSINADO", "Documento já foi assinado por este usuário!", dominio, modulo)); 575 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_JA_ASSINADO", "Documento já foi assinado por este usuário!", dominio, modulo));
  576 + 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));
576 } 577 }
577 } 578 }
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/AssinarDocumentoController.js
@@ -27,6 +27,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren @@ -27,6 +27,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
27 _validarAssinaturaPorUsuario(documento.id).then(function(exibirIncluirAssinatura){ 27 _validarAssinaturaPorUsuario(documento.id).then(function(exibirIncluirAssinatura){
28 $scope.exibirIncluirAssinatura = !(exibirIncluirAssinatura == true); 28 $scope.exibirIncluirAssinatura = !(exibirIncluirAssinatura == true);
29 $scope.exibirDocJaAssinado = !$scope.exibirIncluirAssinatura; 29 $scope.exibirDocJaAssinado = !$scope.exibirIncluirAssinatura;
  30 + _getTarjaAssinaturaInterna();
30 }); 31 });
31 }); 32 });
32 } 33 }
@@ -73,13 +74,22 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren @@ -73,13 +74,22 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
73 $scope.showAlert("error", $translate.instant('ECM.VALIDACAO.SENHA_ASSINATURA')); 74 $scope.showAlert("error", $translate.instant('ECM.VALIDACAO.SENHA_ASSINATURA'));
74 return; 75 return;
75 } 76 }
76 -  
77 - AssinaturaRepository.saveAssinaturaInterna(_getAssinatura()).then(function(result){  
78 - _atualizarDocumentoSelecionadoAposAssinar(result.originalElement);  
79 - _resetAssinar();  
80 - _atualizarDocDoProcessoAposAssinar();  
81 - $scope.showAlert("success", $translate.instant('ECM.ASSINADO_SUCESSO')); 77 +
  78 + $scope.$openModalConfirm({
  79 + message: $translate.instant("ECM.MSG.CONFIRMAR_ASSINATURA"),
  80 + callback: function () {
  81 + $scope.setLoadingRemove(true);
  82 + AssinaturaRepository.saveAssinaturaInterna(_getAssinatura()).then(function(result){
  83 + _atualizarDocumentoSelecionadoAposAssinar(result.originalElement);
  84 + _resetAssinar();
  85 + _atualizarDocDoProcessoAposAssinar();
  86 + $scope.$modalConfirmInstance.dismiss('cancel');
  87 + $scope.setLoading(false);
  88 + $scope.showAlert("success", $translate.instant('ECM.ASSINADO_SUCESSO'));
  89 + });
  90 + }
82 }); 91 });
  92 +
83 }; 93 };
84 94
85 function _getAssinatura(){ 95 function _getAssinatura(){
@@ -89,7 +99,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren @@ -89,7 +99,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
89 idTask : $scope.$parent.task.id, 99 idTask : $scope.$parent.task.id,
90 password : $scope.autenticacao, 100 password : $scope.autenticacao,
91 pessoa : { id : $scope.pessoa.id}, 101 pessoa : { id : $scope.pessoa.id},
92 - conteudoTarja : { id : $scope.tarjaAssinatura.id}}; 102 + conteudoTarja : { idTarjaAssinatura : $scope.tarjaAssinatura.id}};
93 }; 103 };
94 104
95 function _atualizarDocumentoSelecionadoAposAssinar(assinatura){ 105 function _atualizarDocumentoSelecionadoAposAssinar(assinatura){
@@ -146,12 +156,13 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren @@ -146,12 +156,13 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
146 156
147 function _exibirNenhumaAssinatura(){ 157 function _exibirNenhumaAssinatura(){
148 $scope.nenhumaAssinatura = $scope.documentosSelecionados.some(function(doc){ 158 $scope.nenhumaAssinatura = $scope.documentosSelecionados.some(function(doc){
149 - return doc.assinaturas.length > 0; 159 + return doc.assinaturas.length == 0;
150 }); 160 });
151 }; 161 };
152 162
153 $scope.visualizarAssinatura = function(docSelecionado, assinatura){ 163 $scope.visualizarAssinatura = function(docSelecionado, assinatura){
154 var valorOriginal = assinatura.isVisualizarAssinatura; 164 var valorOriginal = assinatura.isVisualizarAssinatura;
  165 + var idAssinaturaSelecionada = null;
155 if(valorOriginal) 166 if(valorOriginal)
156 assinatura.isVisualizarAssinatura = false; 167 assinatura.isVisualizarAssinatura = false;
157 else 168 else
@@ -165,12 +176,18 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren @@ -165,12 +176,18 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
165 doc.assinaturas.forEach(function(ass){ 176 doc.assinaturas.forEach(function(ass){
166 if(ass.id != assinatura.id) 177 if(ass.id != assinatura.id)
167 ass.isVisualizarAssinatura = false; 178 ass.isVisualizarAssinatura = false;
168 - else 179 + else {
169 ass.isVisualizarAssinatura = valorOriginal != true; 180 ass.isVisualizarAssinatura = valorOriginal != true;
  181 + idAssinaturaSelecionada = angular.copy(ass.id);
  182 + }
170 }); 183 });
171 }); 184 });
172 185
173 - $scope.visualizarAssinaturaOnLine = $scope.doc.formaCriacao.codigo == 1; 186 + $scope.visualizarAssinaturaOnLine = $scope.doc.formaCriacao.codigo == 1;
  187 + _getTarjaDaAssinatura(idAssinaturaSelecionada);
  188 +// if($scope.visualizarAssinaturaOnLine) {
  189 +// //TODO TARJA DOC ON
  190 +// } else
174 }); 191 });
175 }; 192 };
176 193
@@ -182,4 +199,11 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren @@ -182,4 +199,11 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
182 }); 199 });
183 }); 200 });
184 }; 201 };
  202 +
  203 + function _getTarjaDaAssinatura(idAssinaturaSelecionada){
  204 + AssinaturaRepository.get(idAssinaturaSelecionada).then(function(result){
  205 + $scope.assinaturaSelecionada = result.originalElement;
  206 + });
  207 + }
  208 +
185 }] ); 209 }] );
186 \ No newline at end of file 210 \ No newline at end of file
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaEdit.html
@@ -42,8 +42,4 @@ @@ -42,8 +42,4 @@
42 <!-- </div> --> 42 <!-- </div> -->
43 </div> 43 </div>
44 44
45 -<div class="row">  
46 - <div class="col-sm-12">  
47 - <div ng-include src="'/cit-ecm-web/html/assinatura/documentoTarjaAssinaturaInterna.html'" ng-show="exibirIncluirAssinatura"/>  
48 - </div>  
49 -</div>  
50 \ No newline at end of file 45 \ No newline at end of file
  46 +<div ng-include src="'/cit-ecm-web/html/assinatura/documentoTarjaAssinaturaInterna.html'" ng-show="exibirIncluirAssinatura"/>
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturas.html
@@ -41,15 +41,22 @@ @@ -41,15 +41,22 @@
41 </tr> 41 </tr>
42 <tr ng-repeat-end ng-show="assinatura.isVisualizarAssinatura"> 42 <tr ng-repeat-end ng-show="assinatura.isVisualizarAssinatura">
43 <td colspan="7"> 43 <td colspan="7">
44 - <iframe id="visualizacaoConteudoDoc" srcdoc="{{doc.conteudo}}" allowfullscreen class="iframe-assinatura" ng-if="visualizarAssinaturaOnLine"></iframe>  
45 - <div ng-hide="visualizarAssinaturaOnLine">  
46 - doc anexo 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-sm-2" ng-show="assinaturaSelecionada.conteudoTarja.anexoImagem.anexo">
  47 + <img ng-src="data:image/JPEG;base64,{{assinaturaSelecionada.conteudoTarja.anexoImagem.anexo}}" class="img-thumbnail" style="max-width: 80px; height: 80px;">
  48 + </div>
  49 + <div class="col-md-10">
  50 + <iframe id="conteudoAssinado" srcdoc="{{assinaturaSelecionada.conteudoTarja.conteudo}}" allowfullscreen class="iframe-assinatura"
  51 + style="min-height: 80px !important; max-height: 120px !important;">
  52 + </iframe>
  53 + </div>
47 </div> 54 </div>
48 </td> 55 </td>
49 </tr> 56 </tr>
50 </tbody> 57 </tbody>
51 <tfoot> 58 <tfoot>
52 - <tr ng-hide="nenhumaAssinatura"> 59 + <tr ng-show="nenhumaAssinatura">
53 <td colspan="7"> 60 <td colspan="7">
54 <strong><translate>ECM.LABEL.DOCUMENTO_SEM_ASSINATURA</translate></strong> 61 <strong><translate>ECM.LABEL.DOCUMENTO_SEM_ASSINATURA</translate></strong>
55 </td> 62 </td>
cit-ecm-web/src/main/webapp/html/assinatura/documentoTarjaAssinaturaInterna.html
1 <div class="row" style="margin-bottom: 10px;"> 1 <div class="row" style="margin-bottom: 10px;">
2 - <div class="col-sm-2" ng-show="tarjaAssinatura.anexoImagem.anexo">  
3 - <img ng-src="data:image/JPEG;base64,{{tarjaAssinatura.anexoImagem.anexo}}" class="img-thumbnail" style="max-width: 80px; height: 80px;"> 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">
4 </div> 5 </div>
5 <div class="col-md-10"> 6 <div class="col-md-10">
6 <iframe id="visualizacaoConteudoTarjaAssinaturaDocumento" srcdoc="{{tarjaAssinatura.conteudo}}" 7 <iframe id="visualizacaoConteudoTarjaAssinaturaDocumento" srcdoc="{{tarjaAssinatura.conteudo}}"
7 - allowfullscreen class="iframe-report" ng-show="!edit" style="min-height: 80px !important; max-height: 120px !important;" /> 8 + allowfullscreen class="iframe-assinatura" ng-show="!edit" style="min-height: 80px !important; max-height: 120px !important;" />
8 </div> 9 </div>
9 </div> 10 </div>
10 \ No newline at end of file 11 \ No newline at end of file