Modificando o Filtro de Operação

This commit is contained in:
2026-06-17 17:56:48 -03:00
parent b86105d1e4
commit 4b728c0c4d
4 changed files with 69 additions and 10 deletions

View File

@@ -42,6 +42,31 @@ class Operacao
tabela.to_s.delete_prefix(PREFIXO).tr('_', ' ').strip.titleize
end
# Abreviações de mês usadas nos nomes das tabelas (gade_entregas_emad_fev_2026).
MESES = {
'jan' => [1, 'Janeiro'], 'fev' => [2, 'Fevereiro'], 'mar' => [3, 'Março'],
'abr' => [4, 'Abril'], 'mai' => [5, 'Maio'], 'jun' => [6, 'Junho'],
'jul' => [7, 'Julho'], 'ago' => [8, 'Agosto'], 'set' => [9, 'Setembro'],
'out' => [10, 'Outubro'], 'nov' => [11, 'Novembro'], 'dez' => [12, 'Dezembro']
}.freeze
# Agrupa as operações por mês/ano (extraído do nome da tabela), do mais recente
# para o mais antigo; as que não têm mês reconhecível caem em "Outras".
# Retorna um Array de [titulo_do_grupo, [{ tabela:, label: }, ...]].
def agrupadas_por_mes
grupos = Hash.new { |h, k| h[k] = [] }
ordem = {}
todas.each do |op|
g = grupo_de(op[:tabela])
grupos[g[:titulo]] << { tabela: op[:tabela], label: g[:item] }
ordem[g[:titulo]] ||= g[:ordem]
end
grupos.each_value { |itens| itens.sort_by! { |i| i[:label] } }
grupos.sort_by { |titulo, _| ordem[titulo] }.map { |titulo, itens| [titulo, itens] }
end
# Dados agregados das entregas das operações informadas, para pré-preencher o
# formulário de nova consolidação. Une as NFs de todas as tabelas válidas.
def dados(tabelas)
@@ -59,6 +84,27 @@ class Operacao
private
# Extrai { titulo:, item:, ordem: } do nome da tabela.
# Ex.: gade_entregas_emad_fev_2026 → titulo "Fevereiro 2026", item "Emad".
def grupo_de(tabela)
tokens = tabela.to_s.delete_prefix(PREFIXO).split('_')
idx = tokens.index { |t| MESES.key?(t.downcase) }
if idx
num, nome = MESES[tokens[idx].downcase]
ano = tokens[idx + 1] =~ /\A\d{4}\z/ ? tokens[idx + 1].to_i : nil
resto = (tokens[0...idx] + tokens[(ano ? idx + 2 : idx + 1)..]).join(' ').strip
{
titulo: ano ? "#{nome} #{ano}" : nome,
item: resto.presence&.titleize || nome,
# mais recente primeiro; sem ano vai pro fim do bloco do mês
ordem: [-(ano || 0), -num]
}
else
{ titulo: 'Outras', item: label(tabela), ordem: [1, 0] }
end
end
def vazio
{ motoristas: [], veiculos: [], inicio: nil, fim: nil }
end