using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using System.Windows; using Gestor.Application.Actions; using Gestor.Application.Componentes; using Gestor.Application.Servicos.Seguros.Itens; using Gestor.Application.ViewModels.Generic; using Gestor.Model.Common; using Gestor.Model.Domain.Generic; using Gestor.Model.Domain.Seguros; namespace Gestor.Application.ViewModels.Seguros.Itens; public class ConsorcioViewModel : ItemViewModel, IDisposable { private new readonly ItemServico _itemServico; private readonly ConsorcioServico _servico; private bool _visibilityTitulares; private bool _allowAlterarExcluir = true; private object _cobertura; private object _sinistro; private string _codigoItem; private Item _selectedItem = new Item(); private Item ItemSelecionado { get; set; } private Ramo Ramo { get; } public bool Invoke { get; set; } public bool VisibilityTitulares { get { return _visibilityTitulares; } set { _visibilityTitulares = value; OnPropertyChanged("VisibilityTitulares"); } } public bool AllowAlterarExcluir { get { return _allowAlterarExcluir; } set { _allowAlterarExcluir = value; OnPropertyChanged("AllowAlterarExcluir"); } } public object Cobertura { get { return _cobertura; } set { _cobertura = value; OnPropertyChanged("Cobertura"); } } public object Sinistro { get { return _sinistro; } set { _sinistro = value; OnPropertyChanged("Sinistro"); } } public string CodigoItem { get { return _codigoItem; } set { _codigoItem = value; OnPropertyChanged("CodigoItem"); } } public Item SelectedItem { get { return _selectedItem; } set { _selectedItem = value; VerificarEnables((value != null) ? new long?(((DomainBase)value).Id) : null); OnPropertyChanged("SelectedItem"); } } public ConsorcioViewModel(bool substituir = false, ManutencaoItem manutencao = null, Item itemSelecionado = null, Ramo ramo = null, bool endossoRenovacao = false) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) Invoke = itemSelecionado == null; ItemSelecionado = itemSelecionado ?? ConsultaViewModel.ItemSelecionado; Ramo = ramo ?? ConsultaViewModel.DocumentoSelecionado.Controle.Ramo; if (Invoke) { ItemSelecionado = (Item)(((object)ItemSelecionado) ?? ((object)new Item())); ItemSelecionado.Documento = ConsultaViewModel.DocumentoSelecionado; } _itemServico = new ItemServico(); _servico = new ConsorcioServico(); Seleciona(ItemSelecionado); if (substituir) { Substituir(ItemSelecionado); } if (manutencao != null) { Manter(ItemSelecionado, manutencao); } AllowAlterarExcluir = !endossoRenovacao; CarregaCobertura(); VisibilityTitulares = ((DomainBase)Ramo).Id == 31; } public void CarregaCobertura() { CoberturaViewModel.Item = ItemSelecionado; CoberturaViewModel.Ramo = Ramo; Cobertura = new CoberturaView(CoberturaViewModel); } public void Descarregar() { Cobertura = null; Sinistro = null; } public void Manter(Item item, ManutencaoItem manutencao) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 if ((int)manutencao.Tipo == 1) { base.ItemSubstituido = item; } Manter(manutencao); base.Mantido = true; } public void Manter(ManutencaoItem manutencao) { //IL_0077: Unknown result type (might be due to invalid IL or missing references) List obj = CoberturaViewModel.Coberturas?.ToList(); ((DomainBase)SelectedItem).Id = 0L; ((DomainBase)SelectedItem.Consorcio).Id = 0L; Item selectedItem = SelectedItem; Item itemSubstituido = base.ItemSubstituido; selectedItem.Substituicao = ((itemSubstituido != null) ? new long?(((DomainBase)itemSubstituido).Id) : null); SelectedItem.Documento = ItemSelecionado.Documento; if ((int)manutencao.Tipo == 0) { SelectedItem.Sinistrado = false; SelectedItem.Status = ""; SelectedItem.Sinistro = null; SelectedItem.Sinistros = null; } CoberturaViewModel.CarregaPadrao(); CoberturaViewModel.Coberturas = new ObservableCollection(); obj?.ForEach(delegate(Cobertura x) { x.Item = SelectedItem; CoberturaViewModel.Coberturas.Add(x); }); Alterar(alterar: true); } public async void Substituir(Item item) { base.ItemSubstituido = item; await Incluir(substituir: true); } private async void Seleciona(Item item) { Loading(isLoading: true); await PermissaoTela((TipoTela)3); await SelecionaItem(item); Loading(isLoading: false); } public async Task SelecionaItem(Item item, bool registrar = true) { if (item != null && LastAccessId == ((DomainBase)item).Id && (int)LastAccessTela == 9) { return; } base.Mantido = false; CoberturaViewModel.Ramo = Ramo; if (CoberturaViewModel.CoberturasPadrao == null) { await CoberturaViewModel.SelectionaCoberturas(); } if (item == null || ((DomainBase)item).Id == 0L) { SelectedItem = null; CoberturaViewModel.Coberturas = null; base.IsVisible = (Visibility)0; base.Titulares = new ObservableCollection(); return; } Loading(isLoading: true); item = await _itemServico.BuscarItemPorIdAsync(((DomainBase)item).Id); Item val = item; val.Consorcio = (Consorcio)(((object)(await _itemServico.BuscaConsorcio(((DomainBase)item).Id))) ?? ((object)new Consorcio { Item = item })); if (VisibilityTitulares) { await CarregarTitulares(((DomainBase)item).Id); } SelectedItem = item; ((DomainBase)SelectedItem).Initialize(); Initialized = true; CoberturaViewModel.Item = item; await CoberturaViewModel.CancelarAlteracao(); if (registrar) { RegistrarAcao("ACESSOU ITEM DE DESCRIÇÃO \"" + SelectedItem.Descricao + "\"", ((DomainBase)SelectedItem).Id, (TipoTela)3, $"ID ITEM: {((DomainBase)SelectedItem).Id}\nID DOCUMENTO: {((DomainBase)SelectedItem.Documento).Id}\nRAMO: {SelectedItem.Documento.Controle.Ramo.Nome}\nCLIENTE: {SelectedItem.Documento.Controle.Cliente.Nome}\nID CLIENTE: {((DomainBase)SelectedItem.Documento.Controle.Cliente).Id}"); } LastAccessId = ((DomainBase)SelectedItem).Id; LastAccessTela = (TipoTela)3; CodigoItem = ((DomainBase)SelectedItem).Id.ToString(); Loading(isLoading: false); } public async Task Incluir(bool substituir = false) { List coberturas = ((CoberturaViewModel.Coberturas == null) ? CoberturaViewModel.CarregaCoberturaPadrao().ToList() : CoberturaViewModel.Coberturas.ToList()); Item val = new Item(); val.Documento = ItemSelecionado.Documento; Item val2 = val; int? ordem = (substituir ? base.ItemSubstituido.Ordem : new int?(await QuantidadeDeItens(((DomainBase)ItemSelecionado.Documento.Controle).Id))); val2.Ordem = ordem; val.Consorcio = new Consorcio(); val.Substituicao = (substituir ? new long?(((DomainBase)base.ItemSubstituido).Id) : null); Item item = val; base.Titulares = new ObservableCollection(); if (item.Ordem.GetValueOrDefault() == 2 && !(await ShowMessage("ESTA APÓLICE SERÁ UMA FROTA, DESEJA CONTINUAR?", "SIM", "NÃO"))) { return; } bool flag = substituir; if (flag) { flag = await ShowMessage("DESEJA COPIAR OS DADOS DO ITEM?", "SIM", "NÃO"); } if (flag) { ((DomainBase)SelectedItem).Id = 0L; SelectedItem.Documento = ItemSelecionado.Documento; } else { SelectedItem = item; SelectedItem.Consorcio.Item = item; } flag = item.Ordem > 1; if (flag) { flag = await ShowMessage("DESEJA REPLICAR AS COBERTURAS DO ITEM SELECIONADO?", "SIM", "NÃO"); } if (flag) { CoberturaViewModel.Coberturas = new ObservableCollection(); coberturas.ForEach(delegate(Cobertura x) { x.Item = SelectedItem; CoberturaViewModel.Coberturas.Add(x); }); } else { CoberturaViewModel.CarregaPadrao(); } if (substituir) { CoberturaViewModel.Coberturas = new ObservableCollection(); coberturas.ForEach(delegate(Cobertura x) { x.Item = SelectedItem; CoberturaViewModel.Coberturas.Add(x); }); } Alterar(alterar: true); } public async void CancelarAlteracao() { Loading(isLoading: true); await SelecionaItem(ItemSelecionado, registrar: false); await CoberturaViewModel.CancelarAlteracao(); Alterar(alterar: false); Loading(isLoading: false); } public async Task Excluir() { if (SelectedItem == null || ((DomainBase)SelectedItem).Id == 0L) { return false; } if (!(await ShowMessage("DESEJA EXCLUIR?", "SIM", "NÃO"))) { return false; } Loading(isLoading: true); bool num = await _servico.Delete(SelectedItem); Loading(isLoading: false); if (!num) { await ShowMessage("NÃO POSSÍVEL EXCLUIR O ITEM"); return false; } RegistrarAcao("EXCLUIU ITEM DE DESCRIÇÃO \"" + SelectedItem.Descricao + "\"", ((DomainBase)SelectedItem).Id, (TipoTela)3, $"ID ITEM: {((DomainBase)SelectedItem).Id}\nID DOCUMENTO: {((DomainBase)SelectedItem.Documento).Id}\nRAMO: {SelectedItem.Documento.Controle.Ramo.Nome}\nCLIENTE: {SelectedItem.Documento.Controle.Cliente.Nome}\nID CLIENTE: {((DomainBase)SelectedItem.Documento.Controle.Cliente).Id}"); ToggleSnackBar(Ramo.Nome + " EXCLUÍDO COM SUCESSO"); return true; } public async Task>> Salvar() { SelectedItem.Descricao = SelectedItem.Consorcio.BensConsorcio; List> list = SelectedItem.Validate(); if (list.Count > 0) { return list; } Item selectedItem = SelectedItem; selectedItem.Coberturas = await CoberturaViewModel.LimpaCoberturas(); string status = ((SelectedItem.Documento.Ordem <= 0) ? "" : (base.Mantido ? $"ITEM ALTERADO NO ENDOSSO ORDEM {SelectedItem.Documento.Ordem}" : ((base.ItemSubstituido != null) ? $"SUBSTITUIÇÃO DO ITEM {base.ItemSubstituido.Ordem} NO ENDOSSO ORDEM {SelectedItem.Documento.Ordem}" : $"ITEM INCLUÍDO NO ENDOSSO ORDEM {SelectedItem.Documento.Ordem}"))); if (((DomainBase)SelectedItem).Id == 0L) { SelectedItem.Status = status; } string acao = ((((DomainBase)SelectedItem).Id == 0L) ? "INCLUIU" : "ALTEROU"); SelectedItem = await _itemServico.Save(SelectedItem); if (!_itemServico.Sucesso) { return null; } if (base.ItemSubstituido != null) { string descricao = (base.Mantido ? $"ITEM ALTERADO NO ENDOSSO ORDEM {SelectedItem.Documento.Ordem}" : $"ITEM SUBSTITUIDO NO ENDOSSO ORDEM {SelectedItem.Documento.Ordem}"); await _itemServico.Substituir(base.ItemSubstituido, ((DomainBase)SelectedItem).Id, descricao); } base.Mantido = false; await SelecionaItem(SelectedItem, registrar: false); ItemSelecionado = SelectedItem; if (Invoke) { ConsultaViewModel.ItemSelecionado = SelectedItem; } ToggleSnackBar(Ramo.Nome + " SALVO COM SUCESSO"); RegistrarAcao(acao + " ITEM DE DESCRIÇÃO \"" + SelectedItem.Descricao + "\"", ((DomainBase)SelectedItem).Id, (TipoTela)3, $"ID ITEM: {((DomainBase)SelectedItem).Id}\nID DOCUMENTO: {((DomainBase)SelectedItem.Documento).Id}\nRAMO: {SelectedItem.Documento.Controle.Ramo.Nome}\nCLIENTE: {SelectedItem.Documento.Controle.Cliente.Nome}\nID CLIENTE: {((DomainBase)SelectedItem.Documento.Controle.Cliente).Id}"); Alterar(alterar: false); return null; } public void Dispose() { Gestor.Application.Actions.Actions.UpdateItem = (Action)Delegate.Remove(Gestor.Application.Actions.Actions.UpdateItem, new Action(Seleciona)); Gestor.Application.Actions.Actions.SubstituirItem = (Action)Delegate.Remove(Gestor.Application.Actions.Actions.SubstituirItem, new Action(Substituir)); Gestor.Application.Actions.Actions.ManterItem = (Action)Delegate.Remove(Gestor.Application.Actions.Actions.ManterItem, new Action(Manter)); } }