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.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; namespace Gestor.Application.ViewModels.Ferramentas; public class StatusViewModel : BaseSegurosViewModel { private readonly StatusServico _servico; private Status _selectedStatus; public Status CancelStatus; private ObservableCollection _statusFiltrados = new ObservableCollection(); private bool _isExpanded; public Status SelectedStatus { get { return _selectedStatus; } set { _selectedStatus = value; WorkOnSelectedStatus(value); VerificarEnables((value != null) ? new long?(((DomainBase)value).Id) : null); OnPropertyChanged("SelectedStatus"); } } public ObservableCollection StatusFiltrados { get { return _statusFiltrados; } set { _statusFiltrados = value; IsExpanded = value != null && value.Count > 0; OnPropertyChanged("StatusFiltrados"); } } public bool IsExpanded { get { return _isExpanded; } set { _isExpanded = value; OnPropertyChanged("IsExpanded"); } } public List Status { get; set; } public StatusViewModel() { _servico = new StatusServico(); base.EnableMenu = true; Seleciona(); } private async void Seleciona() { Loading(isLoading: true); await PermissaoTela((TipoTela)11); await SelecionaStatuses(); Loading(isLoading: false); } private async Task SelecionaStatuses() { Loading(isLoading: true); Status = (from x in await new BaseServico().BuscarStatusAsync() orderby x.Ativo descending, x.Nome select x).ToList(); StatusFiltrados = new ObservableCollection(Status); SelectedStatus = StatusFiltrados.FirstOrDefault(); Recursos.Status = Status; Loading(isLoading: false); } public async Task>> Validate() { if (string.IsNullOrWhiteSpace(SelectedStatus.Nome)) { return new List>(); } List> errors = new List>(); bool valida = true; List list = await new BaseServico().BuscarStatus(SelectedStatus.Nome); if (list.Count > 0) { list.ForEach(delegate(Status x) { if (((DomainBase)x).Id != ((DomainBase)SelectedStatus).Id && x.Nome == SelectedStatus.Nome) { valida = false; } }); } if (!valida) { errors.Add(new KeyValuePair("Nome", "UM STATUS COM O MESMO NOME JÁ EXISTE.")); } return errors; } public async Task>> Salvar() { List> errorMessages = SelectedStatus.Validate(); List> list = errorMessages; list.AddRange(await Validate()); if (errorMessages.Count > 0) { return errorMessages; } string acao = ((((DomainBase)SelectedStatus).Id == 0L) ? "INCLUIU" : "ALTEROU"); Status value = await _servico.Save(SelectedStatus); if (!_servico.Sucesso) { return null; } RegistrarAcao(acao + " STATUS ID \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)11, string.Format("ID: {0}\nATIVO: {1}", ((DomainBase)value).Id, value.Ativo ? "SIM" : "NÃO")); if (Status.Any((Status x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(Status.First((Status x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { Status.Add(value); } if (StatusFiltrados.Any((Status x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(StatusFiltrados.First((Status x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { StatusFiltrados.Add(value); } StatusFiltrados = new ObservableCollection(StatusFiltrados); WorkOnSelectedStatus(value, registrar: false); Recursos.Status = Status; Alterar(alterar: false); ToggleSnackBar("STATUS SALVO COM SUCESSO"); return null; } public void CancelarAlteracao() { if (CancelStatus != null && Status.Any((Status x) => ((DomainBase)x).Id == ((DomainBase)CancelStatus).Id)) { DomainBase.Copy(Status.First((Status x) => ((DomainBase)x).Id == ((DomainBase)CancelStatus).Id), CancelStatus); if (StatusFiltrados.Count > 0 && StatusFiltrados.Any((Status x) => ((DomainBase)x).Id == ((DomainBase)CancelStatus).Id)) { DomainBase.Copy(StatusFiltrados.First((Status x) => ((DomainBase)x).Id == ((DomainBase)CancelStatus).Id), CancelStatus); } else { StatusFiltrados.Add(CancelStatus); } StatusFiltrados = new ObservableCollection(StatusFiltrados); SelectedStatus = StatusFiltrados.First((Status x) => ((DomainBase)x).Id == ((DomainBase)CancelStatus).Id); } else { Incluir(); } Alterar(alterar: false); } 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_0012: Expected O, but got Unknown SelectedStatus = new Status { Ativo = true }; Alterar(alterar: true); } internal async Task> Filtrar(string value) { return await Task.Run(() => FiltrarStatus(value)); } public List FiltrarStatus(string filter) { StatusFiltrados = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(Status) : new ObservableCollection(from x in Status where ValidationHelper.RemoveDiacritics(x.Nome.Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter)) orderby x.Ativo descending, x.Nome select x)); return StatusFiltrados.ToList(); } public async void SelecionaStatus(Status status) { Status val = await _servico.BuscarStatusPorId(((DomainBase)status).Id); DomainBase.Copy(StatusFiltrados.First((Status x) => ((DomainBase)x).Id == ((DomainBase)status).Id), val); SelectedStatus = StatusFiltrados.First((Status x) => ((DomainBase)x).Id == ((DomainBase)status).Id); } public async void Excluir() { if (SelectedStatus == null || ((DomainBase)SelectedStatus).Id == 0L) { return; } Loading(isLoading: true); List list = await new BaseServico().BuscarDocumentosPorStatus(((DomainBase)SelectedStatus).Id); Loading(isLoading: false); if (list.Count > 0) { string text = "ESTIPULANTE NÃO PODE SER EXCLUÍDO POIS ESTÁ VINCULADO AOS SEGUINTES DOCUMENTOS:"; foreach (Documento item in list) { text = ((!string.IsNullOrWhiteSpace(item.Apolice)) ? (text + $"{Environment.NewLine}DOCUMENTO {list.IndexOf(item) + 1} (NÚMERO DA PROPOSTA: {item.Proposta}, NÚMERO DA APÓLICE: {item.Apolice})") : (text + $"{Environment.NewLine}DOCUMENTO {list.IndexOf(item) + 1} (NÚMERO DA PROPOSTA: {item.Proposta})")); } await ShowMessage(text); } else { if (!(await ShowMessage("DESEJA EXCLUIR?", "SIM", "NÃO"))) { return; } Loading(isLoading: true); if (!(await _servico.Delete(SelectedStatus))) { Loading(isLoading: false); return; } RegistrarAcao("EXCLUIU STATUS \"" + SelectedStatus.Nome + "\"", ((DomainBase)SelectedStatus).Id, (TipoTela)11, string.Format("ID: {0}\nATIVO: {1}", ((DomainBase)SelectedStatus).Id, SelectedStatus.Ativo ? "SIM" : "NÃO")); int num = StatusFiltrados.IndexOf(SelectedStatus); Status.Remove(SelectedStatus); StatusFiltrados.Remove(SelectedStatus); StatusFiltrados = new ObservableCollection(StatusFiltrados); if (StatusFiltrados.Count > 0) { SelectedStatus = ((num < StatusFiltrados.Count) ? StatusFiltrados.ElementAt(num) : StatusFiltrados.Last()); } else { SelectedStatus = new Status(); Alterar(alterar: false); base.EnableMenu = false; } Loading(isLoading: false); ToggleSnackBar("ESTIPULANTE EXCLUÍDO COM SUCESSO"); } } private void WorkOnSelectedStatus(Status 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_00ef: Unknown result type (might be due to invalid IL or missing references) CancelStatus = (Status)((value == null || ((DomainBase)value).Id == 0L) ? ((object)CancelStatus) : ((object)(Status)((DomainBase)value).Clone())); if (value == null || ((DomainBase)value).Id == 0L || (LastAccessId == ((DomainBase)value).Id && (int)LastAccessTela == 11)) { return; } if (registrar) { RegistrarAcao("ACESSOU STATUS \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)11, string.Format("ID: {0}\nATIVO: {1}", ((DomainBase)value).Id, value.Ativo ? "SIM" : "NÃO")); } LastAccessId = ((DomainBase)value).Id; LastAccessTela = (TipoTela)11; Status selectedStatus = SelectedStatus; if (((selectedStatus != null) ? new long?(((DomainBase)selectedStatus).Id) : null) != ((DomainBase)value).Id) { SelectedStatus = ((IEnumerable)StatusFiltrados).FirstOrDefault((Func)((Status x) => ((DomainBase)x).Id == ((DomainBase)value).Id)); } } }