using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using ClosedXML.Excel; using Gestor.Application.Helpers; using Gestor.Application.Servicos; using Gestor.Application.ViewModels.Generic; using Gestor.Common.Validation; using Gestor.Model.Common; using Gestor.Model.Domain.Ferramentas; using Gestor.Model.Domain.Generic; using Gestor.Model.Domain.Relatorios; using Gestor.Model.Domain.Seguros; namespace Gestor.Application.ViewModels.BI; public class ProspeccaoViewModel : BaseViewModel { private readonly ProspeccaoServico _servico; private PermissaoUsuario SelectedPermissaoUsuario; private ObservableCollection _vendedores; private Vendedor _selectedVendedor = new Vendedor(); private List _searchStatus = new List { "TODOS", ValidationHelper.GetDescription((Enum)(object)(StatusProspeccao)1), ValidationHelper.GetDescription((Enum)(object)(StatusProspeccao)5), ValidationHelper.GetDescription((Enum)(object)(StatusProspeccao)2), ValidationHelper.GetDescription((Enum)(object)(StatusProspeccao)4), ValidationHelper.GetDescription((Enum)(object)(StatusProspeccao)3) }; private string _selectedStatusSearch = "AGENDANDO"; private StatusProspeccao? _selectedStatus; private ObservableCollection _statusProspeccaoPersonalizado; private DateTime _inicio = Funcoes.GetNetworkTime().Date; private DateTime _fim = Funcoes.GetNetworkTime().Date.AddDays(7.0); private ObservableCollection _prospeccoesFiltradas; private Prospeccao _selectedProspeccao; private ObservableCollection _prospeccao; private bool _naoHaDados; public ObservableCollection Vendedores { get { return _vendedores; } set { _vendedores = value; OnPropertyChanged("Vendedores"); } } public Vendedor SelectedVendedor { get { return _selectedVendedor; } set { _selectedVendedor = value; OnPropertyChanged("SelectedVendedor"); } } public List SearchStatus { get { return _searchStatus; } set { _searchStatus = value; SelectedStatusSearch = value[1]; OnPropertyChanged("SearchStatus"); } } public string SelectedStatusSearch { get { return _selectedStatusSearch; } set { _selectedStatusSearch = value; switch (value) { default: SelectedStatus = null; break; case "AGENDADO": SelectedStatus = (StatusProspeccao)1; break; case "GANHO": SelectedStatus = (StatusProspeccao)2; break; case "PERDIDO": SelectedStatus = (StatusProspeccao)3; break; case "NÃO TRABALHADO": SelectedStatus = (StatusProspeccao)4; break; case "EM ANDAMENTO": SelectedStatus = (StatusProspeccao)5; break; } OnPropertyChanged("SelectedStatusSearch"); } } public StatusProspeccao? SelectedStatus { get { return _selectedStatus; } set { _selectedStatus = value; OnPropertyChanged("SelectedStatus"); } } public ObservableCollection StatusProspeccaoPersonalizado { get { return _statusProspeccaoPersonalizado; } set { _statusProspeccaoPersonalizado = value; OnPropertyChanged("StatusProspeccaoPersonalizado"); } } public DateTime Inicio { get { return _inicio; } set { _inicio = value; OnPropertyChanged("Inicio"); } } public DateTime Fim { get { return _fim; } set { _fim = value; OnPropertyChanged("Fim"); } } public List Prospeccoes { get; set; } public ObservableCollection ProspeccoesFiltradas { get { return _prospeccoesFiltradas; } set { _prospeccoesFiltradas = value; OnPropertyChanged("ProspeccoesFiltradas"); } } public Prospeccao SelectedProspeccao { get { return _selectedProspeccao; } set { _selectedProspeccao = value; OnPropertyChanged("SelectedProspeccao"); } } public AutoCompleteFilterPredicate ProspeccaoItemFilter => (string searchText, object obj) => ((Prospeccao)obj).Nome.ToUpper().Contains(searchText.ToUpper()) || ((Prospeccao)obj).Documento.ToString().ToUpper().Contains(searchText.ToUpper()) || ((Prospeccao)obj).Telefone1.ToString().ToUpper().Contains(searchText.ToUpper()) || ((Prospeccao)obj).Telefone2.ToString().ToUpper().Contains(searchText.ToUpper()) || ((Prospeccao)obj).Email.ToString().ToUpper().Contains(searchText.ToUpper()) || ((Prospeccao)obj).VigenciaFinal.ToString().ToUpper().Contains(searchText.ToUpper()); public ObservableCollection Prospeccao { get { return _prospeccao; } set { _prospeccao = value; NaoHaDados = value == null || value.Count == 0; OnPropertyChanged("Prospeccao"); } } public bool NaoHaDados { get { return _naoHaDados; } set { _naoHaDados = value; OnPropertyChanged("NaoHaDados"); } } public ProspeccaoViewModel() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown _servico = new ProspeccaoServico(); StatusProspeccaoPersonalizado = new ObservableCollection(Recursos.StatusProspeccao.Where((StatusDeProspeccao x) => x.Ativo).ToList()); CarregaVendedores(); SelectedStatusSearch = SearchStatus[1]; CarregaProspeccoes(); } public async void Excluir(Prospeccao prospeccao) { if (!(await BuscaPermissao("Excluir")) || prospeccao == null) { return; } bool flag = prospeccao.Tarefa == null; if (flag) { flag = !(await ShowMessage("DESEJA EXCLUIR ESSA PROSPECÇÃO?", "SIM", "NÃO")); } bool flag2 = flag; if (!flag2) { bool flag3 = prospeccao.Tarefa != null; if (flag3) { flag3 = !(await ShowMessage("HÁ UMA TAREFA ANEXADA A ESSA PROSPECÇÃO. ESSE PROCEDIMENTO IRÁ EXCLUIR A TAREFA ANEXADA." + Environment.NewLine + "DESEJA REALMENTE PROSSEGUIR?", "SIM", "NÃO")); } flag2 = flag3; } if (!flag2 && await _servico.Delete(prospeccao)) { RegistrarAcao($"EXCLUIU PROSPECÇÃO DO ID: {((DomainBase)prospeccao).Id}", ((DomainBase)prospeccao).Id, (TipoTela)33, $"CLIENTE \"{prospeccao.Nome}\", ID: {((DomainBase)prospeccao).Id}"); await CarregarProspeccoes(); ToggleSnackBar("PROSPECÇÃO EXCLUÍDA COM SUCESSO"); } } public async void CarregaProspeccoes() { await CarregarProspeccoes(); } public async void CarregaVendedores() { await CarregarVendedores(); } public async Task CarregarVendedores() { List vinculos = (await new VendedorUsuarioServico().FindByVinculo(Recursos.Usuario)).Select((VendedorUsuario x) => ((DomainBase)x.Vendedor).Id).ToList(); List list = new List(); if (vinculos.Count > 0 && !Recursos.Usuario.Administrador) { list.AddRange((from x in Recursos.Vendedores where (Recursos.Usuario.IdEmpresa == 1 || x.IdEmpresa == Recursos.Usuario.IdEmpresa) && x.Ativo && vinculos.Contains(((DomainBase)x).Id) orderby x.Nome select x).ToList()); } else { list.Add(new Vendedor { Id = 0L, Nome = "TODOS OS VENDEDORES" }); list.AddRange((from x in Recursos.Vendedores where (Recursos.Usuario.IdEmpresa == 1 || x.IdEmpresa == Recursos.Usuario.IdEmpresa) && x.Ativo orderby x.Nome select x).ToList()); } Vendedores = new ObservableCollection(list); SelectedVendedor = Vendedores.FirstOrDefault(); } public async Task CarregarProspeccoes() { if (!(Inicio > Fim)) { Loading(isLoading: true); base.IsVisible = (Visibility)2; Prospeccoes = await _servico.BuscarProspeccoes(((DomainBase)SelectedVendedor).Id, Inicio, Fim, SelectedStatus); ProspeccoesFiltradas = new ObservableCollection(Prospeccoes.OrderBy((Prospeccao x) => x.VigenciaFinal)); SelectedProspeccao = ProspeccoesFiltradas.FirstOrDefault(); base.IsVisible = (Visibility)0; Loading(isLoading: false); } } internal async Task> FiltrarProspecao(string value) { return await Task.Run(() => Filtrar(value)); } public List Filtrar(string filter) { if (Prospeccoes == null) { return null; } ProspeccoesFiltradas = (string.IsNullOrWhiteSpace(filter) ? new ObservableCollection(Prospeccoes) : new ObservableCollection(from x in Prospeccoes where ValidationHelper.RemoveDiacritics(ValidationHelper.RemoveDiacritics(x.Nome).ToUpper().Trim()).Contains(filter) || (x.Documento != null && ValidationHelper.RemoveDiacritics(x.Documento.Trim()).Contains(filter)) || (x.Telefone1 != null && ValidationHelper.RemoveDiacritics(x.Telefone1.Trim()).Contains(filter)) || (x.Telefone2 != null && ValidationHelper.RemoveDiacritics(x.Telefone2.Trim()).Contains(filter)) || (x.Email != null && ValidationHelper.RemoveDiacritics(x.Email.Trim()).Contains(filter)) || (x.VigenciaFinal.HasValue && ValidationHelper.RemoveDiacritics(x.VigenciaFinal.ToString().Trim()).Contains(filter)) orderby x.VigenciaFinal select x)); return ProspeccoesFiltradas.ToList(); } public async Task>> Salvar(Prospeccao prospecao) { return await SalvarProspeccao(prospecao); } public async Task Print() { if (ProspeccoesFiltradas != null) { List printProspect = new List(); ProspeccoesFiltradas.AsEnumerable().ToList().ForEach(delegate(Prospeccao x) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Expected O, but got Unknown ProspeccaoToPrint item = new ProspeccaoToPrint { Nome = x.Nome, Documento = (x.Documento ?? ""), Nascimento = x.Nascimento, Prefixo1 = (x.Prefixo1 ?? ""), Telefone1 = (x.Telefone1 ?? ""), Email = (x.Email ?? ""), VigenciaFinal = x.VigenciaFinal, Item = (x.Item ?? ""), Status = x.Status, StatusPersonalizadotoPrint = ((x.StatusPersonalizado == null) ? "" : x.StatusPersonalizado.Nome), Tipo = (x.Tipo ?? ""), Vendedor = (x.Vendedor.Nome ?? null), Valor = x.Valor }; printProspect.Add(item); }); printProspect = printProspect.OrderBy((ProspeccaoToPrint x) => x.Vendedor).ToList(); string text = await Funcoes.GenerateTable(printProspect.ToList(), new List()); if (!string.IsNullOrEmpty(text)) { text = Funcoes.ExportarHtml(new TipoRelatorio { Inicio = Inicio, Fim = Fim, Nome = "PROSPECÇÕES - " + SelectedVendedor.Nome }, text, "60", "landscaoe"); string tempPath = Path.GetTempPath(); string text2 = $"{tempPath}PROSPECÇÃO_{Funcoes.GetNetworkTime():ddMMyyyyhhmmss}.html"; StreamWriter streamWriter = new StreamWriter(text2, append: true, Encoding.UTF8); streamWriter.Write(text); streamWriter.Close(); Process.Start(text2); } } } public async Task GerarExcel() { if (ProspeccoesFiltradas == null) { ShowMessage("NÃO HÁ DADOS PARA A IMPRESSÃO EM EXCEL"); return; } List excelProspect = new List(); ProspeccoesFiltradas.AsEnumerable().ToList().ForEach(delegate(Prospeccao x) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Expected O, but got Unknown ProspeccaoToPrint item = new ProspeccaoToPrint { Nome = x.Nome, Documento = (x.Documento ?? ""), Nascimento = x.Nascimento, Prefixo1 = (x.Prefixo1 ?? ""), Telefone1 = (x.Telefone1 ?? ""), Email = (x.Email ?? ""), VigenciaFinal = x.VigenciaFinal, Item = (x.Item ?? ""), Status = x.Status, StatusPersonalizadotoPrint = ((x.StatusPersonalizado == null) ? "" : x.StatusPersonalizado.Nome), Tipo = (x.Tipo ?? ""), Vendedor = (x.Vendedor.Nome ?? null), Valor = x.Valor }; excelProspect.Add(item); }); string tempPath = Path.GetTempPath(); string fileName = $"{tempPath}{Guid.NewGuid()}.xlsx"; XLWorkbook val = new XLWorkbook(); string nome = "PROSPECÇÃO"; (await Funcoes.GerarXls(val, nome, excelProspect, new List())).SaveAs(fileName); Process.Start(fileName); } public async Task CarregaProspeccao() { if (ProspeccoesFiltradas != null) { ProspeccoesFiltradas = new ObservableCollection(ProspeccoesFiltradas.ToList()); } } public async Task CarregarPermissao() { SelectedPermissaoUsuario = await ServicoPermissUsuario.VerificarPermissao(Recursos.Usuario, (TipoTela)60); } public async Task BuscaPermissao(string Tipo) { if (Recursos.Usuario.Administrador) { return true; } if (Tipo == "Alterar" && SelectedPermissaoUsuario != null && !SelectedPermissaoUsuario.Alterar) { return false; } if (Tipo == "Excluir" && SelectedPermissaoUsuario != null && !SelectedPermissaoUsuario.Excluir) { return false; } if (Tipo == "Incluir" && SelectedPermissaoUsuario != null && !SelectedPermissaoUsuario.Incluir) { return false; } return true; } }