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 TipoTarefaViewModel : BaseSegurosViewModel { private readonly TipoTarefaServico _servico; private readonly TarefaServico _servicoTarefa; public TipoDeTarefa CancelTipoTarefa; private ObservableCollection _tiposTarefaFiltrados = new ObservableCollection(); private bool _isExpanded; private TipoDeTarefa _selectedTipoTarefa; public List TiposTarefa { get; set; } public ObservableCollection TiposTarefaFiltrados { get { return _tiposTarefaFiltrados; } set { _tiposTarefaFiltrados = value; IsExpanded = value != null && value.Count > 0; OnPropertyChanged("TiposTarefaFiltrados"); } } public bool IsExpanded { get { return _isExpanded; } set { _isExpanded = value; OnPropertyChanged("IsExpanded"); } } public TipoDeTarefa SelectedTipoTarefa { get { return _selectedTipoTarefa; } set { _selectedTipoTarefa = value; WorkOnSelectedTipoTarefa(value); VerificarEnables((value != null) ? new long?(((DomainBase)value).Id) : null); OnPropertyChanged("SelectedTipoTarefa"); } } public TipoTarefaViewModel() { _servico = new TipoTarefaServico(); _servicoTarefa = new TarefaServico(); base.EnableMenu = true; Seleciona(); } private async void Seleciona() { Loading(isLoading: true); await PermissaoTela((TipoTela)52); await SelecionaTipoTarefa(); Loading(isLoading: false); } private async Task SelecionaTipoTarefa() { Loading(isLoading: true); TiposTarefa = (from x in await _servico.BuscarTarefas() where !x.Excluido orderby x.Ativo descending, x.Nome select x).ToList(); TiposTarefaFiltrados = new ObservableCollection(TiposTarefa); SelectedTipoTarefa = TiposTarefaFiltrados.FirstOrDefault(); Loading(isLoading: false); } public async Task> Filtrar(string value) { return await Task.Run(() => FiltrarTipoTarefa(value)); } public List FiltrarTipoTarefa(string filter) { TiposTarefaFiltrados = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(TiposTarefa) : new ObservableCollection(from x in TiposTarefa where ValidationHelper.RemoveDiacritics(x.Nome.Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter)) orderby x.Ativo descending, x.Nome select x)); SelectedTipoTarefa = TiposTarefaFiltrados.FirstOrDefault(); return TiposTarefaFiltrados.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 SelectedTipoTarefa = new TipoDeTarefa { Ativo = true, Excluido = false }; Alterar(alterar: true); } public async Task>> Salvar() { List> list = SelectedTipoTarefa.Validate(); list.AddRange(Validate()); if (list.Count > 0) { return list; } string acao = ((((DomainBase)SelectedTipoTarefa).Id == 0L) ? "INCLUIU" : "ALTEROU"); TipoDeTarefa value = await _servico.Save(SelectedTipoTarefa); if (!_servico.Sucesso) { return null; } RegistrarAcao(acao + " TIPO DE TAREFA \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)52, string.Format("ID: {0}\nATIVO: {1}\nDESCRIÇÃO: \"{2}\"", ((DomainBase)value).Id, value.Ativo ? "SIM" : "NÃO", value.Descricao)); if (TiposTarefa.Any((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(TiposTarefa.First((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { TiposTarefa.Add(value); } if (TiposTarefaFiltrados.Any((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(TiposTarefaFiltrados.First((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { TiposTarefaFiltrados.Add(value); } TiposTarefaFiltrados = new ObservableCollection(TiposTarefaFiltrados); WorkOnSelectedTipoTarefa(value, registrar: false); Recursos.TiposTarefa = TiposTarefa; Alterar(alterar: false); ToggleSnackBar("TIPO DE TAREFA SALVO COM SUCESSO"); return null; } public List> Validate() { List> list = new List>(); if (string.IsNullOrWhiteSpace(SelectedTipoTarefa.Nome)) { return list; } if (TiposTarefa.Any((TipoDeTarefa x) => x.Nome.Contains(SelectedTipoTarefa.Nome) && ((DomainBase)x).Id != ((DomainBase)SelectedTipoTarefa).Id)) { list.Add(new KeyValuePair("Nome", "UM TIPO DE TAREFA COM O MESMO NOME JÁ EXISTE.")); } return list; } public void CancelarAlteracao() { if (CancelTipoTarefa != null && TiposTarefa.Any((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)CancelTipoTarefa).Id)) { DomainBase.Copy(TiposTarefa.First((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)CancelTipoTarefa).Id), CancelTipoTarefa); if (TiposTarefaFiltrados.Count > 0 && TiposTarefaFiltrados.Any((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)CancelTipoTarefa).Id)) { DomainBase.Copy(TiposTarefaFiltrados.First((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)CancelTipoTarefa).Id), CancelTipoTarefa); } else { TiposTarefaFiltrados.Add(CancelTipoTarefa); } TiposTarefaFiltrados = new ObservableCollection(TiposTarefaFiltrados); SelectedTipoTarefa = TiposTarefaFiltrados.First((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)CancelTipoTarefa).Id); } else { Incluir(); } Alterar(alterar: false); } public async void Excluir() { if (SelectedTipoTarefa == null || ((DomainBase)SelectedTipoTarefa).Id == 0L) { return; } if ((await _servicoTarefa.BuscarTarefasPorTipo(SelectedTipoTarefa)).Count > 0) { await ShowMessage("O TIPO " + SelectedTipoTarefa.Nome + ", NÃO PODE SER EXCLUÍDO, POIS ESTÁ CADASTRADO EM UMA TAREFA"); } else if (await ShowMessage("DESEJA REALMENTE EXCLUIR O TIPO DE TAREFA " + SelectedTipoTarefa.Nome + "?", "SIM", "NÃO")) { Loading(isLoading: true); SelectedTipoTarefa.Excluido = true; SelectedTipoTarefa.Ativo = false; await _servico.Save(SelectedTipoTarefa); if (!_servico.Sucesso) { Loading(isLoading: false); return; } RegistrarAcao("EXCLUIU TIPO DE TAREFA \"" + SelectedTipoTarefa.Nome + "\"", ((DomainBase)SelectedTipoTarefa).Id, (TipoTela)52, string.Format("ID: {0}\nATIVO: {1}\nDESCRIÇÃO: \"{2}\"", ((DomainBase)SelectedTipoTarefa).Id, SelectedTipoTarefa.Ativo ? "SIM" : "NÃO", SelectedTipoTarefa.Descricao)); TiposTarefa.Remove(SelectedTipoTarefa); TiposTarefaFiltrados.Remove(SelectedTipoTarefa); Recursos.TiposTarefa.Remove(SelectedTipoTarefa); SelectedTipoTarefa = TiposTarefaFiltrados.FirstOrDefault(); await SelecionaTipoTarefa(); Loading(isLoading: false); ToggleSnackBar("TIPO DE TAREFA EXCLUÍDO COM SUCESSO"); } } private void WorkOnSelectedTipoTarefa(TipoDeTarefa 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) CancelTipoTarefa = (TipoDeTarefa)((value == null || ((DomainBase)value).Id == 0L) ? ((object)CancelTipoTarefa) : ((object)(TipoDeTarefa)((DomainBase)value).Clone())); if (value == null || ((DomainBase)value).Id == 0L || (LastAccessId == ((DomainBase)value).Id && (int)LastAccessTela == 52)) { return; } if (registrar) { RegistrarAcao("ACESSOU TIPO DE TAREFA \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)52, 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)52; TipoDeTarefa selectedTipoTarefa = SelectedTipoTarefa; if (((selectedTipoTarefa != null) ? new long?(((DomainBase)selectedTipoTarefa).Id) : null) != ((DomainBase)value).Id) { SelectedTipoTarefa = ((IEnumerable)TiposTarefaFiltrados).FirstOrDefault((Func)((TipoDeTarefa x) => ((DomainBase)x).Id == ((DomainBase)value).Id)); } } }