using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using Gestor.Application.Helpers; using Gestor.Application.Servicos; using Gestor.Common.Validation; using Gestor.Model.Common; using Gestor.Model.Domain.Common; using Gestor.Model.Domain.Ferramentas; using Gestor.Model.Domain.Generic; using Gestor.Model.Domain.MalaDireta; using Gestor.Model.Domain.Seguros; namespace Gestor.Application.ViewModels.Generic; public class DialogEnviarEmailsViewModel : BaseSegurosViewModel { private ObservableCollection _listaTela = new ObservableCollection(); private string _infoEnvio = "CLIQUE EM ENVIAR PARA INCIAR O ENVIO"; private bool _assinatura { get; set; } private bool _original { get; set; } private List _arquivosAnexados { get; set; } private string _assunto { get; set; } private string _corpo { get; set; } private Credencial _credencial { get; set; } private FiltroArquivoDigital _filtro { get; set; } private bool _salvarAd { get; set; } private bool _confirmarLeitura { get; set; } public List Lista { get; set; } public ObservableCollection ListaTela { get { return _listaTela; } set { _listaTela = value; OnPropertyChanged("ListaTela"); } } public string InfoEnvio { get { return _infoEnvio; } set { _infoEnvio = value; OnPropertyChanged("InfoEnvio"); } } public DialogEnviarEmailsViewModel(List lista, bool assinatura, bool original, List arquivosAnexados, string assunto, string corpo, Credencial credencial, FiltroArquivoDigital filtro, bool salvarAd, bool confirmarLeitura) { lista.ForEach(delegate(MalaDireta x) { x.InfoEnvio = null; }); Lista = lista; PrepararLista(); _assinatura = assinatura; _original = original; _arquivosAnexados = arquivosAnexados; _assunto = assunto; _corpo = corpo; _credencial = credencial; _filtro = filtro; _salvarAd = salvarAd; _confirmarLeitura = confirmarLeitura; } private void PrepararLista() { List listaTela = new List(); Lista.ForEach(delegate(MalaDireta x) { listaTela.Add(x); if (x.Copia != null) { listaTela.AddRange(((IEnumerable)x.Copia.CopiaOculta).Select((Func)((string c) => new MalaDireta { Cliente = x.Cliente, Email = c, Enviado = x.Enviado, InfoEnvio = x.InfoEnvio })).ToList()); } }); ListaTela = new ObservableCollection(listaTela); } public void Enviar() { Enviar(_assinatura, _original, _arquivosAnexados, _assunto, _corpo, _credencial, _filtro, _salvarAd, _confirmarLeitura); } private async void Enviar(bool assinatura, bool original, List arquivosAnexados, string assunto, string corpo, Credencial credencial, FiltroArquivoDigital filtro, bool salvarAd, bool confirmarLeitura) { Loading(isLoading: true); InfoEnvio = "ENVIANDO, AGUARDE ATÉ O PROCESSO TERMINAR."; await EnviarEmails(assinatura, original, arquivosAnexados, assunto, corpo, credencial, filtro, salvarAd, confirmarLeitura); InfoEnvio = "TENTATIVA DE ENVIO CONCLUÍDA, CONFIRA O STATUS ABAIXO."; Loading(isLoading: false); } private async Task EnviarEmails(bool assinatura, bool original, List arquivosAnexados, string assunto, string corpo, Credencial credencial, FiltroArquivoDigital filtro, bool salvarAd, bool confirmarLeitura) { List list = new List(); VariaveisMalaDireta[] array = (VariaveisMalaDireta[])Enum.GetValues(typeof(VariaveisMalaDireta)); foreach (VariaveisMalaDireta val in array) { list.Add(ValidationHelper.GetEntity((Enum)(object)val)); } bool temVariaveis = list.Any(assunto.Contains) || list.Any(corpo.Contains) || Lista.Any((MalaDireta x) => x.ArquivoDigital != null && x.ArquivoDigital.Count > 0); MailHelper mail = new MailHelper(); bool parar = false; if (salvarAd) { ArquivoDigitalServico arquivoServico = new ArquivoDigitalServico(); foreach (MalaDireta x2 in Lista) { arquivosAnexados.ForEach(delegate(ArquivoDigital a) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Invalid comparison between Unknown and I4 //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Invalid comparison between Unknown and I4 //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Invalid comparison between Unknown and I4 //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Invalid comparison between Unknown and I4 //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Invalid comparison between Unknown and I4 a.IdCliente = (((int)x2.Tela == 1) ? ((DomainBase)x2.Cliente).Id : 0); a.IdDocumento = (((int)x2.Tela == 2) ? ((DomainBase)x2.Apolice).Id : 0); a.IdItem = (((int)x2.Tela == 3) ? ((DomainBase)x2.Item).Id : 0); a.IdParcela = (((int)x2.Tela == 5) ? ((DomainBase)x2.Parcela).Id : 0); a.IdProspeccao = (((int)x2.Tela == 33) ? ((DomainBase)x2.Prospeccao).Id : 0); a.IdSinistro = (((int)x2.Tela == 7) ? ((DomainBase)x2.Sinistro).Id : 0); a.IdEmpresa = Recursos.Usuario.IdEmpresa; }); List ids = await arquivoServico.Insert(arquivosAnexados.ToList()); if (arquivosAnexados.Any((ArquivoDigital arquivo) => arquivo.Arquivo == null)) { arquivosAnexados = await arquivoServico.Buscar(ids); } } } if (!string.IsNullOrWhiteSpace(credencial.Cabecalho)) { corpo = credencial.Cabecalho + corpo; } if (!string.IsNullOrWhiteSpace(credencial.Assinatura)) { corpo = corpo + "

" + credencial.Assinatura; } if (!temVariaveis) { while (!parar) { List list2 = Lista.Where((MalaDireta x) => !x.Enviado.HasValue).Take(200).ToList(); List cco = list2.Select((MalaDireta x) => x.Email).ToList(); list2.ForEach(delegate(MalaDireta x) { if (x.Copia != null) { cco.AddRange(x.Copia.CopiaComum); cco.AddRange(x.Copia.CopiaOculta); } }); cco = cco.Distinct().ToList(); Destinatario destinatario = new Destinatario { Assunto = assunto, Corpo = corpo, Email = credencial.Email, Nome = credencial.Descricao, Encaminhar = new List(), EncaminharOculto = cco, Anexos = arquivosAnexados.ToList() }; LogEnvio result = await mail.SendAsync(credencial, destinatario, filtro, Lista.ToList(), (TipoTela)0, confirmarLeitura); List list3 = Lista.ToList(); list3.ForEach(delegate(MalaDireta x) { x.Enviado = result.Enviado; x.InfoEnvio = (result.Enviado ? "ENVIADO COM SUCESSO" : ("NÃO ENVIADO, ENTRE EM CONTATO COM SEU PROVEDOR/SERVIÇO DE E-MAIL E INFORME OS DADOS ABAIXO: \r\n" + result.Erro)); }); Lista = list3; parar = Lista.All((MalaDireta x) => x.Enviado.HasValue); } } else { for (int i = 0; i < Lista.Count; i++) { MalaDireta envio = Lista[i]; List list5; if (envio.ArquivoDigital != null) { List list4 = ((!(!assinatura || original)) ? (await ArquivoDigitalServico.Buscar(envio.ArquivoDigital.Where((IndiceArquivoDigital x) => string.IsNullOrWhiteSpace(x.UrlAssinatura)).ToList())) : (await ArquivoDigitalServico.Buscar(envio.ArquivoDigital.ToList()))); list5 = list4; } else { list5 = new List(); } List arquivos = list5; if (arquivosAnexados != null && arquivosAnexados.Count > 0) { arquivos.AddRange(arquivosAnexados); } if (((envio != null) ? envio.ArquivoDigital : null) == null) { int num; if (envio == null) { num = 0; } else { Documento apolice = envio.Apolice; num = ((((apolice != null) ? new long?(((DomainBase)apolice).Id) : null) > 0) ? 1 : 0); } if (num != 0) { MalaDireta val2 = envio; val2.ArquivoDigital = await ArquivoDigitalServico.BuscarPorTipo((TipoArquivoDigital)2, ((DomainBase)envio.Apolice).Id); } } Destinatario val3 = new Destinatario { Assunto = Funcoes.SubstituirVariaveis(assunto, envio), Corpo = Funcoes.SubstituirVariaveis(corpo, envio), Email = envio.Email }; Copia copia = envio.Copia; val3.Encaminhar = ((copia != null) ? copia.CopiaComum : null); Copia copia2 = envio.Copia; val3.EncaminharOculto = ((copia2 != null) ? copia2.CopiaOculta : null); val3.Nome = envio.Cliente.Nome; val3.Anexos = arquivos; Destinatario destinatario2 = val3; List maladireta = new List { envio }; LogEnvio val4 = await mail.SendAsync(credencial, destinatario2, filtro, maladireta, (TipoTela)0, confirmarLeitura); envio.Enviado = val4.Enviado; envio.InfoEnvio = (val4.Enviado ? "ENVIADO COM SUCESSO" : ("NÃO ENVIADO, ENTRE EM CONTATO COM SEU PROVEDOR/SERVIÇO DE E-MAIL E INFORME OS DADOS ABAIXO: \r\n" + val4.Erro)); envio.ArquivoDigital = null; Lista = Lista; } } PrepararLista(); } }