diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index d40c443..e1f349c 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -122,9 +122,6 @@ class DashboardController < ApplicationController # Evolução diária no período (para Chart.js) — por data real (checkout) @grafico_diario = build_grafico_diario(pagas, config[:entrega]) - # Resultado por dia (entregue/falhada/pendente) — barras empilhadas - @grafico_status = build_grafico_status(pagas, falhadas, pendentes) - # Consolidações cujo período (data_inicio..data_fim) cruza o período do dashboard # — independe de quando foram criadas (created_at). @consolidacoes_mes = Consolidacao.ativas @@ -168,6 +165,9 @@ class DashboardController < ApplicationController @pagamentos_feitos = pagos.includes(:consolidacao, :pagador).order(pago_em: :desc) @pagamentos_pendentes = pendentes.includes(:consolidacao).order(consolidacao_id: :desc) + + # Fluxo de pagamentos por dia (valor pago + acumulado) para o gráfico + @grafico_pagamentos_dia = build_grafico_pagamentos(pagos) end # Visão financeira (custo) das consolidações finalizadas do período, já com o @@ -244,33 +244,26 @@ class DashboardController < ApplicationController { labels: labels, valores: valores, qtds: qtds } end - # Entregas por dia separadas por resultado, para o gráfico empilhado. - # Concluídas pela data real (checkout); falhadas e pendentes não têm - # checkout, então usam a data planejada (planned_date). - def build_grafico_status(pagas, falhadas, pendentes) + # Valor pago por dia (pela data do pagamento) + acumulado no período, + # para o gráfico de fluxo de pagamentos. + def build_grafico_pagamentos(pagos) dias = (@periodo_inicio..@periodo_fim).to_a if dias.size <= MAX_DIAS_GRAFICO - ok = pagas.group("DATE(checkout)").count.transform_keys(&:to_s) - falhas = falhadas.group("DATE(planned_date)").count.transform_keys(&:to_s) - pend = pendentes.group("DATE(planned_date)").count.transform_keys(&:to_s) + soma = pagos.group("DATE(pago_em)").sum(:valor_total).transform_keys(&:to_s) labels = dias.map { |d| d.strftime('%d/%m') } chaves = dias.map(&:to_s) else - ok = pagas.group("TO_CHAR(checkout, 'YYYY-MM')").count - falhas = falhadas.group("TO_CHAR(planned_date, 'YYYY-MM')").count - pend = pendentes.group("TO_CHAR(planned_date, 'YYYY-MM')").count + soma = pagos.group("TO_CHAR(pago_em, 'YYYY-MM')").sum(:valor_total) meses = meses_no_periodo labels = meses.map { |m| Date.strptime(m, '%Y-%m').strftime('%m/%Y') } chaves = meses end - { - labels: labels, - entregues: chaves.map { |k| ok[k] || 0 }, - falhadas: chaves.map { |k| falhas[k] || 0 }, - pendentes: chaves.map { |k| pend[k] || 0 } - } + valores = chaves.map { |k| soma[k].to_f.round(2) } + acumulado = 0 + { labels: labels, valores: valores, + acumulado: valores.map { |v| (acumulado += v).round(2) } } end # Meses ("YYYY-MM") do início ao fim do período selecionado, inclusive. diff --git a/app/views/dashboard/index.html.erb b/app/views/dashboard/index.html.erb index 981d64a..2e03f29 100644 --- a/app/views/dashboard/index.html.erb +++ b/app/views/dashboard/index.html.erb @@ -206,7 +206,7 @@ <%# Gráficos diários (Chart.js) — flex-col p/ preencher a altura do card de motoristas %>
Valor estimado por dia no período<%= ' · operação filtrada' if @operacao_filtro.present? %>
@@ -219,20 +219,19 @@Entregues, falhadas e pendentes no período
+Valor pago aos motoristas por data de pagamento