Commit e3e6c05b967a39ddab26cfb2f8d10368e2913496
1 parent
f45a2eca
Exists in
master
redmine #4583 assinatura em documento anexo e online; visualizacao de assinatura…
…s de doc anexo e online;
Showing
13 changed files
with
346 additions
and
89 deletions
Show diff stats
cit-ecm-api/src/main/java/br/com/centralit/api/model/Assinatura.java
... | ... | @@ -68,6 +68,7 @@ public class Assinatura extends PersistentObjectAudit { |
68 | 68 | private Usuario usuario; |
69 | 69 | |
70 | 70 | /** Atributo documentoGed. */ |
71 | + @JsonView({ ViewsEcm.AssinaturaEdit.class }) | |
71 | 72 | @ManyToOne(fetch = FetchType.LAZY) |
72 | 73 | private DocumentoGed documentoGed; |
73 | 74 | |
... | ... | @@ -91,7 +92,7 @@ public class Assinatura extends PersistentObjectAudit { |
91 | 92 | |
92 | 93 | /** Atributo conteudoTarja. */ |
93 | 94 | @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) |
94 | - @JsonView({ Views.DocumentoGedEdit.class }) | |
95 | + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class }) | |
95 | 96 | private ConteudoTarja conteudoTarja; |
96 | 97 | |
97 | 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 | 7 | import javax.persistence.GenerationType; |
8 | 8 | import javax.persistence.Id; |
9 | 9 | import javax.persistence.Lob; |
10 | +import javax.persistence.OneToOne; | |
10 | 11 | import javax.persistence.Transient; |
11 | 12 | |
12 | 13 | import org.hibernate.annotations.Type; |
13 | 14 | |
15 | +import br.com.centralit.api.framework.json.ViewsEcm; | |
14 | 16 | import br.com.centralit.framework.json.Views; |
17 | +import br.com.centralit.framework.model.AnexoImagem; | |
15 | 18 | |
16 | 19 | import com.fasterxml.jackson.annotation.JsonView; |
17 | 20 | |
... | ... | @@ -36,7 +39,7 @@ public class ConteudoTarja { |
36 | 39 | @JsonView({ Views.GenericView.class }) |
37 | 40 | private Long id; |
38 | 41 | |
39 | - @JsonView({ Views.DocumentoGedEdit.class }) | |
42 | + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class }) | |
40 | 43 | @Transient |
41 | 44 | private String conteudo; |
42 | 45 | |
... | ... | @@ -45,6 +48,13 @@ public class ConteudoTarja { |
45 | 48 | @Type(type = "org.hibernate.type.BinaryType") |
46 | 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 | 59 | * Retorna o valor do atributo <code>id</code> |
50 | 60 | * |
... | ... | @@ -105,4 +115,44 @@ public class ConteudoTarja { |
105 | 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 | 245 | private Collection<Assinatura> assinaturas; |
246 | 246 | |
247 | 247 | @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) |
248 | - @JsonView({ Views.DocumentoGedEdit.class }) | |
248 | + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class }) | |
249 | 249 | private ConteudoTarja conteudoTarja; |
250 | 250 | |
251 | 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 | 46 | |
47 | 47 | public static String LOGO = "@logo@"; |
48 | 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 | 51 | public static String HORA_ASSINATURA = "@hora_assinatura@"; |
52 | 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 | 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ç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ça Corporativa - | |
16 | + * </p> | |
17 | + * | |
18 | + * <p> | |
19 | + * <b>Description: </b> | |
20 | + * </p> | |
15 | 21 | * Classe de serviços para a entidade TarjaAssinatura, a qual mantém as regras de negócio. |
16 | - * | |
22 | + * | |
17 | 23 | * @since 13 de abr de 2016 - 13:40:36 |
18 | 24 | * @version 1.0.0 |
19 | 25 | * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) |
20 | - * | |
26 | + * | |
21 | 27 | */ |
22 | 28 | public interface TarjaAssinaturaService extends GenericService<TarjaAssinatura, Long> { |
23 | 29 | |
24 | 30 | /** |
25 | - * | |
31 | + * | |
26 | 32 | * Método responsável por fazer o upload da imagem do logotipo de uma tarja de assinatura. |
27 | - * | |
33 | + * | |
28 | 34 | * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) |
29 | - * | |
35 | + * | |
30 | 36 | * @param file |
31 | 37 | * @param idOrganizacao |
32 | 38 | * @param idConfiguracao |
... | ... | @@ -34,30 +40,30 @@ public interface TarjaAssinaturaService extends GenericService<TarjaAssinatura, |
34 | 40 | void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idConfiguracao); |
35 | 41 | |
36 | 42 | /** |
37 | - * | |
43 | + * | |
38 | 44 | * Método responsável por salvar os dois tipos de tarjas de assinatura ao mesmo tempo |
39 | - * | |
45 | + * | |
40 | 46 | * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) |
41 | - * | |
47 | + * | |
42 | 48 | * @param tarjaAssinaturaVH |
43 | 49 | * @return |
44 | 50 | */ |
45 | - TarjaAssinatura save (TarjaAssinatura tarjaAssinatura); | |
46 | - | |
51 | + TarjaAssinatura save(TarjaAssinatura tarjaAssinatura); | |
47 | 52 | |
48 | 53 | /** |
49 | - * | |
54 | + * | |
50 | 55 | * Método responsável por remover a imagem associada a uma tarja de assinatura. |
51 | - * | |
56 | + * | |
52 | 57 | * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) |
53 | - * | |
58 | + * | |
54 | 59 | * @param tarjaAssinatura |
55 | 60 | * @return |
56 | 61 | */ |
57 | - TarjaAssinatura removeImagem (TarjaAssinatura tarjaAssinatura); | |
58 | - | |
62 | + TarjaAssinatura removeImagem(TarjaAssinatura tarjaAssinatura); | |
63 | + | |
59 | 64 | /** |
60 | 65 | * Método responsável por obter tarja assinatura interna |
66 | + * | |
61 | 67 | * @author rogerio.cassimiro |
62 | 68 | * @return {@link TarjaAssinatura} |
63 | 69 | */ |
... | ... | @@ -65,8 +71,26 @@ public interface TarjaAssinaturaService extends GenericService<TarjaAssinatura, |
65 | 71 | |
66 | 72 | /** |
67 | 73 | * Método responsável por gerar assinatura interna por usuário e por documento |
74 | + * | |
68 | 75 | * @author rogerio.cassimiro |
69 | 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<Assinatura, Long> |
73 | 73 | @Override |
74 | 74 | public Assinatura saveAssinaturaInterna(Assinatura assinatura) { |
75 | 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 | 91 | assinatura.setDocumentoGed(this.documentoGedService.getReference(assinatura.getDocumentoGed().getId())); |
78 | 92 | assinatura.setUsuario(usuario); |
79 | 93 | assinatura.setPessoa(this.pessoaService.getReference(assinatura.getPessoa().getId())); |
80 | 94 | assinatura.setTipoAssinatura(dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA)); |
81 | 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<Assinatura, Long> |
123 | 125 | public Boolean validarAssinaturaPorUsuario(Long idDocumento) { |
124 | 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 | 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 | -import com.ibm.icu.util.Calendar; | |
13 | - | |
14 | 17 | import br.com.centralit.api.dao.TarjaAssinaturaDao; |
15 | 18 | import br.com.centralit.api.model.Assinatura; |
19 | +import br.com.centralit.api.model.ConteudoTarja; | |
16 | 20 | import br.com.centralit.api.model.TarjaAssinatura; |
17 | 21 | import br.com.centralit.api.service.AnexoImagemService; |
18 | 22 | import br.com.centralit.api.service.DominioService; |
... | ... | @@ -22,19 +26,30 @@ import br.com.centralit.framework.model.AnexoImagem; |
22 | 26 | import br.com.centralit.framework.model.Dominio; |
23 | 27 | import br.com.centralit.framework.model.Organizacao; |
24 | 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ç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ça Corporativa - | |
42 | + * </p> | |
43 | + * | |
44 | + * <p> | |
45 | + * <b>Description: </b> | |
46 | + * </p> | |
32 | 47 | * Classe de serviços para a entidade TarjaAssinatura, a qual mantém as regras de negócio. |
33 | - * | |
48 | + * | |
34 | 49 | * @since 13 de abr de 2016 - 13:40:36 |
35 | 50 | * @version 1.0.0 |
36 | 51 | * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>) |
37 | - * | |
52 | + * | |
38 | 53 | */ |
39 | 54 | @Service("tarjaAssinaturaService") |
40 | 55 | public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatura, Long> implements TarjaAssinaturaService { |
... | ... | @@ -48,41 +63,48 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatu |
48 | 63 | private AnexoImagemService anexoImagemService; |
49 | 64 | |
50 | 65 | private TarjaAssinaturaDao tarjaAssinaturaDao; |
51 | - | |
66 | + | |
52 | 67 | @Autowired |
53 | 68 | private DominioService dominioService; |
54 | 69 | |
70 | + @Value("${ecm.doc.key.decrypted.document}") | |
71 | + public String keyDocument; | |
72 | + | |
55 | 73 | @Autowired |
56 | - public TarjaAssinaturaServiceImpl (TarjaAssinaturaDao tarjaAssinaturaDao, @Qualifier("tarjaAssinaturaValidator") Validator validator) { | |
74 | + public TarjaAssinaturaServiceImpl( TarjaAssinaturaDao tarjaAssinaturaDao, @Qualifier("tarjaAssinaturaValidator") Validator validator ) { | |
75 | + | |
57 | 76 | this.dao = tarjaAssinaturaDao; |
58 | 77 | this.tarjaAssinaturaDao = tarjaAssinaturaDao; |
59 | 78 | this.validator = validator; |
60 | 79 | } |
61 | 80 | |
62 | - public TarjaAssinatura save (TarjaAssinatura tarjaAssinatura){ | |
81 | + public TarjaAssinatura save(TarjaAssinatura tarjaAssinatura) { | |
82 | + | |
63 | 83 | return this.merge(tarjaAssinatura); |
64 | 84 | } |
65 | 85 | |
66 | 86 | @Override |
67 | 87 | public TarjaAssinatura merge(TarjaAssinatura tarjaAssinatura) { |
88 | + | |
68 | 89 | this.validarEntidade(tarjaAssinatura, this.validator); |
69 | 90 | return super.merge(tarjaAssinatura); |
70 | 91 | } |
71 | 92 | |
72 | 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 | 97 | anexoImagemService.removeById(tarjaAssinatura.getAnexoImagem().getId()); |
76 | 98 | tarjaAssinatura.setAnexoImagem(null); |
77 | 99 | } |
78 | 100 | return this.merge(tarjaAssinatura); |
79 | 101 | } |
80 | 102 | |
81 | - /**{@inheritDoc}*/ | |
103 | + /** {@inheritDoc} */ | |
82 | 104 | @Override |
83 | 105 | public void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idTarjaAssinatura) { |
84 | 106 | |
85 | - AnexoImagem anexoImagem = new AnexoImagem (); | |
107 | + AnexoImagem anexoImagem = new AnexoImagem(); | |
86 | 108 | try { |
87 | 109 | Organizacao organizacao = (Organizacao) this.organizacaoService.find(idOrganizacao); |
88 | 110 | anexoImagem.setAnexo(file.getBytes()); |
... | ... | @@ -94,35 +116,143 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatu |
94 | 116 | tarjaAssinatura.setAnexoImagem(anexoImagemSaved); |
95 | 117 | this.merge(tarjaAssinatura); |
96 | 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 | 124 | * Método responsável por obter tarja assinatura interna |
125 | + * | |
104 | 126 | * @author rogerio.cassimiro |
105 | 127 | * @return {@link TarjaAssinatura} |
106 | 128 | */ |
107 | 129 | @Override |
108 | 130 | public TarjaAssinatura getTarjaAssinaturaInterna() { |
131 | + | |
109 | 132 | Dominio dominio = dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA); |
110 | 133 | return this.tarjaAssinaturaDao.getTarjaAssinaturaInterna(dominio); |
111 | 134 | } |
112 | - | |
135 | + | |
113 | 136 | /** |
114 | 137 | * Método responsável por gerar assinatura interna por usuário e por documento |
138 | + * | |
115 | 139 | * @author rogerio.cassimiro |
116 | 140 | * @param assinatura |
141 | + * @param formaCriacao | |
117 | 142 | */ |
118 | 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 | 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<Assinatura>{ |
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/listener/StartupListenerEcm.java
... | ... | @@ -573,5 +573,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen |
573 | 573 | internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.USUARIO_SEM_PESSOA", "Usuário não está presente no Cadastro de Pessoa!", dominio, modulo)); |
574 | 574 | internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_SEM_ASSINATURAS", "Esta versão do Documento não possui assinaturas!", dominio, modulo)); |
575 | 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('AssinarDocumentoController', [ '$scope', '$translate', 'Geren |
27 | 27 | _validarAssinaturaPorUsuario(documento.id).then(function(exibirIncluirAssinatura){ |
28 | 28 | $scope.exibirIncluirAssinatura = !(exibirIncluirAssinatura == true); |
29 | 29 | $scope.exibirDocJaAssinado = !$scope.exibirIncluirAssinatura; |
30 | + _getTarjaAssinaturaInterna(); | |
30 | 31 | }); |
31 | 32 | }); |
32 | 33 | } |
... | ... | @@ -73,13 +74,22 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren |
73 | 74 | $scope.showAlert("error", $translate.instant('ECM.VALIDACAO.SENHA_ASSINATURA')); |
74 | 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 | 95 | function _getAssinatura(){ |
... | ... | @@ -89,7 +99,7 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren |
89 | 99 | idTask : $scope.$parent.task.id, |
90 | 100 | password : $scope.autenticacao, |
91 | 101 | pessoa : { id : $scope.pessoa.id}, |
92 | - conteudoTarja : { id : $scope.tarjaAssinatura.id}}; | |
102 | + conteudoTarja : { idTarjaAssinatura : $scope.tarjaAssinatura.id}}; | |
93 | 103 | }; |
94 | 104 | |
95 | 105 | function _atualizarDocumentoSelecionadoAposAssinar(assinatura){ |
... | ... | @@ -146,12 +156,13 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren |
146 | 156 | |
147 | 157 | function _exibirNenhumaAssinatura(){ |
148 | 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 | 163 | $scope.visualizarAssinatura = function(docSelecionado, assinatura){ |
154 | 164 | var valorOriginal = assinatura.isVisualizarAssinatura; |
165 | + var idAssinaturaSelecionada = null; | |
155 | 166 | if(valorOriginal) |
156 | 167 | assinatura.isVisualizarAssinatura = false; |
157 | 168 | else |
... | ... | @@ -165,12 +176,18 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren |
165 | 176 | doc.assinaturas.forEach(function(ass){ |
166 | 177 | if(ass.id != assinatura.id) |
167 | 178 | ass.isVisualizarAssinatura = false; |
168 | - else | |
179 | + else { | |
169 | 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('AssinarDocumentoController', [ '$scope', '$translate', '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 | 210 | \ No newline at end of file | ... | ... |
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaEdit.html
... | ... | @@ -42,8 +42,4 @@ |
42 | 42 | <!-- </div> --> |
43 | 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 | 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 | 41 | </tr> |
42 | 42 | <tr ng-repeat-end ng-show="assinatura.isVisualizarAssinatura"> |
43 | 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 | 54 | </div> |
48 | 55 | </td> |
49 | 56 | </tr> |
50 | 57 | </tbody> |
51 | 58 | <tfoot> |
52 | - <tr ng-hide="nenhumaAssinatura"> | |
59 | + <tr ng-show="nenhumaAssinatura"> | |
53 | 60 | <td colspan="7"> |
54 | 61 | <strong><translate>ECM.LABEL.DOCUMENTO_SEM_ASSINATURA</translate></strong> |
55 | 62 | </td> | ... | ... |
cit-ecm-web/src/main/webapp/html/assinatura/documentoTarjaAssinaturaInterna.html
1 | 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 | 5 | </div> |
5 | 6 | <div class="col-md-10"> |
6 | 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 | 9 | </div> |
9 | 10 | </div> |
10 | 11 | \ No newline at end of file | ... | ... |