using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Threading.Tasks; using System.Windows; using Gestor.Application.Actions; using Gestor.Application.Helpers; using Gestor.Application.Servicos.Seguros.Itens; using Gestor.Application.ViewModels.Generic; using Gestor.Application.ViewModels.Seguros; using Gestor.Application.Views.Seguros.Itens; using Gestor.Common.Validation; using Gestor.Model.Common; using Gestor.Model.Domain.Generic; using Gestor.Model.Domain.Seguros; namespace Gestor.Application.ViewModels; public class MenuItemViewModel : BaseSegurosViewModel { private readonly ItemServico _servico; private string _acaoItens = "MANTER"; private readonly Documento _documentoSelecionado; public bool AlterandoSelectedItem; private bool _endossoRenovacao; private ObservableCollection _itens = new ObservableCollection(); private ObservableCollection _itensFiltrados = new ObservableCollection(); private Item _selectedItem = new Item(); private bool _mostrarLista; private bool _isExpanded = true; private ManutencaoItem _manutencao; private object _view; private bool _allSelectedChanging; private bool? _allSelected = false; private string _manterTodosText = "MANTER TODOS OS ITENS"; private string _manterText = "MANTER ITENS"; public long Ramo { get; set; } public bool EndossoRenovacao { get { return _endossoRenovacao; } set { _endossoRenovacao = value; OnPropertyChanged("EndossoRenovacao"); } } public ObservableCollection Itens { get { return _itens; } set { _itens = value; OnPropertyChanged("Itens"); } } public ObservableCollection ItensFiltrados { get { return _itensFiltrados; } set { _itensFiltrados = value; IsExpanded = value != null && value.Count > 0; foreach (Item itensFiltrado in ItensFiltrados) { itensFiltrado.PropertyChanged += EntryOnPropertyChanged; } OnPropertyChanged("ItensFiltrados"); } } public Item SelectedItem { get { return _selectedItem; } set { WorkOnSelectedItem(value); _selectedItem = value; OnPropertyChanged("SelectedItem"); } } public bool MostrarLista { get { return _mostrarLista; } set { _mostrarLista = value; OnPropertyChanged("MostrarLista"); } } public bool IsExpanded { get { return _isExpanded; } set { _isExpanded = value; OnPropertyChanged("IsExpanded"); } } public ManutencaoItem Manutencao { get { return _manutencao; } set { _manutencao = value; OnPropertyChanged("Manutencao"); } } public object View { get { return _view; } set { _view = value; OnPropertyChanged("View"); } } private bool Carregando { get; set; } public bool? AllSelected { get { return _allSelected; } set { if (value != _allSelected) { _allSelected = value; AllSelectedChanged(); Itens = new ObservableCollection(Itens); OnPropertyChanged("AllSelected"); } } } public string ManterTodosText { get { return _manterTodosText; } set { _manterTodosText = value; OnPropertyChanged("ManterTodosText"); } } public string ManterText { get { return _manterText; } set { _manterText = value; OnPropertyChanged("ManterText"); } } public MenuItemViewModel(long ramo, ManutencaoItem manutencao) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Invalid comparison between Unknown and I4 if (ramo == 6 || ramo == 7 || ramo == 9 || ramo == 10 || ramo == 53 || ramo == 66) { _acaoItens = "MOVER"; } _manterTodosText = _acaoItens + " TODOS OS ITENS"; _manterText = _acaoItens + " ITEM"; Ramo = ramo; _servico = new ItemServico(); _documentoSelecionado = ((manutencao == null) ? ConsultaViewModel.DocumentoSelecionado : manutencao.Documento); if (manutencao != null && (int)manutencao.Tipo == 2) { ConsultaViewModel.FiltrarItens = 4; } Seleciona(manutencao == null); if (manutencao != null) { Manutencao = manutencao; MostrarLista = true; } } public async void Seleciona(bool item = true) { if (!item || ConsultaViewModel.ItemSelecionado != null) { await SelecionaItens(ConsultaViewModel.FiltrarItens, ConsultaViewModel.ItemSelecionado); } else { Load(); } } public async void RecarregarItens(Item item) { ManutencaoItem manutencao = Manutencao; if (manutencao != null && (int)manutencao.Tipo == 0) { ItensFiltrados.Remove(SelectedItem); Itens.Remove(SelectedItem); if (ItensFiltrados.Count == 0) { Gestor.Application.Actions.Actions.AcessaTela?.Invoke((TipoTela)21, ""); return; } AllSelected = false; ManterTodosText = _acaoItens + " TODOS OS ITENS"; SelecionaItem(ItensFiltrados.First()); return; } ManutencaoItem manutencao2 = Manutencao; if (manutencao2 != null && (int)manutencao2.Tipo == 2) { ConsultaViewModel.FiltrarItens = 4; } await SelecionaItens(ConsultaViewModel.FiltrarItens, (Item)(((object)item) ?? ((object)new Item { Id = 0L }))); AlterandoSelectedItem = true; SelectedItem = (Item)((item != null) ? ((object)(((IEnumerable)Itens).FirstOrDefault((Func)((Item x) => ((DomainBase)x).Id == ((DomainBase)item).Id)) ?? Itens.FirstOrDefault())) : ((object)((Itens.Count > 0) ? Itens[0] : null))); AlterandoSelectedItem = false; } public async Task SelecionaItens(int type, Item item = null) { Loading(isLoading: true); Carregando = true; switch (type) { default: Itens = await _servico.BuscarItens(((DomainBase)_documentoSelecionado.Controle).Id, (StatusItem)0); break; case 1: case 2: Itens = await _servico.BuscarItens(((DomainBase)_documentoSelecionado).Id, (StatusItem)2); break; case 3: Itens = await _servico.BuscarItens(((DomainBase)_documentoSelecionado.Controle).Id, (StatusItem)1); break; case 4: Itens = await _servico.BuscarItens(((DomainBase)_documentoSelecionado.Controle).Id, (StatusItem)3); break; } ItensFiltrados = Itens; if (item != null && ((DomainBase)item).Id > 0) { AlterandoSelectedItem = true; SelectedItem = ((ItensFiltrados != null && ItensFiltrados.Count > 0) ? ((IEnumerable)ItensFiltrados).FirstOrDefault((Func)((Item x) => ((DomainBase)x).Id == ((DomainBase)item).Id)) : null); Gestor.Application.Actions.Actions.ScrollToItem?.Invoke(); AlterandoSelectedItem = false; } MenuItemViewModel menuItemViewModel = this; int mostrarLista; if (!MostrarLista) { ObservableCollection itens = Itens; mostrarLista = ((itens != null && itens.Count > 1) ? 1 : 0); } else { mostrarLista = 1; } menuItemViewModel.MostrarLista = (byte)mostrarLista != 0; Carregando = false; Loading(isLoading: false); } private void WorkOnSelectedItem(Item value) { ConsultaViewModel.ItemSelecionado = value; Load(); } private async void Load(bool substituir = false, ManutencaoItem manutencao = null) { long ramo = Ramo; if (ramo <= 38) { long num = ramo - 1; if ((ulong)num <= 19uL) { switch (num) { case 4L: goto IL_00f3; case 0L: case 1L: case 2L: case 14L: case 17L: goto IL_01e8; case 12L: goto IL_02dd; case 19L: goto IL_03d2; case 5L: case 6L: case 8L: case 9L: goto IL_04c7; case 3L: case 7L: case 10L: case 11L: case 13L: case 15L: case 16L: case 18L: goto IL_06b1; } } if (ramo == 30) { goto IL_01e8; } long num2 = ramo - 36; if ((ulong)num2 <= 2uL) { switch (num2) { case 1L: break; case 2L: goto IL_01e8; case 0L: goto IL_05bc; default: goto IL_06b1; } goto IL_00f3; } } else if (ramo == 47 || ramo == 53 || ramo == 66) { goto IL_04c7; } goto IL_06b1; IL_00f3: if (View != null && View.GetType() == typeof(AutoView)) { await ((AutoView)View).Selecionar(ConsultaViewModel.ItemSelecionado); if (substituir) { ((AutoView)View).Substituir(); } if (manutencao != null) { ((AutoView)View).Manter(manutencao); } return; } View = new AutoView(this, lockInsert: false, substituir, manutencao, null, null, EndossoRenovacao); goto IL_079e; IL_06b1: if (View != null && View.GetType() == typeof(RiscosDiversosView)) { await ((RiscosDiversosView)View).Selecionar(ConsultaViewModel.ItemSelecionado); if (substituir) { ((RiscosDiversosView)View).Substituir(); } if (manutencao != null) { ((RiscosDiversosView)View).Manter(manutencao); } return; } View = new RiscosDiversosView(this, lockInsert: false, substituir, manutencao, null, null, EndossoRenovacao); goto IL_079e; IL_05bc: if (View != null && View.GetType() == typeof(ConsorcioView)) { await ((ConsorcioView)View).Selecionar(ConsultaViewModel.ItemSelecionado); if (substituir) { ((ConsorcioView)View).Substituir(); } if (manutencao != null) { ((ConsorcioView)View).Manter(manutencao); } return; } View = new ConsorcioView(this, lockInsert: false, substituir, manutencao, null, null, EndossoRenovacao); goto IL_079e; IL_079e: base.IsVisible = (Visibility)0; return; IL_01e8: if (View != null && View.GetType() == typeof(PatrimonialView)) { await ((PatrimonialView)View).Selecionar(ConsultaViewModel.ItemSelecionado); if (substituir) { ((PatrimonialView)View).Substituir(); } if (manutencao != null) { ((PatrimonialView)View).Manter(manutencao); } return; } View = new PatrimonialView(this, lockInsert: false, substituir, manutencao, null, null, EndossoRenovacao); goto IL_079e; IL_02dd: if (View != null && View.GetType() == typeof(AeronauticoView)) { await ((AeronauticoView)View).Selecionar(ConsultaViewModel.ItemSelecionado); if (substituir) { ((AeronauticoView)View).Substituir(); } if (manutencao != null) { ((AeronauticoView)View).Manter(manutencao); } return; } View = new AeronauticoView(this, lockInsert: false, substituir, manutencao, null, null, EndossoRenovacao); goto IL_079e; IL_04c7: if (View != null && View.GetType() == typeof(VidaView)) { await ((VidaView)View).Selecionar(ConsultaViewModel.ItemSelecionado); if (substituir) { ((VidaView)View).Substituir(); } if (manutencao != null) { ((VidaView)View).Manter(manutencao); } return; } View = new VidaView(this, lockInsert: false, substituir, manutencao, null, null, EndossoRenovacao); goto IL_079e; IL_03d2: if (View != null && View.GetType() == typeof(GranizoView)) { await ((GranizoView)View).Selecionar(ConsultaViewModel.ItemSelecionado); if (substituir) { ((GranizoView)View).Substituir(); } if (manutencao != null) { ((GranizoView)View).Manter(manutencao); } return; } View = new GranizoView(this, lockInsert: false, substituir, manutencao, null, null, EndossoRenovacao); goto IL_079e; } public void SelecionaItem(Item item) { if (!Carregando) { AlterandoSelectedItem = true; SelectedItem = item; ConsultaViewModel.ItemSelecionado = SelectedItem; AlterandoSelectedItem = false; } } internal async Task> Filtrar(string value) { return await Task.Run(() => FiltrarItem(value)); } public List FiltrarItem(string filter) { ItensFiltrados = (string.IsNullOrWhiteSpace(filter) ? Itens : new ObservableCollection(from x in Itens where ValidationHelper.RemoveDiacritics(x.Descricao.Trim()).ToUpper().Contains(ValidationHelper.RemoveDiacritics(filter)) orderby x.Ordem select x)); return ItensFiltrados.ToList(); } public async void CancelarItem(Item item) { if (item != null) { Loading(isLoading: true); await _servico.Cancelar(item, $"CANCELADO NO ENDOSSO ORDEM {Manutencao.Documento.Ordem}", ((DomainBase)Manutencao.Documento).Id); ToggleSnackBar("ITEM CANCELADO COM SUCESSO"); Loading(isLoading: false); RecarregarItens(item); } } public void Substituir(Item item) { Gestor.Application.Actions.Actions.EnableMenu?.Invoke(obj: false); ConsultaViewModel.ItemSelecionado = item; Load(substituir: true); } public void Manter(Item item) { Gestor.Application.Actions.Actions.EnableMenu?.Invoke(obj: false); ConsultaViewModel.ItemSelecionado = item; Load(substituir: false, Manutencao); } public async void ManterItens() { Gestor.Application.Actions.Actions.EnableMenu?.Invoke(obj: false); Gestor.Application.Actions.Actions.EnableMainMenu?.Invoke(obj: false); Loading(isLoading: true); int ordem = 1; foreach (Item item in (ManterTodosText == _acaoItens + " TODOS OS ITENS") ? new List(Itens) : new List(Itens.Where((Item x) => x.Selecionado))) { Item itemManter = await _servico.BuscarItemPorIdAsync(((DomainBase)item).Id); Item val = itemManter; val.Coberturas = await _servico.BuscarCoberturasPorItemAsync(((DomainBase)item).Id); bool moverTitulares = false; ((DomainBase)itemManter).Id = 0L; itemManter.Sinistrado = false; itemManter.Sinistros = null; itemManter.Documento = ConsultaViewModel.DocumentoSelecionado; itemManter.Ordem = ordem; ordem++; foreach (Cobertura cobertura in itemManter.Coberturas) { ((DomainBase)cobertura).Id = 0L; cobertura.Item = itemManter; } long ramo = Ramo; if (ramo <= 36) { long num = ramo - 1; if ((ulong)num <= 19uL) { switch (num) { case 4L: goto IL_0385; case 0L: case 1L: case 2L: case 14L: case 17L: goto IL_0537; case 12L: goto IL_0608; case 19L: goto IL_06d9; case 5L: case 6L: case 8L: case 9L: goto IL_07aa; case 3L: case 7L: case 10L: case 11L: case 13L: case 15L: case 16L: case 18L: goto IL_0953; } } if (ramo == 36) { val = itemManter; val.Consorcio = await _servico.BuscaConsorcio(((DomainBase)item).Id); itemManter.Consorcio.Item = itemManter; ((DomainBase)itemManter.Consorcio).Id = 0L; goto IL_0a20; } } else { if (ramo == 37) { goto IL_0385; } if (ramo == 53 || ramo == 66) { goto IL_07aa; } } goto IL_0953; IL_0a20: itemManter.Status = ""; item.Substituido = null; itemManter = await _servico.Save(itemManter); if (moverTitulares && ((DomainBase)itemManter).Id != ((DomainBase)item).Id) { List list = await _servico.BuscaTitularesVida(((DomainBase)item).Id); if (list.Count > 0) { list.ForEach(delegate(TitularesVida t) { t.IdItem = ((DomainBase)itemManter).Id; }); await _servico.SaveTitulares(list); } } ItensFiltrados.Remove(item); Itens.Remove(item); continue; IL_07aa: val = itemManter; val.Vida = await _servico.BuscaVida(((DomainBase)item).Id); itemManter.Vida.Item = itemManter; ((DomainBase)itemManter.Vida).Id = 0L; moverTitulares = true; goto IL_0a20; IL_0385: val = itemManter; val.Auto = await _servico.BuscaAuto(((DomainBase)item).Id); itemManter.Auto.Item = itemManter; ((DomainBase)itemManter.Auto).Id = 0L; if (itemManter.Auto != null && itemManter.Auto.Placa == null) { await ShowMessage($"ITEM {itemManter.Ordem} ENCONTRADO SEM PLACA."); Loading(isLoading: false); Gestor.Application.Actions.Actions.EnableMenu?.Invoke(obj: true); Gestor.Application.Actions.Actions.EnableMainMenu?.Invoke(obj: true); return; } goto IL_0a20; IL_0953: val = itemManter; val.RiscosDiversos = await _servico.BuscaRiscosDiversos(((DomainBase)item).Id); itemManter.RiscosDiversos.Item = itemManter; ((DomainBase)itemManter.RiscosDiversos).Id = 0L; goto IL_0a20; IL_06d9: val = itemManter; val.Granizo = await _servico.BuscaGranizo(((DomainBase)item).Id); itemManter.Granizo.Item = itemManter; ((DomainBase)itemManter.Granizo).Id = 0L; goto IL_0a20; IL_0608: val = itemManter; val.Aeronautico = await _servico.BuscaAeronautico(((DomainBase)item).Id); itemManter.Aeronautico.Item = itemManter; ((DomainBase)itemManter.Aeronautico).Id = 0L; goto IL_0a20; IL_0537: val = itemManter; val.Patrimonial = await _servico.BuscaPatrimonial(((DomainBase)item).Id); itemManter.Patrimonial.Item = itemManter; ((DomainBase)itemManter.Patrimonial).Id = 0L; goto IL_0a20; } Loading(isLoading: false); Gestor.Application.Actions.Actions.EnableMenu?.Invoke(obj: true); Gestor.Application.Actions.Actions.EnableMainMenu?.Invoke(obj: true); if (ItensFiltrados.Count == 0) { Gestor.Application.Actions.Actions.AcessaTela?.Invoke((TipoTela)21, ""); return; } AllSelected = false; ManterTodosText = _acaoItens + " TODOS OS ITENS"; SelecionaItem(ItensFiltrados.First()); } public async void Reativar(Item item) { if (item != null) { Loading(isLoading: true); await _servico.Reativar(item, "ITEM REATIVADO PELO USUARIO " + Recursos.Usuario.Nome); ToggleSnackBar("ITEM REATIVADO COM SUCESSO"); Loading(isLoading: false); RecarregarItens(item); } } private void AllSelectedChanged() { if (_allSelectedChanging) { return; } try { _allSelectedChanging = true; if (!AllSelected.HasValue) { return; } ManterTodosText = (AllSelected.Value ? (_acaoItens + " ITENS SELECIONADOS") : (_acaoItens + " TODOS OS ITENS")); foreach (Item iten in Itens) { iten.Selecionado = AllSelected.Value; } } finally { _allSelectedChanging = false; } } private void EntryOnPropertyChanged(object sender, PropertyChangedEventArgs args) { if (args.PropertyName == "Selecionado") { RecheckAllSelected(); } } private void RecheckAllSelected() { if (_allSelectedChanging) { return; } try { _allSelectedChanging = true; if (Itens.All((Item e) => e.Selecionado)) { AllSelected = true; ManterTodosText = _acaoItens + " ITENS SELECIONADOS"; } else if (Itens.All((Item e) => !e.Selecionado)) { AllSelected = false; ManterTodosText = _acaoItens + " TODOS OS ITENS"; } else { AllSelected = null; ManterTodosText = _acaoItens + " ITENS SELECIONADOS"; } } finally { _allSelectedChanging = false; } } }