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 VidaViewModel : ItemViewModel, IDisposable { private new readonly ItemServico _itemServico; private readonly VidaServico _servico; private bool _allowAlterarExcluir = true; private object _cobertura; private string _codigoItem; private Item _selectedItem = new Item(); private Visibility _atualizarCamposSaude; private Item ItemSelecionado { get; set; } private Ramo Ramo { get; } public bool Invoke { get; set; } public bool AllowAlterarExcluir { get { return _allowAlterarExcluir; } set { _allowAlterarExcluir = value; OnPropertyChanged("AllowAlterarExcluir"); } } public object Cobertura { get { return _cobertura; } set { _cobertura = value; OnPropertyChanged("Cobertura"); } } 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 Visibility AtualizarCamposSaude { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return _atualizarCamposSaude; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) _atualizarCamposSaude = value; OnPropertyChanged("AtualizarCamposSaude"); } } public VidaViewModel(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 VidaServico(); Gestor.Application.Actions.Actions.UpdateItem = (Action)Delegate.Combine(Gestor.Application.Actions.Actions.UpdateItem, new Action(Seleciona)); Gestor.Application.Actions.Actions.SubstituirItem = (Action)Delegate.Combine(Gestor.Application.Actions.Actions.SubstituirItem, new Action(Substituir)); Gestor.Application.Actions.Actions.ManterItem = (Action)Delegate.Combine(Gestor.Application.Actions.Actions.ManterItem, new Action(Manter)); Seleciona(ItemSelecionado); if (substituir) { Substituir(ItemSelecionado); } if (manutencao != null) { Manter(ItemSelecionado, manutencao); } AllowAlterarExcluir = !endossoRenovacao; CarregaCobertura(); } public void CarregaCobertura() { CoberturaViewModel.Item = ItemSelecionado; CoberturaViewModel.Ramo = Ramo; Cobertura = new CoberturaView(CoberturaViewModel); } public void Descarregar() { Cobertura = 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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) List obj = CoberturaViewModel.Coberturas?.ToList(); List list = new List { 6L, 7L, 9L, 10L, 47L, 53L, 66L }; if (SelectedItem.Vida == null) { SelectedItem.Vida = new Vida(); } if (((DomainBase)ItemSelecionado.Documento.Controle).Id != ((DomainBase)SelectedItem.Documento.Controle).Id) { Item selectedItem = SelectedItem; if (selectedItem == null || selectedItem.Sinistros.Count() <= 0 || (int)manutencao.Tipo != 0) { if (!list.Contains(((DomainBase)Ramo).Id)) { ((DomainBase)SelectedItem).Id = 0L; } goto IL_0108; } } ((DomainBase)SelectedItem).Id = 0L; ((DomainBase)SelectedItem.Vida).Id = 0L; goto IL_0108; IL_0108: Item selectedItem2 = SelectedItem; Item itemSubstituido = base.ItemSubstituido; selectedItem2.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; if (!new List { 6L, 7L, 9L, 10L, 47L, 53L, 66L }.Contains(((DomainBase)Ramo).Id)) { return; } AtualizarCamposSaude = (Visibility)((((DomainBase)Ramo).Id == 9) ? 2 : 0); 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.Vida = await _itemServico.BuscaVida(((DomainBase)item).Id); 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.Vida = new Vida { Item = SelectedItem }; 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.Vida.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 Task>> Salvar(List titularesGrid) { SelectedItem.Descricao = (string.IsNullOrWhiteSpace(SelectedItem.Descricao) ? (SelectedItem.Vida.Plano ?? "") : SelectedItem.Descricao); SelectedItem.Titulares = titularesGrid; 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; } await _itemServico.DeleteTitulares(base.ExcluirTitulares); base.ExcluirTitulares = new List(); string acao = ((((DomainBase)SelectedItem).Id == 0L) ? "INCLUIU" : "ALTEROU"); SelectedItem = await _itemServico.Save(SelectedItem); foreach (TitularesVida item in titularesGrid) { item.IdItem = ((DomainBase)SelectedItem).Id; } List list2 = new List(); foreach (TitularesVida t in titularesGrid) { if (((DomainBase)t).Id == 0L) { if (t.Inicio.HasValue) { list2.Add(t); } continue; } TitularesVida val = base.OldTitulares.First((TitularesVida x) => ((DomainBase)x).Id == ((DomainBase)t).Id); if (t.Codigo != val.Codigo || t.Inicio != val.Inicio || t.Fim != val.Fim || t.Fatura != val.Fatura || t.Nome != val.Nome || t.Observacao != val.Observacao || t.Nascimento != val.Nascimento || t.Cpf != val.Cpf || t.Matricula != val.Matricula || !(t.Premio == val.Premio) || !(t.Capital == val.Capital) || t.Tipo != val.Tipo || t.Dependente != val.Dependente) { list2.Add(t); } } base.Titulares = new ObservableCollection(await _itemServico.SaveTitulares(list2)); 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 async void CancelarAlteracao() { Loading(isLoading: true); base.AllSelected = false; 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 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)); } }