From 1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1 Mon Sep 17 00:00:00 2001 From: Lucas Faria Mendes Date: Mon, 30 Mar 2026 10:38:18 -0300 Subject: chore: location --- .../ViewModels/Drawer/AgendaViewModel.cs | 427 +++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 Codemerx/Gestor.Application/ViewModels/Drawer/AgendaViewModel.cs (limited to 'Codemerx/Gestor.Application/ViewModels/Drawer/AgendaViewModel.cs') diff --git a/Codemerx/Gestor.Application/ViewModels/Drawer/AgendaViewModel.cs b/Codemerx/Gestor.Application/ViewModels/Drawer/AgendaViewModel.cs new file mode 100644 index 0000000..4701416 --- /dev/null +++ b/Codemerx/Gestor.Application/ViewModels/Drawer/AgendaViewModel.cs @@ -0,0 +1,427 @@ +using Gestor.Application.Servicos.Ferramentas; +using Gestor.Application.Servicos.Generic; +using Gestor.Application.ViewModels.Generic; +using Gestor.Common.Validation; +using Gestor.Model.Common; +using Gestor.Model.Domain.Ferramentas; +using Gestor.Model.Domain.Generic; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; + +namespace Gestor.Application.ViewModels.Drawer +{ + public class AgendaViewModel : BaseSegurosViewModel + { + private readonly AgendaServico _servico; + + private Agenda _selectedAgenda; + + private ObservableCollection _telefones = new ObservableCollection(); + + private ObservableCollection _emails = new ObservableCollection(); + + private long _ultimoId; + + public Agenda CancelAgenda; + + private ObservableCollection _agendasFiltradas = new ObservableCollection(); + + private bool _carregando; + + public List Agendas + { + get; + set; + } + + public ObservableCollection AgendasFiltradas + { + get + { + return this._agendasFiltradas; + } + set + { + this._agendasFiltradas = value; + base.OnPropertyChanged("AgendasFiltradas"); + } + } + + public bool Carregando + { + get + { + return this._carregando; + } + set + { + this._carregando = value; + base.IsEnabled = !value; + base.EnableMenu = !value; + base.OnPropertyChanged("Carregando"); + } + } + + public ObservableCollection Emails + { + get + { + return this._emails; + } + set + { + this._emails = value; + base.OnPropertyChanged("Emails"); + } + } + + public Agenda SelectedAgenda + { + get + { + return this._selectedAgenda; + } + set + { + long? nullable; + this._selectedAgenda = value; + if (value != null) + { + nullable = new long?(value.get_Id()); + } + else + { + nullable = null; + } + base.VerificarEnables(nullable); + base.OnPropertyChanged("SelectedAgenda"); + } + } + + public ObservableCollection Telefones + { + get + { + return this._telefones; + } + set + { + this._telefones = value; + base.OnPropertyChanged("Telefones"); + } + } + + public AgendaViewModel() + { + this._servico = new AgendaServico(); + this.Seleciona(); + } + + public void CancelarAlteracao() + { + this.Carregando = true; + if (this.SelectedAgenda.get_Id() != 0) + { + DomainBase.Copy(this.Agendas.First((Agenda x) => x.get_Id() == this.CancelAgenda.get_Id()), this.CancelAgenda); + if (this.AgendasFiltradas.Count <= 0 || !this.AgendasFiltradas.Any((Agenda x) => x.get_Id() == this.CancelAgenda.get_Id())) + { + this.AgendasFiltradas.Add(this.CancelAgenda); + } + else + { + DomainBase.Copy(this.AgendasFiltradas.First((Agenda x) => x.get_Id() == this.CancelAgenda.get_Id()), this.CancelAgenda); + } + this.AgendasFiltradas = new ObservableCollection(this.AgendasFiltradas); + this.SelectedAgenda = this.AgendasFiltradas.First((Agenda x) => x.get_Id() == this.CancelAgenda.get_Id()); + } + else if (this.AgendasFiltradas.Count <= 0 || !this.AgendasFiltradas.Any((Agenda x) => x.get_Id() == this._ultimoId)) + { + if (this.Agendas.Count <= 0 || !this.Agendas.Any((Agenda x) => x.get_Id() == this._ultimoId)) + { + this.SelectedAgenda = new Agenda(); + ObservableCollection observableCollection = new ObservableCollection(); + AgendaTelefone agendaTelefone = new AgendaTelefone(); + agendaTelefone.set_Agenda(this.SelectedAgenda); + agendaTelefone.set_Tipo(new TipoTelefone?(1)); + observableCollection.Add(agendaTelefone); + this.Telefones = observableCollection; + ObservableCollection observableCollection1 = new ObservableCollection(); + AgendaEmail agendaEmail = new AgendaEmail(); + agendaEmail.set_Agenda(this.SelectedAgenda); + observableCollection1.Add(agendaEmail); + this.Emails = observableCollection1; + base.Alterar(false); + this.Carregando = false; + return; + } + this.AgendasFiltradas.Add(this.Agendas.First((Agenda x) => x.get_Id() == this._ultimoId)); + this.SelectedAgenda = this.AgendasFiltradas.First((Agenda x) => x.get_Id() == this._ultimoId); + } + else + { + this.SelectedAgenda = this.AgendasFiltradas.First((Agenda x) => x.get_Id() == this._ultimoId); + } + base.Alterar(false); + this.Carregando = false; + } + + public async Task Excluir() + { + bool flag; + if (this.SelectedAgenda == null || this.SelectedAgenda.get_Id() == 0) + { + flag = false; + } + else if (await base.ShowMessage("DESEJA EXCLUIR?", "SIM", "NÃO", false)) + { + this.Carregando = true; + if (await this._servico.Delete(this.SelectedAgenda)) + { + int num = this.AgendasFiltradas.IndexOf(this.SelectedAgenda); + this.Agendas.Remove(this.SelectedAgenda); + this.AgendasFiltradas.Remove(this.SelectedAgenda); + this.AgendasFiltradas = new ObservableCollection(this.AgendasFiltradas); + if (this.AgendasFiltradas.Count <= 0) + { + this.SelectedAgenda = new Agenda(); + this.Telefones = new ObservableCollection(); + this.Emails = new ObservableCollection(); + base.Alterar(false); + } + else if (num >= this.AgendasFiltradas.Count) + { + await this.SelecionaAgenda(this.AgendasFiltradas.Last()); + } + else + { + await this.SelecionaAgenda(this.AgendasFiltradas.ElementAt(num)); + } + this.Carregando = false; + flag = true; + } + else + { + base.Alterar(false); + this.Carregando = false; + flag = false; + } + } + else + { + flag = false; + } + return flag; + } + + public void ExcluirEmail(AgendaEmail email) + { + this.Emails.Remove(email); + } + + public void ExcluirTelefone(AgendaTelefone telefone) + { + this.Telefones.Remove(telefone); + } + + internal async Task> Filtrar(string value) + { + List agendas = await Task.Run>(() => this.FiltrarAgenda(value)); + return agendas; + } + + public List FiltrarAgenda(string filter) + { + this.AgendasFiltradas = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(this.Agendas) : new ObservableCollection( + from x in this.Agendas + where ValidationHelper.RemoveDiacritics(x.get_Nome().Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter)) + orderby x.get_Nome() + select x)); + return this.AgendasFiltradas.ToList(); + } + + public void Incluir() + { + if (this.SelectedAgenda != null) + { + this._ultimoId = this.SelectedAgenda.get_Id(); + } + this.SelectedAgenda = new Agenda(); + ObservableCollection observableCollection = new ObservableCollection(); + AgendaTelefone agendaTelefone = new AgendaTelefone(); + agendaTelefone.set_Agenda(this.SelectedAgenda); + agendaTelefone.set_Tipo(new TipoTelefone?(1)); + observableCollection.Add(agendaTelefone); + this.Telefones = observableCollection; + ObservableCollection observableCollection1 = new ObservableCollection(); + AgendaEmail agendaEmail = new AgendaEmail(); + agendaEmail.set_Agenda(this.SelectedAgenda); + observableCollection1.Add(agendaEmail); + this.Emails = observableCollection1; + base.Alterar(true); + } + + public void IncluirEmail() + { + if (this.SelectedAgenda == null) + { + return; + } + if (this.Emails == null) + { + this.Emails = new ObservableCollection(); + } + AgendaEmail agendaEmail = new AgendaEmail(); + agendaEmail.set_Agenda(this.SelectedAgenda); + this.Emails.Add(agendaEmail); + base.OnPropertyChanged("IncluirEmail"); + } + + public void IncluirTelefone() + { + if (this.SelectedAgenda == null) + { + return; + } + if (this.Telefones == null) + { + this.Telefones = new ObservableCollection(); + } + AgendaTelefone agendaTelefone = new AgendaTelefone(); + agendaTelefone.set_Agenda(this.SelectedAgenda); + agendaTelefone.set_Tipo(new TipoTelefone?(1)); + this.Telefones.Add(agendaTelefone); + base.OnPropertyChanged("IncluirTelefone"); + } + + public async Task>> Salvar() + { + List> keyValuePairs; + int num; + List> keyValuePairs1 = this.SelectedAgenda.Validate(); + ObservableCollection telefones = this.Telefones; + List list = ( + from x in telefones + where !string.IsNullOrEmpty(x.get_Numero()) + select x).ToList(); + ObservableCollection emails = this.Emails; + List agendaEmails = ( + from x in emails + where !string.IsNullOrEmpty(x.get_Email()) + select x).ToList(); + foreach (AgendaTelefone agendaTelefone in list) + { + keyValuePairs1.AddRange(agendaTelefone.Validate()); + } + foreach (AgendaEmail agendaEmail in agendaEmails) + { + keyValuePairs1.AddRange(agendaEmail.Validate()); + } + if (keyValuePairs1.Count <= 0) + { + this.SelectedAgenda.set_Telefones(new ObservableCollection(list)); + this.SelectedAgenda.set_Emails(new ObservableCollection(agendaEmails)); + if (this.SelectedAgenda.get_Id() != 0) + { + this.SelectedAgenda = await this._servico.Save(this.SelectedAgenda); + if (this._servico.Sucesso) + { + this.Telefones = new ObservableCollection(this.SelectedAgenda.get_Telefones()); + this.Emails = new ObservableCollection(this.SelectedAgenda.get_Emails()); + DomainBase.Copy(this.Agendas.First((Agenda x) => x.get_Id() == this.SelectedAgenda.get_Id()), this.SelectedAgenda); + if (this.AgendasFiltradas.Count <= 0 || !this.AgendasFiltradas.Any((Agenda x) => x.get_Id() == this.SelectedAgenda.get_Id())) + { + this.AgendasFiltradas.Add(this.SelectedAgenda); + } + else + { + DomainBase.Copy(this.AgendasFiltradas.First((Agenda x) => x.get_Id() == this.SelectedAgenda.get_Id()), this.SelectedAgenda); + } + } + else + { + keyValuePairs = null; + return keyValuePairs; + } + } + else + { + this.SelectedAgenda = await this._servico.Save(this.SelectedAgenda); + if (this._servico.Sucesso) + { + this.Telefones = new ObservableCollection(this.SelectedAgenda.get_Telefones()); + this.Emails = new ObservableCollection(this.SelectedAgenda.get_Emails()); + this.Agendas.Add(this.SelectedAgenda); + ObservableCollection agendasFiltradas = this.AgendasFiltradas; + num = (this._ultimoId == 0 ? 0 : this.AgendasFiltradas.IndexOf(this.AgendasFiltradas.First((Agenda x) => x.get_Id() == this._ultimoId))); + agendasFiltradas.Insert(num, this.SelectedAgenda); + } + else + { + keyValuePairs = null; + return keyValuePairs; + } + } + this.AgendasFiltradas = new ObservableCollection(this.AgendasFiltradas); + this.SelectedAgenda = this.AgendasFiltradas.First((Agenda x) => x.get_Id() == this.SelectedAgenda.get_Id()); + base.Alterar(false); + keyValuePairs = null; + } + else + { + keyValuePairs = keyValuePairs1; + } + return keyValuePairs; + } + + private async void Seleciona() + { + base.Loading(true); + await base.PermissaoTela(34); + await this.SelecionaAgendas(); + base.Loading(false); + } + + public async Task SelecionaAgenda(Agenda agenda = null) + { + Agenda agenda1; + this.Carregando = true; + AgendaViewModel agendaViewModel = this; + agenda1 = (agenda == null ? this.AgendasFiltradas.FirstOrDefault() : this.AgendasFiltradas.FirstOrDefault((Agenda x) => x.get_Id() == agenda.get_Id())); + agendaViewModel.SelectedAgenda = agenda1; + if (this.SelectedAgenda == null) + { + this.Emails = null; + this.Telefones = null; + } + else + { + this.Emails = await this._servico.BuscarEmailsAsync(this.SelectedAgenda.get_Id()); + this.Telefones = await this._servico.BuscarTelefonesAsync(this.SelectedAgenda.get_Id()); + } + this.Carregando = false; + } + + private async Task SelecionaAgendas() + { + Agenda agenda; + this.Carregando = true; + List agendas = await (new BaseServico()).BuscarAgendasAsync(); + AgendaViewModel list = this; + List agendas1 = agendas; + list.Agendas = ( + from x in agendas1 + orderby x.get_Nome() + select x).ToList(); + this.AgendasFiltradas = new ObservableCollection(this.Agendas); + AgendaViewModel agendaViewModel = this; + agenda = (this.AgendasFiltradas.Count > 0 ? this.AgendasFiltradas.First() : new Agenda()); + agendaViewModel.SelectedAgenda = agenda; + this.Carregando = false; + } + } +} \ No newline at end of file -- cgit v1.2.3