From a4063f9187ad8b5b3b307bfeaff9ad4b6a1ac042 Mon Sep 17 00:00:00 2001 From: Giuliano Paschoalino Date: Tue, 30 Sep 2025 18:29:17 -0300 Subject: [PATCH] =?UTF-8?q?Suporte=20a=20sele=C3=A7=C3=A3o=20din=C3=A2mica?= =?UTF-8?q?=20de=20m=C3=AAs=20e=20melhorias=20na=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adicionada a biblioteca `System.Globalization` para manipulação de datas. Criadas variáveis estáticas para armazenar o primeiro e o último dia do mês atual, bem como suas representações formatadas. Implementado o método `SetDateEval` para permitir a definição de uma data específica com base no formato `AAMM`, ajustando as variáveis de data dinamicamente. Alterada a mensagem exibida ao usuário para incluir a opção de visualizar outro mês ao pressionar `'/'`. Adicionada lógica para capturar a tecla `'/'` e permitir a seleção de um mês no formato `AAMM`, com restauração ao mês atual ao pressionar `ENTER`. Atualizado o cabeçalho da interface para exibir o mês atual formatado. Modificada a consulta SQL para usar `firstDayOfMonthStr` e `lastDayOfMonthStr`, tornando o intervalo de datas dinâmico. --- Program.cs | 55 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/Program.cs b/Program.cs index 67a2192..42b5705 100644 --- a/Program.cs +++ b/Program.cs @@ -1,4 +1,5 @@ using System.Data.Common; +using System.Globalization; using System.Numerics; using Npgsql; using Spectre.Console; @@ -9,6 +10,12 @@ class Program static bool _stop = false; static bool _isAuthenticated = false; static readonly string _connectionString = "Server=192.168.10.248;Port=5432;Database=pipefy_move_cards;User Id=postgres;Password=gds21;"; + static DateTime date = DateTime.Now; + static DateTime firstDayOfMonth = new(date.Year, date.Month, 1); + static DateTime lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddSeconds(-1); + static string firstDayOfMonthStr = firstDayOfMonth.ToString("yyyy-MM-dd HH\\:mm\\:sszz", new System.Globalization.CultureInfo("pt-BR")); + static string lastDayOfMonthStr = lastDayOfMonth.ToString("yyyy-MM-dd HH\\:mm\\:sszz", new System.Globalization.CultureInfo("pt-BR")); + #if DEBUG static readonly string _windowsID = "gestao1.3"; #else @@ -73,7 +80,32 @@ class Program AnsiConsole.MarkupLine("[bold yellow]Aplicação encerrada.[/]"); } - + static void SetDateEval(string monthString) + { + if (System.Text.RegularExpressions.Regex.IsMatch(monthString, @"^\d{4}$")) + { + if (DateTime.TryParseExact(monthString[2..] + "/" + monthString[..2], + "MM/yy", + CultureInfo.InvariantCulture, + DateTimeStyles.None, + out date)) + { + //valid date + } + else + { + date = DateTime.Now; + } + } + else + { + date = DateTime.Now; + } + firstDayOfMonth = new DateTime(date.Year, date.Month, 1); + lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddSeconds(-1); + firstDayOfMonthStr = firstDayOfMonth.ToString("yyyy-MM-dd HH\\:mm\\:sszz", new System.Globalization.CultureInfo("pt-BR")); + lastDayOfMonthStr = lastDayOfMonth.ToString("yyyy-MM-dd HH\\:mm\\:sszz", new System.Globalization.CultureInfo("pt-BR")); + } static void AtualizarDados() { var records = new List(); @@ -110,14 +142,14 @@ class Program } AnsiConsole.Clear(); - AnsiConsole.MarkupLine("\n[gray]Pressione [green]ENTER[/] para atualizar agora ou qualquer outra tecla para sair.[/]"); + AnsiConsole.MarkupLine("\n[gray]Pressione [green]ENTER[/] para atualizar agora, [green]'/'[/] para visualizar outro mês, ou qualquer outra tecla para sair.[/]"); ExibirCabecalho(); ExibirPainel(tableContLigacoes, "[blue bold] Ligações [/]"); ExibirPainel(tableContReunioes, "[blue bold] Reuniões Agendadas e Realizadas [/]"); ExibirPainel(tableReunioes, "[blue bold] Reuniões no Mês [/]"); - AnsiConsole.MarkupLine("\n[gray]Pressione [green]ENTER[/] para atualizar agora ou qualquer outra tecla para sair.[/]"); + AnsiConsole.MarkupLine("\n[gray]Pressione [green]ENTER[/] para atualizar agora, [green]'/'[/] para visualizar outro mês, ou qualquer outra tecla para sair.[/]"); } static void ExibirCabecalho() { @@ -125,7 +157,7 @@ class Program var status = new Align(new Panel($"[bold]WindowsID[/]: {_windowsID} | [bold]Usuários encontrados[/]: {_pipeUsers.Count}"), HorizontalAlignment.Center, VerticalAlignment.Top); var header = new Panel(status) - .Header("[yellow] Resumo Diário por Usuário [/]", Justify.Center) + .Header($"[yellow] Resumo Diário por Usuário - {date:Y} [/]", Justify.Center) .Expand(); AnsiConsole.Write(new Align(header, HorizontalAlignment.Center, VerticalAlignment.Top)); @@ -173,10 +205,10 @@ class Program .Spinner(Spinner.Known.Line) .Start($"[blue]Obtendo registros de [yellow]{nome}[/]...[/]", ctx => { - const string query = @" + string query = @$" SELECT * FROM public.""ActionsHistory"" WHERE ""UserID"" = @pipeUser AND - ""MovedAt"" >= date_trunc('month', CURRENT_DATE)"; + ""MovedAt"" >= '{firstDayOfMonthStr}' AND ""MovedAt"" <= '{lastDayOfMonthStr}'"; try { using var conn = new NpgsqlConnection(_connectionString); @@ -273,10 +305,17 @@ class Program { var key = Console.ReadKey(true); // …e não for ENTER, sinalizamos para parar o loop e sair - if (key.Key != ConsoleKey.Enter) + if (key.Key != ConsoleKey.Enter && key.KeyChar != '/') _stop = true; else - break; + if (key.KeyChar == '/') + { + AnsiConsole.MarkupLine("\n[gray]Modo de seleção de mês ativado. Digite o mês no formato [green]AAMM[/] ou [green]ENTER[/] para voltar ao mês atual.[/]"); + Console.Write("Mês (AAMM): "); + var input = Console.ReadLine(); + SetDateEval(input ?? ""); + } + break; } }