using Gestor.Application.Helpers; using Gestor.Application.Servicos; 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 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 StatusProspeccaoViewModel : BaseSegurosViewModel { private readonly StatusProspeccaoServico _servico; private readonly ProspeccaoServico _servicoProspeccao; public StatusDeProspeccao CancelStatusProspeccao; private ObservableCollection _statusProspeccaoFiltrados = new ObservableCollection(); private bool _isExpanded; private StatusDeProspeccao _selectedStatusProspeccao; public bool IsExpanded { get { return this._isExpanded; } set { this._isExpanded = value; base.OnPropertyChanged("IsExpanded"); } } public StatusDeProspeccao SelectedStatusProspeccao { get { return this._selectedStatusProspeccao; } set { long? nullable; this._selectedStatusProspeccao = value; this.WorkOnSelectedStatusProspeccao(value, true); if (value != null) { nullable = new long?(value.get_Id()); } else { nullable = null; } base.VerificarEnables(nullable); base.OnPropertyChanged("SelectedStatusProspeccao"); } } public List StatusProspeccao { get; set; } public ObservableCollection StatusProspeccaoFiltrados { get { return this._statusProspeccaoFiltrados; } set { this._statusProspeccaoFiltrados = value; this.IsExpanded = (value != null ? value.Count > 0 : false); base.OnPropertyChanged("StatusProspeccaoFiltrados"); } } public StatusProspeccaoViewModel() { this._servico = new StatusProspeccaoServico(); this._servicoProspeccao = new ProspeccaoServico(); base.EnableMenu = true; this.Seleciona(); } public void CancelarAlteracao() { if (this.CancelStatusProspeccao == null || !this.StatusProspeccao.Any((StatusDeProspeccao x) => x.get_Id() == this.CancelStatusProspeccao.get_Id())) { this.Incluir(); } else { DomainBase.Copy(this.StatusProspeccao.First((StatusDeProspeccao x) => x.get_Id() == this.CancelStatusProspeccao.get_Id()), this.CancelStatusProspeccao); if (this.StatusProspeccaoFiltrados.Count <= 0 || !this.StatusProspeccaoFiltrados.Any((StatusDeProspeccao x) => x.get_Id() == this.CancelStatusProspeccao.get_Id())) { this.StatusProspeccaoFiltrados.Add(this.CancelStatusProspeccao); } else { DomainBase.Copy(this.StatusProspeccaoFiltrados.First((StatusDeProspeccao x) => x.get_Id() == this.CancelStatusProspeccao.get_Id()), this.CancelStatusProspeccao); } this.StatusProspeccaoFiltrados = new ObservableCollection(this.StatusProspeccaoFiltrados); this.SelectedStatusProspeccao = this.StatusProspeccaoFiltrados.First((StatusDeProspeccao x) => x.get_Id() == this.CancelStatusProspeccao.get_Id()); } base.Alterar(false); } public async void Excluir() { object obj; if (this.SelectedStatusProspeccao != null && this.SelectedStatusProspeccao.get_Id() != 0) { if (await this._servicoProspeccao.BuscarProspeccoesPorStatus(this.SelectedStatusProspeccao).Count > 0) { await base.ShowMessage(string.Concat("O STATUS ", this.SelectedStatusProspeccao.get_Nome(), ", NÃO PODE SER EXCLUÍDO, POIS ESTÁ CADASTRADO EM UMA PROSPECÇÃO"), "OK", "", false); } else if (await base.ShowMessage(string.Concat("DESEJA REALMENTE EXCLUIR O STATUS DE PROSPECÇÃO ", this.SelectedStatusProspeccao.get_Nome(), "?"), "SIM", "NÃO", false)) { base.Loading(true); this.SelectedStatusProspeccao.set_Excluido(true); this.SelectedStatusProspeccao.set_Ativo(false); await this._servico.Save(this.SelectedStatusProspeccao); if (this._servico.Sucesso) { StatusProspeccaoViewModel statusProspeccaoViewModel = this; string str = string.Concat("EXCLUIU STATUS DE PROSPECÇÃO \"", this.SelectedStatusProspeccao.get_Nome(), "\""); long id = this.SelectedStatusProspeccao.get_Id(); TipoTela? nullable = new TipoTela?(57); object id1 = this.SelectedStatusProspeccao.get_Id(); obj = (this.SelectedStatusProspeccao.get_Ativo() ? "SIM" : "NÃO"); statusProspeccaoViewModel.RegistrarAcao(str, id, nullable, string.Format("ID: {0}\nATIVO: {1}\nDESCRIÇÃO: \"{2}\"", id1, obj, this.SelectedStatusProspeccao.get_Descricao())); this.StatusProspeccao.Remove(this.SelectedStatusProspeccao); this.StatusProspeccaoFiltrados.Remove(this.SelectedStatusProspeccao); Recursos.StatusProspeccao.Remove(this.SelectedStatusProspeccao); this.SelectedStatusProspeccao = this.StatusProspeccaoFiltrados.FirstOrDefault(); await this.SelecionaStatusProspeccao(); base.Loading(false); base.ToggleSnackBar("STATUS DE PROSPECÇÃO EXCLUÍDO COM SUCESSO", true); } else { base.Loading(false); } } } } public async Task> Filtrar(string value) { List statusDeProspeccaos = await Task.Run>(() => this.FiltrarStatusProspeccao(value)); return statusDeProspeccaos; } public List FiltrarStatusProspeccao(string filter) { this.StatusProspeccaoFiltrados = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(this.StatusProspeccao) : new ObservableCollection( from x in this.StatusProspeccao where ValidationHelper.RemoveDiacritics(x.get_Nome().Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter)) orderby x.get_Ativo() descending, x.get_Nome() select x)); this.SelectedStatusProspeccao = this.StatusProspeccaoFiltrados.FirstOrDefault(); return this.StatusProspeccaoFiltrados.ToList(); } public void Incluir() { StatusDeProspeccao statusDeProspeccao = new StatusDeProspeccao(); statusDeProspeccao.set_Ativo(true); statusDeProspeccao.set_Excluido(false); this.SelectedStatusProspeccao = statusDeProspeccao; base.Alterar(true); } public async Task>> Salvar() { List> keyValuePairs; string str; object obj; string str1; List> keyValuePairs1 = this.SelectedStatusProspeccao.Validate(); keyValuePairs1.AddRange(this.Validate()); if (keyValuePairs1.Count <= 0) { str = (this.SelectedStatusProspeccao.get_Id() == 0 ? "INCLUIU" : "ALTEROU"); str1 = str; StatusDeProspeccao statusDeProspeccao = await this._servico.Save(this.SelectedStatusProspeccao); if (this._servico.Sucesso) { StatusProspeccaoViewModel statusProspeccaoViewModel = this; string str2 = string.Concat(str1, " STATUS DE PROSPECÇÃO \"", statusDeProspeccao.get_Nome(), "\""); long id = statusDeProspeccao.get_Id(); TipoTela? nullable = new TipoTela?(57); object id1 = statusDeProspeccao.get_Id(); obj = (statusDeProspeccao.get_Ativo() ? "SIM" : "NÃO"); statusProspeccaoViewModel.RegistrarAcao(str2, id, nullable, string.Format("ID: {0}\nATIVO: {1}\nDESCRIÇÃO: \"{2}\"", id1, obj, statusDeProspeccao.get_Descricao())); if (!this.StatusProspeccao.Any((StatusDeProspeccao x) => x.get_Id() == statusDeProspeccao.get_Id())) { this.StatusProspeccao.Add(statusDeProspeccao); } else { DomainBase.Copy(this.StatusProspeccao.First((StatusDeProspeccao x) => x.get_Id() == statusDeProspeccao.get_Id()), statusDeProspeccao); } if (!this.StatusProspeccaoFiltrados.Any((StatusDeProspeccao x) => x.get_Id() == statusDeProspeccao.get_Id())) { this.StatusProspeccaoFiltrados.Add(statusDeProspeccao); } else { DomainBase.Copy(this.StatusProspeccaoFiltrados.First((StatusDeProspeccao x) => x.get_Id() == statusDeProspeccao.get_Id()), statusDeProspeccao); } this.StatusProspeccaoFiltrados = new ObservableCollection(this.StatusProspeccaoFiltrados); this.WorkOnSelectedStatusProspeccao(statusDeProspeccao, false); Recursos.StatusProspeccao = this.StatusProspeccao; base.Alterar(false); base.ToggleSnackBar("STATUS DE PROSPECÇÃO SALVO COM SUCESSO", true); keyValuePairs = null; } else { keyValuePairs = null; } } else { keyValuePairs = keyValuePairs1; } str1 = null; return keyValuePairs; } private async void Seleciona() { base.Loading(true); await base.PermissaoTela(57); await this.SelecionaStatusProspeccao(); base.Loading(false); } private async Task SelecionaStatusProspeccao() { base.Loading(true); List statusDeProspeccaos = await this._servico.BuscarProspeccoes(); StatusProspeccaoViewModel list = this; List statusDeProspeccaos1 = statusDeProspeccaos; IEnumerable excluido = from x in statusDeProspeccaos1 where !x.get_Excluido() select x; IOrderedEnumerable ativo = from x in excluido orderby x.get_Ativo() descending select x; list.StatusProspeccao = ativo.ThenBy((StatusDeProspeccao x) => x.get_Nome()).ToList(); this.StatusProspeccaoFiltrados = new ObservableCollection(this.StatusProspeccao); this.SelectedStatusProspeccao = this.StatusProspeccaoFiltrados.FirstOrDefault(); base.Loading(false); } public List> Validate() { List> keyValuePairs = new List>(); if (string.IsNullOrWhiteSpace(this.SelectedStatusProspeccao.get_Nome())) { return keyValuePairs; } if (this.StatusProspeccao.Any((StatusDeProspeccao x) => { if (!x.get_Nome().Contains(this.SelectedStatusProspeccao.get_Nome())) { return false; } return x.get_Id() != this.SelectedStatusProspeccao.get_Id(); })) { keyValuePairs.Add(new KeyValuePair("Nome", "UM STATUS DE PROSPECÇÃO COM O MESMO NOME JÁ EXISTE.")); } return keyValuePairs; } private void WorkOnSelectedStatusProspeccao(StatusDeProspeccao value, bool registrar = true) { long? nullable; this.CancelStatusProspeccao = (value == null || value.get_Id() == 0 ? this.CancelStatusProspeccao : (StatusDeProspeccao)value.Clone()); if (value == null || value.get_Id() == 0 || this.LastAccessId == value.get_Id() && this.LastAccessTela == 57) { return; } if (registrar) { base.RegistrarAcao(string.Concat("ACESSOU STATUS DE PROSPECÇÃO \"", value.get_Nome(), "\""), value.get_Id(), new TipoTela?(57), string.Format("ID: {0}\nATIVO: {1}\nDESCRIÇÃO: \"{2}\"", value.get_Id(), (value.get_Ativo() ? "SIM" : "NÃO"), value.get_Descricao())); } this.LastAccessId = value.get_Id(); this.LastAccessTela = 57; StatusDeProspeccao selectedStatusProspeccao = this.SelectedStatusProspeccao; if (selectedStatusProspeccao != null) { nullable = new long?(selectedStatusProspeccao.get_Id()); } else { nullable = null; } long? nullable1 = nullable; long id = value.get_Id(); if (nullable1.GetValueOrDefault() != id | !nullable1.HasValue) { this.SelectedStatusProspeccao = this.StatusProspeccaoFiltrados.FirstOrDefault((StatusDeProspeccao x) => x.get_Id() == value.get_Id()); } } } }