<%# app/views/dashboard/index.html.erb %> <%# Fase 3: Dashboard com cards, gráfico Chart.js e cálculo ao vivo %> <%# Não cachear no Turbo: o snapshot congelava o gráfico/calendário (DOM já <%# alterado pelo JS, sem reexecutar scripts) e só voltava com F5. %> <% content_for :head do %> <% end %>
<%# Header + filtro por faixa de datas %>

Dashboard

<%= @periodo_inicio.strftime('%d/%m/%Y') %> – <%= @periodo_fim.strftime('%d/%m/%Y') %> · Atualizado às <%= Time.now.strftime('%H:%M') %>

<%# Filtro de calendário — seleciona uma faixa de datas %>
📅
<%# CARDS GRANDES — KPIs %>
<%# Card 1: Valor estimado %>

💰 Valor Estimado

<%= moeda(@valor_estimado) %>

<%= @entregas_pagas %> entregas pagas

<%# Card 2: Total de entregas %>

📦 Total Entregas

<%= @total_entregas %>

<%= @entregas_pagas %> pagas · <%= @entregas_pendentes %> pendentes
<%# Card 3: Consolidações %>

📋 Consolidações

<%= @consolidacoes_mes.count %>

<%= @consolidacoes_abertas %> abertas · <%= @consolidacoes_fechadas %> fechadas
<%# Card 4: Motoristas ativos %>

🚗 Motoristas

<%= @motoristas.count %>

com entregas no período

<%# GRÁFICO + MOTORISTAS (lado a lado no desktop) %>
<%# Gráfico de linha diário (Chart.js) %>

Evolução Diária

Valor estimado por dia no período

Valor (R$)
<%# Top motoristas %>

🏆 Top Motoristas

<% if @motoristas.any? %>
<% @motoristas.each_with_index do |m, i| %>
<%= i + 1 %>
<%= m[:nome].split.first %> <%= moeda(m[:valor]) %>
<%# Barra de progresso %>
<% max = @motoristas.first[:entregas].to_f %>
<%= m[:entregas] %> entregas
<% end %>
<% else %>
🚚

Nenhuma entrega paga neste período

<% end %>
<%# ── PAGAMENTOS (pago x pendente) ──────────────────────── %>
<%# Rosca pago vs a pagar (por valor) %>

💵 Pagamentos

Consolidações finalizadas no período

<% if (@pag_pago_qtd + @pag_pend_qtd).zero? %>
🧾

Nenhuma consolidação finalizada no período

<% else %>
● Pago <%= moeda(@pag_pago_valor) %> · <%= @pag_pago_qtd %> motorista(s)
● A pagar <%= moeda(@pag_pend_valor) %> · <%= @pag_pend_qtd %> motorista(s)
<% end %>
<%# Tabela de consolidações com status de pagamento %>

📋 Status de pagamento por consolidação

<% if @tabela_pagamentos.any? %>
<% @tabela_pagamentos.each do |linha| %> <% end %>
Consolidação Status Pago A pagar
<%= link_to linha[:consolidacao].nome, consolidacao_path(linha[:consolidacao]), class: 'text-white hover:text-orange-500 font-medium' %> <%= badge_pagamento(linha[:status]) %> <%= moeda(linha[:pago]) %> <%= moeda(linha[:pendente]) %>
<% else %>
📋

Nenhuma consolidação finalizada no período

<% end %>
<%# Por operação %> <% if @por_operacao.any? %>

🏥 Entregas por Local

<% total_op = @por_operacao.values.sum.to_f %> <% @por_operacao.each do |local, qtd| %>

<%= qtd %>

<%= local.to_s.truncate(20) %>

<%= ((qtd / total_op) * 100).round %>%

<% end %>
<% end %>
<%# Flatpickr — date range picker (CDN, mesmo padrão do Chart.js) %> <%# Chart.js via CDN %> <%# Rosca de pagamentos (pago x a pagar, por valor) %>