Files
Reem-Notas/app/views/dashboard/_ranking_motoristas.html.erb
victor e9db6b7164 Correção da barra do ranking de motoristas
A barra era proporcional à QUANTIDADE de entregas, mas as duas abas do card
são ordenadas por VALOR. Na aba Estimado dá no mesmo (valor = qtd × preço),
mas na Consolidada bônus/retirada/termo mudam o preço unitário: com os dados
do teste a barra do 3º (290 entregas, R$ 5.250) saía MAIOR que a do 2º
(261 entregas, R$ 5.260), contradizendo a ordem do ranking. Invertia em três
pontos da lista.

Passa a escalar pelo valor, que é o número que ordena — as barras encurtam
sempre de cima para baixo. Mantida a guarda de divisão por zero.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 01:21:08 -03:00

46 lines
2.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<%# 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? %>
<div class="space-y-3">
<%# A barra é proporcional ao VALOR, que é o número pelo qual as duas abas são
ordenadas — assim ela sempre encurta de cima para baixo.
⚠️ Não voltar a usar :entregas aqui: na aba Estimado dá no mesmo (valor =
qtd × preço), mas na Consolidada quem tem mais entregas nem sempre tem o
maior valor (bônus/retirada/termo mudam o preço unitário) e a barra do 3º
ficava MAIOR que a do 2º, contradizendo a ordem do ranking.
Zero vira barra vazia em vez de divisão por zero. %>
<% max = itens.map { |x| x[:valor].to_f }.max.to_f %>
<% itens.each_with_index do |m, i| %>
<div class="flex items-center gap-3">
<span class="text-xs font-bold w-5 text-center
<%= i == 0 ? 'text-yellow-400' : i == 1 ? 'text-gray-300' : i == 2 ? 'text-orange-600' : 'text-gray-400' %>">
<%= i + 1 %>
</span>
<div class="flex-1 min-w-0">
<div class="flex items-center justify-between mb-1">
<span class="text-white text-sm font-medium truncate"><%= m[:nome] %></span>
<span class="text-[#f97316] text-sm font-semibold ml-2 flex-shrink-0">
<%= moeda(m[:valor]) %>
</span>
</div>
<%# Barra de progresso %>
<div class="w-full bg-white/5 rounded-full h-1.5">
<div class="h-1.5 rounded-full bg-[#f97316]"
style="width: <%= max.zero? ? 0 : [(m[:valor] / max * 100).round, 100].min %>%"></div>
</div>
<span class="text-gray-400 text-xs"><%= m[:entregas] %> entregas</span>
</div>
</div>
<% end %>
</div>
<% else %>
<div class="text-center py-8 text-gray-400">
<div class="mb-2"><%= icone :caminhao, tamanho: 'w-8 h-8', cor: 'text-gray-600', espaco: false %></div>
<p class="text-sm"><%= vazio %></p>
</div>
<% end %>