using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using Gestor.Application.Helpers; using Gestor.Application.Servicos; using Gestor.Application.Servicos.Ferramentas; using Gestor.Application.ViewModels.Generic; using Gestor.Common.Validation; using Gestor.Model.Common; using Gestor.Model.Domain.Ferramentas; using Gestor.Model.Domain.Generic; 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 List StatusProspeccao { get; set; } public ObservableCollection StatusProspeccaoFiltrados { get { return _statusProspeccaoFiltrados; } set { _statusProspeccaoFiltrados = value; IsExpanded = value != null && value.Count > 0; OnPropertyChanged("StatusProspeccaoFiltrados"); } } public bool IsExpanded { get { return _isExpanded; } set { _isExpanded = value; OnPropertyChanged("IsExpanded"); } } public StatusDeProspeccao SelectedStatusProspeccao { get { return _selectedStatusProspeccao; } set { _selectedStatusProspeccao = value; WorkOnSelectedStatusProspeccao(value); VerificarEnables((value != null) ? new long?(((DomainBase)value).Id) : null); OnPropertyChanged("SelectedStatusProspeccao"); } } public StatusProspeccaoViewModel() { _servico = new StatusProspeccaoServico(); _servicoProspeccao = new ProspeccaoServico(); base.EnableMenu = true; Seleciona(); } private async void Seleciona() { Loading(isLoading: true); await PermissaoTela((TipoTela)57); await SelecionaStatusProspeccao(); Loading(isLoading: false); } private async Task SelecionaStatusProspeccao() { Loading(isLoading: true); StatusProspeccao = (from x in await _servico.BuscarProspeccoes() where !x.Excluido orderby x.Ativo descending, x.Nome select x).ToList(); StatusProspeccaoFiltrados = new ObservableCollection(StatusProspeccao); SelectedStatusProspeccao = StatusProspeccaoFiltrados.FirstOrDefault(); Loading(isLoading: false); } public async Task> Filtrar(string value) { return await Task.Run(() => FiltrarStatusProspeccao(value)); } public List FiltrarStatusProspeccao(string filter) { StatusProspeccaoFiltrados = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(StatusProspeccao) : new ObservableCollection(from x in StatusProspeccao where ValidationHelper.RemoveDiacritics(x.Nome.Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter)) orderby x.Ativo descending, x.Nome select x)); SelectedStatusProspeccao = StatusProspeccaoFiltrados.FirstOrDefault(); return StatusProspeccaoFiltrados.ToList(); } public void Incluir() { //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) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown SelectedStatusProspeccao = new StatusDeProspeccao { Ativo = true, Excluido = false }; Alterar(alterar: true); } public async Task>> Salvar() { List> list = SelectedStatusProspeccao.Validate(); list.AddRange(Validate()); if (list.Count > 0) { return list; } string acao = ((((DomainBase)SelectedStatusProspeccao).Id == 0L) ? "INCLUIU" : "ALTEROU"); StatusDeProspeccao value = await _servico.Save(SelectedStatusProspeccao); if (!_servico.Sucesso) { return null; } RegistrarAcao(acao + " STATUS DE PROSPECÇÃO \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)57, string.Format("ID: {0}\nATIVO: {1}\nDESCRIÇÃO: \"{2}\"", ((DomainBase)value).Id, value.Ativo ? "SIM" : "NÃO", value.Descricao)); if (StatusProspeccao.Any((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(StatusProspeccao.First((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { StatusProspeccao.Add(value); } if (StatusProspeccaoFiltrados.Any((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(StatusProspeccaoFiltrados.First((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { StatusProspeccaoFiltrados.Add(value); } StatusProspeccaoFiltrados = new ObservableCollection(StatusProspeccaoFiltrados); WorkOnSelectedStatusProspeccao(value, registrar: false); Recursos.StatusProspeccao = StatusProspeccao; Alterar(alterar: false); ToggleSnackBar("STATUS DE PROSPECÇÃO SALVO COM SUCESSO"); return null; } public List> Validate() { List> list = new List>(); if (string.IsNullOrWhiteSpace(SelectedStatusProspeccao.Nome)) { return list; } if (StatusProspeccao.Any((StatusDeProspeccao x) => x.Nome.Contains(SelectedStatusProspeccao.Nome) && ((DomainBase)x).Id != ((DomainBase)SelectedStatusProspeccao).Id)) { list.Add(new KeyValuePair("Nome", "UM STATUS DE PROSPECÇÃO COM O MESMO NOME JÁ EXISTE.")); } return list; } public void CancelarAlteracao() { if (CancelStatusProspeccao != null && StatusProspeccao.Any((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)CancelStatusProspeccao).Id)) { DomainBase.Copy(StatusProspeccao.First((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)CancelStatusProspeccao).Id), CancelStatusProspeccao); if (StatusProspeccaoFiltrados.Count > 0 && StatusProspeccaoFiltrados.Any((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)CancelStatusProspeccao).Id)) { DomainBase.Copy(StatusProspeccaoFiltrados.First((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)CancelStatusProspeccao).Id), CancelStatusProspeccao); } else { StatusProspeccaoFiltrados.Add(CancelStatusProspeccao); } StatusProspeccaoFiltrados = new ObservableCollection(StatusProspeccaoFiltrados); SelectedStatusProspeccao = StatusProspeccaoFiltrados.First((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)CancelStatusProspeccao).Id); } else { Incluir(); } Alterar(alterar: false); } public async void Excluir() { if (SelectedStatusProspeccao == null || ((DomainBase)SelectedStatusProspeccao).Id == 0L) { return; } if ((await _servicoProspeccao.BuscarProspeccoesPorStatus(SelectedStatusProspeccao)).Count > 0) { await ShowMessage("O STATUS " + SelectedStatusProspeccao.Nome + ", NÃO PODE SER EXCLUÍDO, POIS ESTÁ CADASTRADO EM UMA PROSPECÇÃO"); } else if (await ShowMessage("DESEJA REALMENTE EXCLUIR O STATUS DE PROSPECÇÃO " + SelectedStatusProspeccao.Nome + "?", "SIM", "NÃO")) { Loading(isLoading: true); SelectedStatusProspeccao.Excluido = true; SelectedStatusProspeccao.Ativo = false; await _servico.Save(SelectedStatusProspeccao); if (!_servico.Sucesso) { Loading(isLoading: false); return; } RegistrarAcao("EXCLUIU STATUS DE PROSPECÇÃO \"" + SelectedStatusProspeccao.Nome + "\"", ((DomainBase)SelectedStatusProspeccao).Id, (TipoTela)57, string.Format("ID: {0}\nATIVO: {1}\nDESCRIÇÃO: \"{2}\"", ((DomainBase)SelectedStatusProspeccao).Id, SelectedStatusProspeccao.Ativo ? "SIM" : "NÃO", SelectedStatusProspeccao.Descricao)); StatusProspeccao.Remove(SelectedStatusProspeccao); StatusProspeccaoFiltrados.Remove(SelectedStatusProspeccao); Recursos.StatusProspeccao.Remove(SelectedStatusProspeccao); SelectedStatusProspeccao = StatusProspeccaoFiltrados.FirstOrDefault(); await SelecionaStatusProspeccao(); Loading(isLoading: false); ToggleSnackBar("STATUS DE PROSPECÇÃO EXCLUÍDO COM SUCESSO"); } } private void WorkOnSelectedStatusProspeccao(StatusDeProspeccao value, bool registrar = true) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Invalid comparison between Unknown and I4 //IL_00fa: Unknown result type (might be due to invalid IL or missing references) CancelStatusProspeccao = (StatusDeProspeccao)((value == null || ((DomainBase)value).Id == 0L) ? ((object)CancelStatusProspeccao) : ((object)(StatusDeProspeccao)((DomainBase)value).Clone())); if (value == null || ((DomainBase)value).Id == 0L || (LastAccessId == ((DomainBase)value).Id && (int)LastAccessTela == 57)) { return; } if (registrar) { RegistrarAcao("ACESSOU STATUS DE PROSPECÇÃO \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)57, string.Format("ID: {0}\nATIVO: {1}\nDESCRIÇÃO: \"{2}\"", ((DomainBase)value).Id, value.Ativo ? "SIM" : "NÃO", value.Descricao)); } LastAccessId = ((DomainBase)value).Id; LastAccessTela = (TipoTela)57; StatusDeProspeccao selectedStatusProspeccao = SelectedStatusProspeccao; if (((selectedStatusProspeccao != null) ? new long?(((DomainBase)selectedStatusProspeccao).Id) : null) != ((DomainBase)value).Id) { SelectedStatusProspeccao = ((IEnumerable)StatusProspeccaoFiltrados).FirstOrDefault((Func)((StatusDeProspeccao x) => ((DomainBase)x).Id == ((DomainBase)value).Id)); } } }