using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Data; using Gestor.Application.Helpers; using Gestor.Application.Servicos; using Gestor.Application.ViewModels.Generic; using Gestor.Model.Common; using Gestor.Model.Domain.BI; using Gestor.Model.Domain.Ferramentas; using Gestor.Model.Domain.Generic; using Gestor.Model.Domain.Relatorios; namespace Gestor.Application.ViewModels; internal class AnaliticoViewModel : BaseSegurosViewModel { private string _head; public TipoTela Tela { get; set; } = (TipoTela)1; public string Tipo { get; set; } public string Head { get { return _head; } set { _head = value; OnPropertyChanged("Head"); } } public AnaliticoViewModel(string tipo) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) Tipo = tipo; string tipo2 = Tipo; if (!(tipo2 == "PARCELAS")) { if (!(tipo2 == "APOLICES")) { Tela = (TipoTela)1; } else { Tela = (TipoTela)2; } } else { Tela = (TipoTela)5; } } public async Task Save(List tarefas) { await new TarefaServico().Salvar(tarefas); } public async Task Salvar(Trilha destino) { List fases2 = destino.Fases; TarefaServico servico = new TarefaServico(); Trilha trilha = await servico.Salvar(destino); if (!servico.Sucesso) { return null; } fases2.ForEach(delegate(Fase x) { x.Trilha = trilha; }); fases2 = await servico.Salvar(fases2); if (!servico.Sucesso) { return null; } trilha.Fases = fases2; return trilha; } public async Task> Validar(List analitico, Trilha trilha) { TarefaServico tarefaServico = new TarefaServico(); List ids; switch (Tipo) { case "CLIENTES": ids = analitico.Select((Analitico x) => x.Cliente.Id).ToList(); break; default: ids = analitico.Select((Analitico x) => ((DomainBase)x.Documento).Id).ToList(); break; case "PARCELAS": case "COMISSÃO": ids = analitico.Select((Analitico x) => ((DomainBase)x.Parcela).Id).ToList(); break; } List excluirIds = await tarefaServico.Validar(ids, ((DomainBase)trilha).Id); List second; switch (Head) { case "CLIENTES": second = analitico.Where((Analitico x) => excluirIds.Contains(x.Cliente.Id)).ToList(); break; default: second = analitico.Where((Analitico x) => excluirIds.Contains(((DomainBase)x.Documento).Id)).ToList(); break; case "PARCELAS": case "COMISSÃO": second = analitico.Where((Analitico x) => excluirIds.Contains(((DomainBase)x.Parcela).Id)).ToList(); break; } return analitico.Except(second).ToList(); } private async Task GerarHtml(DataGrid grid) { List first = (from x in typeof(Analitico).GetProperties() select x.Name).ToList(); List list = new List(); for (int i = 0; i < grid.Columns.Count; i++) { if (!(grid.Columns[i] is DataGridTemplateColumn)) { DataGridColumn obj = grid.Columns[i]; BindingBase binding = ((DataGridBoundColumn)((obj is DataGridBoundColumn) ? obj : null)).Binding; Binding val = (Binding)(object)((binding is Binding) ? binding : null); list.Add(val.Path.Path); } } List colunasOcultas = first.Except(list).ToList(); string text = Funcoes.CreateCard("", await Funcoes.GenerateTable((from Analitico x in (IEnumerable)((ItemsControl)grid).Items where x.Selecionado select x).ToList(), colunasOcultas, grafico: false, propertyName: true)); return Funcoes.ExportarHtml(new TipoRelatorio { Nome = "ANALÍTICO - " + Head }, text ?? ""); } public async Task Print(DataGrid grid) { if (!((IEnumerable)((ItemsControl)grid).Items).Cast().Any((Analitico x) => x.Selecionado)) { await ShowMessage("É NECESSÁRIO SELECIONAR AO MENOS UM DOCUMENTO"); return; } string value = await GerarHtml(grid); if (!string.IsNullOrEmpty(value)) { string tempPath = Path.GetTempPath(); string text = string.Format("{0}{1}_{2:ddMMyyyyhhmmss}.html", tempPath, new Regex("[" + Regex.Escape(new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars())) + "]").Replace(Head, ""), Funcoes.GetNetworkTime()); StreamWriter streamWriter = new StreamWriter(text, append: true, Encoding.UTF8); streamWriter.Write(value); streamWriter.Close(); Process.Start(text); } } }