using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using System.Windows; using Gestor.Application.Helpers; using Gestor.Application.Servicos; using Gestor.Application.Servicos.Generic; using Gestor.Application.Servicos.Seguros; using Gestor.Application.ViewModels.Generic; 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.Ferramentas; public class MalaDiretaViewModel : BaseSegurosViewModel { private readonly MalaDiretaServico _servico; private readonly FiltroArquivoDigital _filtro; private ObservableCollection _malaDireta = new ObservableCollection(); private ObservableCollection _variaveis = new ObservableCollection(); private bool _enableCredencial; private ObservableCollection _modelos = new ObservableCollection(); private ComboModelo _selectedModelo = new ComboModelo(); private ComboVariavel _selectedVariavel; private string _assunto; private string _corpo; private ObservableCollection _credenciais = new ObservableCollection(); private Credencial _selectedCredencial = new Credencial(); private ObservableCollection _arquivos = new ObservableCollection(); private ObservableCollection _arquivosAnexados = new ObservableCollection(); private ArquivoDigital _selectedAnexado = new ArquivoDigital(); private Visibility _visibilitySalvarAnexos = (Visibility)1; private bool _enviarOriginal; private bool _salvarArquivoDigital; private bool _assinatura; public bool _confirmarLeitura; public ObservableCollection MalaDireta { get { return _malaDireta; } set { _malaDireta = value; OnPropertyChanged("MalaDireta"); } } public ObservableCollection Variaveis { get { return _variaveis; } set { _variaveis = new ObservableCollection(value.OrderBy((ComboVariavel x) => x.Indisponivel).ThenBy(delegate(ComboVariavel x) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) VariaveisMalaDireta variaveisMalaDireta = x.VariaveisMalaDireta; return ((object)(VariaveisMalaDireta)(ref variaveisMalaDireta)).ToString(); })); OnPropertyChanged("Variaveis"); } } public bool EnableCredencial { get { return _enableCredencial; } set { _enableCredencial = value; OnPropertyChanged("EnableCredencial"); } } public ObservableCollection Modelos { get { return _modelos; } set { List source = ((VariaveisMalaDireta[])Enum.GetValues(typeof(VariaveisMalaDireta))).Select((VariaveisMalaDireta variavel) => ValidationHelper.GetEntity((Enum)(object)variavel)).ToList(); List variaveisPermitidas = (from x in Variaveis where !x.Indisponivel select x into v select ValidationHelper.GetEntity((Enum)(object)v.VariaveisMalaDireta)).ToList(); List list = new List(); foreach (ComboModelo item2 in value) { if (source.Where(item2.ModeloMalaDireta.Corpo.Contains).All((string s) => variaveisPermitidas.Contains(s))) { list.Add(item2); continue; } ComboModelo item = new ComboModelo { ModeloMalaDireta = item2.ModeloMalaDireta, Indisponivel = true }; list.Add(item); } _modelos = new ObservableCollection(from x in list orderby x.Indisponivel, x.ModeloMalaDireta.Assunto select x); OnPropertyChanged("Modelos"); } } public ComboModelo SelectedModelo { get { return _selectedModelo; } set { _selectedModelo = value; VerificarEnables((value != null) ? new long?(((DomainBase)value.ModeloMalaDireta).Id) : null); WorkOnSelectedModelo(value?.ModeloMalaDireta); OnPropertyChanged("SelectedModelo"); } } public ComboVariavel SelectedVariavel { get { return _selectedVariavel; } set { _selectedVariavel = value; OnPropertyChanged("SelectedVariavel"); } } public string Assunto { get { return _assunto; } set { _assunto = value; OnPropertyChanged("Assunto"); } } public string Corpo { get { return _corpo; } set { _corpo = value; OnPropertyChanged("Corpo"); } } public ObservableCollection Credenciais { get { return _credenciais; } set { _credenciais = value; OnPropertyChanged("Credenciais"); } } public Credencial SelectedCredencial { get { return _selectedCredencial; } set { _selectedCredencial = value; OnPropertyChanged("SelectedCredencial"); } } public ObservableCollection Arquivos { get { return _arquivos; } set { _arquivos = value; OnPropertyChanged("Arquivos"); } } public ObservableCollection ArquivosAnexados { get { return _arquivosAnexados; } set { _arquivosAnexados = value; OnPropertyChanged("ArquivosAnexados"); } } public ArquivoDigital SelectedAnexado { get { return _selectedAnexado; } set { _selectedAnexado = value; OnPropertyChanged("SelectedAnexado"); } } public Visibility VisibilitySalvarAnexos { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return _visibilitySalvarAnexos; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) _visibilitySalvarAnexos = value; OnPropertyChanged("VisibilitySalvarAnexos"); } } public bool EnviarOriginal { get { return _enviarOriginal; } set { _enviarOriginal = value; OnPropertyChanged("EnviarOriginal"); } } public bool SalvarArquivoDigital { get { return _salvarArquivoDigital; } set { _salvarArquivoDigital = value; OnPropertyChanged("SalvarArquivoDigital"); } } public bool Assinatura { get { return _assinatura; } set { _assinatura = value; OnPropertyChanged("Assinatura"); } } public bool ConfirmarLeitura { get { return _confirmarLeitura; } set { _confirmarLeitura = value; } } public bool Enviado { get; set; } public MalaDiretaViewModel(FiltroArquivoDigital filtro = null) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) _servico = new MalaDiretaServico(); _filtro = filtro; BuscarCredenciais(); } private async void BuscarCredenciais() { await PermissaoTela((TipoTela)39); VerificarEnables(null); Credenciais = new ObservableCollection((await new BaseServico().BuscarCredenciais()).OrderBy((Credencial x) => x.Descricao)); EnableCredencial = !Restricao((TipoRestricao)110); SelectedCredencial = (EnableCredencial ? (((IEnumerable)Credenciais).FirstOrDefault((Func)((Credencial x) => x.IdUsuario == ((DomainBase)Recursos.Usuario).Id)) ?? Credenciais.FirstOrDefault()) : ((IEnumerable)Credenciais).FirstOrDefault((Func)((Credencial x) => x.IdUsuario == ((DomainBase)Recursos.Usuario).Id))); } private async Task CarregarModelos(ModeloMalaDireta modelo = null) { List obj = await _servico.BuscarModelos(); List list = new List(); foreach (ModeloMalaDireta item in obj) { list.Add(new ComboModelo { ModeloMalaDireta = item }); } Modelos = new ObservableCollection(list); if (modelo != null) { SelectedModelo = Modelos.FirstOrDefault((ComboModelo x) => ((DomainBase)x.ModeloMalaDireta).Id == ((DomainBase)modelo).Id); } } private void WorkOnSelectedModelo(ModeloMalaDireta value) { if (value != null) { Corpo = SelectedModelo.ModeloMalaDireta.Corpo; Assunto = SelectedModelo.ModeloMalaDireta.Assunto; } } public async void Anexar() { List attacheds = ((IEnumerable)Arquivos).Select((Func)((IndiceArquivoDigital x) => new ArquivoDigital { Descricao = x.Descricao, Extensao = x.Extensao })).ToList(); List list = await AddAttachments(ArquivosAnexados.ToList(), attacheds); if (list != null) { list.AddRange(ArquivosAnexados); ArquivosAnexados = new ObservableCollection(list); } } public async Task Enviar() { if (string.IsNullOrWhiteSpace(Corpo) || string.IsNullOrWhiteSpace(Assunto)) { await ShowMessage("NECESSÁRIO CONTER ASSUNTO E MENSAGEM PARA PROSSEGUIR."); return false; } if (SelectedCredencial == null || ((DomainBase)SelectedCredencial).Id == 0L) { await ShowMessage("NECESSÁRIO SELECIONAR O E-MAIL DE ENVIO PARA PROSSEGUIR."); return false; } List list = MalaDireta.Where((MalaDireta x) => x.Selecionado).ToList(); if (list.Count == 0) { await ShowMessage("NECESSÁRIO SELECIONAR AO MENOS UM DESTINATÁRIO PARA PROSSEGUIR."); return false; } await ShowEnviarEmailsDialog(list, Assinatura, EnviarOriginal, ArquivosAnexados.ToList(), Assunto, Corpo, SelectedCredencial, _filtro, SalvarArquivoDigital, ConfirmarLeitura); Enviado = true; return true; } public async Task CarregarEmails(List maladireta, string assunto = null, string corpo = null) { ClienteServico clienteServico = new ClienteServico(); List list = (from x in maladireta where x.Cliente != null select ((DomainBase)x.Cliente).Id).ToList(); VisibilitySalvarAnexos = (Visibility)(list.Count > 1); List emails = await clienteServico.BuscarEmailsPorCliente(list); List maladiretacompleta = new List(); maladireta.ForEach(delegate(MalaDireta x) { //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Expected O, but got Unknown //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) if (x.Cliente != null) { Assinatura = Assinatura || (x.ArquivoDigital != null && x.ArquivoDigital.Any((IndiceArquivoDigital a) => !string.IsNullOrEmpty(a.UrlAssinatura) && !a.Assinado)); List source = emails.Where((ClienteEmail e) => ((DomainBase)e.Cliente).Id == ((DomainBase)x.Cliente).Id).ToList(); int index = 0; source.OrderBy((ClienteEmail o) => o.Ordem.GetValueOrDefault()).ToList().ForEach(delegate(ClienteEmail e) { //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown x.Selecionado = string.IsNullOrWhiteSpace(x.Email) && x.Cliente.MalaDireta.GetValueOrDefault(true); if (index > 0) { MalaDireta val2 = new MalaDireta(); DomainBase.Copy(val2, x); val2.Email = ((EmailBase)e).Email; val2.Selecionado = false; maladiretacompleta.Add(val2); } else { x.Email = ((EmailBase)e).Email; x.Ordem = e.Ordem.GetValueOrDefault(); MalaDireta val3 = new MalaDireta(); DomainBase.Copy(val3, x); maladiretacompleta.Add(val3); } index++; }); } if (x.Prospeccao != null) { MalaDireta val = new MalaDireta(); x.Cliente = (Cliente)(((object)x.Cliente) ?? ((object)new Cliente { Nome = x.Prospeccao.Nome, Documento = x.Prospeccao.Documento })); if (string.IsNullOrEmpty(x.Cliente.Documento)) { x.Cliente.Documento = x.Prospeccao.Documento; } x.Email = x.Prospeccao.Email; x.Ordem = 0; x.Selecionado = true; DomainBase.Copy(val, x); maladiretacompleta.Add(val); } }); MalaDireta = new ObservableCollection(from x in maladiretacompleta orderby x.Cliente.Nome, x.Ordem select x); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)18, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)0, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)1, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)2, indisponivel: false)); Variaveis.Add(MalaDireta.Any((MalaDireta x) => x.Cliente.VencimentoHabilitacao.HasValue) ? new ComboVariavel((VariaveisMalaDireta)16, indisponivel: false) : new ComboVariavel((VariaveisMalaDireta)16, indisponivel: true)); if (MalaDireta.Any((MalaDireta x) => x.Cliente.Nascimento.HasValue)) { Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)14, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)15, indisponivel: false)); } else { Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)14, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)15, indisponivel: true)); } Variaveis.Add(MalaDireta.Any((MalaDireta x) => x.ArquivoDigital != null && x.ArquivoDigital.Any((IndiceArquivoDigital z) => !string.IsNullOrWhiteSpace(z.UrlAssinatura))) ? new ComboVariavel((VariaveisMalaDireta)17, indisponivel: false) : new ComboVariavel((VariaveisMalaDireta)17, indisponivel: true)); if (MalaDireta.All((MalaDireta x) => x.Apolice != null)) { Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)3, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)4, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)7, indisponivel: false)); Variaveis.Add(MalaDireta.Any((MalaDireta x) => x.Apolice.Vigencia2.HasValue) ? new ComboVariavel((VariaveisMalaDireta)8, indisponivel: false) : new ComboVariavel((VariaveisMalaDireta)8, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)19, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)23, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)24, indisponivel: false)); if (MalaDireta.Any((MalaDireta x) => x.Apolice.Controle != null)) { Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)5, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)6, indisponivel: false)); } else { Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)5, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)6, indisponivel: true)); } } else { Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)19, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)3, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)4, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)7, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)8, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)5, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)6, indisponivel: true)); } if (MalaDireta.All((MalaDireta x) => x.Parcela != null)) { Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)9, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)10, indisponivel: false)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)13, indisponivel: false)); } else { Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)9, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)10, indisponivel: true)); Variaveis.Add(new ComboVariavel((VariaveisMalaDireta)13, indisponivel: true)); } Variaveis.Add(MalaDireta.All((MalaDireta x) => x.Item != null) ? new ComboVariavel((VariaveisMalaDireta)11, indisponivel: false) : new ComboVariavel((VariaveisMalaDireta)11, indisponivel: true)); Variaveis.Add(MalaDireta.All((MalaDireta x) => x.Sinistro != null) ? new ComboVariavel((VariaveisMalaDireta)12, indisponivel: false) : new ComboVariavel((VariaveisMalaDireta)12, indisponivel: true)); Variaveis = new ObservableCollection(Variaveis); Variaveis.Add(MalaDireta.Any(delegate(MalaDireta x) { Documento apolice3 = x.Apolice; if (apolice3 == null) { return false; } _ = apolice3.PremioLiquido; return true; }) ? new ComboVariavel((VariaveisMalaDireta)20, indisponivel: false) : new ComboVariavel((VariaveisMalaDireta)20, indisponivel: true)); Variaveis.Add(MalaDireta.Any(delegate(MalaDireta x) { Documento apolice2 = x.Apolice; if (apolice2 == null) { return false; } _ = apolice2.PremioTotal; return true; }) ? new ComboVariavel((VariaveisMalaDireta)21, indisponivel: false) : new ComboVariavel((VariaveisMalaDireta)21, indisponivel: true)); Variaveis.Add(MalaDireta.Any(delegate(MalaDireta x) { Documento apolice = x.Apolice; return apolice != null && apolice.FormaPagamento.HasValue; }) ? new ComboVariavel((VariaveisMalaDireta)22, indisponivel: false) : new ComboVariavel((VariaveisMalaDireta)22, indisponivel: true)); await CarregarModelos(); if (assunto != null) { Assunto = assunto; } if (corpo != null) { Corpo = corpo; } } public void Selecionar() { MalaDireta.ToList().ForEach(delegate(MalaDireta x) { x.Selecionado = !x.Selecionado; }); MalaDireta = new ObservableCollection(MalaDireta); } public void Delete(ArquivoDigital arquivo) { if (SelectedAnexado != null) { ArquivoDigital item = ArquivosAnexados.First((ArquivoDigital x) => x.Descricao == arquivo.Descricao); ArquivosAnexados.Remove(item); ArquivosAnexados = new ObservableCollection(ArquivosAnexados); } } public void Incluir() { SelectedModelo = new ComboModelo(); Corpo = string.Empty; Alterar(alterar: true); } public void CancelarAlteracao() { Alterar(alterar: false); SelectedModelo = null; } public async Task>> Salvar() { if (SelectedModelo == null) { SelectedModelo = new ComboModelo { ModeloMalaDireta = new ModeloMalaDireta { Assunto = Assunto, Corpo = Corpo } }; } else { SelectedModelo.ModeloMalaDireta.Assunto = Assunto; SelectedModelo.ModeloMalaDireta.Corpo = Corpo; } List> list = SelectedModelo.ModeloMalaDireta.Validate(); if (list.Count > 0) { return list; } ModeloMalaDireta modelo = await _servico.Save(SelectedModelo.ModeloMalaDireta); if (!_servico.Sucesso) { return null; } Alterar(alterar: false); await CarregarModelos(modelo); ToggleSnackBar("MODELO SALVO COM SUCESSO"); return null; } public async void Excluir() { if (SelectedModelo != null && ((DomainBase)SelectedModelo.ModeloMalaDireta).Id != 0L && await ShowMessage("DESEJA REALMENTE EXCLUIR O MODELO?", "SIM", "NÃO") && await _servico.Delete(SelectedModelo.ModeloMalaDireta)) { RegistrarAcao("EXCLUIU MODELO " + SelectedModelo.ModeloMalaDireta.Assunto, ((DomainBase)SelectedModelo.ModeloMalaDireta).Id, (TipoTela)39); await CarregarModelos(); SelectedModelo = null; ToggleSnackBar("MODELO EXCLUÍDO COM SUCESSO"); } } }