using Gestor.Application.Actions; using Gestor.Application.Componentes; using Gestor.Application.Servicos.Generic; using Gestor.Application.Servicos.Seguros.Itens; using Gestor.Application.ViewModels; using Gestor.Application.ViewModels.Generic; using Gestor.Application.ViewModels.Seguros; using Gestor.Model.Common; using Gestor.Model.Domain.Generic; using Gestor.Model.Domain.Seguros; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Threading.Tasks; using System.Windows; namespace Gestor.Application.ViewModels.Seguros.Itens { public class VidaViewModel : ItemViewModel, IDisposable { private 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; public bool AllowAlterarExcluir { get { return this._allowAlterarExcluir; } set { this._allowAlterarExcluir = value; base.OnPropertyChanged("AllowAlterarExcluir"); } } public Visibility AtualizarCamposSaude { get { return this._atualizarCamposSaude; } set { this._atualizarCamposSaude = value; base.OnPropertyChanged("AtualizarCamposSaude"); } } public object Cobertura { get { return this._cobertura; } set { this._cobertura = value; base.OnPropertyChanged("Cobertura"); } } public string CodigoItem { get { return this._codigoItem; } set { this._codigoItem = value; base.OnPropertyChanged("CodigoItem"); } } public bool Invoke { get; set; } private Item ItemSelecionado { get; set; } private Gestor.Model.Domain.Seguros.Ramo Ramo { get; } public Item SelectedItem { get { return this._selectedItem; } set { long? nullable; this._selectedItem = value; if (value != null) { nullable = new long?(value.get_Id()); } else { nullable = null; } base.VerificarEnables(nullable); base.OnPropertyChanged("SelectedItem"); } } public VidaViewModel(bool substituir = false, ManutencaoItem manutencao = null, Item itemSelecionado = null, Gestor.Model.Domain.Seguros.Ramo ramo = null, bool endossoRenovacao = false) { this.Invoke = itemSelecionado == null; this.ItemSelecionado = itemSelecionado ?? ConsultaViewModel.ItemSelecionado; this.Ramo = ramo ?? ConsultaViewModel.DocumentoSelecionado.get_Controle().get_Ramo(); if (this.Invoke) { this.ItemSelecionado = this.ItemSelecionado ?? new Item(); this.ItemSelecionado.set_Documento(ConsultaViewModel.DocumentoSelecionado); } this._itemServico = new ItemServico(); this._servico = new VidaServico(); Gestor.Application.Actions.Actions.UpdateItem = (Action)Delegate.Combine(Gestor.Application.Actions.Actions.UpdateItem, new Action(this.Seleciona)); Gestor.Application.Actions.Actions.SubstituirItem = (Action)Delegate.Combine(Gestor.Application.Actions.Actions.SubstituirItem, new Action(this.Substituir)); Gestor.Application.Actions.Actions.ManterItem = (Action)Delegate.Combine(Gestor.Application.Actions.Actions.ManterItem, new Action(this.Manter)); this.Seleciona(this.ItemSelecionado); if (substituir) { this.Substituir(this.ItemSelecionado); } if (manutencao != null) { this.Manter(this.ItemSelecionado, manutencao); } this.AllowAlterarExcluir = !endossoRenovacao; this.CarregaCobertura(); } public async void CancelarAlteracao() { base.Loading(true); base.AllSelected = new bool?(false); await this.SelecionaItem(this.ItemSelecionado, false); await this.CoberturaViewModel.CancelarAlteracao(); base.Alterar(false); base.Loading(false); } public void CarregaCobertura() { this.CoberturaViewModel.Item = this.ItemSelecionado; this.CoberturaViewModel.Ramo = this.Ramo; this.Cobertura = new CoberturaView(this.CoberturaViewModel); } public void Descarregar() { this.Cobertura = null; } public void Dispose() { Gestor.Application.Actions.Actions.UpdateItem = (Action)Delegate.Remove(Gestor.Application.Actions.Actions.UpdateItem, new Action(this.Seleciona)); Gestor.Application.Actions.Actions.SubstituirItem = (Action)Delegate.Remove(Gestor.Application.Actions.Actions.SubstituirItem, new Action(this.Substituir)); Gestor.Application.Actions.Actions.ManterItem = (Action)Delegate.Remove(Gestor.Application.Actions.Actions.ManterItem, new Action(this.Manter)); } public async Task Excluir() { bool flag; if (this.SelectedItem == null || this.SelectedItem.get_Id() == 0) { flag = false; } else if (await base.ShowMessage("DESEJA EXCLUIR?", "SIM", "NÃO", false)) { base.Loading(true); bool flag1 = await this._servico.Delete(this.SelectedItem); base.Loading(false); if (flag1) { string str = string.Concat("EXCLUIU ITEM DE DESCRIÇÃO \"", this.SelectedItem.get_Descricao(), "\""); long id = this.SelectedItem.get_Id(); TipoTela? nullable = new TipoTela?(3); object[] objArray = new object[] { this.SelectedItem.get_Id(), this.SelectedItem.get_Documento().get_Id(), this.SelectedItem.get_Documento().get_Controle().get_Ramo().get_Nome(), this.SelectedItem.get_Documento().get_Controle().get_Cliente().get_Nome(), this.SelectedItem.get_Documento().get_Controle().get_Cliente().get_Id() }; base.RegistrarAcao(str, id, nullable, string.Format("ID ITEM: {0}\nID DOCUMENTO: {1}\nRAMO: {2}\nCLIENTE: {3}\nID CLIENTE: {4}", objArray)); base.ToggleSnackBar(string.Concat(this.Ramo.get_Nome(), " EXCLUÍDO COM SUCESSO"), true); flag = true; } else { await base.ShowMessage("NÃO POSSÍVEL EXCLUIR O ITEM", "OK", "", false); flag = false; } } else { flag = false; } return flag; } public async Task Incluir(bool substituir = false) { int? ordem; List coberturas; long? nullable; coberturas = (this.CoberturaViewModel.Coberturas == null ? this.CoberturaViewModel.CarregaCoberturaPadrao().ToList() : this.CoberturaViewModel.Coberturas.ToList()); List coberturas1 = coberturas; Item item = new Item(); item.set_Documento(this.ItemSelecionado.get_Documento()); Item item1 = item; ordem = (substituir ? base.ItemSubstituido.get_Ordem() : new int?(await base.QuantidadeDeItens(this.ItemSelecionado.get_Documento().get_Controle().get_Id()))); item1.set_Ordem(ordem); Item item2 = item; Vida vida = new Vida(); vida.set_Item(this.SelectedItem); item2.set_Vida(vida); Item item3 = item; if (substituir) { nullable = new long?(base.ItemSubstituido.get_Id()); } else { nullable = null; } item3.set_Substituicao(nullable); Item item4 = item; item1 = null; item = null; base.Titulares = new ObservableCollection(); ordem = item4.get_Ordem(); if (ordem.GetValueOrDefault() == 2) { if (!await base.ShowMessage("ESTA APÓLICE SERÁ UMA FROTA, DESEJA CONTINUAR?", "SIM", "NÃO", false)) { coberturas1 = null; item4 = null; return; } } bool valueOrDefault = substituir; if (valueOrDefault) { valueOrDefault = await base.ShowMessage("DESEJA COPIAR OS DADOS DO ITEM?", "SIM", "NÃO", false); } if (!valueOrDefault) { this.SelectedItem = item4; this.SelectedItem.get_Vida().set_Item(item4); } else { this.SelectedItem.set_Id((long)0); this.SelectedItem.set_Documento(this.ItemSelecionado.get_Documento()); } ordem = item4.get_Ordem(); int num = 1; valueOrDefault = ordem.GetValueOrDefault() > num & ordem.HasValue; if (valueOrDefault) { valueOrDefault = await base.ShowMessage("DESEJA REPLICAR AS COBERTURAS DO ITEM SELECIONADO?", "SIM", "NÃO", false); } if (!valueOrDefault) { this.CoberturaViewModel.CarregaPadrao(); } else { this.CoberturaViewModel.Coberturas = new ObservableCollection(); coberturas1.ForEach((Gestor.Model.Domain.Seguros.Cobertura x) => { x.set_Item(this.SelectedItem); this.CoberturaViewModel.Coberturas.Add(x); }); } if (substituir) { this.CoberturaViewModel.Coberturas = new ObservableCollection(); coberturas1.ForEach((Gestor.Model.Domain.Seguros.Cobertura x) => { x.set_Item(this.SelectedItem); this.CoberturaViewModel.Coberturas.Add(x); }); } base.Alterar(true); coberturas1 = null; item4 = null; } public void Manter(Item item, ManutencaoItem manutencao) { if (manutencao.get_Tipo() == 1) { base.ItemSubstituido = item; } this.Manter(manutencao); base.Mantido = true; } public void Manter(ManutencaoItem manutencao) { long? nullable; object list; bool flag; ObservableCollection coberturas = this.CoberturaViewModel.Coberturas; if (coberturas != null) { list = coberturas.ToList(); } else { list = null; } List nums = new List() { (long)6, (long)7, (long)9, (long)10, (long)47, (long)53, (long)66 }; if (this.SelectedItem.get_Vida() == null) { this.SelectedItem.set_Vida(new Vida()); } if (this.ItemSelecionado.get_Documento().get_Controle().get_Id() != this.SelectedItem.get_Documento().get_Controle().get_Id()) { Item selectedItem = this.SelectedItem; if (selectedItem != null) { flag = selectedItem.get_Sinistros().Count() > 0; } else { flag = false; } if (flag && manutencao.get_Tipo() == null) { goto Label1; } if (!nums.Contains(this.Ramo.get_Id())) { this.SelectedItem.set_Id((long)0); goto Label0; } else { goto Label0; } } Label1: this.SelectedItem.set_Id((long)0); this.SelectedItem.get_Vida().set_Id((long)0); Label0: Item item = this.SelectedItem; Item itemSubstituido = base.ItemSubstituido; if (itemSubstituido != null) { nullable = new long?(itemSubstituido.get_Id()); } else { nullable = null; } item.set_Substituicao(nullable); this.SelectedItem.set_Documento(this.ItemSelecionado.get_Documento()); if (manutencao.get_Tipo() == null) { this.SelectedItem.set_Sinistrado(false); this.SelectedItem.set_Status(""); this.SelectedItem.set_Sinistro(null); this.SelectedItem.set_Sinistros(null); } this.CoberturaViewModel.CarregaPadrao(); this.CoberturaViewModel.Coberturas = new ObservableCollection(); if (list != null) { ((List)list).ForEach((Gestor.Model.Domain.Seguros.Cobertura x) => { x.set_Item(this.SelectedItem); this.CoberturaViewModel.Coberturas.Add(x); }); } else { } base.Alterar(true); } public async Task>> Salvar(List titularesGrid) { List> keyValuePairs; DateTime? inicio; string plano; string str; string str1; bool flag; bool flag1; bool flag2; string str2; string str3; Item selectedItem = this.SelectedItem; if (string.IsNullOrWhiteSpace(this.SelectedItem.get_Descricao())) { plano = this.SelectedItem.get_Vida().get_Plano(); if (plano == null) { plano = ""; } } else { plano = this.SelectedItem.get_Descricao(); } selectedItem.set_Descricao(plano); this.SelectedItem.set_Titulares(titularesGrid); List> keyValuePairs1 = this.SelectedItem.Validate(); if (keyValuePairs1.Count <= 0) { Item item = this.SelectedItem; item.set_Coberturas(await this.CoberturaViewModel.LimpaCoberturas()); item = null; if (this.SelectedItem.get_Documento().get_Ordem() <= 0) { str = ""; } else if (base.Mantido) { str = string.Format("ITEM ALTERADO NO ENDOSSO ORDEM {0}", this.SelectedItem.get_Documento().get_Ordem()); } else { str = (base.ItemSubstituido != null ? string.Format("SUBSTITUIÇÃO DO ITEM {0} NO ENDOSSO ORDEM {1}", base.ItemSubstituido.get_Ordem(), this.SelectedItem.get_Documento().get_Ordem()) : string.Format("ITEM INCLUÍDO NO ENDOSSO ORDEM {0}", this.SelectedItem.get_Documento().get_Ordem())); } string str4 = str; if (this.SelectedItem.get_Id() == 0) { this.SelectedItem.set_Status(str4); } await this._itemServico.DeleteTitulares(base.ExcluirTitulares); base.ExcluirTitulares = new List(); str1 = (this.SelectedItem.get_Id() == 0 ? "INCLUIU" : "ALTEROU"); str3 = str1; this.SelectedItem = await this._itemServico.Save(this.SelectedItem); foreach (TitularesVida titularesVida in titularesGrid) { titularesVida.set_IdItem(this.SelectedItem.get_Id()); } List titularesVidas = new List(); foreach (TitularesVida titularesVida1 in titularesGrid) { if (titularesVida1.get_Id() != 0) { TitularesVida titularesVida2 = base.OldTitulares.First((TitularesVida x) => x.get_Id() == titularesVida1.get_Id()); if (titularesVida1.get_Codigo() == titularesVida2.get_Codigo()) { inicio = titularesVida1.get_Inicio(); DateTime? fim = titularesVida2.get_Inicio(); if (inicio.HasValue == fim.HasValue) { flag = (inicio.HasValue ? inicio.GetValueOrDefault() != fim.GetValueOrDefault() : false); } else { flag = true; } if (!flag) { fim = titularesVida1.get_Fim(); inicio = titularesVida2.get_Fim(); if (fim.HasValue == inicio.HasValue) { flag1 = (fim.HasValue ? fim.GetValueOrDefault() != inicio.GetValueOrDefault() : false); } else { flag1 = true; } if (!flag1 && !(titularesVida1.get_Fatura() != titularesVida2.get_Fatura()) && !(titularesVida1.get_Nome() != titularesVida2.get_Nome()) && !(titularesVida1.get_Observacao() != titularesVida2.get_Observacao())) { inicio = titularesVida1.get_Nascimento(); fim = titularesVida2.get_Nascimento(); if (inicio.HasValue == fim.HasValue) { flag2 = (inicio.HasValue ? inicio.GetValueOrDefault() != fim.GetValueOrDefault() : false); } else { flag2 = true; } if (!flag2 && !(titularesVida1.get_Cpf() != titularesVida2.get_Cpf()) && !(titularesVida1.get_Matricula() != titularesVida2.get_Matricula())) { decimal? premio = titularesVida1.get_Premio(); decimal? capital = titularesVida2.get_Premio(); if ((premio.GetValueOrDefault() == capital.GetValueOrDefault()) & premio.HasValue == capital.HasValue) { capital = titularesVida1.get_Capital(); premio = titularesVida2.get_Capital(); if ((capital.GetValueOrDefault() == premio.GetValueOrDefault()) & capital.HasValue == premio.HasValue) { TipoTitular? tipo = titularesVida1.get_Tipo(); TipoTitular? nullable = titularesVida2.get_Tipo(); if (tipo.GetValueOrDefault() == nullable.GetValueOrDefault() & tipo.HasValue == nullable.HasValue && (object)titularesVida1.get_Dependente() == (object)titularesVida2.get_Dependente()) { continue; } } } } } } } titularesVidas.Add(titularesVida1); } else { inicio = titularesVida1.get_Inicio(); if (!inicio.HasValue) { continue; } titularesVidas.Add(titularesVida1); } } base.Titulares = new ObservableCollection(await this._itemServico.SaveTitulares(titularesVidas)); if (this._itemServico.Sucesso) { if (base.ItemSubstituido != null) { str2 = (base.Mantido ? string.Format("ITEM ALTERADO NO ENDOSSO ORDEM {0}", this.SelectedItem.get_Documento().get_Ordem()) : string.Format("ITEM SUBSTITUIDO NO ENDOSSO ORDEM {0}", this.SelectedItem.get_Documento().get_Ordem())); string str5 = str2; await this._itemServico.Substituir(base.ItemSubstituido, this.SelectedItem.get_Id(), str5); } base.Mantido = false; await this.SelecionaItem(this.SelectedItem, false); this.ItemSelecionado = this.SelectedItem; if (this.Invoke) { ConsultaViewModel.ItemSelecionado = this.SelectedItem; } base.ToggleSnackBar(string.Concat(this.Ramo.get_Nome(), " SALVO COM SUCESSO"), true); string str6 = string.Concat(str3, " ITEM DE DESCRIÇÃO \"", this.SelectedItem.get_Descricao(), "\""); long id = this.SelectedItem.get_Id(); TipoTela? nullable1 = new TipoTela?(3); object[] objArray = new object[] { this.SelectedItem.get_Id(), this.SelectedItem.get_Documento().get_Id(), this.SelectedItem.get_Documento().get_Controle().get_Ramo().get_Nome(), this.SelectedItem.get_Documento().get_Controle().get_Cliente().get_Nome(), this.SelectedItem.get_Documento().get_Controle().get_Cliente().get_Id() }; base.RegistrarAcao(str6, id, nullable1, string.Format("ID ITEM: {0}\nID DOCUMENTO: {1}\nRAMO: {2}\nCLIENTE: {3}\nID CLIENTE: {4}", objArray)); base.Alterar(false); keyValuePairs = null; } else { keyValuePairs = null; } } else { keyValuePairs = keyValuePairs1; } str3 = null; return keyValuePairs; } private async void Seleciona(Item item) { base.Loading(true); await base.PermissaoTela(3); await this.SelecionaItem(item, true); base.Loading(false); } public async Task SelecionaItem(Item item, bool registrar = true) { Visibility visibility; if (item == null || this.LastAccessId != item.get_Id() || this.LastAccessTela != 9) { base.Mantido = false; List nums = new List() { (long)6, (long)7, (long)9, (long)10, (long)47, (long)53, (long)66 }; if (nums.Contains(this.Ramo.get_Id())) { VidaViewModel vidaViewModel = this; visibility = (this.Ramo.get_Id() == (long)9 ? Visibility.Collapsed : Visibility.Visible); vidaViewModel.AtualizarCamposSaude = visibility; this.CoberturaViewModel.Ramo = this.Ramo; if (this.CoberturaViewModel.CoberturasPadrao == null) { await this.CoberturaViewModel.SelectionaCoberturas(); } if (item == null || item.get_Id() == 0) { this.SelectedItem = null; this.CoberturaViewModel.Coberturas = null; base.IsVisible = Visibility.Visible; base.Titulares = new ObservableCollection(); } else { base.Loading(true); item = await this._itemServico.BuscarItemPorIdAsync(item.get_Id()); Item item1 = item; Vida vida = await this._itemServico.BuscaVida(item.get_Id()); item1.set_Vida(vida); item1 = null; await base.CarregarTitulares(item.get_Id()); this.SelectedItem = item; this.SelectedItem.Initialize(); this.Initialized = true; this.CoberturaViewModel.Item = item; await this.CoberturaViewModel.CancelarAlteracao(); if (registrar) { string str = string.Concat("ACESSOU ITEM DE DESCRIÇÃO \"", this.SelectedItem.get_Descricao(), "\""); long id = this.SelectedItem.get_Id(); TipoTela? nullable = new TipoTela?(3); object[] objArray = new object[] { this.SelectedItem.get_Id(), this.SelectedItem.get_Documento().get_Id(), this.SelectedItem.get_Documento().get_Controle().get_Ramo().get_Nome(), this.SelectedItem.get_Documento().get_Controle().get_Cliente().get_Nome(), this.SelectedItem.get_Documento().get_Controle().get_Cliente().get_Id() }; base.RegistrarAcao(str, id, nullable, string.Format("ID ITEM: {0}\nID DOCUMENTO: {1}\nRAMO: {2}\nCLIENTE: {3}\nID CLIENTE: {4}", objArray)); } this.LastAccessId = this.SelectedItem.get_Id(); this.LastAccessTela = 3; this.CodigoItem = this.SelectedItem.get_Id().ToString(); base.Loading(false); } } } } public async void Substituir(Item item) { base.ItemSubstituido = item; await this.Incluir(true); } } }