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; 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 PatrimonialViewModel : ItemViewModel, IDisposable { private new readonly ItemServico _itemServico; private readonly PatrimonialServico _servico; private bool _allowAlterarExcluir = true; private object _cobertura; private string _codigoItem; private Item _selectedItem = new Item(); private Visibility _visibilityTipoMoradia = (Visibility)2; private Visibility _visibilityFianca = (Visibility)2; private Visibility _visibilityPatrimonial; private string _bensInformacoes = "BENS/INFORMAÇÕES"; private string _locatarioTomador1 = "LOCATÁRIO 1:"; private string _locatarioTomador2 = "LOCATÁRIO 2:"; private string _locatarioTomador3 = "LOCATÁRIO 3:"; private Visibility _visibilityDescricao = (Visibility)2; 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 VisibilityTipoMoradia { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return _visibilityTipoMoradia; } 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) _visibilityTipoMoradia = value; OnPropertyChanged("VisibilityTipoMoradia"); } } public Visibility VisibilityFianca { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return _visibilityFianca; } 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) _visibilityFianca = value; OnPropertyChanged("VisibilityFianca"); } } public Visibility VisibilityPatrimonial { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return _visibilityPatrimonial; } 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) _visibilityPatrimonial = value; OnPropertyChanged("VisibilityPatrimonial"); } } public string BensInformacoes { get { return _bensInformacoes; } set { _bensInformacoes = value; OnPropertyChanged("BensInformacoes"); } } public string LocatarioTomador1 { get { return _locatarioTomador1; } set { _locatarioTomador1 = value; OnPropertyChanged("LocatarioTomador1"); } } public string LocatarioTomador2 { get { return _locatarioTomador2; } set { _locatarioTomador2 = value; OnPropertyChanged("LocatarioTomador2"); } } public string LocatarioTomador3 { get { return _locatarioTomador3; } set { _locatarioTomador3 = value; OnPropertyChanged("LocatarioTomador3"); } } public Visibility VisibilityDescricao { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return _visibilityDescricao; } 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) _visibilityDescricao = value; OnPropertyChanged("VisibilityDescricao"); } } public bool Garantia { get; set; } public PatrimonialViewModel(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_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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 PatrimonialServico(); 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_0077: Unknown result type (might be due to invalid IL or missing references) List obj = CoberturaViewModel.Coberturas?.ToList(); ((DomainBase)SelectedItem).Id = 0L; ((DomainBase)SelectedItem.Patrimonial).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 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.Patrimonial = new Patrimonial { Item = SelectedItem }; val.Substituicao = (substituir ? new long?(((DomainBase)base.ItemSubstituido).Id) : null); Item item = val; bool flag = !Garantia; if (flag) { flag = await ShowMessage("COPIAR OS DADOS DE ENDEREÇO DO CLIENTE?", "SIM", "NÃO"); } if (flag) { ObservableCollection observableCollection = await new ClienteServico().BuscarEnderecosAsync(((DomainBase)item.Documento.Controle.Cliente).Id); if (observableCollection != null && observableCollection.Any()) { List source = ((IEnumerable)observableCollection.OrderBy((ClienteEndereco x) => x.Ordem.GetValueOrDefault() == 1)).Select((Func)((ClienteEndereco e) => new Patrimonial { Endereco = ((EnderecoBase)e).Endereco, Numero = ((EnderecoBase)e).Numero, Complemento = ((EnderecoBase)e).Complemento, Bairro = ((EnderecoBase)e).Bairro, Cidade = ((EnderecoBase)e).Cidade, Estado = ((EnderecoBase)e).Estado, Cep = ((EnderecoBase)e).Cep })).ToList(); item.Patrimonial = (source.Any() ? source.Last() : null); } } if (item.Ordem.GetValueOrDefault() == 2 && !(await ShowMessage("ESTA APÓLICE SERÁ UMA FROTA, DESEJA CONTINUAR?", "SIM", "NÃO"))) { return; } SelectedItem = item; SelectedItem.Patrimonial.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() { SelectedItem.Descricao = (((int)VisibilityPatrimonial == 0) ? (((EnderecoBase)SelectedItem.Patrimonial).Endereco + ", " + ((EnderecoBase)SelectedItem.Patrimonial).Numero + " - " + ((EnderecoBase)SelectedItem.Patrimonial).Complemento + " - " + ((EnderecoBase)SelectedItem.Patrimonial).Bairro + ", " + ((EnderecoBase)SelectedItem.Patrimonial).Cidade + " / " + ((EnderecoBase)SelectedItem.Patrimonial).Estado) : SelectedItem.Descricao); 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 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 SelecionaItem(Item item, bool registrar = true) { if (item != null && LastAccessId == ((DomainBase)item).Id && (int)LastAccessTela == 9) { return; } base.Mantido = false; if (!new List { 1L, 2L, 3L, 15L, 18L, 30L, 38L }.Contains(((DomainBase)Ramo).Id)) { return; } VisibilityTipoMoradia = (Visibility)((((DomainBase)Ramo).Id != 1) ? 2 : 0); CoberturaViewModel.Ramo = Ramo; if (CoberturaViewModel.CoberturasPadrao == null) { await CoberturaViewModel.SelectionaCoberturas(); } VisibilityFianca = (Visibility)((((DomainBase)Ramo).Id != 15 && ((DomainBase)Ramo).Id != 38) ? 2 : 0); if (((DomainBase)Ramo).Id == 38) { HabilitaCamposGarantia(); } if (item == null || ((DomainBase)item).Id == 0L) { SelectedItem = null; CoberturaViewModel.Coberturas = null; base.IsVisible = (Visibility)0; return; } Loading(isLoading: true); item = await _itemServico.BuscarItemPorIdAsync(((DomainBase)item).Id); Item val = item; val.Patrimonial = await _itemServico.BuscaPatrimonial(((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); } private void HabilitaCamposGarantia() { VisibilityPatrimonial = (Visibility)((((DomainBase)Ramo).Id == 38) ? 2 : 0); BensInformacoes = "OBSERVAÇÕES"; LocatarioTomador1 = "TOMADOR 1:"; LocatarioTomador2 = "TOMADOR 2:"; LocatarioTomador3 = "TOMADOR 3:"; VisibilityDescricao = (Visibility)0; Garantia = 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)); } }