From 4b728c0c4d683922ebe6d1f7adaa4284ab77109b706e3d56dfaa4498645aaaea Mon Sep 17 00:00:00 2001 From: victor Date: Wed, 17 Jun 2026 17:56:48 -0300 Subject: [PATCH] =?UTF-8?q?Modificando=20o=20Filtro=20de=20Opera=C3=A7?= =?UTF-8?q?=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Imagem colada (15).png | Bin 0 -> 63856 bytes app/controllers/dashboard_controller.rb | 5 +- app/models/operacao.rb | 46 ++++++++++++++++++ app/views/dashboard/index.html.erb | 28 ++++++++--- 4 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 Imagens para implantação /Imagem colada (15).png diff --git a/Imagens para implantação /Imagem colada (15).png b/Imagens para implantação /Imagem colada (15).png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..50290a37e84305cb468657615ef7871827a10db144dd85e1daf565772b55cf7d GIT binary patch literal 63856 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 literal 0 HcmV?d00001 diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index c2327ea..f32a5cc 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -34,8 +34,9 @@ class DashboardController < ApplicationController def carregar_dados_dashboard # Filtro de operação (multi-seleção) — aplicado a todo o dashboard. - @operacoes = Operacao.todas - @operacao_filtro = Operacao.sanitizar(params[:operacoes]) + @operacoes = Operacao.todas + @operacoes_agrupadas = Operacao.agrupadas_por_mes + @operacao_filtro = Operacao.sanitizar(params[:operacoes]) # Entregas do período (tabela read-only) — restritas à conta Gade entregas = Entrega.da_conta_gade.no_periodo(@periodo_inicio, @periodo_fim) diff --git a/app/models/operacao.rb b/app/models/operacao.rb index d4b99a8..29b8095 100644 --- a/app/models/operacao.rb +++ b/app/models/operacao.rb @@ -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 diff --git a/app/views/dashboard/index.html.erb b/app/views/dashboard/index.html.erb index 931a553..07d525a 100644 --- a/app/views/dashboard/index.html.erb +++ b/app/views/dashboard/index.html.erb @@ -37,14 +37,26 @@ 🗂️ <%= @operacao_filtro.present? ? "#{@operacao_filtro.size} operação(ões)" : 'Todas as operações' %> -
- <% @operacoes.each do |op| %> - +
+ <%# Limpar seleção — recarrega o dashboard sem filtro de operação %> +
+ Operações + <% if @operacao_filtro.present? %> + <%= link_to '✕ Limpar', dashboard_path(inicio: @periodo_inicio.strftime('%Y-%m-%d'), fim: @periodo_fim.strftime('%Y-%m-%d')), + data: { turbo: false }, class: 'text-xs text-orange-400 hover:text-orange-300 font-semibold' %> + <% end %> +
+ + <% @operacoes_agrupadas.each do |titulo, ops| %> +

<%= titulo %>

+ <% ops.each do |op| %> + + <% end %> <% end %>