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 RamoViewModel : BaseSegurosViewModel { private readonly RamoServico _servico; private Ramo _selectedRamo = new Ramo(); private decimal _iof; private ObservableCollection _ramosFiltrados = new ObservableCollection(); private bool _isExpanded; private List _coberturas = new List(); private ObservableCollection _coberturasFiltradas = new ObservableCollection(); public Ramo CancelRamo; public Ramo SelectedRamo { get { return _selectedRamo; } set { _selectedRamo = value; WorkOnSelectedRamo(value); VerificarEnables((value != null) ? new long?(((DomainBase)value).Id) : null); OnPropertyChanged("SelectedRamo"); } } public decimal Iof { get { return _iof; } set { _iof = value; OnPropertyChanged("Iof"); } } public List Ramos { get; set; } public ObservableCollection RamosFiltrados { get { return _ramosFiltrados; } set { _ramosFiltrados = value; IsExpanded = value != null && value.Count > 0; OnPropertyChanged("RamosFiltrados"); } } public bool IsExpanded { get { return _isExpanded; } set { _isExpanded = value; OnPropertyChanged("IsExpanded"); } } public List Coberturas { get { return _coberturas; } set { _coberturas = value; OnPropertyChanged("Coberturas"); } } public ObservableCollection CoberturasFiltradas { get { return _coberturasFiltradas; } set { _coberturasFiltradas = value; OnPropertyChanged("CoberturasFiltradas"); } } public RamoViewModel() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown _servico = new RamoServico(); base.EnableMenu = true; Seleciona(); } public async void Seleciona() { Loading(isLoading: true); await PermissaoTela((TipoTela)12); await SelecionaRamos(); Loading(isLoading: false); } private async Task SelecionaRamos(Ramo ramo = null) { Loading(isLoading: true); await SelecionaCoberturas(); List list = await new BaseServico().BuscarRamosAsync(); Ramos = (from x in list orderby x.Ativo descending, x.Nome select x).ToList(); RamosFiltrados = new ObservableCollection(Ramos); SelectedRamo = (Ramo)((ramo == null) ? ((object)RamosFiltrados.First()) : ((object)((IEnumerable)RamosFiltrados).FirstOrDefault((Func)((Ramo x) => ((DomainBase)x).Id == ((DomainBase)ramo).Id)))); Recursos.Ramos = list; Loading(isLoading: false); } private static async Task SelecionaCoberturas() { Recursos.Coberturas = await new BaseServico().BuscaCoberturas(); } private void WorkOnSelectedRamo(Ramo 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_0170: Unknown result type (might be due to invalid IL or missing references) CancelRamo = (Ramo)((value == null || ((DomainBase)value).Id == 0L) ? ((object)CancelRamo) : ((object)(Ramo)((DomainBase)value).Clone())); if (value == null || ((DomainBase)value).Id == 0L || (LastAccessId == ((DomainBase)value).Id && (int)LastAccessTela == 12)) { return; } Coberturas = (from x in Recursos.Coberturas where x.IdRamo == ((DomainBase)value).Id orderby x.Padrao descending, x.Descricao select x).ToList(); CoberturasFiltradas = new ObservableCollection(Coberturas); Iof = value.Iof * 0.01m; if (registrar) { RegistrarAcao("ACESSOU RAMO \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)12, $"ID RAMO: {((DomainBase)value).Id}"); } LastAccessId = ((DomainBase)value).Id; LastAccessTela = (TipoTela)12; Ramo selectedRamo = SelectedRamo; if (((selectedRamo != null) ? new long?(((DomainBase)selectedRamo).Id) : null) != ((DomainBase)value).Id) { SelectedRamo = ((IEnumerable)RamosFiltrados).FirstOrDefault((Func)((Ramo x) => ((DomainBase)x).Id == ((DomainBase)value).Id)); } } public async Task>> Salvar() { SelectedRamo.Iof = Iof; List> list = SelectedRamo.Validate(); if (list.Count > 0) { return list; } Ramo selectedRamo = SelectedRamo; selectedRamo.Iof *= 100m; string acao = ((((DomainBase)SelectedRamo).Id == 0L) ? "INCLUIU" : "ALTEROU"); Ramo value = await _servico.Save(SelectedRamo, Coberturas); if (!_servico.Sucesso) { return null; } RegistrarAcao(acao + " RAMO \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)12, $"RAMO \"{value.Nome}\", ID: {((DomainBase)value).Id}"); if (Ramos.Any((Ramo x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(Ramos.First((Ramo x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { Ramos.Add(value); } if (RamosFiltrados.Any((Ramo x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(RamosFiltrados.First((Ramo x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { RamosFiltrados.Add(value); } RamosFiltrados = new ObservableCollection(RamosFiltrados); Recursos.Ramos = Ramos; await SelecionaCoberturas(); WorkOnSelectedRamo(value, registrar: false); Alterar(alterar: false); ToggleSnackBar("RAMO SALVO COM SUCESSO"); return null; } public void CancelarAlteracao() { if (CancelRamo != null && Ramos.Any((Ramo x) => ((DomainBase)x).Id == ((DomainBase)CancelRamo).Id)) { DomainBase.Copy(Ramos.First((Ramo x) => ((DomainBase)x).Id == ((DomainBase)CancelRamo).Id), CancelRamo); if (RamosFiltrados.Count > 0 && RamosFiltrados.Any((Ramo x) => ((DomainBase)x).Id == ((DomainBase)CancelRamo).Id)) { DomainBase.Copy(RamosFiltrados.First((Ramo x) => ((DomainBase)x).Id == ((DomainBase)CancelRamo).Id), CancelRamo); } else { RamosFiltrados.Add(CancelRamo); } RamosFiltrados = new ObservableCollection(RamosFiltrados); SelectedRamo = RamosFiltrados.First((Ramo x) => ((DomainBase)x).Id == ((DomainBase)CancelRamo).Id); } Alterar(alterar: false); } internal async Task> Filtrar(string value) { return await Task.Run(() => FiltrarRamo(value)); } public List FiltrarRamo(string filter) { RamosFiltrados = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(Ramos) : new ObservableCollection(from x in Ramos where ValidationHelper.RemoveDiacritics(x.Nome.Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter)) orderby x.Ativo descending, x.Nome select x)); return RamosFiltrados.ToList(); } internal async Task> FiltrarCobertura(string value) { return await Task.Run(() => FiltrarCoberturaRamo(value)); } public List FiltrarCoberturaRamo(string filter) { CoberturasFiltradas = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(Coberturas) : new ObservableCollection(Coberturas.Where((CoberturaPadrao x) => ValidationHelper.RemoveDiacritics(x.Descricao.Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter))))); return CoberturasFiltradas.ToList(); } public void SelecionaRamo(Ramo ramo) { SelectedRamo = ramo; } public async void Incluir(Ramo ramo) { ramo.Ativo = true; await _servico.Insert(ramo); if (_servico.Sucesso) { await SelecionaRamos(ramo); } } }