From 674ca83ba9243a9e95a7568c797668dab6aee26a Mon Sep 17 00:00:00 2001 From: Lucas Faria Mendes Date: Mon, 30 Mar 2026 10:35:25 -0300 Subject: feat: upload files --- .../ViewModels/Financeiro/ExtratoContaViewModel.cs | 552 +++++++++++++++++++++ 1 file changed, 552 insertions(+) create mode 100644 Gestor.Application/ViewModels/Financeiro/ExtratoContaViewModel.cs (limited to 'Gestor.Application/ViewModels/Financeiro/ExtratoContaViewModel.cs') diff --git a/Gestor.Application/ViewModels/Financeiro/ExtratoContaViewModel.cs b/Gestor.Application/ViewModels/Financeiro/ExtratoContaViewModel.cs new file mode 100644 index 0000000..114d175 --- /dev/null +++ b/Gestor.Application/ViewModels/Financeiro/ExtratoContaViewModel.cs @@ -0,0 +1,552 @@ +using ClosedXML.Excel; +using Gestor.Application.Helpers; +using Gestor.Application.Servicos.Financeiro; +using Gestor.Application.ViewModels.Generic; +using Gestor.Common.Helpers; +using Gestor.Model.Common; +using Gestor.Model.Domain.Configuracoes; +using Gestor.Model.Domain.Financeiro; +using Gestor.Model.Domain.Generic; +using Gestor.Model.Domain.Relatorios; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.IO; +using System.Linq; +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.Financeiro +{ + public class ExtratoContaViewModel : BaseFinanceiroViewModel + { + private Geometry _maximizeRestore = Geometry.Parse((string)System.Windows.Application.Current.Resources["Restore"]); + + private string _head; + + private readonly FinanceiroServico _servico; + + private ObservableCollection _contas; + + private ObservableCollection _contasFilter; + + private Gestor.Model.Domain.Financeiro.BancosContas _selectedConta; + + private DateTime? _inicio; + + private DateTime? _fim; + + private static ObservableCollection _bancosContas; + + private string _selectedBancosContas; + + private ObservableCollection _extrato; + + private bool _saldoFinal; + + private bool _naoHaDados; + + public ObservableCollection BancosContas + { + get + { + return ExtratoContaViewModel._bancosContas; + } + set + { + ExtratoContaViewModel._bancosContas = value; + base.OnPropertyChanged("BancosContas"); + } + } + + public ObservableCollection Contas + { + get + { + return this._contas; + } + set + { + this._contas = value; + base.OnPropertyChanged("Contas"); + } + } + + public ObservableCollection ContasFilter + { + get + { + return this._contasFilter; + } + set + { + this._contasFilter = value; + base.OnPropertyChanged("ContasFilter"); + } + } + + public ObservableCollection Extrato + { + get + { + return this._extrato; + } + set + { + this._extrato = value; + this.NaoHaDados = (value == null ? true : value.Count == 0); + base.OnPropertyChanged("Extrato"); + } + } + + public DateTime? Fim + { + get + { + return this._fim; + } + set + { + this._fim = value; + base.OnPropertyChanged("Fim"); + } + } + + public string Head + { + get + { + return this._head; + } + set + { + this._head = value; + base.OnPropertyChanged("Head"); + } + } + + public DateTime? Inicio + { + get + { + return this._inicio; + } + set + { + this._inicio = value; + base.OnPropertyChanged("Inicio"); + } + } + + public Geometry MaximizeRestore + { + get + { + return this._maximizeRestore; + } + set + { + this._maximizeRestore = value; + base.OnPropertyChanged("MaximizeRestore"); + } + } + + public bool NaoHaDados + { + get + { + return this._naoHaDados; + } + set + { + this._naoHaDados = value; + base.OnPropertyChanged("NaoHaDados"); + } + } + + public bool SaldoFinal + { + get + { + return this._saldoFinal; + } + set + { + this._saldoFinal = value; + base.OnPropertyChanged("SaldoFinal"); + } + } + + public string SelectedBancosContas + { + get + { + return this._selectedBancosContas; + } + set + { + this._selectedBancosContas = value; + if (value == null || this.Contas == null || this.Contas.Count <= 0) + { + return; + } + if (value == "TODOS") + { + this.ContasFilter = this.Contas; + } + else if (value == "ATIVOS") + { + this.ContasFilter = new ObservableCollection(( + from x in this.Contas + where x.get_Ativo() + select x).ToList()); + } + else if (value == "INATIVOS") + { + this.ContasFilter = new ObservableCollection(( + from x in this.Contas + where !x.get_Ativo() + select x).ToList()); + } + base.OnPropertyChanged("SelectedBancosContas"); + } + } + + public Gestor.Model.Domain.Financeiro.BancosContas SelectedConta + { + get + { + return this._selectedConta; + } + set + { + this._selectedConta = value; + base.OnPropertyChanged("SelectedConta"); + } + } + + static ExtratoContaViewModel() + { + ExtratoContaViewModel._bancosContas = new ObservableCollection() + { + "TODOS", + "ATIVOS", + "INATIVOS" + }; + } + + public ExtratoContaViewModel(long id) + { + this._maximizeRestore = Geometry.Parse((string)System.Windows.Application.Current.Resources["Restore"]); + DateTime date = Funcoes.GetNetworkTime().Date; + int year = date.Year; + date = Funcoes.GetNetworkTime().Date; + this._inicio = new DateTime?(new DateTime(year, date.Month, 1)); + this._fim = new DateTime?(Funcoes.GetNetworkTime()); + this._selectedBancosContas = "TODOS"; + base(); + this._servico = new FinanceiroServico(); + this.BuscaInicial(id); + } + + private async void BuscaInicial(long id) + { + Gestor.Model.Domain.Financeiro.BancosContas bancosConta; + base.Loading(true); + List bancosContas = await (new BancosContasServico()).BuscarBancos(); + ExtratoContaViewModel observableCollection = this; + List bancosContas1 = bancosContas; + observableCollection.Contas = new ObservableCollection( + from x in bancosContas1 + orderby x.get_Descricao() + select x); + ExtratoContaViewModel extratoContaViewModel = this; + List bancosContas2 = bancosContas; + extratoContaViewModel.ContasFilter = new ObservableCollection( + from x in bancosContas2 + orderby x.get_Descricao() + select x); + ExtratoContaViewModel extratoContaViewModel1 = this; + bancosConta = (id > (long)0 ? this.Contas.FirstOrDefault((Gestor.Model.Domain.Financeiro.BancosContas x) => x.get_Id() == id) : this.Contas.FirstOrDefault()); + extratoContaViewModel1.SelectedConta = bancosConta; + await this.GerarRelatorio(); + base.Loading(false); + } + + public async Task GerarExcel() + { + string str; + string str1; + if (this.Extrato == null || this.Extrato.Count == 0) + { + base.ShowMessage("NÃO HÁ DADOS PARA A IMPRESSÃO EM EXCEL", "OK", "", false); + } + else + { + List list = this.Extrato.ToList(); + string tempPath = ""; + str1 = ""; + List configuracoes = Recursos.Configuracoes; + if (!configuracoes.Any((ConfiguracaoSistema x) => x.get_Configuracao() == 41)) + { + tempPath = Path.GetTempPath(); + str1 = 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 + { + str1 = null; + return; + } + } + string[] descricao = new string[] { tempPath, "EXTRATO CONTA - ", this.SelectedConta.get_Descricao(), " ", null, null }; + DateTime date = Functions.GetNetworkTime().Date; + descricao[4] = date.ToShortDateString().Replace("/", ""); + descricao[5] = ".xlsx"; + str1 = string.Concat(descricao); + } + XLWorkbook xLWorkbook = new XLWorkbook(); + string str2 = string.Concat("EXTRATO CONTA - ", this.SelectedConta.get_Descricao()); + str = (str2.Length < 30 ? str2 : str2.Substring(0, 30)); + str2 = str; + await Funcoes.GerarXls(xLWorkbook, str2, list, new List()).SaveAs(str1); + Process.Start(str1); + } + str1 = null; + } + + public async Task GerarRelatorio() + { + DateTime? dataInicio; + bool flag; + Sinal sinal; + Sinal sinal1; + string str; + ExtratoContaViewModel.u003cu003ec__DisplayClass52_0 variable; + if (this.SelectedConta != null && this.SelectedConta.get_Id() != 0) + { + DateTime? inicio = this.Inicio; + if (inicio.HasValue) + { + inicio = this.Fim; + if (inicio.HasValue) + { + BancosContasServico bancosContasServico = new BancosContasServico(); + Saldo saldo = await bancosContasServico.BuscarSaldoInicial(this.SelectedConta.get_Id()); + if (saldo != null) + { + dataInicio = saldo.get_DataInicio(); + } + else + { + dataInicio = null; + } + inicio = dataInicio; + DateTime? fim = this.Inicio; + flag = (inicio.HasValue & fim.HasValue ? inicio.GetValueOrDefault() > fim.GetValueOrDefault() : false); + if (!flag) + { + FinanceiroServico financeiroServico = this._servico; + fim = this.Inicio; + DateTime value = fim.Value; + fim = this.Fim; + List extratoContas2 = await financeiroServico.BuscarLancamentosPorConta(value, fim.Value, this.SelectedConta.get_Id()); + List extratoContas3 = extratoContas2; + BancosContasServico bancosContasServico1 = bancosContasServico; + fim = this.Inicio; + Saldo saldo1 = await bancosContasServico1.BuscarSaldo(fim.Value, this.SelectedConta.get_Id()); + if (extratoContas3.Count != 0) + { + if (saldo1 == null) + { + Saldo saldo2 = new Saldo(); + saldo2.set_Conta(this.SelectedConta); + saldo2.set_DataInicio(this.Inicio); + saldo2.set_ValorInicio(decimal.Zero); + saldo1 = saldo2; + } + fim = this.Inicio; + saldo1.set_DataFinal(new DateTime?(fim.Value)); + decimal num1 = new decimal(); + saldo1.set_ValorFinal(new decimal?(num1)); + saldo1 = await bancosContasServico.FecharSaldo(saldo1); + List extratoContas4 = new List(); + ExtratoConta extratoContum2 = new ExtratoConta(); + fim = this.Inicio; + extratoContum2.set_Baixa(new DateTime?(fim.Value)); + extratoContum2.set_Fornecedor("SALDO INICIAL"); + decimal? valorFinal = saldo1.get_ValorFinal(); + extratoContum2.set_Valor(new decimal?(valorFinal.GetValueOrDefault())); + valorFinal = saldo1.get_ValorFinal(); + sinal = (valorFinal.GetValueOrDefault() < decimal.Zero ? 1 : 0); + extratoContum2.set_Sinal(sinal); + extratoContum2.set_Bold(true); + ExtratoConta extratoContum3 = extratoContum2; + extratoContas4.Add(extratoContum3); + decimal? valor = extratoContum3.get_Valor(); + List extratoContas5 = extratoContas3; + IOrderedEnumerable extratoContas6 = + from x in extratoContas5 + orderby x.get_Baixa() + select x; + ( + from x in extratoContas6 + group x by x.get_Baixa()).ToList>().ForEach((IGrouping g) => { + decimal? nullable; + decimal? nullable1; + List list = extratoContas3.Where((ExtratoConta x) => { + DateTime? baixa = x.get_Baixa(); + DateTime? key = g.Key; + if (baixa.HasValue != key.HasValue) + { + return false; + } + if (!baixa.HasValue) + { + return true; + } + return baixa.GetValueOrDefault() == key.GetValueOrDefault(); + }).ToList(); + ExtratoConta extratoContum = new ExtratoConta(); + extratoContum.set_Baixa(g.Key); + extratoContum.set_Fornecedor("SALDO FINAL DO DIA"); + decimal? nullable2 = valor; + List extratoContas = list; + Func u003cu003e9_524 = ExtratoContaViewModel.u003cu003ec.u003cu003e9__52_4; + if (u003cu003e9_524 == null) + { + u003cu003e9_524 = (ExtratoConta x) => x.get_Valor(); + ExtratoContaViewModel.u003cu003ec.u003cu003e9__52_4 = u003cu003e9_524; + } + decimal? nullable3 = extratoContas.Sum(u003cu003e9_524); + if (nullable2.HasValue & nullable3.HasValue) + { + nullable1 = new decimal?(nullable2.GetValueOrDefault() + nullable3.GetValueOrDefault()); + } + else + { + nullable = null; + nullable1 = nullable; + } + extratoContum.set_Valor(nullable1); + nullable2 = valor; + List extratoContas1 = list; + Func u003cu003e9_525 = ExtratoContaViewModel.u003cu003ec.u003cu003e9__52_5; + if (u003cu003e9_525 == null) + { + u003cu003e9_525 = (ExtratoConta x) => x.get_Valor(); + ExtratoContaViewModel.u003cu003ec.u003cu003e9__52_5 = u003cu003e9_525; + } + nullable = extratoContas1.Sum(u003cu003e9_525); + nullable3 = (nullable2.HasValue & nullable.HasValue ? new decimal?(nullable2.GetValueOrDefault() + nullable.GetValueOrDefault()) : null); + decimal num = new decimal(); + extratoContum.set_Sinal(((nullable3.GetValueOrDefault() < num) & nullable3.HasValue ? 1 : 0)); + extratoContum.set_Bold(true); + ExtratoConta extratoContum1 = extratoContum; + if (!this.SaldoFinal) + { + extratoContas4.AddRange(list); + } + extratoContas4.Add(extratoContum1); + valor = extratoContum1.get_Valor(); + }); + List extratoContas7 = extratoContas4; + ExtratoConta extratoContum4 = new ExtratoConta(); + fim = this.Fim; + extratoContum4.set_Baixa(new DateTime?(fim.Value)); + extratoContum4.set_Fornecedor("SALDO FINAL"); + extratoContum4.set_Valor(valor); + valorFinal = valor; + num1 = new decimal(); + sinal1 = ((valorFinal.GetValueOrDefault() < num1) & valorFinal.HasValue ? 1 : 0); + extratoContum4.set_Sinal(sinal1); + extratoContum4.set_Bold(true); + extratoContas7.Add(extratoContum4); + this.Extrato = new ObservableCollection(extratoContas4); + bancosContasServico = null; + } + else + { + this.NaoHaDados = true; + variable = null; + return; + } + } + else + { + ExtratoContaViewModel extratoContaViewModel = this; + string descricao = saldo.get_Conta().get_Descricao(); + fim = saldo.get_DataInicio(); + if (fim.HasValue) + { + str = fim.GetValueOrDefault().ToString("dd/MM/yyyy"); + } + else + { + str = null; + } + extratoContaViewModel.ShowMessage(string.Concat("DATA DE INÍCIO É MENOR QUE A CRIAÇÃO DA CONTA ", descricao, ",\nDATA DE ABERTURA ", str), "OK", "", false); + this.NaoHaDados = true; + variable = null; + return; + } + } + } + } + variable = null; + } + + public void LimparRelatorio() + { + this.Extrato = null; + } + + public async Task Print() + { + DateTime dateTime; + DateTime dateTime1; + string str; + if (this.Extrato == null || this.Extrato.Count == 0) + { + base.ShowMessage("NÃO HÁ DADOS PARA A IMPRESSÃO", "OK", "", false); + } + else + { + string str1 = await Funcoes.GenerateTable(this.Extrato.ToList(), new List(), false, false, "", null); + TipoRelatorio tipoRelatorio = new TipoRelatorio(); + tipoRelatorio.set_Nome(string.Concat("EXTRATO CONTA - ", this.SelectedConta.get_Descricao())); + DateTime? inicio = this.Inicio; + dateTime = (inicio.HasValue ? inicio.GetValueOrDefault() : DateTime.MinValue); + tipoRelatorio.set_Inicio(dateTime); + inicio = this.Fim; + dateTime1 = (inicio.HasValue ? inicio.GetValueOrDefault() : DateTime.MinValue); + tipoRelatorio.set_Fim(dateTime1); + TipoRelatorio tipoRelatorio1 = tipoRelatorio; + TipoRelatorio tipoRelatorio2 = tipoRelatorio1; + str = (tipoRelatorio1.get_Nome().Length < 30 ? tipoRelatorio1.get_Nome() : tipoRelatorio1.get_Nome().Substring(0, 30)); + tipoRelatorio2.set_Nome(str); + string str2 = Funcoes.ExportarHtml(tipoRelatorio1, str1, "60", "portrait", false, ""); + 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(tipoRelatorio1.get_Nome(), ""), Funcoes.GetNetworkTime()); + StreamWriter streamWriter = new StreamWriter(str3, true, Encoding.UTF8); + streamWriter.Write(str2); + streamWriter.Close(); + Process.Start(str3); + } + } + } +} \ No newline at end of file -- cgit v1.2.3