Suporte a seleção dinâmica de mês e melhorias na UI
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.
This commit is contained in:
parent
1832989012
commit
a4063f9187
55
Program.cs
55
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<Record>();
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user