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 RiscosDiversosViewModel : ItemViewModel, IDisposable { private readonly ItemServico _itemServico; private readonly RiscosDiversosServico _servico; private bool _visibilityTitulares; private bool _allowAlterarExcluir = true; private object _cobertura; private object _sinistro; private string _codigoItem; private Item _selectedItem = new Item(); public Visibility _visibilityMultRisco { get; set; } = Visibility.Collapsed; public bool AllowAlterarExcluir { get { return this._allowAlterarExcluir; } set { this._allowAlterarExcluir = value; base.OnPropertyChanged("AllowAlterarExcluir"); } } 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 object Sinistro { get { return this._sinistro; } set { this._sinistro = value; base.OnPropertyChanged("Sinistro"); } } public Visibility VisibilityMultRisco { get { return this._visibilityMultRisco; } set { this._visibilityMultRisco = value; base.OnPropertyChanged("VisibilityMultRisco"); } } public bool VisibilityTitulares { get { return this._visibilityTitulares; } set { this._visibilityTitulares = value; base.OnPropertyChanged("VisibilityTitulares"); } } public RiscosDiversosViewModel(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 RiscosDiversosServico(); this.Seleciona(this.ItemSelecionado); if (substituir) { this.Substituir(this.ItemSelecionado); } if (manutencao != null) { this.Manter(this.ItemSelecionado, manutencao); } this.AllowAlterarExcluir = !endossoRenovacao; this.CarregaCobertura(); this.VisibilityTitulares = this.Ramo.get_Id() == (long)31; this.VisibilityMultRisco = (this.Ramo.get_Id() == (long)33 ? Visibility.Visible : Visibility.Collapsed); } public async void CancelarAlteracao() { base.Loading(true); 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; this.Sinistro = 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.set_RiscosDiversos(new RiscosDiversos()); Item item2 = item; if (substituir) { nullable = new long?(base.ItemSubstituido.get_Id()); } else { nullable = null; } item2.set_Substituicao(nullable); Item item3 = item; item1 = null; item = null; base.Titulares = new ObservableCollection(); ordem = item3.get_Ordem(); if (ordem.GetValueOrDefault() == 2) { if (!await base.ShowMessage("ESTA APÓLICE SERÁ UMA FROTA, DESEJA CONTINUAR?", "SIM", "NÃO", false)) { coberturas1 = null; item3 = 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 = item3; this.SelectedItem.get_RiscosDiversos().set_Item(item3); } else { this.SelectedItem.set_Id((long)0); this.SelectedItem.set_Documento(this.ItemSelecionado.get_Documento()); } ordem = item3.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; item3 = 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; ObservableCollection coberturas = this.CoberturaViewModel.Coberturas; if (coberturas != null) { list = coberturas.ToList(); } else { list = null; } this.SelectedItem.set_Id((long)0); this.SelectedItem.get_RiscosDiversos().set_Id((long)0); Item selectedItem = this.SelectedItem; Item itemSubstituido = base.ItemSubstituido; if (itemSubstituido != null) { nullable = new long?(itemSubstituido.get_Id()); } else { nullable = null; } selectedItem.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; string str; string str1; string str2; bool flag; bool flag1; bool flag2; string str3; if (this.VisibilityTitulares) { this.SelectedItem.set_Titulares(titularesGrid); } List> keyValuePairs1 = this.SelectedItem.Validate(); if (keyValuePairs1.Count <= 0) { Item selectedItem = this.SelectedItem; selectedItem.set_Coberturas(await this.CoberturaViewModel.LimpaCoberturas()); selectedItem = 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); } if (this.VisibilityTitulares) { 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); if (this.VisibilityTitulares) { 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()) { DateTime? 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 { 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) { if (item == null || this.LastAccessId != item.get_Id() || this.LastAccessTela != 9) { base.Mantido = false; 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; RiscosDiversos riscosDiverso = await this._itemServico.BuscaRiscosDiversos(item.get_Id()); Item item2 = item1; RiscosDiversos riscosDiverso1 = riscosDiverso; if (riscosDiverso1 == null) { riscosDiverso1 = new RiscosDiversos(); riscosDiverso1.set_Item(item); } item2.set_RiscosDiversos(riscosDiverso1); item1 = null; if (this.VisibilityTitulares) { 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); } } }