diff --git a/Imagens para implantação /Imagem colada (6).png b/Imagens para implantação /Imagem colada (6).png new file mode 100644 index 0000000..50c8ee9 Binary files /dev/null and b/Imagens para implantação /Imagem colada (6).png differ diff --git a/Imagens para implantação /Imagem colada (7).png b/Imagens para implantação /Imagem colada (7).png new file mode 100644 index 0000000..24a51d8 Binary files /dev/null and b/Imagens para implantação /Imagem colada (7).png differ diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index adf5054..0821656 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -84,19 +84,34 @@ class DashboardController < ApplicationController end def build_grafico_diario(entregas, preco_entrega) - # Em períodos muito longos, agrupa o gráfico de forma a não gerar centenas de pontos. dias = (@periodo_inicio..@periodo_fim).to_a - return { labels: [], valores: [], qtds: [] } if dias.size > MAX_DIAS_GRAFICO - contagem = entregas.pagas - .group("DATE(planned_date)") - .count - .transform_keys(&:to_s) - - labels = dias.map { |d| d.strftime('%d/%m') } - valores = dias.map { |d| ((contagem[d.to_s] || 0) * preco_entrega).round(2) } - qtds = dias.map { |d| contagem[d.to_s] || 0 } + if dias.size <= MAX_DIAS_GRAFICO + # Granularidade diária (períodos curtos) + contagem = entregas.pagas.group("DATE(planned_date)").count.transform_keys(&:to_s) + labels = dias.map { |d| d.strftime('%d/%m') } + valores = dias.map { |d| ((contagem[d.to_s] || 0) * preco_entrega).round(2) } + qtds = dias.map { |d| contagem[d.to_s] || 0 } + else + # Período longo: agrega por mês para o gráfico não ficar vazio nem poluído. + contagem = entregas.pagas.group("TO_CHAR(planned_date, 'YYYY-MM')").count + meses = meses_no_periodo + labels = meses.map { |m| Date.strptime(m, '%Y-%m').strftime('%m/%Y') } + valores = meses.map { |m| ((contagem[m] || 0) * preco_entrega).round(2) } + qtds = meses.map { |m| contagem[m] || 0 } + end { labels: labels, valores: valores, qtds: qtds } end + + # Meses ("YYYY-MM") do início ao fim do período selecionado, inclusive. + def meses_no_periodo + meses = [] + cursor = @periodo_inicio.beginning_of_month + while cursor <= @periodo_fim + meses << cursor.strftime('%Y-%m') + cursor = cursor.next_month + end + meses + end end diff --git a/app/views/admin/usuarios/_form.html.erb b/app/views/admin/usuarios/_form.html.erb index de11cbd..d0f8573 100644 --- a/app/views/admin/usuarios/_form.html.erb +++ b/app/views/admin/usuarios/_form.html.erb @@ -134,20 +134,21 @@ diff --git a/app/views/consolidacoes/show.html.erb b/app/views/consolidacoes/show.html.erb index fe41daa..843e4a7 100644 --- a/app/views/consolidacoes/show.html.erb +++ b/app/views/consolidacoes/show.html.erb @@ -57,9 +57,11 @@ <%= link_to '📄 Relatório Individual', gerar_pdf_relatorio_consolidacao_path(@consolidacao, motorista: cm.motorista_nome), + data: { turbo: false }, class: 'bg-orange-800 hover:bg-orange-700 text-white font-semibold px-4 py-3 rounded-lg text-sm min-h-[48px] flex items-center' %> <%= link_to '🧾 Gerar Holerite', gerar_pdf_holerite_consolidacao_path(@consolidacao, motorista: cm.motorista_nome), + data: { turbo: false }, class: 'bg-orange-500 hover:bg-orange-600 text-black font-bold px-4 py-3 rounded-lg text-sm min-h-[48px] flex items-center' %> @@ -79,7 +81,7 @@