diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index d530fe9..8cba40d 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -227,6 +227,22 @@ class DashboardController < ApplicationController # Custo por motorista (todos) @fin_por_motorista = cms.group(:motorista_nome).sum(:valor_total) .sort_by { |_, v| -v } + + # Ranking CONSOLIDADO (aba "Consolidado" do card Motoristas): o valor REAL + # fechado por motorista + quantas entregas entraram nesse fechamento. + # + # ⚠️ A quantidade é DISTINCT tracking_id, NÃO a contagem de linhas: a mesma + # entrega pode ter vários pilares (Normal + Bônus + Retirada = 3 linhas em + # consolidacao_entregas), e contar linhas inflaria o número de entregas. + # + # Partimos de @fin_por_motorista (que vem de `cms`, já .ativos) e só buscamos + # a quantidade: assim a aba lista exatamente os motoristas do fechamento — + # arquivado não aparece — e a soma bate com o KPI "Custo total" do topo. + qtd_por_motorista = ces.group(:motorista_nome).distinct.count(:tracking_id) + + @ranking_consolidado = @fin_por_motorista.map do |nome, valor| + { nome: nome, valor: valor, entregas: qtd_por_motorista[nome].to_i } + end end # `atendidas` já vem filtrado por checkout no período (concluídas + falhadas). diff --git a/app/controllers/motorista/dashboard_controller.rb b/app/controllers/motorista/dashboard_controller.rb index 85f42ff..6a1e903 100644 --- a/app/controllers/motorista/dashboard_controller.rb +++ b/app/controllers/motorista/dashboard_controller.rb @@ -7,15 +7,27 @@ module Motorista def index nome = current_user.nome - # Card 1 — Valor ESTIMADO (mês atual): entregas pagas × preco_entrega + # Card 1 — Valor ESTIMADO (mês atual): entregas ATENDIDAS × preco_entrega. + # + # Atendida = o motorista FOI ao local e fechou a visita, com sucesso + # ('completed') OU insucesso ('failed') — no insucesso o deslocamento + # aconteceu e teve custo, então a empresa paga os dois. É o MESMO recorte do + # dashboard administrativo e da consolidação (ver Entrega::STATUS_ATENDIDO e + # Entrega.contar_atendidas): usava `pagas` (só concluídas) e o motorista via + # um valor MENOR que o do fechamento, sem entender de onde vinha a diferença. + # + # ⚠️ O eixo é o CHECKOUT (data real da visita), não planned_date: falhada TEM + # checkout, e uma entrega planejada em 31/07 mas fechada em 01/08 pertence a + # agosto — igual ao que a consolidação considera elegível. @estimado_inicio = Date.current.beginning_of_month @estimado_fim = Date.current - entregas_mes = Entrega.pagas.da_conta_gade - .do_motorista(nome) - .no_periodo(@estimado_inicio, @estimado_fim) - .count - @valor_estimado = entregas_mes * Configuracao.preco_entrega - @entregas_mes = entregas_mes + atendidas = Entrega.atendidas.da_conta_gade + .do_motorista(nome) + .no_periodo_checkout(@estimado_inicio, @estimado_fim) + @entregas_concluidas = atendidas.concluidas.count + @entregas_falhadas = atendidas.falhadas.count + @entregas_mes = @entregas_concluidas + @entregas_falhadas + @valor_estimado = @entregas_mes * Configuracao.preco_entrega # Card 2 — Valor CONSOLIDADO: soma das consolidações finalizadas @minhas_consolidacoes = Consolidacao.ativas diff --git a/app/views/dashboard/_ranking_motoristas.html.erb b/app/views/dashboard/_ranking_motoristas.html.erb new file mode 100644 index 0000000..f673ab0 --- /dev/null +++ b/app/views/dashboard/_ranking_motoristas.html.erb @@ -0,0 +1,42 @@ +<%# Lista do ranking de motoristas — markup COMPARTILHADO pelas abas "Estimado" e + "Consolidado" do dashboard. Os dois conjuntos têm a mesma forma + (:nome, :valor, :entregas); só muda a origem dos números, então duplicar o + markup faria as duas abas divergirem visualmente na primeira alteração. + + Locais: itens (array de hashes), vazio (texto do estado sem dados). %> +<% if itens.any? %> +
<%= vazio %>
+Nenhuma entrega concluída neste período
-Entregas atendidas × preço da entrega
+ <%= render 'ranking_motoristas', + itens: @motoristas, + vazio: 'Nenhuma entrega atendida neste período' %> +Valor fechado nas consolidações do período
+ <%= render 'ranking_motoristas', + itens: @ranking_consolidado, + vazio: 'Nenhuma consolidação finalizada neste período' %> +