diff options
| author | Lucas Faria Mendes <lucas.fariamo08@gmail.com> | 2026-03-30 13:38:18 +0000 |
|---|---|---|
| committer | Lucas Faria Mendes <lucas.fariamo08@gmail.com> | 2026-03-30 13:38:18 +0000 |
| commit | 1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1 (patch) | |
| tree | e1c3b20ea08f0cf71122a1e73f0d395f8fd83874 /Codemerx/Gestor.Application/ViewModels/Relatorios/SinteticoViewModel.cs | |
| parent | 674ca83ba9243a9e95a7568c797668dab6aee26a (diff) | |
| download | gestor-1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1.tar.gz gestor-1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1.zip | |
chore: location
Diffstat (limited to 'Codemerx/Gestor.Application/ViewModels/Relatorios/SinteticoViewModel.cs')
| -rw-r--r-- | Codemerx/Gestor.Application/ViewModels/Relatorios/SinteticoViewModel.cs | 424 |
1 files changed, 424 insertions, 0 deletions
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<SinteticoSource> _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<SinteticoSource> 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> sintetico, string relatorio)
+ {
+ this.Relatorio = relatorio;
+ this.GerarSintetico(sintetico);
+ }
+
+ public async Task GerarExcel(SinteticoSource sintetico)
+ {
+ List<Listagem> listagems = SinteticoViewModel.GerarRelacao(sintetico.Lista.ToList<ValorSintetico>());
+ string tempPath = "";
+ string str = "";
+ List<ConfiguracaoSistema> configuracoes = Recursos.Configuracoes;
+ if (!configuracoes.Any<ConfiguracaoSistema>((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<Listagem>(new XLWorkbook(), "SINTÉTICO", listagems, null).SaveAs(str);
+ Process.Start(str);
+ str = null;
+ }
+
+ public async Task GerarPdf(SinteticoSource sintetico)
+ {
+ string str = await Funcoes.GenerateTable<Listagem>(SinteticoViewModel.GerarRelacao(sintetico.Lista.ToList<ValorSintetico>()), new List<string>(), 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<Listagem> GerarRelacao(List<ValorSintetico> lista)
+ {
+ return lista.Select<ValorSintetico, Listagem>((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<Listagem>();
+ }
+
+ private static List<List<Listagem>> GerarRelacao(List<List<ValorSintetico>> listas)
+ {
+ List<List<Listagem>> lists = new List<List<Listagem>>();
+ foreach (List<ValorSintetico> lista in listas)
+ {
+ lists.Add(SinteticoViewModel.GerarRelacao(lista));
+ }
+ return lists;
+ }
+
+ private void GerarSintetico(List<Sintetico> sintetico)
+ {
+ IChartValues chartValue;
+ decimal num;
+ this.UnicaPaginaVisibility = (this.Relatorio == "RELATÓRIO DE FECHAMENTO" ? Visibility.Visible : Visibility.Collapsed);
+ this.Series = new ObservableCollection<SinteticoSource>();
+ PropertyInfo[] properties = sintetico.First<Sintetico>().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>((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<object>();
+ if (obj != null)
+ {
+ string description = ((DescriptionAttribute)obj).Description;
+ SinteticoSource sinteticoSource = new SinteticoSource()
+ {
+ Titulo = description,
+ Colecao = new SeriesCollection(),
+ Lista = new ObservableCollection<ValorSintetico>()
+ };
+ object obj1 = propertyInfo.GetCustomAttributes(typeof(TipoAttribute), true).FirstOrDefault<object>();
+ string str = "";
+ if (obj1 != null)
+ {
+ str = ((TipoAttribute)obj1).get_Description();
+ }
+ sintetico = (
+ from x in sintetico
+ orderby propertyInfo.GetValue(x, null) descending
+ select x).ToList<Sintetico>();
+ 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<decimal> chartValue1 = new ChartValues<decimal>();
+ chartValue1.Add(Math.Abs((decimal)propertyInfo.GetValue(sintetico1)));
+ chartValue = chartValue1;
+ ObservableCollection<ValorSintetico> 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<decimal> chartValue2 = new ChartValues<decimal>();
+ chartValue2.Add(Math.Abs((decimal)propertyInfo.GetValue(sintetico1)));
+ chartValue = chartValue2;
+ ObservableCollection<ValorSintetico> 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<int> chartValue3 = new ChartValues<int>();
+ chartValue3.Add(Math.Abs((int)propertyInfo.GetValue(sintetico1)));
+ chartValue = chartValue3;
+ ObservableCollection<ValorSintetico> 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>((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>((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<ValorSintetico> 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>((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>((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>((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<ValorSintetico> 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>((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<ValorSintetico>());
+ string str1 = await Funcoes.GenerateTable<Listagem>(SinteticoViewModel.GerarRelacao(sintetico.Lista.ToList<ValorSintetico>()), new List<string>(), 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<List<ValorSintetico>> lists = new List<List<ValorSintetico>>();
+ foreach (SinteticoSource series in this.Series)
+ {
+ lists.Add(series.Lista.ToList<ValorSintetico>());
+ }
+ string str = Funcoes.GerarGraficoUnico(lists);
+ string str1 = await Funcoes.GenerateMultipleTable(SinteticoViewModel.GerarRelacao(lists), new List<string>(), 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 |