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; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Threading.Tasks; using System.Windows; 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 Gestor.Model.Domain.Common.ArquivoDigital _selectedAnexado = new Gestor.Model.Domain.Common.ArquivoDigital(); private Visibility _visibilitySalvarAnexos = Visibility.Hidden; private bool _enviarOriginal; private bool _salvarArquivoDigital; private bool _assinatura; public bool _confirmarLeitura; public ObservableCollection Arquivos { get { return this._arquivos; } set { this._arquivos = value; base.OnPropertyChanged("Arquivos"); } } public ObservableCollection ArquivosAnexados { get { return this._arquivosAnexados; } set { this._arquivosAnexados = value; base.OnPropertyChanged("ArquivosAnexados"); } } public bool Assinatura { get { return this._assinatura; } set { this._assinatura = value; base.OnPropertyChanged("Assinatura"); } } public string Assunto { get { return this._assunto; } set { this._assunto = value; base.OnPropertyChanged("Assunto"); } } public bool ConfirmarLeitura { get { return this._confirmarLeitura; } set { this._confirmarLeitura = value; } } public string Corpo { get { return this._corpo; } set { this._corpo = value; base.OnPropertyChanged("Corpo"); } } public ObservableCollection Credenciais { get { return this._credenciais; } set { this._credenciais = value; base.OnPropertyChanged("Credenciais"); } } public bool EnableCredencial { get { return this._enableCredencial; } set { this._enableCredencial = value; base.OnPropertyChanged("EnableCredencial"); } } public bool Enviado { get; set; } public bool EnviarOriginal { get { return this._enviarOriginal; } set { this._enviarOriginal = value; base.OnPropertyChanged("EnviarOriginal"); } } public ObservableCollection MalaDireta { get { return this._malaDireta; } set { this._malaDireta = value; base.OnPropertyChanged("MalaDireta"); } } public ObservableCollection Modelos { get { return this._modelos; } set { Func func = null; List list = ( from variavel in (VariaveisMalaDireta[])Enum.GetValues(typeof(VariaveisMalaDireta)) select ValidationHelper.GetEntity(variavel)).ToList(); List strs = ( from x in this.Variaveis where !x.Indisponivel select x into v select ValidationHelper.GetEntity(v.VariaveisMalaDireta)).ToList(); List comboModelos = new List(); foreach (ComboModelo comboModelo in value) { IEnumerable strs1 = list.Where(new Func(comboModelo.ModeloMalaDireta.get_Corpo().Contains)); Func func1 = func; if (func1 == null) { Func func2 = (string s) => strs.Contains(s); Func func3 = func2; func = func2; func1 = func3; } if (!strs1.All(func1)) { comboModelos.Add(new ComboModelo() { ModeloMalaDireta = comboModelo.ModeloMalaDireta, Indisponivel = true }); } else { comboModelos.Add(comboModelo); } } this._modelos = new ObservableCollection( from x in comboModelos orderby x.Indisponivel, x.ModeloMalaDireta.get_Assunto() select x); base.OnPropertyChanged("Modelos"); } } public bool SalvarArquivoDigital { get { return this._salvarArquivoDigital; } set { this._salvarArquivoDigital = value; base.OnPropertyChanged("SalvarArquivoDigital"); } } public Gestor.Model.Domain.Common.ArquivoDigital SelectedAnexado { get { return this._selectedAnexado; } set { this._selectedAnexado = value; base.OnPropertyChanged("SelectedAnexado"); } } public Credencial SelectedCredencial { get { return this._selectedCredencial; } set { this._selectedCredencial = value; base.OnPropertyChanged("SelectedCredencial"); } } public ComboModelo SelectedModelo { get { return this._selectedModelo; } set { long? nullable; ModeloMalaDireta modeloMalaDireta; this._selectedModelo = value; if (value != null) { nullable = new long?(value.ModeloMalaDireta.get_Id()); } else { nullable = null; } base.VerificarEnables(nullable); if (value != null) { modeloMalaDireta = value.ModeloMalaDireta; } else { modeloMalaDireta = null; } this.WorkOnSelectedModelo(modeloMalaDireta); base.OnPropertyChanged("SelectedModelo"); } } public ComboVariavel SelectedVariavel { get { return this._selectedVariavel; } set { this._selectedVariavel = value; base.OnPropertyChanged("SelectedVariavel"); } } public ObservableCollection Variaveis { get { return this._variaveis; } set { this._variaveis = new ObservableCollection( from x in value orderby x.Indisponivel, x.VariaveisMalaDireta.ToString() select x); base.OnPropertyChanged("Variaveis"); } } public Visibility VisibilitySalvarAnexos { get { return this._visibilitySalvarAnexos; } set { this._visibilitySalvarAnexos = value; base.OnPropertyChanged("VisibilitySalvarAnexos"); } } public MalaDiretaViewModel(FiltroArquivoDigital filtro = null) { this._servico = new MalaDiretaServico(); this._filtro = filtro; this.BuscarCredenciais(); } public async void Anexar() { ObservableCollection arquivos = this.Arquivos; List list = arquivos.Select((IndiceArquivoDigital x) => { Gestor.Model.Domain.Common.ArquivoDigital arquivoDigital = new Gestor.Model.Domain.Common.ArquivoDigital(); arquivoDigital.set_Descricao(x.get_Descricao()); arquivoDigital.set_Extensao(x.get_Extensao()); return arquivoDigital; }).ToList(); List arquivoDigitals = await base.AddAttachments(this.ArquivosAnexados.ToList(), list); if (arquivoDigitals != null) { arquivoDigitals.AddRange(this.ArquivosAnexados); this.ArquivosAnexados = new ObservableCollection(arquivoDigitals); } } private async void BuscarCredenciais() { Credencial credencial; await base.PermissaoTela(39); base.VerificarEnables(null); List credencials = await (new BaseServico()).BuscarCredenciais(); MalaDiretaViewModel observableCollection = this; List credencials1 = credencials; observableCollection.Credenciais = new ObservableCollection( from x in credencials1 orderby x.get_Descricao() select x); this.EnableCredencial = !base.Restricao(110); MalaDiretaViewModel malaDiretaViewModel = this; if (this.EnableCredencial) { ObservableCollection credenciais = this.Credenciais; credencial = credenciais.FirstOrDefault((Credencial x) => x.get_IdUsuario() == Recursos.Usuario.get_Id()); if (credencial == null) { credencial = this.Credenciais.FirstOrDefault(); } } else { ObservableCollection credenciais1 = this.Credenciais; credencial = credenciais1.FirstOrDefault((Credencial x) => x.get_IdUsuario() == Recursos.Usuario.get_Id()); } malaDiretaViewModel.SelectedCredencial = credencial; } public void CancelarAlteracao() { base.Alterar(false); this.SelectedModelo = null; } public async Task CarregarEmails(List maladireta, string assunto = null, string corpo = null) { Visibility visibility; ComboVariavel comboVariavel; ComboVariavel comboVariavel1; ComboVariavel comboVariavel2; ComboVariavel comboVariavel3; ComboVariavel comboVariavel4; ComboVariavel comboVariavel5; ComboVariavel comboVariavel6; ComboVariavel comboVariavel7; ClienteServico clienteServico = new ClienteServico(); List malaDiretas = maladireta; IEnumerable malaDiretas1 = from x in malaDiretas where x.get_Cliente() != null select x; List nums = ( from x in malaDiretas1 select x.get_Cliente().get_Id()).ToList(); MalaDiretaViewModel malaDiretaViewModel = this; visibility = (nums.Count > 1 ? Visibility.Hidden : Visibility.Visible); malaDiretaViewModel.VisibilitySalvarAnexos = visibility; List clienteEmails = await clienteServico.BuscarEmailsPorCliente(nums); List malaDiretas2 = new List(); maladireta.ForEach((Gestor.Model.Domain.MalaDireta.MalaDireta x) => { bool flag; if (x.get_Cliente() != null) { MalaDiretaViewModel u003cu003e4_this = this; if (this.Assinatura) { flag = true; } else if (x.get_ArquivoDigital() == null) { flag = false; } else { List arquivoDigital = x.get_ArquivoDigital(); Func u003cu003e9_8417 = MalaDiretaViewModel.u003cu003ec.u003cu003e9__84_17; if (u003cu003e9_8417 == null) { u003cu003e9_8417 = (IndiceArquivoDigital a) => { if (string.IsNullOrEmpty(a.get_UrlAssinatura())) { return false; } return !a.get_Assinado(); }; MalaDiretaViewModel.u003cu003ec.u003cu003e9__84_17 = u003cu003e9_8417; } flag = arquivoDigital.Any(u003cu003e9_8417); } u003cu003e4_this.Assinatura = flag; List list = ( from e in clienteEmails where e.get_Cliente().get_Id() == this.x.get_Cliente().get_Id() select e).ToList(); int num = 0; Func u003cu003e9_8419 = MalaDiretaViewModel.u003cu003ec.u003cu003e9__84_19; if (u003cu003e9_8419 == null) { u003cu003e9_8419 = (ClienteEmail o) => o.get_Ordem().GetValueOrDefault(); MalaDiretaViewModel.u003cu003ec.u003cu003e9__84_19 = u003cu003e9_8419; } list.OrderBy(u003cu003e9_8419).ToList().ForEach((ClienteEmail e) => { x.set_Selecionado((!string.IsNullOrWhiteSpace(x.get_Email()) ? false : x.get_Cliente().get_MalaDireta().GetValueOrDefault(true))); if (num <= 0) { x.set_Email(e.get_Email()); x.set_Ordem(e.get_Ordem().GetValueOrDefault()); Gestor.Model.Domain.MalaDireta.MalaDireta malaDiretum = new Gestor.Model.Domain.MalaDireta.MalaDireta(); DomainBase.Copy(malaDiretum, x); malaDiretas2.Add(malaDiretum); } else { Gestor.Model.Domain.MalaDireta.MalaDireta malaDiretum1 = new Gestor.Model.Domain.MalaDireta.MalaDireta(); DomainBase.Copy(malaDiretum1, x); malaDiretum1.set_Email(e.get_Email()); malaDiretum1.set_Selecionado(false); malaDiretas2.Add(malaDiretum1); } num++; }); } if (x.get_Prospeccao() == null) { return; } Gestor.Model.Domain.MalaDireta.MalaDireta malaDiretum2 = new Gestor.Model.Domain.MalaDireta.MalaDireta(); Gestor.Model.Domain.MalaDireta.MalaDireta malaDiretum3 = x; Cliente cliente = x.get_Cliente(); if (cliente == null) { cliente = new Cliente(); cliente.set_Nome(x.get_Prospeccao().get_Nome()); cliente.set_Documento(x.get_Prospeccao().get_Documento()); } malaDiretum3.set_Cliente(cliente); if (string.IsNullOrEmpty(x.get_Cliente().get_Documento())) { x.get_Cliente().set_Documento(x.get_Prospeccao().get_Documento()); } x.set_Email(x.get_Prospeccao().get_Email()); x.set_Ordem(0); x.set_Selecionado(true); DomainBase.Copy(malaDiretum2, x); malaDiretas2.Add(malaDiretum2); }); MalaDiretaViewModel observableCollection = this; List malaDiretas3 = malaDiretas2; IOrderedEnumerable nome = from x in malaDiretas3 orderby x.get_Cliente().get_Nome() select x; observableCollection.MalaDireta = new ObservableCollection(nome.ThenBy((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.get_Ordem())); this.Variaveis.Add(new ComboVariavel(18, false)); this.Variaveis.Add(new ComboVariavel(0, false)); this.Variaveis.Add(new ComboVariavel(1, false)); this.Variaveis.Add(new ComboVariavel(2, false)); ObservableCollection variaveis = this.Variaveis; ObservableCollection malaDireta = this.MalaDireta; comboVariavel = (malaDireta.Any((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.get_Cliente().get_VencimentoHabilitacao().HasValue) ? new ComboVariavel(16, false) : new ComboVariavel(16, true)); variaveis.Add(comboVariavel); ObservableCollection malaDireta1 = this.MalaDireta; if (!malaDireta1.Any((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.get_Cliente().get_Nascimento().HasValue)) { this.Variaveis.Add(new ComboVariavel(14, true)); this.Variaveis.Add(new ComboVariavel(15, true)); } else { this.Variaveis.Add(new ComboVariavel(14, false)); this.Variaveis.Add(new ComboVariavel(15, false)); } ObservableCollection variaveis1 = this.Variaveis; ObservableCollection observableCollection1 = this.MalaDireta; comboVariavel1 = (observableCollection1.Any((Gestor.Model.Domain.MalaDireta.MalaDireta x) => { if (x.get_ArquivoDigital() == null) { return false; } return x.get_ArquivoDigital().Any((IndiceArquivoDigital z) => !string.IsNullOrWhiteSpace(z.get_UrlAssinatura())); }) ? new ComboVariavel(17, false) : new ComboVariavel(17, true)); variaveis1.Add(comboVariavel1); ObservableCollection malaDireta2 = this.MalaDireta; if (!malaDireta2.All((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.get_Apolice() != null)) { this.Variaveis.Add(new ComboVariavel(19, true)); this.Variaveis.Add(new ComboVariavel(3, true)); this.Variaveis.Add(new ComboVariavel(4, true)); this.Variaveis.Add(new ComboVariavel(7, true)); this.Variaveis.Add(new ComboVariavel(8, true)); this.Variaveis.Add(new ComboVariavel(5, true)); this.Variaveis.Add(new ComboVariavel(6, true)); } else { this.Variaveis.Add(new ComboVariavel(3, false)); this.Variaveis.Add(new ComboVariavel(4, false)); this.Variaveis.Add(new ComboVariavel(7, false)); ObservableCollection variaveis2 = this.Variaveis; ObservableCollection observableCollection2 = this.MalaDireta; comboVariavel7 = (observableCollection2.Any((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.get_Apolice().get_Vigencia2().HasValue) ? new ComboVariavel(8, false) : new ComboVariavel(8, true)); variaveis2.Add(comboVariavel7); this.Variaveis.Add(new ComboVariavel(19, false)); this.Variaveis.Add(new ComboVariavel(23, false)); this.Variaveis.Add(new ComboVariavel(24, false)); ObservableCollection malaDireta3 = this.MalaDireta; if (!malaDireta3.Any((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.get_Apolice().get_Controle() != null)) { this.Variaveis.Add(new ComboVariavel(5, true)); this.Variaveis.Add(new ComboVariavel(6, true)); } else { this.Variaveis.Add(new ComboVariavel(5, false)); this.Variaveis.Add(new ComboVariavel(6, false)); } } ObservableCollection observableCollection3 = this.MalaDireta; if (!observableCollection3.All((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.get_Parcela() != null)) { this.Variaveis.Add(new ComboVariavel(9, true)); this.Variaveis.Add(new ComboVariavel(10, true)); this.Variaveis.Add(new ComboVariavel(13, true)); } else { this.Variaveis.Add(new ComboVariavel(9, false)); this.Variaveis.Add(new ComboVariavel(10, false)); this.Variaveis.Add(new ComboVariavel(13, false)); } ObservableCollection variaveis3 = this.Variaveis; ObservableCollection malaDireta4 = this.MalaDireta; comboVariavel2 = (malaDireta4.All((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.get_Item() != null) ? new ComboVariavel(11, false) : new ComboVariavel(11, true)); variaveis3.Add(comboVariavel2); ObservableCollection variaveis4 = this.Variaveis; ObservableCollection observableCollection4 = this.MalaDireta; comboVariavel3 = (observableCollection4.All((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.get_Sinistro() != null) ? new ComboVariavel(12, false) : new ComboVariavel(12, true)); variaveis4.Add(comboVariavel3); this.Variaveis = new ObservableCollection(this.Variaveis); ObservableCollection variaveis5 = this.Variaveis; ObservableCollection malaDireta5 = this.MalaDireta; comboVariavel4 = (malaDireta5.Any((Gestor.Model.Domain.MalaDireta.MalaDireta x) => { Documento apolice = x.get_Apolice(); if (apolice == null) { return false; } apolice.get_PremioLiquido(); return true; }) ? new ComboVariavel(20, false) : new ComboVariavel(20, true)); variaveis5.Add(comboVariavel4); ObservableCollection observableCollection5 = this.Variaveis; ObservableCollection malaDireta6 = this.MalaDireta; comboVariavel5 = (malaDireta6.Any((Gestor.Model.Domain.MalaDireta.MalaDireta x) => { Documento apolice = x.get_Apolice(); if (apolice == null) { return false; } apolice.get_PremioTotal(); return true; }) ? new ComboVariavel(21, false) : new ComboVariavel(21, true)); observableCollection5.Add(comboVariavel5); ObservableCollection variaveis6 = this.Variaveis; ObservableCollection observableCollection6 = this.MalaDireta; comboVariavel6 = (observableCollection6.Any((Gestor.Model.Domain.MalaDireta.MalaDireta x) => { Documento apolice = x.get_Apolice(); if (apolice == null) { return false; } return apolice.get_FormaPagamento().HasValue; }) ? new ComboVariavel(22, false) : new ComboVariavel(22, true)); variaveis6.Add(comboVariavel6); await this.CarregarModelos(null); if (assunto != null) { this.Assunto = assunto; } if (corpo != null) { this.Corpo = corpo; } } private async Task CarregarModelos(ModeloMalaDireta modelo = null) { List modeloMalaDiretas = await this._servico.BuscarModelos(); List comboModelos = new List(); foreach (ModeloMalaDireta modeloMalaDiretum in modeloMalaDiretas) { comboModelos.Add(new ComboModelo() { ModeloMalaDireta = modeloMalaDiretum }); } this.Modelos = new ObservableCollection(comboModelos); if (modelo != null) { this.SelectedModelo = this.Modelos.FirstOrDefault((ComboModelo x) => x.ModeloMalaDireta.get_Id() == modelo.get_Id()); } } public void Delete(Gestor.Model.Domain.Common.ArquivoDigital arquivo) { if (this.SelectedAnexado == null) { return; } Gestor.Model.Domain.Common.ArquivoDigital arquivoDigital = this.ArquivosAnexados.First((Gestor.Model.Domain.Common.ArquivoDigital x) => x.get_Descricao() == arquivo.get_Descricao()); this.ArquivosAnexados.Remove(arquivoDigital); this.ArquivosAnexados = new ObservableCollection(this.ArquivosAnexados); } public async Task Enviar() { bool flag; if (string.IsNullOrWhiteSpace(this.Corpo) || string.IsNullOrWhiteSpace(this.Assunto)) { await base.ShowMessage("NECESSÁRIO CONTER ASSUNTO E MENSAGEM PARA PROSSEGUIR.", "OK", "", false); flag = false; } else if (this.SelectedCredencial == null || this.SelectedCredencial.get_Id() == 0) { await base.ShowMessage("NECESSÁRIO SELECIONAR O E-MAIL DE ENVIO PARA PROSSEGUIR.", "OK", "", false); flag = false; } else { ObservableCollection malaDireta = this.MalaDireta; List list = ( from x in malaDireta where x.get_Selecionado() select x).ToList(); if (list.Count != 0) { await base.ShowEnviarEmailsDialog(list, this.Assinatura, this.EnviarOriginal, this.ArquivosAnexados.ToList(), this.Assunto, this.Corpo, this.SelectedCredencial, this._filtro, this.SalvarArquivoDigital, this.ConfirmarLeitura); this.Enviado = true; flag = true; } else { await base.ShowMessage("NECESSÁRIO SELECIONAR AO MENOS UM DESTINATÁRIO PARA PROSSEGUIR.", "OK", "", false); flag = false; } } return flag; } public async void Excluir() { if (this.SelectedModelo != null && this.SelectedModelo.ModeloMalaDireta.get_Id() != 0) { if (await base.ShowMessage("DESEJA REALMENTE EXCLUIR O MODELO?", "SIM", "NÃO", false)) { if (await this._servico.Delete(this.SelectedModelo.ModeloMalaDireta)) { base.RegistrarAcao(string.Concat("EXCLUIU MODELO ", this.SelectedModelo.ModeloMalaDireta.get_Assunto()), this.SelectedModelo.ModeloMalaDireta.get_Id(), new TipoTela?(39), null); await this.CarregarModelos(null); this.SelectedModelo = null; base.ToggleSnackBar("MODELO EXCLUÍDO COM SUCESSO", true); } } } } public void Incluir() { this.SelectedModelo = new ComboModelo(); this.Corpo = string.Empty; base.Alterar(true); } public async Task>> Salvar() { List> keyValuePairs; if (this.SelectedModelo != null) { this.SelectedModelo.ModeloMalaDireta.set_Assunto(this.Assunto); this.SelectedModelo.ModeloMalaDireta.set_Corpo(this.Corpo); } else { ComboModelo comboModelo = new ComboModelo(); ModeloMalaDireta modeloMalaDiretum = new ModeloMalaDireta(); modeloMalaDiretum.set_Assunto(this.Assunto); modeloMalaDiretum.set_Corpo(this.Corpo); comboModelo.ModeloMalaDireta = modeloMalaDiretum; this.SelectedModelo = comboModelo; } List> keyValuePairs1 = this.SelectedModelo.ModeloMalaDireta.Validate(); if (keyValuePairs1.Count <= 0) { ModeloMalaDireta modeloMalaDiretum1 = await this._servico.Save(this.SelectedModelo.ModeloMalaDireta); if (this._servico.Sucesso) { base.Alterar(false); await this.CarregarModelos(modeloMalaDiretum1); base.ToggleSnackBar("MODELO SALVO COM SUCESSO", true); keyValuePairs = null; } else { keyValuePairs = null; } } else { keyValuePairs = keyValuePairs1; } return keyValuePairs; } public void Selecionar() { this.MalaDireta.ToList().ForEach((Gestor.Model.Domain.MalaDireta.MalaDireta x) => x.set_Selecionado(!x.get_Selecionado())); this.MalaDireta = new ObservableCollection(this.MalaDireta); } private void WorkOnSelectedModelo(ModeloMalaDireta value) { if (value == null) { return; } this.Corpo = this.SelectedModelo.ModeloMalaDireta.get_Corpo(); this.Assunto = this.SelectedModelo.ModeloMalaDireta.get_Assunto(); } } }