From 1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1 Mon Sep 17 00:00:00 2001 From: Lucas Faria Mendes Date: Mon, 30 Mar 2026 10:38:18 -0300 Subject: chore: location --- .../ViewModels/Relatorios/SinteticoViewModel.cs | 424 +++++++++++++++++++++ 1 file changed, 424 insertions(+) create mode 100644 Codemerx/Gestor.Application/ViewModels/Relatorios/SinteticoViewModel.cs (limited to 'Codemerx/Gestor.Application/ViewModels/Relatorios/SinteticoViewModel.cs') diff --git a/Codemerx/Gestor.Application/ViewModels/Relatorios/SinteticoViewModel.cs b/Codemerx/Gestor.Application/ViewModels/Relatorios/SinteticoViewModel.cs new file mode 100644 index 0000000..6adc8e5 --- /dev/null +++ b/Codemerx/Gestor.Application/ViewModels/Relatorios/SinteticoViewModel.cs @@ -0,0 +1,424 @@ +using ClosedXML.Excel; +using Gestor.Application.Componentes; +using Gestor.Application.Helpers; +using Gestor.Application.Model; +using Gestor.Application.ViewModels.Generic; +using Gestor.Common.Helpers; +using Gestor.Model.Attributes; +using Gestor.Model.Domain.Configuracoes; +using Gestor.Model.Domain.Relatorios; +using LiveCharts; +using LiveCharts.Definitions.Series; +using LiveCharts.Helpers; +using LiveCharts.Wpf; +using NReco.PdfGenerator; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Forms; +using System.Windows.Media; + +namespace Gestor.Application.ViewModels.Relatorios +{ + public class SinteticoViewModel : BaseSegurosViewModel + { + private Visibility _unicaPaginaVisibility = Visibility.Collapsed; + + private Geometry _maximizeRestore = Geometry.Parse((string)System.Windows.Application.Current.Resources["Restore"]); + + private ObservableCollection _series; + + private string _titulotela = string.Format("RELATÓRIO SINTÉTICO | VERSÃO GESTOR {0}", ApplicationHelper.Versao); + + public Geometry MaximizeRestore + { + get + { + return this._maximizeRestore; + } + set + { + this._maximizeRestore = value; + base.OnPropertyChanged("MaximizeRestore"); + } + } + + public string Relatorio + { + get; + set; + } + + public ObservableCollection Series + { + get + { + return this._series; + } + set + { + this._series = value; + base.OnPropertyChanged("Series"); + } + } + + public string Titulotela + { + get + { + return this._titulotela; + } + set + { + this._titulotela = value; + base.OnPropertyChanged("Titulotela"); + } + } + + public Visibility UnicaPaginaVisibility + { + get + { + return this._unicaPaginaVisibility; + } + set + { + this._unicaPaginaVisibility = value; + base.OnPropertyChanged("UnicaPaginaVisibility"); + } + } + + public SinteticoViewModel(List sintetico, string relatorio) + { + this.Relatorio = relatorio; + this.GerarSintetico(sintetico); + } + + public async Task GerarExcel(SinteticoSource sintetico) + { + List listagems = SinteticoViewModel.GerarRelacao(sintetico.Lista.ToList()); + string tempPath = ""; + string str = ""; + List configuracoes = Recursos.Configuracoes; + if (!configuracoes.Any((ConfiguracaoSistema x) => x.get_Configuracao() == 41)) + { + tempPath = Path.GetTempPath(); + str = string.Format("{0}{1}.xlsx", tempPath, Guid.NewGuid()); + } + else + { + using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog()) + { + if (DialogResult.OK == folderBrowserDialog.ShowDialog()) + { + tempPath = string.Concat(folderBrowserDialog.SelectedPath, "\\"); + Directory.CreateDirectory(tempPath); + } + else + { + str = null; + return; + } + } + DateTime date = Functions.GetNetworkTime().Date; + str = string.Concat(tempPath, "SINTETICO ", date.ToShortDateString().Replace("/", ""), ".xlsx"); + } + await Funcoes.GerarXls(new XLWorkbook(), "SINTÉTICO", listagems, null).SaveAs(str); + Process.Start(str); + str = null; + } + + public async Task GerarPdf(SinteticoSource sintetico) + { + string str = await Funcoes.GenerateTable(SinteticoViewModel.GerarRelacao(sintetico.Lista.ToList()), new List(), false, false, "", null); + TipoRelatorio tipoRelatorio = new TipoRelatorio(); + tipoRelatorio.set_Nome(sintetico.Titulo); + tipoRelatorio.set_Inicio(DateTime.MinValue); + tipoRelatorio.set_Fim(DateTime.MinValue); + string str1 = Funcoes.ExportarHtml(tipoRelatorio, str, "60", "landscape", false, ""); + NRecoHtmlToPdfConverter nRecoHtmlToPdfConverter = new NRecoHtmlToPdfConverter(); + ((HtmlToPdfConverter)nRecoHtmlToPdfConverter).set_Orientation(1); + ((HtmlToPdfConverter)nRecoHtmlToPdfConverter).set_Zoom(0.5f); + byte[] numArray = ((HtmlToPdfConverter)nRecoHtmlToPdfConverter).GeneratePdf(str1); + using (SaveFileDialog saveFileDialog = new SaveFileDialog()) + { + saveFileDialog.Filter = "All Files|*.*"; + saveFileDialog.FileName = string.Format("RELATORIO FINANCEIRO_{0:ddMMyyyyhhmmss}", Funcoes.GetNetworkTime()); + if (DialogResult.OK != saveFileDialog.ShowDialog()) + { + return; + } + else if (!File.Exists(string.Concat(saveFileDialog.FileName, ".pdf"))) + { + File.WriteAllBytes(string.Concat(saveFileDialog.FileName, ".pdf"), numArray); + Process.Start(string.Concat(saveFileDialog.FileName, ".pdf")); + } + else + { + string[] fileName = new string[] { "JÁ EXISTE UM ARQUIVO COM O NOME DE ", saveFileDialog.FileName, ".pdf NA PASTA SELECIONADA. ", Environment.NewLine, "TENTE NOVAMENTE EM OUTRA PASTA." }; + await base.ShowMessage(string.Concat(fileName), "OK", "", false); + return; + } + } + saveFileDialog = null; + } + + private static List GerarRelacao(List lista) + { + return lista.Select((ValorSintetico x) => { + Listagem listagem = new Listagem(); + listagem.set_Agrupamento(x.get_Indice()); + listagem.set_Valor((x.get_Formato() == "VALOR" ? x.get_Valor().ToString("c2") : (x.get_Formato() == "PERCENTUAL" ? x.get_Valor().ToString("p2") : x.get_Valor().ToString(new CultureInfo("pt-BR"))))); + listagem.set_NomeRelatorio(x.get_NomeRelatorio()); + return listagem; + }).ToList(); + } + + private static List> GerarRelacao(List> listas) + { + List> lists = new List>(); + foreach (List lista in listas) + { + lists.Add(SinteticoViewModel.GerarRelacao(lista)); + } + return lists; + } + + private void GerarSintetico(List sintetico) + { + IChartValues chartValue; + decimal num; + this.UnicaPaginaVisibility = (this.Relatorio == "RELATÓRIO DE FECHAMENTO" ? Visibility.Visible : Visibility.Collapsed); + this.Series = new ObservableCollection(); + PropertyInfo[] properties = sintetico.First().GetType().GetProperties(); + for (int i = 0; i < (int)properties.Length; i++) + { + PropertyInfo propertyInfo = properties[i]; + if (!(propertyInfo.Name == "ValidationEvent") && !(propertyInfo.Name == "Agrupamento") && !sintetico.All((Sintetico s) => { + object value; + PropertyInfo property = s.GetType().GetProperty(propertyInfo.Name); + value = (property != null ? property.GetValue(s, null) : null); + return value == null; + })) + { + object obj = propertyInfo.GetCustomAttributes(typeof(DescriptionAttribute), true).FirstOrDefault(); + if (obj != null) + { + string description = ((DescriptionAttribute)obj).Description; + SinteticoSource sinteticoSource = new SinteticoSource() + { + Titulo = description, + Colecao = new SeriesCollection(), + Lista = new ObservableCollection() + }; + object obj1 = propertyInfo.GetCustomAttributes(typeof(TipoAttribute), true).FirstOrDefault(); + string str = ""; + if (obj1 != null) + { + str = ((TipoAttribute)obj1).get_Description(); + } + sintetico = ( + from x in sintetico + orderby propertyInfo.GetValue(x, null) descending + select x).ToList(); + foreach (Sintetico sintetico1 in sintetico) + { + bool flag = false; + PieSeries pieSeries = new PieSeries(); + pieSeries.set_Title(sintetico1.get_Agrupamento()); + pieSeries.set_DataLabels(false); + PieSeries pieSeries1 = pieSeries; + if (str == "PERCENTUAL") + { + flag = (decimal)propertyInfo.GetValue(sintetico1) < decimal.Zero; + ChartValues chartValue1 = new ChartValues(); + chartValue1.Add(Math.Abs((decimal)propertyInfo.GetValue(sintetico1))); + chartValue = chartValue1; + ObservableCollection lista = sinteticoSource.Lista; + ValorSintetico valorSintetico = new ValorSintetico(); + valorSintetico.set_Indice(string.Concat(sintetico1.get_Agrupamento(), (flag ? " (-)" : ""))); + valorSintetico.set_Valor(Math.Round((decimal)propertyInfo.GetValue(sintetico1) * new decimal(1, 0, 0, false, 2), 2)); + valorSintetico.set_Unidate("%"); + valorSintetico.set_Sinal((flag ? 1 : 0)); + valorSintetico.set_NomeRelatorio(description); + lista.Add(valorSintetico); + pieSeries1.set_LabelPoint((ChartPoint chartPoint) => ((decimal)propertyInfo.GetValue(sintetico1)).ToString("n2")); + } + else if (str == "VALOR") + { + flag = (decimal)propertyInfo.GetValue(sintetico1) < decimal.Zero; + ChartValues chartValue2 = new ChartValues(); + chartValue2.Add(Math.Abs((decimal)propertyInfo.GetValue(sintetico1))); + chartValue = chartValue2; + ObservableCollection observableCollection = sinteticoSource.Lista; + ValorSintetico valorSintetico1 = new ValorSintetico(); + valorSintetico1.set_Indice(string.Concat(sintetico1.get_Agrupamento(), (flag ? " (-)" : ""))); + valorSintetico1.set_Valor(Math.Round((decimal)propertyInfo.GetValue(sintetico1), 2)); + valorSintetico1.set_Formato(str); + valorSintetico1.set_Unidate("R$"); + valorSintetico1.set_Sinal((flag ? 1 : 0)); + valorSintetico1.set_NomeRelatorio(description); + observableCollection.Add(valorSintetico1); + pieSeries1.set_LabelPoint((ChartPoint chartPoint) => ((decimal)propertyInfo.GetValue(sintetico1)).ToString("n2")); + } + else + { + flag = (int)propertyInfo.GetValue(sintetico1) < 0; + ChartValues chartValue3 = new ChartValues(); + chartValue3.Add(Math.Abs((int)propertyInfo.GetValue(sintetico1))); + chartValue = chartValue3; + ObservableCollection lista1 = sinteticoSource.Lista; + ValorSintetico valorSintetico2 = new ValorSintetico(); + valorSintetico2.set_Indice(string.Concat(sintetico1.get_Agrupamento(), (flag ? " (-)" : ""))); + valorSintetico2.set_Valor(decimal.Parse(propertyInfo.GetValue(sintetico1).ToString())); + valorSintetico2.set_Formato(str); + valorSintetico2.set_Sinal((flag ? 1 : 0)); + valorSintetico2.set_NomeRelatorio(description); + lista1.Add(valorSintetico2); + pieSeries1.set_LabelPoint((ChartPoint chartPoint) => ((int)propertyInfo.GetValue(sintetico1)).ToString("n")); + } + pieSeries1.set_Values(chartValue); + sinteticoSource.Colecao.Add(pieSeries1); + } + if (obj1 != null && !(str == "PERCENTUAL")) + { + if (str != "VALOR") + { + if (this.Relatorio.Equals("RELATÓRIO DE FECHAMENTO")) + { + int num1 = sintetico.Sum((Sintetico x) => (int)propertyInfo.GetValue(x, null)); + if (num1 != 0) + { + foreach (ValorSintetico listum in sinteticoSource.Lista) + { + num = (new decimal(100) * listum.get_Valor()) / num1; + listum.set_Porcentagem(string.Concat(num.ToString("F"), "%")); + } + } + } + else + { + int num2 = sintetico.Sum((Sintetico x) => (int)propertyInfo.GetValue(x, null)); + if (num2 != 0) + { + foreach (ValorSintetico listum1 in sinteticoSource.Lista) + { + num = (new decimal(100) * listum1.get_Valor()) / num2; + listum1.set_Porcentagem(string.Concat(num.ToString("F"), "%")); + } + } + ObservableCollection observableCollection1 = sinteticoSource.Lista; + ValorSintetico valorSintetico3 = new ValorSintetico(); + valorSintetico3.set_Indice("TOTAL"); + valorSintetico3.set_Valor(num2); + valorSintetico3.set_Formato(str); + valorSintetico3.set_Sinal((sintetico.Sum((Sintetico x) => (int)propertyInfo.GetValue(x, null)) < 0 ? 1 : 0)); + valorSintetico3.set_Porcentagem("100%"); + observableCollection1.Add(valorSintetico3); + } + } + else if (this.Relatorio.Equals("RELATÓRIO DE FECHAMENTO")) + { + decimal num3 = Math.Round(sintetico.Sum((Sintetico x) => (decimal)propertyInfo.GetValue(x, null)), 2); + if (num3 != decimal.Zero) + { + foreach (ValorSintetico listum2 in sinteticoSource.Lista) + { + num = (new decimal(100) * listum2.get_Valor()) / num3; + listum2.set_Porcentagem(string.Concat(num.ToString("F"), "%")); + } + } + } + else + { + decimal num4 = Math.Round(sintetico.Sum((Sintetico x) => (decimal)propertyInfo.GetValue(x, null)), 2); + if (num4 != decimal.Zero) + { + foreach (ValorSintetico listum3 in sinteticoSource.Lista) + { + num = (new decimal(100) * listum3.get_Valor()) / num4; + listum3.set_Porcentagem(string.Concat(num.ToString("F"), "%")); + } + } + ObservableCollection lista2 = sinteticoSource.Lista; + ValorSintetico valorSintetico4 = new ValorSintetico(); + valorSintetico4.set_Indice("TOTAL"); + valorSintetico4.set_Valor(num4); + valorSintetico4.set_Unidate("R$"); + valorSintetico4.set_Formato(str); + valorSintetico4.set_Sinal((sintetico.Sum((Sintetico x) => (decimal)propertyInfo.GetValue(x, null)) < decimal.Zero ? 1 : 0)); + valorSintetico4.set_Porcentagem("100%"); + lista2.Add(valorSintetico4); + } + } + this.Series.Add(sinteticoSource); + } + } + } + } + + public async Task Print(SinteticoSource sintetico) + { + DateTime dateTime; + DateTime dateTime1; + string str = Funcoes.GerarGrafico(sintetico.Lista.ToList()); + string str1 = await Funcoes.GenerateTable(SinteticoViewModel.GerarRelacao(sintetico.Lista.ToList()), new List(), true, false, "", null); + TipoRelatorio tipoRelatorio = new TipoRelatorio(); + tipoRelatorio.set_Nome(sintetico.Titulo); + DateTime? dateStart = sintetico.DateStart; + dateTime = (dateStart.HasValue ? dateStart.GetValueOrDefault() : DateTime.MinValue); + tipoRelatorio.set_Inicio(dateTime); + dateStart = sintetico.DateFinal; + dateTime1 = (dateStart.HasValue ? dateStart.GetValueOrDefault() : DateTime.MinValue); + tipoRelatorio.set_Fim(dateTime1); + string str2 = Funcoes.ExportarHtml(tipoRelatorio, str1, "60", "landscape", false, str); + string tempPath = Path.GetTempPath(); + string str3 = string.Format("{0}{1}_{2:ddMMyyyyhhmmss}.html", tempPath, (new Regex(string.Concat("[", Regex.Escape(string.Concat(new string(Path.GetInvalidFileNameChars()), new string(Path.GetInvalidPathChars()))), "]"))).Replace(this.Relatorio, ""), Funcoes.GetNetworkTime()); + StreamWriter streamWriter = new StreamWriter(str3, true, Encoding.UTF8); + streamWriter.Write(str2); + streamWriter.Close(); + Process.Start(str3); + str = null; + } + + public async Task PrintUnica(SinteticoSource sintetico) + { + DateTime dateTime; + DateTime dateTime1; + List> lists = new List>(); + foreach (SinteticoSource series in this.Series) + { + lists.Add(series.Lista.ToList()); + } + string str = Funcoes.GerarGraficoUnico(lists); + string str1 = await Funcoes.GenerateMultipleTable(SinteticoViewModel.GerarRelacao(lists), new List(), true, false, "", null); + TipoRelatorio tipoRelatorio = new TipoRelatorio(); + tipoRelatorio.set_Nome("RELATÓRIOS"); + DateTime? dateStart = sintetico.DateStart; + dateTime = (dateStart.HasValue ? dateStart.GetValueOrDefault() : DateTime.MinValue); + tipoRelatorio.set_Inicio(dateTime); + dateStart = sintetico.DateFinal; + dateTime1 = (dateStart.HasValue ? dateStart.GetValueOrDefault() : DateTime.MinValue); + tipoRelatorio.set_Fim(dateTime1); + string str2 = Funcoes.ExportarMultipleHtml(tipoRelatorio, str1, "60", "landscape", false, str); + string tempPath = Path.GetTempPath(); + string str3 = string.Format("{0}{1}_{2:ddMMyyyyhhmmss}.html", tempPath, (new Regex(string.Concat("[", Regex.Escape(string.Concat(new string(Path.GetInvalidFileNameChars()), new string(Path.GetInvalidPathChars()))), "]"))).Replace(this.Relatorio, ""), Funcoes.GetNetworkTime()); + StreamWriter streamWriter = new StreamWriter(str3, true, Encoding.UTF8); + streamWriter.Write(str2); + streamWriter.Close(); + Process.Start(str3); + str = null; + } + } +} \ No newline at end of file -- cgit v1.2.3