diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/model/Assinatura.java b/cit-ecm-api/src/main/java/br/com/centralit/api/model/Assinatura.java index 4420918..ef2d7c8 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/model/Assinatura.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/model/Assinatura.java @@ -68,6 +68,7 @@ public class Assinatura extends PersistentObjectAudit { private Usuario usuario; /** Atributo documentoGed. */ + @JsonView({ ViewsEcm.AssinaturaEdit.class }) @ManyToOne(fetch = FetchType.LAZY) private DocumentoGed documentoGed; @@ -91,7 +92,7 @@ public class Assinatura extends PersistentObjectAudit { /** Atributo conteudoTarja. */ @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JsonView({ Views.DocumentoGedEdit.class }) + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class }) private ConteudoTarja conteudoTarja; /** Atributo pessoa. */ diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/model/ConteudoTarja.java b/cit-ecm-api/src/main/java/br/com/centralit/api/model/ConteudoTarja.java index 4cac3a3..b1c7d40 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/model/ConteudoTarja.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/model/ConteudoTarja.java @@ -7,11 +7,14 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Lob; +import javax.persistence.OneToOne; import javax.persistence.Transient; import org.hibernate.annotations.Type; +import br.com.centralit.api.framework.json.ViewsEcm; import br.com.centralit.framework.json.Views; +import br.com.centralit.framework.model.AnexoImagem; import com.fasterxml.jackson.annotation.JsonView; @@ -36,7 +39,7 @@ public class ConteudoTarja { @JsonView({ Views.GenericView.class }) private Long id; - @JsonView({ Views.DocumentoGedEdit.class }) + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class }) @Transient private String conteudo; @@ -45,6 +48,13 @@ public class ConteudoTarja { @Type(type = "org.hibernate.type.BinaryType") private byte[] conteudoCriptografado; + @OneToOne + @JsonView({ ViewsEcm.AssinaturaEdit.class }) + private AnexoImagem anexoImagem; + + @Transient + private Long idTarjaAssinatura; + /** * Retorna o valor do atributo id * @@ -105,4 +115,44 @@ public class ConteudoTarja { this.conteudoCriptografado = conteudoCriptografado; } + /** + * Retorna o valor do atributo idTarjaAssinatura + * + * @return Long + */ + public Long getIdTarjaAssinatura() { + + return idTarjaAssinatura; + } + + /** + * Define o valor do atributo idTarjaAssinatura. + * + * @param idTarjaAssinatura + */ + public void setIdTarjaAssinatura(Long idTarjaAssinatura) { + + this.idTarjaAssinatura = idTarjaAssinatura; + } + + /** + * Retorna o valor do atributo anexoImagem + * + * @return AnexoImagem + */ + public AnexoImagem getAnexoImagem() { + + return anexoImagem; + } + + /** + * Define o valor do atributo anexoImagem. + * + * @param anexoImagem + */ + public void setAnexoImagem(AnexoImagem anexoImagem) { + + this.anexoImagem = anexoImagem; + } + } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java b/cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java index b316613..647a87a 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java @@ -245,7 +245,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { private Collection assinaturas; @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JsonView({ Views.DocumentoGedEdit.class }) + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class }) private ConteudoTarja conteudoTarja; @Transient diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/model/TarjaAssinatura.java b/cit-ecm-api/src/main/java/br/com/centralit/api/model/TarjaAssinatura.java index 2b7d079..91a4cb7 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/model/TarjaAssinatura.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/model/TarjaAssinatura.java @@ -46,8 +46,8 @@ public class TarjaAssinatura extends PersistentObjectAudit{ public static String LOGO = "@logo@"; public static String NOME_ASSINANTE = "@nome_assinante@"; - public static String FUNCAO_ASSINANTE = " @funcao_assinante@"; - public static String DATA_ASSINATURA = " @data_assinatura@"; + public static String FUNCAO_ASSINANTE = "@funcao_assinante@"; + public static String DATA_ASSINATURA = "@data_assinatura@"; public static String HORA_ASSINATURA = "@hora_assinatura@"; public static String CODIGO_ASSINATURA = "@codigo_assinatura@"; diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/TarjaAssinaturaService.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/TarjaAssinaturaService.java index b65afc3..f6be268 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/TarjaAssinaturaService.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/TarjaAssinaturaService.java @@ -7,26 +7,32 @@ import br.com.centralit.api.model.TarjaAssinatura; import br.com.centralit.framework.service.arquitetura.GenericService; /** - *

- * - *

Company: Central IT - Governança Corporativa -

- * - *

Description:

+ *

+ * + *

+ * + *

+ * Company: Central IT - Governança Corporativa - + *

+ * + *

+ * Description: + *

* Classe de serviços para a entidade TarjaAssinatura, a qual mantém as regras de negócio. - * + * * @since 13 de abr de 2016 - 13:40:36 * @version 1.0.0 * @author ciro.junior (ciro.junior@centralit.com.br) - * + * */ public interface TarjaAssinaturaService extends GenericService { /** - * + * * Método responsável por fazer o upload da imagem do logotipo de uma tarja de assinatura. - * + * * @author ciro.junior (ciro.junior@centralit.com.br) - * + * * @param file * @param idOrganizacao * @param idConfiguracao @@ -34,30 +40,30 @@ public interface TarjaAssinaturaService extends GenericServiceciro.junior@centralit.com.br) - * + * * @param tarjaAssinaturaVH * @return */ - TarjaAssinatura save (TarjaAssinatura tarjaAssinatura); - + TarjaAssinatura save(TarjaAssinatura tarjaAssinatura); /** - * + * * Método responsável por remover a imagem associada a uma tarja de assinatura. - * + * * @author ciro.junior (ciro.junior@centralit.com.br) - * + * * @param tarjaAssinatura * @return */ - TarjaAssinatura removeImagem (TarjaAssinatura tarjaAssinatura); - + TarjaAssinatura removeImagem(TarjaAssinatura tarjaAssinatura); + /** * Método responsável por obter tarja assinatura interna + * * @author rogerio.cassimiro * @return {@link TarjaAssinatura} */ @@ -65,8 +71,26 @@ public interface TarjaAssinaturaService extends GenericService @Override public Assinatura saveAssinaturaInterna(Assinatura assinatura) { Usuario usuario = (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - this.validarSenha(assinatura.getPassword(), usuario); + validarSenha(assinatura.getPassword(), usuario); + montarTransients(assinatura, usuario); + historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura); + tarjaAssinaturaService.gerarAssinaturaInternaUsuario(assinatura,assinatura.getDocumentoGed().getFormaCriacao().getCodigo()); + return super.save(assinatura); + } + + /** + * Método responsável por montar transients da assinatura + * @author rogerio.cassimiro + * @param assinatura + * @param usuario + */ + private void montarTransients(Assinatura assinatura, Usuario usuario) { + assinatura.setDocumentoGed(this.documentoGedService.getReference(assinatura.getDocumentoGed().getId())); assinatura.setUsuario(usuario); assinatura.setPessoa(this.pessoaService.getReference(assinatura.getPessoa().getId())); assinatura.setTipoAssinatura(dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA)); assinatura.setFuncao(funcaoService.getReference(assinatura.getFuncao().getId())); - historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura); - salvarTarjaAssinaturaPorTipoDocumento(assinatura); - return super.save(assinatura); - } - - private void salvarTarjaAssinaturaPorTipoDocumento(Assinatura assinatura) { - //OnLine - if(assinatura.getDocumentoGed().getFormaCriacao().getCodigo() == 1){ - //TODO ON LINE - }else { - this.tarjaAssinaturaService.gerarAssinaturaInternaUsuario(assinatura); - } } /** @@ -123,4 +125,14 @@ public class AssinaturaServiceImpl extends GenericServiceImpl public Boolean validarAssinaturaPorUsuario(Long idDocumento) { return this.assinaturaDao.validarAssinaturaPorUsuario(idDocumento, ((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId()); } + + @Override + public Assinatura getReference(Long id) { + Assinatura assinatura = (Assinatura) this.assinaturaDao.getReference(id); + assinatura.getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getConteudoTarja().getConteudoCriptografado())); + if(UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())){ + assinatura.getDocumentoGed().getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado())); + } + return assinatura; + } } diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java index 160dfea..c5f6618 100644 --- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java +++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java @@ -1,18 +1,22 @@ package br.com.centralit.api.service.impl; import java.io.IOException; +import java.security.Key; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.validation.Validator; import org.springframework.web.multipart.MultipartFile; -import com.ibm.icu.util.Calendar; - import br.com.centralit.api.dao.TarjaAssinaturaDao; import br.com.centralit.api.model.Assinatura; +import br.com.centralit.api.model.ConteudoTarja; import br.com.centralit.api.model.TarjaAssinatura; import br.com.centralit.api.service.AnexoImagemService; import br.com.centralit.api.service.DominioService; @@ -22,19 +26,30 @@ import br.com.centralit.framework.model.AnexoImagem; import br.com.centralit.framework.model.Dominio; import br.com.centralit.framework.model.Organizacao; import br.com.centralit.framework.service.arquitetura.GenericServiceImpl; +import br.com.centralit.framework.util.UtilDate; +import br.com.centralit.framework.util.UtilObjeto; + +import com.ibm.icu.util.Calendar; +import com.lowagie.text.DocumentException; /** - *

- * - *

Company: Central IT - Governança Corporativa -

- * - *

Description:

+ *

+ * + *

+ * + *

+ * Company: Central IT - Governança Corporativa - + *

+ * + *

+ * Description: + *

* Classe de serviços para a entidade TarjaAssinatura, a qual mantém as regras de negócio. - * + * * @since 13 de abr de 2016 - 13:40:36 * @version 1.0.0 * @author ciro.junior (ciro.junior@centralit.com.br) - * + * */ @Service("tarjaAssinaturaService") public class TarjaAssinaturaServiceImpl extends GenericServiceImpl implements TarjaAssinaturaService { @@ -48,41 +63,48 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl"); + conteudoOriginalDocOnLine = conteudoOriginalDocOnLine.concat(conteudo); + + assinatura.getDocumentoGed().getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoOriginalDocOnLine)); + } + + /** + * Método responsável por criptografar o texto através da chave + * + * @author rogerio.costa + * @param text + * @return {@link Byte} + */ + @Override + public byte[] encrypted(String text) { + + try { + byte[] encrypted = null; + Key aesKey = new SecretKeySpec(this.keyDocument.getBytes(), "AES"); + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.ENCRYPT_MODE, aesKey); + encrypted = cipher.doFinal(text.getBytes()); + + return encrypted; + + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * Método responsável por descriptografar texto + * + * @author rogerio.cassimiro + * @param text + * @return {@link String} + */ + @Override + public String decrypted(byte[] text) { + + try { + Cipher cipher = Cipher.getInstance("AES"); + Key aesKey = new SecretKeySpec(this.keyDocument.getBytes(), "AES"); + + cipher.init(Cipher.DECRYPT_MODE, aesKey); + String decrypted = new String(cipher.doFinal(text)); + + return decrypted; + + } catch (Exception e) { + e.printStackTrace(); + } + return null; } } diff --git a/cit-ecm-web/src/main/java/br/com/centralit/controller/AssinaturaController.java b/cit-ecm-web/src/main/java/br/com/centralit/controller/AssinaturaController.java index ac1cbbb..3b48c43 100644 --- a/cit-ecm-web/src/main/java/br/com/centralit/controller/AssinaturaController.java +++ b/cit-ecm-web/src/main/java/br/com/centralit/controller/AssinaturaController.java @@ -2,6 +2,7 @@ package br.com.centralit.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -69,4 +70,14 @@ public class AssinaturaController extends GenericController{ return ViewsEcm.DocumentoGedEdit.class; } + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + @ResponseBody + public ResponseBodyWrapper getObject(@PathVariable("id") Long id) { + ResultResponseVH resultResponseVH = new ResultResponseVH(genericService.getReference(id)); + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(resultResponseVH, ViewsEcm.AssinaturaEdit.class); + return responseBody; + } + + + } diff --git a/cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java b/cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java index f46ddf7..0cbf98d 100644 --- a/cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java +++ b/cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java @@ -573,5 +573,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.USUARIO_SEM_PESSOA", "Usuário não está presente no Cadastro de Pessoa!", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_SEM_ASSINATURAS", "Esta versão do Documento não possui assinaturas!", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_JA_ASSINADO", "Documento já foi assinado por este usuário!", dominio, modulo)); + 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)); } } diff --git a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/AssinarDocumentoController.js b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/AssinarDocumentoController.js index 0fc80e1..fe49071 100644 --- a/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/AssinarDocumentoController.js +++ b/cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/AssinarDocumentoController.js @@ -27,6 +27,7 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren _validarAssinaturaPorUsuario(documento.id).then(function(exibirIncluirAssinatura){ $scope.exibirIncluirAssinatura = !(exibirIncluirAssinatura == true); $scope.exibirDocJaAssinado = !$scope.exibirIncluirAssinatura; + _getTarjaAssinaturaInterna(); }); }); } @@ -73,13 +74,22 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren $scope.showAlert("error", $translate.instant('ECM.VALIDACAO.SENHA_ASSINATURA')); return; } - - AssinaturaRepository.saveAssinaturaInterna(_getAssinatura()).then(function(result){ - _atualizarDocumentoSelecionadoAposAssinar(result.originalElement); - _resetAssinar(); - _atualizarDocDoProcessoAposAssinar(); - $scope.showAlert("success", $translate.instant('ECM.ASSINADO_SUCESSO')); + + $scope.$openModalConfirm({ + message: $translate.instant("ECM.MSG.CONFIRMAR_ASSINATURA"), + callback: function () { + $scope.setLoadingRemove(true); + AssinaturaRepository.saveAssinaturaInterna(_getAssinatura()).then(function(result){ + _atualizarDocumentoSelecionadoAposAssinar(result.originalElement); + _resetAssinar(); + _atualizarDocDoProcessoAposAssinar(); + $scope.$modalConfirmInstance.dismiss('cancel'); + $scope.setLoading(false); + $scope.showAlert("success", $translate.instant('ECM.ASSINADO_SUCESSO')); + }); + } }); + }; function _getAssinatura(){ @@ -89,7 +99,7 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren idTask : $scope.$parent.task.id, password : $scope.autenticacao, pessoa : { id : $scope.pessoa.id}, - conteudoTarja : { id : $scope.tarjaAssinatura.id}}; + conteudoTarja : { idTarjaAssinatura : $scope.tarjaAssinatura.id}}; }; function _atualizarDocumentoSelecionadoAposAssinar(assinatura){ @@ -146,12 +156,13 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren function _exibirNenhumaAssinatura(){ $scope.nenhumaAssinatura = $scope.documentosSelecionados.some(function(doc){ - return doc.assinaturas.length > 0; + return doc.assinaturas.length == 0; }); }; $scope.visualizarAssinatura = function(docSelecionado, assinatura){ var valorOriginal = assinatura.isVisualizarAssinatura; + var idAssinaturaSelecionada = null; if(valorOriginal) assinatura.isVisualizarAssinatura = false; else @@ -165,12 +176,18 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren doc.assinaturas.forEach(function(ass){ if(ass.id != assinatura.id) ass.isVisualizarAssinatura = false; - else + else { ass.isVisualizarAssinatura = valorOriginal != true; + idAssinaturaSelecionada = angular.copy(ass.id); + } }); }); - $scope.visualizarAssinaturaOnLine = $scope.doc.formaCriacao.codigo == 1; + $scope.visualizarAssinaturaOnLine = $scope.doc.formaCriacao.codigo == 1; + _getTarjaDaAssinatura(idAssinaturaSelecionada); +// if($scope.visualizarAssinaturaOnLine) { +// //TODO TARJA DOC ON +// } else }); }; @@ -182,4 +199,11 @@ citApp.controller('AssinarDocumentoController', [ '$scope', '$translate', 'Geren }); }); }; + + function _getTarjaDaAssinatura(idAssinaturaSelecionada){ + AssinaturaRepository.get(idAssinaturaSelecionada).then(function(result){ + $scope.assinaturaSelecionada = result.originalElement; + }); + } + }] ); \ No newline at end of file diff --git a/cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaEdit.html b/cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaEdit.html index aceee17..6d77f59 100644 --- a/cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaEdit.html +++ b/cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaEdit.html @@ -42,8 +42,4 @@ -
-
-
-
-
\ No newline at end of file +
diff --git a/cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturas.html b/cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturas.html index 23266d2..d1909e6 100644 --- a/cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturas.html +++ b/cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturas.html @@ -41,15 +41,22 @@ - -
- doc anexo + +
+
+ +
+
+ +
- + ECM.LABEL.DOCUMENTO_SEM_ASSINATURA diff --git a/cit-ecm-web/src/main/webapp/html/assinatura/documentoTarjaAssinaturaInterna.html b/cit-ecm-web/src/main/webapp/html/assinatura/documentoTarjaAssinaturaInterna.html index 69d5f35..4404365 100644 --- a/cit-ecm-web/src/main/webapp/html/assinatura/documentoTarjaAssinaturaInterna.html +++ b/cit-ecm-web/src/main/webapp/html/assinatura/documentoTarjaAssinaturaInterna.html @@ -1,9 +1,10 @@
-
- +
+