using Gestor.Application.Helpers; 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.Generic; 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; namespace Gestor.Application.ViewModels.Ferramentas { public class StatusViewModel : BaseSegurosViewModel { private readonly StatusServico _servico; private Gestor.Model.Domain.Seguros.Status _selectedStatus; public Gestor.Model.Domain.Seguros.Status CancelStatus; private ObservableCollection _statusFiltrados = new ObservableCollection(); private bool _isExpanded; public bool IsExpanded { get { return this._isExpanded; } set { this._isExpanded = value; base.OnPropertyChanged("IsExpanded"); } } public Gestor.Model.Domain.Seguros.Status SelectedStatus { get { return this._selectedStatus; } set { long? nullable; this._selectedStatus = value; this.WorkOnSelectedStatus(value, true); if (value != null) { nullable = new long?(value.get_Id()); } else { nullable = null; } base.VerificarEnables(nullable); base.OnPropertyChanged("SelectedStatus"); } } public List Status { get; set; } public ObservableCollection StatusFiltrados { get { return this._statusFiltrados; } set { this._statusFiltrados = value; this.IsExpanded = (value != null ? value.Count > 0 : false); base.OnPropertyChanged("StatusFiltrados"); } } public StatusViewModel() { this._servico = new StatusServico(); base.EnableMenu = true; this.Seleciona(); } public void CancelarAlteracao() { if (this.CancelStatus == null || !this.Status.Any((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == this.CancelStatus.get_Id())) { this.Incluir(); } else { DomainBase.Copy(this.Status.First((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == this.CancelStatus.get_Id()), this.CancelStatus); if (this.StatusFiltrados.Count <= 0 || !this.StatusFiltrados.Any((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == this.CancelStatus.get_Id())) { this.StatusFiltrados.Add(this.CancelStatus); } else { DomainBase.Copy(this.StatusFiltrados.First((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == this.CancelStatus.get_Id()), this.CancelStatus); } this.StatusFiltrados = new ObservableCollection(this.StatusFiltrados); this.SelectedStatus = this.StatusFiltrados.First((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == this.CancelStatus.get_Id()); } base.Alterar(false); } public async void Excluir() { object obj; Gestor.Model.Domain.Seguros.Status statu; if (this.SelectedStatus != null && this.SelectedStatus.get_Id() != 0) { base.Loading(true); List documentos = await (new BaseServico()).BuscarDocumentosPorStatus(this.SelectedStatus.get_Id()); base.Loading(false); if (documentos.Count > 0) { string str = "ESTIPULANTE NÃO PODE SER EXCLUÍDO POIS ESTÁ VINCULADO AOS SEGUINTES DOCUMENTOS:"; foreach (Documento documento in documentos) { if (!string.IsNullOrWhiteSpace(documento.get_Apolice())) { object[] newLine = new object[] { Environment.NewLine, documentos.IndexOf(documento) + 1, documento.get_Proposta(), documento.get_Apolice() }; str = string.Concat(str, string.Format("{0}DOCUMENTO {1} (NÚMERO DA PROPOSTA: {2}, NÚMERO DA APÓLICE: {3})", newLine)); } else { str = string.Concat(str, string.Format("{0}DOCUMENTO {1} (NÚMERO DA PROPOSTA: {2})", Environment.NewLine, documentos.IndexOf(documento) + 1, documento.get_Proposta())); } } await base.ShowMessage(str, "OK", "", false); } else if (await base.ShowMessage("DESEJA EXCLUIR?", "SIM", "NÃO", false)) { base.Loading(true); if (await this._servico.Delete(this.SelectedStatus)) { StatusViewModel statusViewModel = this; string str1 = string.Concat("EXCLUIU STATUS \"", this.SelectedStatus.get_Nome(), "\""); long id = this.SelectedStatus.get_Id(); TipoTela? nullable = new TipoTela?(11); object id1 = this.SelectedStatus.get_Id(); obj = (this.SelectedStatus.get_Ativo() ? "SIM" : "NÃO"); statusViewModel.RegistrarAcao(str1, id, nullable, string.Format("ID: {0}\nATIVO: {1}", id1, obj)); int num = this.StatusFiltrados.IndexOf(this.SelectedStatus); this.Status.Remove(this.SelectedStatus); this.StatusFiltrados.Remove(this.SelectedStatus); this.StatusFiltrados = new ObservableCollection(this.StatusFiltrados); if (this.StatusFiltrados.Count <= 0) { this.SelectedStatus = new Gestor.Model.Domain.Seguros.Status(); base.Alterar(false); base.EnableMenu = false; } else { StatusViewModel statusViewModel1 = this; statu = (num < this.StatusFiltrados.Count ? this.StatusFiltrados.ElementAt(num) : this.StatusFiltrados.Last()); statusViewModel1.SelectedStatus = statu; } base.Loading(false); base.ToggleSnackBar("ESTIPULANTE EXCLUÍDO COM SUCESSO", true); } else { base.Loading(false); } } } } internal async Task> Filtrar(string value) { List statuses = await Task.Run>(() => this.FiltrarStatus(value)); return statuses; } public List FiltrarStatus(string filter) { this.StatusFiltrados = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(this.Status) : new ObservableCollection( from x in this.Status where ValidationHelper.RemoveDiacritics(x.get_Nome().Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter)) orderby x.get_Ativo() descending, x.get_Nome() select x)); return this.StatusFiltrados.ToList(); } public void Incluir() { Gestor.Model.Domain.Seguros.Status statu = new Gestor.Model.Domain.Seguros.Status(); statu.set_Ativo(true); this.SelectedStatus = statu; base.Alterar(true); } public async Task>> Salvar() { List> keyValuePairs; string str; object obj; string str1; List> keyValuePairs1 = this.SelectedStatus.Validate(); List> keyValuePairs2 = keyValuePairs1; keyValuePairs2.AddRange(await this.Validate()); keyValuePairs2 = null; if (keyValuePairs1.Count <= 0) { str = (this.SelectedStatus.get_Id() == 0 ? "INCLUIU" : "ALTEROU"); str1 = str; Gestor.Model.Domain.Seguros.Status statu = await this._servico.Save(this.SelectedStatus); if (this._servico.Sucesso) { StatusViewModel statusViewModel = this; string str2 = string.Concat(str1, " STATUS ID \"", statu.get_Nome(), "\""); long id = statu.get_Id(); TipoTela? nullable = new TipoTela?(11); object id1 = statu.get_Id(); obj = (statu.get_Ativo() ? "SIM" : "NÃO"); statusViewModel.RegistrarAcao(str2, id, nullable, string.Format("ID: {0}\nATIVO: {1}", id1, obj)); if (!this.Status.Any((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == statu.get_Id())) { this.Status.Add(statu); } else { DomainBase.Copy(this.Status.First((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == statu.get_Id()), statu); } if (!this.StatusFiltrados.Any((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == statu.get_Id())) { this.StatusFiltrados.Add(statu); } else { DomainBase.Copy(this.StatusFiltrados.First((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == statu.get_Id()), statu); } this.StatusFiltrados = new ObservableCollection(this.StatusFiltrados); this.WorkOnSelectedStatus(statu, false); Recursos.Status = this.Status; base.Alterar(false); base.ToggleSnackBar("STATUS SALVO COM SUCESSO", true); keyValuePairs = null; } else { keyValuePairs = null; } } else { keyValuePairs = keyValuePairs1; } keyValuePairs1 = null; str1 = null; return keyValuePairs; } private async void Seleciona() { base.Loading(true); await base.PermissaoTela(11); await this.SelecionaStatuses(); base.Loading(false); } public async void SelecionaStatus(Gestor.Model.Domain.Seguros.Status status) { Gestor.Model.Domain.Seguros.Status statu = await this._servico.BuscarStatusPorId(status.get_Id()); DomainBase.Copy(this.StatusFiltrados.First((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == status.get_Id()), statu); this.SelectedStatus = this.StatusFiltrados.First((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == status.get_Id()); } private async Task SelecionaStatuses() { base.Loading(true); List statuses = await (new BaseServico()).BuscarStatusAsync(); StatusViewModel list = this; List statuses1 = statuses; IOrderedEnumerable ativo = from x in statuses1 orderby x.get_Ativo() descending select x; list.Status = ativo.ThenBy((Gestor.Model.Domain.Seguros.Status x) => x.get_Nome()).ToList(); this.StatusFiltrados = new ObservableCollection(this.Status); this.SelectedStatus = this.StatusFiltrados.FirstOrDefault(); Recursos.Status = this.Status; base.Loading(false); } public async Task>> Validate() { List> keyValuePairs; List> keyValuePairs1; if (!string.IsNullOrWhiteSpace(this.SelectedStatus.get_Nome())) { keyValuePairs1 = new List>(); bool flag = true; List statuses = await (new BaseServico()).BuscarStatus(this.SelectedStatus.get_Nome()); if (statuses.Count > 0) { statuses.ForEach((Gestor.Model.Domain.Seguros.Status x) => { if (x.get_Id() == this.SelectedStatus.get_Id()) { return; } if (x.get_Nome() == this.SelectedStatus.get_Nome()) { flag = false; } }); } if (!flag) { keyValuePairs1.Add(new KeyValuePair("Nome", "UM STATUS COM O MESMO NOME JÁ EXISTE.")); } keyValuePairs = keyValuePairs1; } else { keyValuePairs = new List>(); } keyValuePairs1 = null; return keyValuePairs; } private void WorkOnSelectedStatus(Gestor.Model.Domain.Seguros.Status value, bool registrar = true) { long? nullable; this.CancelStatus = (value == null || value.get_Id() == 0 ? this.CancelStatus : (Gestor.Model.Domain.Seguros.Status)value.Clone()); if (value == null || value.get_Id() == 0 || this.LastAccessId == value.get_Id() && this.LastAccessTela == 11) { return; } if (registrar) { base.RegistrarAcao(string.Concat("ACESSOU STATUS \"", value.get_Nome(), "\""), value.get_Id(), new TipoTela?(11), string.Format("ID: {0}\nATIVO: {1}", value.get_Id(), (value.get_Ativo() ? "SIM" : "NÃO"))); } this.LastAccessId = value.get_Id(); this.LastAccessTela = 11; Gestor.Model.Domain.Seguros.Status selectedStatus = this.SelectedStatus; if (selectedStatus != null) { nullable = new long?(selectedStatus.get_Id()); } else { nullable = null; } long? nullable1 = nullable; long id = value.get_Id(); if (nullable1.GetValueOrDefault() != id | !nullable1.HasValue) { this.SelectedStatus = this.StatusFiltrados.FirstOrDefault((Gestor.Model.Domain.Seguros.Status x) => x.get_Id() == value.get_Id()); } } } }