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 ProdutoViewModel : BaseSegurosViewModel { private readonly ProdutoServico _servico; private Produto _selectedProduto; public Produto CancelProduto; private ObservableCollection _produtosFiltrados = new ObservableCollection(); private bool _isExpanded; public Produto SelectedProduto { get { return _selectedProduto; } set { _selectedProduto = value; WorkOnSelectedProduto(value); VerificarEnables((value != null) ? new long?(((DomainBase)value).Id) : null); OnPropertyChanged("SelectedProduto"); } } public ObservableCollection ProdutosFiltrados { get { return _produtosFiltrados; } set { _produtosFiltrados = value; IsExpanded = value != null && value.Count > 0; OnPropertyChanged("ProdutosFiltrados"); } } public bool IsExpanded { get { return _isExpanded; } set { _isExpanded = value; OnPropertyChanged("IsExpanded"); } } public List Produtos { get; set; } public ProdutoViewModel() { _servico = new ProdutoServico(); base.EnableMenu = true; Seleciona(); } private async void Seleciona() { Loading(isLoading: true); await PermissaoTela((TipoTela)10); await SelecionaProdutos(); Loading(isLoading: false); } private async Task SelecionaProdutos() { Loading(isLoading: true); Produtos = (from x in await new BaseServico().BuscarProdutosAsync() orderby x.Ativo descending, x.Nome select x).ToList(); ProdutosFiltrados = new ObservableCollection(Produtos); SelectedProduto = ProdutosFiltrados.FirstOrDefault(); Recursos.Produtos = Produtos.OrderBy((Produto x) => x.Nome).ToList(); Loading(isLoading: false); Loading(isLoading: true); } public async Task>> Validate() { if (string.IsNullOrWhiteSpace(SelectedProduto.Nome)) { return new List>(); } List> errors = new List>(); bool valida = true; List list = await new BaseServico().BuscarProduto(SelectedProduto.Nome); if (list.Count > 0) { list.ForEach(delegate(Produto x) { if (((DomainBase)x).Id != ((DomainBase)SelectedProduto).Id && x.Nome == SelectedProduto.Nome) { valida = false; } }); } if (!valida) { errors.Add(new KeyValuePair("Nome", "UM PRODUTO COM O MESMO NOME JÁ EXISTE.")); } return errors; } public async Task>> Salvar() { List> errorMessages = SelectedProduto.Validate(); List> list = errorMessages; list.AddRange(await Validate()); if (errorMessages.Count > 0) { return errorMessages; } string acao = ((((DomainBase)SelectedProduto).Id == 0L) ? "INCLUIU" : "ALTEROU"); Produto value = await _servico.Save(SelectedProduto); if (!_servico.Sucesso) { return null; } RegistrarAcao(acao + " PRODUTO \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)10, $"PRODUTO \"{value.Nome}\", ID: {((DomainBase)value).Id}"); if (Produtos.Any((Produto x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(Produtos.First((Produto x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { Produtos.Add(value); } if (ProdutosFiltrados.Any((Produto x) => ((DomainBase)x).Id == ((DomainBase)value).Id)) { DomainBase.Copy(ProdutosFiltrados.First((Produto x) => ((DomainBase)x).Id == ((DomainBase)value).Id), value); } else { ProdutosFiltrados.Add(value); } ProdutosFiltrados = new ObservableCollection(ProdutosFiltrados); Recursos.Produtos = Produtos.OrderBy((Produto x) => x.Nome).ToList(); WorkOnSelectedProduto(value, registrar: false); Alterar(alterar: false); ToggleSnackBar("PRODUTO SALVO COM SUCESSO"); return null; } public void CancelarAlteracao() { if (CancelProduto != null && Produtos.Any((Produto x) => ((DomainBase)x).Id == ((DomainBase)CancelProduto).Id)) { DomainBase.Copy(Produtos.First((Produto x) => ((DomainBase)x).Id == ((DomainBase)CancelProduto).Id), CancelProduto); if (ProdutosFiltrados.Count > 0 && ProdutosFiltrados.Any((Produto x) => ((DomainBase)x).Id == ((DomainBase)CancelProduto).Id)) { DomainBase.Copy(ProdutosFiltrados.First((Produto x) => ((DomainBase)x).Id == ((DomainBase)CancelProduto).Id), CancelProduto); } else { ProdutosFiltrados.Add(CancelProduto); } ProdutosFiltrados = new ObservableCollection(ProdutosFiltrados); SelectedProduto = ProdutosFiltrados.First((Produto x) => ((DomainBase)x).Id == ((DomainBase)CancelProduto).Id); } else { Incluir(); } Alterar(alterar: false); } private void WorkOnSelectedProduto(Produto 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_00d6: Unknown result type (might be due to invalid IL or missing references) CancelProduto = (Produto)((value == null || ((DomainBase)value).Id == 0L) ? ((object)CancelProduto) : ((object)(Produto)((DomainBase)value).Clone())); if (value == null || ((DomainBase)value).Id == 0L || (LastAccessId == ((DomainBase)value).Id && (int)LastAccessTela == 10)) { return; } if (registrar) { RegistrarAcao("ACESSOU PRODUTO \"" + value.Nome + "\"", ((DomainBase)value).Id, (TipoTela)10, $"ID PRODUTO: {((DomainBase)value).Id}"); } LastAccessId = ((DomainBase)value).Id; LastAccessTela = (TipoTela)10; Produto selectedProduto = SelectedProduto; if (((selectedProduto != null) ? new long?(((DomainBase)selectedProduto).Id) : null) != ((DomainBase)value).Id) { SelectedProduto = ((IEnumerable)ProdutosFiltrados).FirstOrDefault((Func)((Produto x) => ((DomainBase)x).Id == ((DomainBase)value).Id)); } } 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 SelectedProduto = new Produto { Ativo = true }; Alterar(alterar: true); } internal async Task> Filtrar(string value) { return await Task.Run(() => FiltrarProduto(value)); } public List FiltrarProduto(string filter) { ProdutosFiltrados = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(Produtos) : new ObservableCollection(from x in Produtos where ValidationHelper.RemoveDiacritics(x.Nome.Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter)) orderby x.Ativo descending, x.Nome select x)); SelectedProduto = ProdutosFiltrados.FirstOrDefault(); return ProdutosFiltrados.ToList(); } public void SelecionaProduto(Produto produto) { SelectedProduto = produto; } }