using Assinador.Infrastructure.Repository.Interface; using Assinador.Infrastructure.UnitOfWork.Generic; using Assinador.Infrastructure.UnitOfWork.Logic; using Assinador.Model.Domain; using Assinador.Model.Generic; using Assinador.Modelos; using Assinador.Processos; using Gestor.Application.Helpers; using Gestor.Model.Domain.Common; using Gestor.Model.Domain.Generic; using Newtonsoft.Json; using Sign.Modelos; using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Threading.Tasks; namespace Gestor.Application.Servicos { public class AssinaturaServico { public AssinaturaServico() { } public async Task Assinar(Gestor.Model.Domain.Common.ArquivoDigital arquivoDigital, ApoliceAssinador apolice) { AggerSigner aggerSigner = new AggerSigner(AssinadorHelper.Remetente); ArquivoAssinatura arquivoAssinatura = new ArquivoAssinatura(); arquivoAssinatura.set_Bytes(arquivoDigital.get_Arquivo()); arquivoAssinatura.set_Nome(string.Concat(arquivoDigital.get_Descricao(), arquivoDigital.get_Extensao().ToLower())); ArquivoAssinatura arquivoAssinatura1 = arquivoAssinatura; List destinatarios = new List(); Destinatario destinatario = new Destinatario(); destinatario.set_Email(apolice.get_Email()); destinatario.set_Nome(apolice.get_Cliente()); destinatario.set_Documento(apolice.get_Documento()); destinatarios.Add(destinatario); arquivoAssinatura1.set_Destinatarios(destinatarios); ArquivoCriado arquivoCriado = await aggerSigner.EnviarParaAssinatura(arquivoAssinatura1); ArquivoParaAssinaturaAssinador arquivoParaAssinaturaAssinador = new ArquivoParaAssinaturaAssinador(); arquivoParaAssinaturaAssinador.set_AssinaturaId(arquivoCriado.get_Id()); arquivoParaAssinaturaAssinador.set_Chave(arquivoCriado.get_Chave()); arquivoParaAssinaturaAssinador.set_DocumentoId(apolice.get_Id()); arquivoParaAssinaturaAssinador.set_ClienteId(apolice.get_ClienteId()); arquivoParaAssinaturaAssinador.set_IndiceId(apolice.get_ArquivoId()); arquivoParaAssinaturaAssinador.set_UrlAssinatura(arquivoCriado.get_Url()); arquivoParaAssinaturaAssinador.set_Enviado(Funcoes.GetNetworkTime()); arquivoParaAssinaturaAssinador.set_UsuarioId(Recursos.Usuario.get_Id()); return arquivoParaAssinaturaAssinador; } public static async Task BuscarParametrosAssinatura(long id) { ParametrosAssinaturaAssinador parametrosAssinaturaAssinador1 = await Task.Run(() => { ParametrosAssinaturaAssinador parametrosAssinaturaAssinador; try { using (UnitOfWork read = InstanciaAssinador.Read) { parametrosAssinaturaAssinador = read.get_EmpresaRepository().FindByEmpresa(id); } } catch (Exception exception) { parametrosAssinaturaAssinador = null; } return parametrosAssinaturaAssinador; }); return parametrosAssinaturaAssinador1; } public async Task Reenviar(long indice) { ArquivoParaAssinaturaAssinador arquivoParaAssinaturaAssinador; AggerSigner aggerSigner = new AggerSigner(AssinadorHelper.Remetente); using (UnitOfWork commited = InstanciaAssinador.Commited) { ArquivoParaAssinaturaAssinador arquivoParaAssinaturaAssinador1 = commited.get_ArquivoParaAssinaturaRepository().FindByIndice(indice); List nums = new List() { arquivoParaAssinaturaAssinador1.get_AssinaturaId() }; await aggerSigner.ReenviarParaAssinatura(nums, null); AssinaturaLogAssinador assinaturaLogAssinador = new AssinaturaLogAssinador(); assinaturaLogAssinador.set_Acao(1); assinaturaLogAssinador.set_EntidadeId(arquivoParaAssinaturaAssinador1.get_Id()); assinaturaLogAssinador.set_DataHora(Funcoes.GetNetworkTime()); ArquivoParaAssinaturaAssinador arquivoParaAssinaturaAssinador2 = arquivoParaAssinaturaAssinador1; JsonSerializerSettings jsonSerializerSetting = new JsonSerializerSettings(); jsonSerializerSetting.set_ReferenceLoopHandling(1); assinaturaLogAssinador.set_Descricao(JsonConvert.SerializeObject(arquivoParaAssinaturaAssinador2, jsonSerializerSetting)); assinaturaLogAssinador.set_UsuarioId(Recursos.Usuario.get_Id()); assinaturaLogAssinador.set_Versao(ApplicationHelper.Versao.ToString()); this.SaveLog(assinaturaLogAssinador, commited); arquivoParaAssinaturaAssinador = arquivoParaAssinaturaAssinador1; } return arquivoParaAssinaturaAssinador; } public async Task Save(ArquivoParaAssinaturaAssinador arquivo) { ArquivoParaAssinaturaAssinador arquivoParaAssinaturaAssinador2 = await Task.Run(() => { ArquivoParaAssinaturaAssinador arquivoParaAssinaturaAssinador; try { using (UnitOfWork commited = InstanciaAssinador.Commited) { arquivo = (arquivo.get_Id() == 0 ? commited.get_ArquivoParaAssinaturaRepository().SaveOrUpdate(arquivo) : commited.get_ArquivoParaAssinaturaRepository().Merge(arquivo)); AssinaturaLogAssinador assinaturaLogAssinador = new AssinaturaLogAssinador(); assinaturaLogAssinador.set_Acao(0); assinaturaLogAssinador.set_EntidadeId(arquivo.get_Id()); assinaturaLogAssinador.set_DataHora(Funcoes.GetNetworkTime()); ArquivoParaAssinaturaAssinador arquivoParaAssinaturaAssinador1 = arquivo; JsonSerializerSettings jsonSerializerSetting = new JsonSerializerSettings(); jsonSerializerSetting.set_ReferenceLoopHandling(1); assinaturaLogAssinador.set_Descricao(JsonConvert.SerializeObject(arquivoParaAssinaturaAssinador1, jsonSerializerSetting)); assinaturaLogAssinador.set_UsuarioId(Recursos.Usuario.get_Id()); assinaturaLogAssinador.set_Versao(ApplicationHelper.Versao.ToString()); this.SaveLog(assinaturaLogAssinador, commited); commited.Commit(); arquivoParaAssinaturaAssinador = arquivo; } } catch (Exception exception) { arquivoParaAssinaturaAssinador = null; } return arquivoParaAssinaturaAssinador; }); return arquivoParaAssinaturaAssinador2; } internal async void SaveLog(AssinaturaLogAssinador keyValues, UnitOfWork unitOfWork) { if (keyValues != null) { try { unitOfWork.get_AssinaturaLogRepository().SaveOrUpdate(keyValues); unitOfWork.Commit(); } catch (Exception exception) { } } } public async Task VerificarAssinado(long id) { bool flag1 = await Task.Run(() => { bool flag; using (UnitOfWork read = InstanciaAssinador.Read) { ArquivoParaAssinaturaAssinador arquivoParaAssinaturaAssinador = read.get_ArquivoParaAssinaturaRepository().FindByIndice(id); flag = (arquivoParaAssinaturaAssinador == null ? false : (arquivoParaAssinaturaAssinador.get_Status() == 1 ? true : arquivoParaAssinaturaAssinador.get_Status() == 2)); } return flag; }); return flag1; } public async Task VerificarEnviado(long id) { bool flag1 = await Task.Run(() => { bool flag; using (UnitOfWork read = InstanciaAssinador.Read) { ArquivoParaAssinaturaAssinador arquivoParaAssinaturaAssinador = read.get_ArquivoParaAssinaturaRepository().FindByIndice(id); flag = (arquivoParaAssinaturaAssinador == null ? false : arquivoParaAssinaturaAssinador.get_Status() == 0); } return flag; }); return flag1; } } }