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 ConsorcioViewModel : ItemViewModel, IDisposable { private 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(); 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 bool VisibilityTitulares { get { return this._visibilityTitulares; } set { this._visibilityTitulares = value; base.OnPropertyChanged("VisibilityTitulares"); } } public ConsorcioViewModel(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 ConsorcioServico(); 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; } 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_Consorcio(new Consorcio()); 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_Consorcio().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_Consorcio().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> keyValuePairs; string str; string str1; string str2; string str3; this.SelectedItem.set_Descricao(this.SelectedItem.get_Consorcio().get_BensConsorcio()); 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); } str1 = (this.SelectedItem.get_Id() == 0 ? "INCLUIU" : "ALTEROU"); str3 = str1; this.SelectedItem = await this._itemServico.Save(this.SelectedItem); 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? 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(str6, id, nullable, 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; Consorcio consorcio = await this._itemServico.BuscaConsorcio(item.get_Id()); Item item2 = item1; Consorcio consorcio1 = consorcio; if (consorcio1 == null) { consorcio1 = new Consorcio(); consorcio1.set_Item(item); } item2.set_Consorcio(consorcio1); 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); } } }